提交 d8999306 编写于 作者: M Michael Niedermayer 提交者: Anton Khirnov

mpeg12: more advanced ffmpeg mpeg2 aspect guessing code.

Fixes issue1613, 621, 562 simultaneously
Signed-off-by: NMichael Niedermayer <michaelni@gmx.at>
Signed-off-by: NAnton Khirnov <anton@khirnov.net>
上级 af2faf20
......@@ -1293,9 +1293,17 @@ static int mpeg_decode_postinit(AVCodecContext *avctx){
avctx->ticks_per_frame=2;
//MPEG-2 aspect
if(s->aspect_ratio_info > 1){
//we ignore the spec here as reality does not match the spec, see for example
AVRational dar =
av_mul_q(
av_div_q(ff_mpeg2_aspect[s->aspect_ratio_info],
(AVRational){s1->pan_scan.width, s1->pan_scan.height}),
(AVRational){s->width, s->height});
// we ignore the spec here and guess a bit as reality does not match the spec, see for example
// res_change_ffmpeg_aspect.ts and sequence-display-aspect.mpg
if( (s1->pan_scan.width == 0 )||(s1->pan_scan.height == 0) || 1){
// issue1613, 621, 562
if((s1->pan_scan.width == 0 ) || (s1->pan_scan.height == 0) ||
(av_cmp_q(dar,(AVRational){4,3}) && av_cmp_q(dar,(AVRational){16,9}))) {
s->avctx->sample_aspect_ratio=
av_div_q(
ff_mpeg2_aspect[s->aspect_ratio_info],
......@@ -1307,6 +1315,12 @@ static int mpeg_decode_postinit(AVCodecContext *avctx){
ff_mpeg2_aspect[s->aspect_ratio_info],
(AVRational){s1->pan_scan.width, s1->pan_scan.height}
);
//issue1613 4/3 16/9 -> 16/9
//res_change_ffmpeg_aspect.ts 4/3 225/44 ->4/3
//widescreen-issue562.mpg 4/3 16/9 -> 16/9
// s->avctx->sample_aspect_ratio= av_mul_q(s->avctx->sample_aspect_ratio, (AVRational){s->width, s->height});
//av_log(NULL, AV_LOG_ERROR, "A %d/%d\n",ff_mpeg2_aspect[s->aspect_ratio_info].num, ff_mpeg2_aspect[s->aspect_ratio_info].den);
//av_log(NULL, AV_LOG_ERROR, "B %d/%d\n",s->avctx->sample_aspect_ratio.num, s->avctx->sample_aspect_ratio.den);
}
}else{
s->avctx->sample_aspect_ratio=
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册