summaryrefslogtreecommitdiff
path: root/libavformat/mxfdec.c
diff options
context:
space:
mode:
authorMatthieu Bouron <matthieu.bouron@gmail.com>2013-02-16 13:52:29 +0100
committerLuca Barbato <lu_zero@gentoo.org>2014-02-01 16:26:44 +0100
commitc716624853339ea4b1086a3957b334829370204c (patch)
tree728103e24157105a5228fb0fefe27569b5d8e3cd /libavformat/mxfdec.c
parent7d56f2fffc14ad02001ee0689bee76a759da9ede (diff)
mxf: Read field dominance flag
And export the information in field_order. Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Diffstat (limited to 'libavformat/mxfdec.c')
-rw-r--r--libavformat/mxfdec.c19
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: