OSDN Git Service

dvdec: Move the VSC pack parsing to before avctx->execute()
authorTomas Härdin <tomas.hardin@codemill.se>
Mon, 15 Oct 2012 14:13:18 +0000 (16:13 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 15 Oct 2012 16:53:44 +0000 (18:53 +0200)
This allows the next commit to parse the FS flag.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/dvdec.c

index a38d409..6306b5a 100644 (file)
@@ -343,6 +343,14 @@ static int dvvideo_decode_frame(AVCodecContext *avctx,
     s->picture.interlaced_frame = 1;
     s->picture.top_field_first  = 0;
 
+    /* Determine the codec's sample_aspect ratio from the packet */
+    vsc_pack = buf + 80*5 + 48 + 5;
+    if ( *vsc_pack == dv_video_control ) {
+        apt = buf[4] & 0x07;
+        is16_9 = (vsc_pack[2] & 0x07) == 0x02 || (!apt && (vsc_pack[2] & 0x07) == 0x07);
+        avctx->sample_aspect_ratio = s->sys->sar[is16_9];
+    }
+
     s->buf = buf;
     avctx->execute(avctx, dv_decode_video_segment, s->sys->work_chunks, NULL,
                    dv_work_pool_size(s->sys), sizeof(DVwork_chunk));
@@ -353,14 +361,6 @@ static int dvvideo_decode_frame(AVCodecContext *avctx,
     *data_size = sizeof(AVFrame);
     *(AVFrame*)data = s->picture;
 
-    /* Determine the codec's sample_aspect ratio from the packet */
-    vsc_pack = buf + 80*5 + 48 + 5;
-    if ( *vsc_pack == dv_video_control ) {
-        apt = buf[4] & 0x07;
-        is16_9 = (vsc_pack[2] & 0x07) == 0x02 || (!apt && (vsc_pack[2] & 0x07) == 0x07);
-        avctx->sample_aspect_ratio = s->sys->sar[is16_9];
-    }
-
     return s->sys->frame_size;
 }