static void gst_text_render_adjust_values_with_fontdesc (GstTextRender *
render, PangoFontDescription * desc);
-GST_BOILERPLATE (GstTextRender, gst_text_render, GstElement, GST_TYPE_ELEMENT);
+#define gst_text_render_parent_class parent_class
+G_DEFINE_TYPE (GstTextRender, gst_text_render, GST_TYPE_ELEMENT);
static void gst_text_render_finalize (GObject * object);
static void gst_text_render_set_property (GObject * object,
guint prop_id, GValue * value, GParamSpec * pspec);
static void
-gst_text_render_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template_factory));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template_factory));
-
- gst_element_class_set_details_simple (element_class, "Text renderer",
- "Filter/Editor/Video",
- "Renders a text string to an image bitmap",
- "David Schleef <ds@schleef.org>, "
- "GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>");
-}
-
-static void
gst_text_render_class_init (GstTextRenderClass * klass)
{
GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
PangoFontMap *fontmap;
gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
parent_class = g_type_class_peek_parent (klass);
gobject_class->set_property = gst_text_render_set_property;
gobject_class->get_property = gst_text_render_get_property;
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&src_template_factory));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&sink_template_factory));
+
+ gst_element_class_set_details_simple (gstelement_class, "Text renderer",
+ "Filter/Editor/Video",
+ "Renders a text string to an image bitmap",
+ "David Schleef <ds@schleef.org>, "
+ "GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>");
+
fontmap = pango_cairo_font_map_get_default ();
klass->pango_context =
pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap));
GstTextRender *render;
GstFlowReturn ret;
GstBuffer *outbuf;
- GstCaps *caps = NULL, *padcaps, *peercaps;
- guint8 *data = GST_BUFFER_DATA (inbuf);
- guint size = GST_BUFFER_SIZE (inbuf);
+ GstCaps *caps = NULL, *padcaps;
+ guint8 *data;
+ gsize size;
gint n;
gint xpos, ypos;
render = GST_TEXT_RENDER (gst_pad_get_parent (pad));
+ data = gst_buffer_map (inbuf, &size, NULL, GST_MAP_READ);
+
/* somehow pango barfs over "\0" buffers... */
while (size > 0 &&
(data[size - 1] == '\r' ||
GST_DEBUG ("rendering '%*s'", size, data);
pango_layout_set_markup (render->layout, (gchar *) data, size);
gst_text_render_render_pangocairo (render);
+ gst_buffer_unmap (inbuf, data, size);
gst_text_render_check_argb (render);
- peercaps = gst_pad_peer_get_caps (render->srcpad);
- padcaps = gst_pad_get_caps (render->srcpad);
- caps = gst_caps_intersect (padcaps, peercaps);
+ padcaps = gst_pad_get_caps (render->srcpad, NULL);
+ caps = gst_pad_peer_get_caps (render->srcpad, padcaps);
gst_caps_unref (padcaps);
- gst_caps_unref (peercaps);
if (!caps || gst_caps_is_empty (caps)) {
GST_ELEMENT_ERROR (render, CORE, NEGOTIATION, (NULL), (NULL));
}
GST_DEBUG ("Allocating buffer WxH = %dx%d", render->width, render->height);
- ret =
- gst_pad_alloc_buffer_and_set_caps (render->srcpad, GST_BUFFER_OFFSET_NONE,
- render->width * render->height * 4, caps, &outbuf);
-
- if (ret != GST_FLOW_OK)
- goto done;
+ outbuf = gst_buffer_new_and_alloc (render->width * render->height * 4);
- gst_buffer_copy_metadata (outbuf, inbuf, GST_BUFFER_COPY_TIMESTAMPS);
- data = GST_BUFFER_DATA (outbuf);
+ gst_buffer_copy_into (outbuf, inbuf, GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
+ data = gst_buffer_map (outbuf, &size, NULL, GST_MAP_WRITE);
if (render->use_ARGB) {
memset (data, 0, render->width * render->height * 4);
render->width * 4);
}
}
+ gst_buffer_unmap (outbuf, data, size);
ret = gst_pad_push (render->srcpad, outbuf);
}
static void
-gst_text_render_init (GstTextRender * render, GstTextRenderClass * klass)
+gst_text_render_init (GstTextRender * render)
{
GstPadTemplate *template;