From edf33ec9857676bb86db876e6bded23ce3b35e71 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 15 Jun 2011 16:28:44 +0200 Subject: [PATCH] colorspace: port to 0.11 --- gst/colorspace/gstcolorspace.c | 79 +++++++++++++++++----------------- 1 file changed, 39 insertions(+), 40 deletions(-) diff --git a/gst/colorspace/gstcolorspace.c b/gst/colorspace/gstcolorspace.c index 6b512b5b2f..81a55617ff 100644 --- a/gst/colorspace/gstcolorspace.c +++ b/gst/colorspace/gstcolorspace.c @@ -97,12 +97,11 @@ static void gst_csp_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec); static void gst_csp_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec); -static void gst_csp_dispose (GObject * object); static gboolean gst_csp_set_caps (GstBaseTransform * btrans, GstCaps * incaps, GstCaps * outcaps); static gboolean gst_csp_get_unit_size (GstBaseTransform * btrans, - GstCaps * caps, guint * size); + GstCaps * caps, gsize * size); static GstFlowReturn gst_csp_transform (GstBaseTransform * btrans, GstBuffer * inbuf, GstBuffer * outbuf); @@ -185,7 +184,7 @@ gst_csp_structure_is_alpha (GstStructure * s) * put it first in the list. */ static GstCaps * gst_csp_transform_caps (GstBaseTransform * btrans, - GstPadDirection direction, GstCaps * caps) + GstPadDirection direction, GstCaps * caps, GstCaps * filter) { GstCaps *template; GstCaps *tmp, *tmp2; @@ -348,24 +347,29 @@ gst_csp_set_caps (GstBaseTransform * btrans, GstCaps * incaps, goto format_mismatch; } else if (space->from_format == GST_VIDEO_FORMAT_RGB8_PALETTED) { GstBuffer *palette; + guint32 *data; palette = gst_video_parse_caps_palette (incaps); - if (!palette || GST_BUFFER_SIZE (palette) < 256 * 4) { + if (!palette || gst_buffer_get_size (palette) < 256 * 4) { if (palette) gst_buffer_unref (palette); goto invalid_palette; } - colorspace_convert_set_palette (space->convert, - (const guint32 *) GST_BUFFER_DATA (palette)); + + data = gst_buffer_map (palette, NULL, NULL, GST_MAP_READ); + colorspace_convert_set_palette (space->convert, data); + gst_buffer_unmap (palette, data, -1); + gst_buffer_unref (palette); } else if (space->to_format == GST_VIDEO_FORMAT_RGB8_PALETTED) { const guint32 *palette; GstBuffer *p_buf; palette = colorspace_convert_get_palette (space->convert); + p_buf = gst_buffer_new_and_alloc (256 * 4); - memcpy (GST_BUFFER_DATA (p_buf), palette, 256 * 4); + gst_buffer_fill (p_buf, 0, palette, 256 * 4); gst_caps_set_simple (outcaps, "palette_data", GST_TYPE_BUFFER, p_buf, NULL); gst_buffer_unref (p_buf); } @@ -405,33 +409,8 @@ invalid_palette: } } -GST_BOILERPLATE (GstCsp, gst_csp, GstVideoFilter, GST_TYPE_VIDEO_FILTER); - -static void -gst_csp_base_init (gpointer klass) -{ - GstElementClass *element_class = GST_ELEMENT_CLASS (klass); - - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&gst_csp_src_template)); - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&gst_csp_sink_template)); - - gst_element_class_set_details_simple (element_class, - " Colorspace converter", "Filter/Converter/Video", - "Converts video from one colorspace to another", - "GStreamer maintainers "); - - _QRAWRGB = g_quark_from_string ("video/x-raw-rgb"); - _QRAWYUV = g_quark_from_string ("video/x-raw-yuv"); - _QALPHAMASK = g_quark_from_string ("alpha_mask"); -} - -void -gst_csp_dispose (GObject * object) -{ - G_OBJECT_CLASS (parent_class)->dispose (object); -} +#define gst_csp_parent_class parent_class +G_DEFINE_TYPE (GstCsp, gst_csp, GST_TYPE_VIDEO_FILTER); static void gst_csp_finalize (GObject * obj) @@ -443,21 +422,34 @@ gst_csp_finalize (GObject * obj) } G_OBJECT_CLASS (parent_class)->finalize (obj); - } static void gst_csp_class_init (GstCspClass * klass) { GObjectClass *gobject_class = (GObjectClass *) klass; + GstElementClass *gstelement_class = (GstElementClass *) klass; GstBaseTransformClass *gstbasetransform_class = (GstBaseTransformClass *) klass; gobject_class->set_property = gst_csp_set_property; gobject_class->get_property = gst_csp_get_property; - gobject_class->dispose = gst_csp_dispose; gobject_class->finalize = gst_csp_finalize; + gst_element_class_add_pad_template (gstelement_class, + gst_static_pad_template_get (&gst_csp_src_template)); + gst_element_class_add_pad_template (gstelement_class, + gst_static_pad_template_get (&gst_csp_sink_template)); + + gst_element_class_set_details_simple (gstelement_class, + " Colorspace converter", "Filter/Converter/Video", + "Converts video from one colorspace to another", + "GStreamer maintainers "); + + _QRAWRGB = g_quark_from_string ("video/x-raw-rgb"); + _QRAWYUV = g_quark_from_string ("video/x-raw-yuv"); + _QALPHAMASK = g_quark_from_string ("alpha_mask"); + gstbasetransform_class->transform_caps = GST_DEBUG_FUNCPTR (gst_csp_transform_caps); gstbasetransform_class->set_caps = GST_DEBUG_FUNCPTR (gst_csp_set_caps); @@ -475,7 +467,7 @@ gst_csp_class_init (GstCspClass * klass) } static void -gst_csp_init (GstCsp * space, GstCspClass * klass) +gst_csp_init (GstCsp * space) { space->from_format = GST_VIDEO_FORMAT_UNKNOWN; space->to_format = GST_VIDEO_FORMAT_UNKNOWN; @@ -520,7 +512,7 @@ gst_csp_get_property (GObject * object, guint property_id, } static gboolean -gst_csp_get_unit_size (GstBaseTransform * btrans, GstCaps * caps, guint * size) +gst_csp_get_unit_size (GstBaseTransform * btrans, GstCaps * caps, gsize * size) { gboolean ret = TRUE; GstVideoFormat format; @@ -541,6 +533,8 @@ gst_csp_transform (GstBaseTransform * btrans, GstBuffer * inbuf, GstBuffer * outbuf) { GstCsp *space; + guint8 *indata, *outdata; + gsize insize, outsize; space = GST_CSP (btrans); @@ -552,8 +546,13 @@ gst_csp_transform (GstBaseTransform * btrans, GstBuffer * inbuf, colorspace_convert_set_dither (space->convert, space->dither); - colorspace_convert_convert (space->convert, GST_BUFFER_DATA (outbuf), - GST_BUFFER_DATA (inbuf)); + indata = gst_buffer_map (inbuf, &insize, NULL, GST_MAP_READ); + outdata = gst_buffer_map (outbuf, &outsize, NULL, GST_MAP_WRITE); + + colorspace_convert_convert (space->convert, outdata, indata); + + gst_buffer_unmap (outbuf, outdata, outsize); + gst_buffer_unmap (inbuf, indata, insize); /* baseclass copies timestamps */ GST_DEBUG ("from %d -> to %d done", space->from_format, space->to_format);