17 Classes and functions for building Matplotlib-based GStreamer elements
19 __author__ =
"Leo Singer <leo.singer@ligo.org>"
20 __all__ = (
"padtemplate",
"figure",
"render",
"BaseMatplotlibTransform")
24 from gstlal
import pipeio
27 """Pad template suitable for producing video frames using Matplotlib.
28 The Agg backend supports rgba, argb, and bgra."""
29 padtemplate = gst.PadTemplate(
31 gst.PAD_SRC, gst.PAD_ALWAYS,
32 gst.caps_from_string(
"""
36 endianness = (int) BIG_ENDIAN,
37 red_mask = (int) 0xFF0000,
38 green_mask = (int) 0x00FF00,
39 blue_mask = (int) 0x0000FF;
42 depth = (int) {24,32},
43 endianness = (int) BIG_ENDIAN,
44 red_mask = (int) 0x00FF0000,
45 green_mask = (int) 0x0000FF00,
46 blue_mask = (int) 0x000000FF,
47 alpha_mask = (int) 0xFF000000;
50 depth = (int) {24,32},
51 endianness = (int) BIG_ENDIAN,
52 red_mask = (int) 0x0000FF00,
53 green_mask = (int) 0x00FF0000,
54 blue_mask = (int) 0xFF000000,
55 alpha_mask = (int) 0x000000FF;
61 """Create a Matplotlib Figure object suitable for rendering video frames."""
63 matplotlib.rcParams.update({
65 "axes.titlesize": 10.0,
66 "axes.labelsize": 10.0,
67 "xtick.labelsize": 8.0,
68 "ytick.labelsize": 8.0,
69 "legend.fontsize": 8.0,
75 from matplotlib
import figure
76 from matplotlib.backends.backend_agg
import FigureCanvasAgg
77 figure = figure.Figure()
78 FigureCanvasAgg(figure)
83 """Render a Matplotlib figure to a GStreamer buffer."""
86 caps[
'width'] / float(fig.get_dpi()),
87 caps[
'height'] / float(fig.get_dpi())
91 imgdata = fig.canvas.renderer._renderer.tostring_rgb()
92 elif caps[
'alpha_mask'] & 0xFF000000 == 0xFF000000:
93 imgdata = fig.canvas.renderer._renderer.tostring_argb()
94 elif caps[
'red_mask'] == 0xFF:
95 imgdata = fig.canvas.renderer._renderer.buffer_rgba()
97 imgdata = fig.canvas.renderer._renderer.tostring_bgra()
98 datasize = len(imgdata)
99 buf[:datasize] = imgdata
100 buf.datasize = datasize
104 """Base class for transform elements that use Matplotlib to render video."""
106 __gsttemplates__ = padtemplate
110 self.
axes = self.figure.gca()
113 """GstBaseTransform->transform_caps virtual method."""
114 if direction == gst.PAD_SRC:
115 return self.get_pad(
"sink").get_fixed_caps_func()
116 elif direction == gst.PAD_SINK:
117 return self.get_pad(
"src").get_fixed_caps_func()
118 raise ValueError(direction)
121 """GstBaseTransform->transform_size virtual method."""
122 if direction == gst.PAD_SINK:
123 return pipeio.get_unit_size(self.get_pad(
"src").get_caps())
124 raise ValueError(direction)
126 gobject.type_register(BaseMatplotlibTransform)