v4l2object: Don't validate dimension for encoded format
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Mon, 2 Dec 2013 20:26:50 +0000 (15:26 -0500)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Fri, 10 Jan 2014 22:13:22 +0000 (17:13 -0500)
We set the dimensions just in case but don't validate them
afterwards. For some codecs the dimensions are *not* in the
bitstream, IIRC VC1 in ASF mode for example.

https://bugzilla.gnome.org/show_bug.cgi?id=720568

sys/v4l2/gstv4l2object.c

index 7a0c87b..a3dbc5f 100644 (file)
@@ -2604,13 +2604,18 @@ gst_v4l2_object_set_format (GstV4l2Object * v4l2object, GstCaps * caps)
             format.fmt.pix_mp.plane_fmt[i].bytesperline);
 #endif
 
-      if (format.fmt.pix_mp.width != width
-          || format.fmt.pix_mp.height != height)
-        goto invalid_dimensions;
-
       if (format.fmt.pix_mp.pixelformat != pixelformat)
         goto invalid_pixelformat;
 
+      /* we set the dimensions just in case but don't validate them afterwards
+       * For some codecs the dimensions are *not* in the bitstream, IIRC VC1
+       * in ASF mode for example. */
+      if (info.finfo->format != GST_VIDEO_FORMAT_ENCODED) {
+        if (format.fmt.pix_mp.width != width
+            || format.fmt.pix_mp.height != height)
+          goto invalid_dimensions;
+      }
+
       if (format.fmt.pix_mp.num_planes != n_v4l_planes)
         goto invalid_planes;
     }
@@ -2659,8 +2664,13 @@ gst_v4l2_object_set_format (GstV4l2Object * v4l2object, GstCaps * caps)
           format.fmt.pix.height, GST_FOURCC_ARGS (format.fmt.pix.pixelformat),
           format.fmt.pix.bytesperline);
 
-      if (format.fmt.pix.width != width || format.fmt.pix.height != height)
-        goto invalid_dimensions;
+      /* we set the dimensions just in case but don't validate them afterwards
+       * For some codecs the dimensions are *not* in the bitstream, IIRC VC1
+       * in ASF mode for example. */
+      if (info.finfo->format != GST_VIDEO_FORMAT_ENCODED) {
+        if (format.fmt.pix.width != width || format.fmt.pix.height != height)
+          goto invalid_dimensions;
+      }
 
       if (format.fmt.pix.pixelformat != pixelformat)
         goto invalid_pixelformat;