summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Eugen Hoyos <cehoyos@ag.or.at>2015-07-22 10:23:18 +0200
committerCarl Eugen Hoyos <cehoyos@ag.or.at>2015-07-22 10:23:18 +0200
commit35b33f1a195c392bca374b3a49b7a18811effe56 (patch)
tree8d6fca083fe3c0dc9ea97590ebb5918d118026e6
parentd373b508b540aa18d13ad97bc330530fa8219421 (diff)
lavf/mxfdec: Set codec_tag AVup for Avid 1:1 input.
-rw-r--r--libavformat/mxf.c5
-rw-r--r--libavformat/mxf.h1
-rw-r--r--libavformat/mxfdec.c4
3 files changed, 10 insertions, 0 deletions
diff --git a/libavformat/mxf.c b/libavformat/mxf.c
index ecfb8a2393..dc712bb29e 100644
--- a/libavformat/mxf.c
+++ b/libavformat/mxf.c
@@ -69,6 +69,11 @@ const MXFCodecUL ff_mxf_pixel_format_uls[] = {
{ { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, 0, AV_PIX_FMT_NONE },
};
+const MXFCodecUL ff_mxf_codec_tag_uls[] = {
+ { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0E,0x04,0x03,0x01,0x01,0x03,0x01,0x00 }, 15, MKTAG('A', 'V', 'u', 'p') }, /* Avid 1:1 */
+ { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, 0, 0 },
+};
+
static const struct {
enum AVPixelFormat pix_fmt;
const char data[16];
diff --git a/libavformat/mxf.h b/libavformat/mxf.h
index 1763063a69..f3db1f939b 100644
--- a/libavformat/mxf.h
+++ b/libavformat/mxf.h
@@ -78,6 +78,7 @@ typedef struct {
extern const MXFCodecUL ff_mxf_data_definition_uls[];
extern const MXFCodecUL ff_mxf_codec_uls[];
extern const MXFCodecUL ff_mxf_pixel_format_uls[];
+extern const MXFCodecUL ff_mxf_codec_tag_uls[];
int ff_mxf_decode_pixel_layout(const char pixel_layout[16], enum AVPixelFormat *pix_fmt);
const MXFSamplesPerFrame *ff_mxf_get_samples_per_frame(AVFormatContext *s, AVRational time_base);
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index 27dd5bcd41..2159bd7037 100644
--- a/libavformat/mxfdec.c
+++ b/libavformat/mxfdec.c
@@ -2045,6 +2045,9 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
&descriptor->essence_codec_ul);
st->codec->pix_fmt = (enum AVPixelFormat)pix_fmt_ul->id;
if (st->codec->pix_fmt == AV_PIX_FMT_NONE) {
+ st->codec->codec_tag = mxf_get_codec_ul(ff_mxf_codec_tag_uls,
+ &descriptor->essence_codec_ul)->id;
+ if (!st->codec->codec_tag) {
/* support files created before RP224v10 by defaulting to UYVY422
if subsampling is 4:2:2 and component depth is 8-bit */
if (descriptor->horiz_subsampling == 2 &&
@@ -2052,6 +2055,7 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
descriptor->component_depth == 8) {
st->codec->pix_fmt = AV_PIX_FMT_UYVY422;
}
+ }
}
}
}