@@ -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) | |||||
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) | |||||
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 = | ||||