From: Carl Eugen Hoyos Date: Mon, 17 Nov 2014 16:54:32 +0000 (+0100) Subject: Read (display) aspect ratio from mxf files. X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=92c07acce736c64592c4c3232b4d0dacbe2f27f7;p=ffmpeg Read (display) aspect ratio from mxf files. Fixes ticket #4107. --- diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 56ab4e100da..7b5de4fee04 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1103,6 +1103,13 @@ typedef struct AVStream { * Keys are separated from values by '='. */ char *recommended_encoder_configuration; + + /** + * display aspect ratio (0 if unknown) + * - encoding: unused + * - decoding: Set by libavformat to calculate sample_aspect_ratio internally + */ + AVRational display_aspect_ratio; } AVStream; AVRational av_stream_get_r_frame_rate(const AVStream *s); diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index 87f1e516b9b..fa0a2f4b624 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -1781,6 +1781,8 @@ static int mxf_parse_structural_metadata(MXFContext *mxf) if (source_track->sequence->origin) { av_dict_set_int(&st->metadata, "source_track_origin", source_track->sequence->origin, 0); } + if (descriptor->aspect_ratio.num && descriptor->aspect_ratio.den) + st->display_aspect_ratio = descriptor->aspect_ratio; } else if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) { container_ul = mxf_get_codec_ul(mxf_sound_essence_container_uls, essence_container_ul); /* Only overwrite existing codec ID if it is unset or A-law, which is the default according to SMPTE RP 224. */ diff --git a/libavformat/utils.c b/libavformat/utils.c index 39851fc5713..62786681191 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -3347,6 +3347,11 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) st->r_frame_rate.den = st->time_base.num; } } + if (st->display_aspect_ratio.num && st->display_aspect_ratio.den) { + AVRational hw_ratio = { st->codec->height, st->codec->width }; + st->sample_aspect_ratio = av_mul_q(st->display_aspect_ratio, + hw_ratio); + } } else if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) { if (!st->codec->bits_per_coded_sample) st->codec->bits_per_coded_sample =