diff options
author | Matthieu Bouron <matthieu.bouron@gmail.com> | 2013-02-16 13:52:29 +0100 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2014-02-01 16:26:44 +0100 |
commit | c716624853339ea4b1086a3957b334829370204c (patch) | |
tree | 728103e24157105a5228fb0fefe27569b5d8e3cd | |
parent | 7d56f2fffc14ad02001ee0689bee76a759da9ede (diff) | |
download | ffmpeg-c716624853339ea4b1086a3957b334829370204c.tar.gz |
mxf: Read field dominance flag
And export the information in field_order.
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
-rw-r--r-- | libavformat/mxfdec.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index 31ac9a8080..296044edc3 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -134,6 +134,9 @@ typedef struct { int width; int height; /* Field height, not frame height */ int frame_layout; /* See MXFFrameLayout enum */ +#define MXF_TFF 1 +#define MXF_BFF 2 + int field_dominance; int channels; int bits_per_sample; unsigned int component_depth; @@ -830,6 +833,9 @@ static int mxf_read_generic_descriptor(void *arg, AVIOContext *pb, int tag, int descriptor->aspect_ratio.num = avio_rb32(pb); descriptor->aspect_ratio.den = avio_rb32(pb); break; + case 0x3212: + descriptor->field_dominance = avio_r8(pb); + break; case 0x3301: descriptor->component_depth = avio_rb32(pb); break; @@ -1507,6 +1513,19 @@ static int mxf_parse_structural_metadata(MXFContext *mxf) * It's also for compatibility with the old behavior. */ case SeparateFields: case MixedFields: + switch (descriptor->field_dominance) { + case MXF_TFF: + st->codec->field_order = AV_FIELD_TT; + break; + case MXF_BFF: + st->codec->field_order = AV_FIELD_BB; + break; + default: + avpriv_request_sample(mxf->fc, + "Field dominance %d support", + descriptor->field_dominance); + break; + } /* Turn field height into frame height. */ st->codec->height *= 2; default: |