sys/v4l2/v4l2src_calls.c: Make sure the probed frame sizes are reversed in the result...
authorWilliam M. Brack <wbrack@mmm.com.hk>
Mon, 17 Mar 2008 19:50:58 +0000 (19:50 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Mon, 17 Mar 2008 19:50:58 +0000 (19:50 +0000)
Original commit message from CVS:
Patch by: William M. Brack <wbrack at mmm com hk>
* sys/v4l2/v4l2src_calls.c:
(gst_v4l2src_probe_caps_for_format_and_size),
(gst_v4l2src_probe_caps_for_format):
Make sure the probed frame sizes are reversed in the resulting
caps also when using V4L2_FRMSIZE_STEPWISE (so they end up
highest resolution first); also remove unused variable.
(Partly fixes #520092)

ChangeLog
sys/v4l2/v4l2src_calls.c

index 28ee005..ac98c16 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2008-03-17  Tim-Philipp Müller  <tim at centricular dot net>
+
+       Patch by: William M. Brack <wbrack at mmm com hk>
+
+       * sys/v4l2/v4l2src_calls.c:
+         (gst_v4l2src_probe_caps_for_format_and_size),
+         (gst_v4l2src_probe_caps_for_format):
+         Make sure the probed frame sizes are reversed in the resulting
+         caps also when using V4L2_FRMSIZE_STEPWISE (so they end up
+         highest resolution first); also remove unused variable.
+         (Partly fixes #520092)
+
 2008-03-17  Wim Taymans  <wim.taymans@collabora.co.uk>
 
        Patch by: Ole André Vadla Ravnås  <ole.andre.ravnas@tandberg.com>
index 1096ad9..9e6a95c 100644 (file)
@@ -573,15 +573,12 @@ gst_v4l2src_probe_caps_for_format_and_size (GstV4l2Src * v4l2src,
     guint32 pixelformat,
     guint32 width, guint32 height, const GstStructure * template)
 {
-  GstCaps *ret;
   gint fd = v4l2src->v4l2object->video_fd;
   struct v4l2_frmivalenum ival;
   guint32 num, denom;
   GstStructure *s;
   GValue rates = { 0, };
 
-  ret = gst_caps_new_empty ();
-
   memset (&ival, 0, sizeof (struct v4l2_frmivalenum));
   ival.index = 0;
   ival.pixel_format = pixelformat;
@@ -787,6 +784,9 @@ gst_v4l2src_probe_caps_for_format (GstV4l2Src * v4l2src, guint32 pixelformat,
 
       tmp = gst_v4l2src_probe_caps_for_format_and_size (v4l2src, pixelformat,
           w, h, template);
+
+      /* we get low res to high res, but want high res to low res in caps, so
+       * prepend structs to results list, we'll reverse the order later then */
       if (tmp)
         results = g_list_prepend (results, tmp);
 
@@ -801,8 +801,11 @@ gst_v4l2src_probe_caps_for_format (GstV4l2Src * v4l2src, guint32 pixelformat,
 
       tmp = gst_v4l2src_probe_caps_for_format_and_size (v4l2src, pixelformat,
           w, h, template);
+
+      /* we get low res to high res, but want high res to low res in caps, so
+       * prepend structs to results list, we'll reverse the order later then */
       if (tmp)
-        gst_caps_append_structure (ret, tmp);
+        results = g_list_prepend (results, tmp);
     }
   } else if (size.type == V4L2_FRMSIZE_TYPE_CONTINUOUS) {
     guint32 maxw, maxh;
@@ -818,6 +821,8 @@ gst_v4l2src_probe_caps_for_format (GstV4l2Src * v4l2src, guint32 pixelformat,
       gst_structure_set (tmp, "width", GST_TYPE_INT_RANGE, (gint) w,
           (gint) maxw, "height", GST_TYPE_INT_RANGE, (gint) h, (gint) maxh,
           NULL);
+
+      /* no point using the results list here, since there's only one struct */
       gst_caps_append_structure (ret, tmp);
     }
   } else {