alphacolor: Use libgstvideo for caps parsing
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 15 Mar 2010 17:14:19 +0000 (18:14 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 15 Mar 2010 17:22:21 +0000 (18:22 +0100)
gst/alpha/gstalphacolor.c
gst/alpha/gstalphacolor.h

index 2254f30..c0d5aad 100644 (file)
@@ -157,39 +157,21 @@ gst_alpha_color_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
     GstCaps * outcaps)
 {
   GstAlphaColor *alpha = GST_ALPHA_COLOR (btrans);
-  GstStructure *structure;
   gboolean ret;
-  const GValue *fps;
-  gint red_mask, alpha_mask;
-  gint w, h, depth, bpp;
+  gint w, h;
+  GstVideoFormat format;
 
-  structure = gst_caps_get_structure (incaps, 0);
+  ret = gst_video_format_parse_caps (outcaps, &format, &w, &h);
 
-  ret = gst_structure_get_int (structure, "width", &w);
-  ret &= gst_structure_get_int (structure, "height", &h);
-  fps = gst_structure_get_value (structure, "framerate");
-  ret &= (fps != NULL && GST_VALUE_HOLDS_FRACTION (fps));
-  ret &= gst_structure_get_int (structure, "red_mask", &red_mask);
-
-  /* make sure these are really full RGBA caps */
-  ret &= gst_structure_get_int (structure, "alpha_mask", &alpha_mask);
-  ret &= gst_structure_get_int (structure, "depth", &depth);
-  ret &= gst_structure_get_int (structure, "bpp", &bpp);
-
-  if (!ret || alpha_mask == 0 || red_mask == 0 || depth != 32 || bpp != 32) {
+  if (!ret || (format != GST_VIDEO_FORMAT_ARGB
+          && format != GST_VIDEO_FORMAT_BGRA)) {
     GST_DEBUG_OBJECT (alpha, "incomplete or non-RGBA input caps!");
     return FALSE;
   }
 
-  alpha->in_width = w;
-  alpha->in_height = h;
-  alpha->in_rgba = TRUE;
-#if (G_BYTE_ORDER == G_BIG_ENDIAN)
-  if (red_mask != 0x000000ff)
-#else
-  if (red_mask != 0xff000000)
-#endif
-    alpha->in_rgba = FALSE;
+  alpha->format = format;
+  alpha->width = w;
+  alpha->height = h;
 
   return TRUE;
 }
@@ -241,7 +223,7 @@ gst_alpha_color_transform_ip (GstBaseTransform * btrans, GstBuffer * inbuf)
   GstAlphaColor *alpha = GST_ALPHA_COLOR (btrans);
 
   /* Transform in place */
-  if (alpha->in_rgba)
+  if (alpha->format == GST_VIDEO_FORMAT_ARGB)
     transform_rgb (GST_BUFFER_DATA (inbuf), GST_BUFFER_SIZE (inbuf));
   else
     transform_bgr (GST_BUFFER_DATA (inbuf), GST_BUFFER_SIZE (inbuf));
index 0d470f9..63e0ec9 100644 (file)
@@ -43,9 +43,8 @@ struct _GstAlphaColor
 
   /*< private >*/
   /* caps */
-  gint in_width, in_height;
-  gboolean in_rgba;
-  gint out_width, out_height;
+  GstVideoFormat format;
+  gint width, height;
 };
 
 struct _GstAlphaColorClass