OSDN Git Service

v4l2: setting device parameters early
authorFederico Simoncelli <federico.simoncelli@gmail.com>
Thu, 2 Jan 2014 15:25:48 +0000 (16:25 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 5 Jan 2014 13:02:06 +0000 (14:02 +0100)
Setting the v4l2 device parameters may influence video properties
such as width, height and pixel format.
This patch moves v4l2_set_parameters to be executed before fetching
the video properties, avoiding errors such as (pal vs ntsc):

 The v4l2 frame is 829440 bytes, but 691200 bytes are expected

Signed-off-by: Federico Simoncelli <fsimonce@redhat.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavdevice/v4l2.c

index cb962b7..1ab6f1c 100644 (file)
@@ -866,6 +866,9 @@ static int v4l2_read_header(AVFormatContext *s1)
 
     avpriv_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */
 
+    if ((res = v4l2_set_parameters(s1)) < 0)
+        return res;
+
     if (s->pixel_format) {
         AVCodec *codec = avcodec_find_decoder_by_name(s->pixel_format);
 
@@ -917,9 +920,6 @@ static int v4l2_read_header(AVFormatContext *s1)
 
     s->frame_format = desired_format;
 
-    if ((res = v4l2_set_parameters(s1)) < 0)
-        return res;
-
     st->codec->pix_fmt = avpriv_fmt_v4l2ff(desired_format, codec_id);
     s->frame_size =
         avpicture_get_size(st->codec->pix_fmt, s->width, s->height);