Commit 92c07acc authored by Carl Eugen Hoyos's avatar Carl Eugen Hoyos

Read (display) aspect ratio from mxf files.

Fixes ticket #4107.
parent 0b3c2305
...@@ -1103,6 +1103,13 @@ typedef struct AVStream { ...@@ -1103,6 +1103,13 @@ typedef struct AVStream {
* Keys are separated from values by '='. * Keys are separated from values by '='.
*/ */
char *recommended_encoder_configuration; 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; } AVStream;
AVRational av_stream_get_r_frame_rate(const AVStream *s); AVRational av_stream_get_r_frame_rate(const AVStream *s);
......
...@@ -1781,6 +1781,8 @@ static int mxf_parse_structural_metadata(MXFContext *mxf) ...@@ -1781,6 +1781,8 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
if (source_track->sequence->origin) { if (source_track->sequence->origin) {
av_dict_set_int(&st->metadata, "source_track_origin", source_track->sequence->origin, 0); 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) { } else if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
container_ul = mxf_get_codec_ul(mxf_sound_essence_container_uls, essence_container_ul); 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. */ /* Only overwrite existing codec ID if it is unset or A-law, which is the default according to SMPTE RP 224. */
......
...@@ -3347,6 +3347,11 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) ...@@ -3347,6 +3347,11 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
st->r_frame_rate.den = st->time_base.num; 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) { } else if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
if (!st->codec->bits_per_coded_sample) if (!st->codec->bits_per_coded_sample)
st->codec->bits_per_coded_sample = st->codec->bits_per_coded_sample =
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment