gst/videobox/gstvideobox.c: Fix caps nego some more to get
authorJulien Moutte <julien@moutte.net>
Mon, 17 Oct 2005 16:59:20 +0000 (16:59 +0000)
committerJulien Moutte <julien@moutte.net>
Mon, 17 Oct 2005 16:59:20 +0000 (16:59 +0000)
Original commit message from CVS:
2005-10-17  Julien MOUTTE  <julien@moutte.net>

* gst/videobox/gstvideobox.c: (gst_video_box_transform_caps),
(gst_video_box_get_unit_size): Fix caps nego some more to get
AYUV
output declared in transform_caps.

ChangeLog
common
gst/videobox/gstvideobox.c

index df5959a..bb57047 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2005-10-17  Julien MOUTTE  <julien@moutte.net>
 
+       * gst/videobox/gstvideobox.c: (gst_video_box_transform_caps),
+       (gst_video_box_get_unit_size): Fix caps nego some more to get AYUV
+       output declared in transform_caps.
+
+2005-10-17  Julien MOUTTE  <julien@moutte.net>
+
        * ext/libpng/gstpngdec.c: (gst_pngdec_init): We use fixed caps.
 
 2005-10-17  Julien MOUTTE  <julien@moutte.net>
diff --git a/common b/common
index 3a9d355..cf363b3 160000 (submodule)
--- a/common
+++ b/common
@@ -1 +1 @@
-Subproject commit 3a9d355b657cf710011aa1eaadd64f6723527e14
+Subproject commit cf363b3ae6ce3c4a84a561e04ffc4e3b37435a61
index 9b54852..4d4de61 100644 (file)
@@ -337,22 +337,46 @@ gst_video_box_transform_caps (GstBaseTransform * trans,
 {
   GstVideoBox *video_box;
   GstCaps *to;
-  GstStructure *structure;
-  gint dir, i, tmp;
 
   video_box = GST_VIDEO_BOX (trans);
-  to = gst_caps_copy (from);
-  dir = (direction == GST_PAD_SINK) ? -1 : 1;
-
-  /* FIXME, include AYUV */
-  for (i = 0; i < gst_caps_get_size (to); i++) {
-    structure = gst_caps_get_structure (to, i);
-    if (gst_structure_get_int (structure, "width", &tmp))
-      gst_structure_set (structure, "width", G_TYPE_INT,
-          tmp + dir * (video_box->box_left + video_box->box_right), NULL);
-    if (gst_structure_get_int (structure, "height", &tmp))
-      gst_structure_set (structure, "height", G_TYPE_INT,
-          tmp + dir * (video_box->box_top + video_box->box_bottom), NULL);
+
+  if (gst_caps_is_fixed (from)) {
+    GstCaps *to_ayuv, *to_i420;
+    GstStructure *structure;
+    gint width, height, dir;
+    gdouble fps;
+
+    dir = (direction == GST_PAD_SINK) ? -1 : 1;
+
+    structure = gst_caps_get_structure (from, 0);
+
+    gst_structure_get_int (structure, "width", &width);
+    gst_structure_get_int (structure, "height", &height);
+    gst_structure_get_double (structure, "framerate", &fps);
+
+    width += dir * (video_box->box_left + video_box->box_right);
+    height += dir * (video_box->box_top + video_box->box_bottom);
+
+    to_i420 = gst_caps_new_simple ("video/x-raw-yuv",
+        "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('I', '4', '2', '0'),
+        "width", G_TYPE_INT, width,
+        "height", G_TYPE_INT, height, "framerate", G_TYPE_DOUBLE, fps, NULL);
+
+    to_ayuv = gst_caps_new_simple ("video/x-raw-yuv",
+        "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('A', 'Y', 'U', 'V'),
+        "width", G_TYPE_INT, width,
+        "height", G_TYPE_INT, height, "framerate", G_TYPE_DOUBLE, fps, NULL);
+    to = to_i420;
+    gst_caps_append (to, to_ayuv);
+  } else {
+    GstPadTemplate *tmpl;
+
+    if (direction == GST_PAD_SINK) {
+      tmpl = gst_static_pad_template_get (&gst_video_box_src_template);
+    } else {
+      tmpl = gst_static_pad_template_get (&gst_video_box_sink_template);
+    }
+    to = gst_caps_copy (gst_pad_template_get_caps (tmpl));
   }
 
   return to;