From 2a5db1aa588eb157c35e44ca2a76a1184aa5bcf4 Mon Sep 17 00:00:00 2001 From: Baptiste Coudurier Date: Mon, 27 Sep 2010 21:31:29 +0000 Subject: In dv decoder, set sample aspect aspect ratio, fix issue #1612 Originally committed as revision 25232 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/dv.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'libavcodec/dv.c') diff --git a/libavcodec/dv.c b/libavcodec/dv.c index 63b1f028d9..564ccb3103 100644 --- a/libavcodec/dv.c +++ b/libavcodec/dv.c @@ -1081,6 +1081,8 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; DVVideoContext *s = avctx->priv_data; + const uint8_t* vsc_pack; + int apt, is16_9; s->sys = ff_dv_frame_profile(s->sys, buf, buf_size); if (!s->sys || buf_size < s->sys->frame_size || dv_init_dynamic_tables(s->sys)) { @@ -1114,6 +1116,14 @@ 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 && ((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; } #endif /* CONFIG_DVVIDEO_DECODER */ -- cgit v1.2.3