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