summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorCarl Eugen Hoyos <cehoyos@ag.or.at>2014-11-17 17:54:32 +0100
committerCarl Eugen Hoyos <cehoyos@ag.or.at>2014-11-17 17:54:32 +0100
commit92c07acce736c64592c4c3232b4d0dacbe2f27f7 (patch)
tree5d87a82c9d2c820c37f929a8226408e19b5a685a /libavformat
parent0b3c23054279fe49ed550735a34cfbed67ce68cd (diff)
Read (display) aspect ratio from mxf files.
Fixes ticket #4107.
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/avformat.h7
-rw-r--r--libavformat/mxfdec.c2
-rw-r--r--libavformat/utils.c5
3 files changed, 14 insertions, 0 deletions
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 56ab4e100d..7b5de4fee0 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 87f1e516b9..fa0a2f4b62 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 39851fc571..6278668119 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 =