|
|
@ -1081,6 +1081,8 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, |
|
|
|
const uint8_t *buf = avpkt->data; |
|
|
|
const uint8_t *buf = avpkt->data; |
|
|
|
int buf_size = avpkt->size; |
|
|
|
int buf_size = avpkt->size; |
|
|
|
DVVideoContext *s = avctx->priv_data; |
|
|
|
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); |
|
|
|
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)) { |
|
|
|
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); |
|
|
|
*data_size = sizeof(AVFrame); |
|
|
|
*(AVFrame*)data = s->picture; |
|
|
|
*(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; |
|
|
|
return s->sys->frame_size; |
|
|
|
} |
|
|
|
} |
|
|
|
#endif /* CONFIG_DVVIDEO_DECODER */ |
|
|
|
#endif /* CONFIG_DVVIDEO_DECODER */ |
|
|
|