You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
More advanced ffmpeg mpeg2 aspect guessing code.
Fixes issue1613, 621, 562 simultaneously Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -1293,9 +1293,19 @@ static int mpeg_decode_postinit(AVCodecContext *avctx){
|
|||||||
avctx->ticks_per_frame=2;
|
avctx->ticks_per_frame=2;
|
||||||
//MPEG-2 aspect
|
//MPEG-2 aspect
|
||||||
if(s->aspect_ratio_info > 1){
|
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
|
// 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=
|
s->avctx->sample_aspect_ratio=
|
||||||
av_div_q(
|
av_div_q(
|
||||||
ff_mpeg2_aspect[s->aspect_ratio_info],
|
ff_mpeg2_aspect[s->aspect_ratio_info],
|
||||||
@@ -1307,6 +1317,12 @@ static int mpeg_decode_postinit(AVCodecContext *avctx){
|
|||||||
ff_mpeg2_aspect[s->aspect_ratio_info],
|
ff_mpeg2_aspect[s->aspect_ratio_info],
|
||||||
(AVRational){s1->pan_scan.width, s1->pan_scan.height}
|
(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{
|
}else{
|
||||||
s->avctx->sample_aspect_ratio=
|
s->avctx->sample_aspect_ratio=
|
||||||
|
Reference in New Issue
Block a user