summaryrefslogtreecommitdiff
path: root/libavformat/mxfdec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-07-29 00:11:46 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-07-29 00:12:03 +0200
commit4a4d0258eef26a8c7e93f68024b639290e1c8cb2 (patch)
tree1c94a5402ae5a526af219c04b40d4e01c7bfd1d5 /libavformat/mxfdec.c
parent25a20608909fbdc3c58981aaaee31e728e8cd196 (diff)
parentc9d982aa11a6267611c3770792f0e04b48438348 (diff)
Merge commit 'c9d982aa11a6267611c3770792f0e04b48438348'
* commit 'c9d982aa11a6267611c3770792f0e04b48438348': mxf: Detect Vanc/Vbi SMPTE-436M mxf track Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/mxfdec.c')
-rw-r--r--libavformat/mxfdec.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index 0d17a02964..9f1ac2ee8e 100644
--- a/libavformat/mxfdec.c
+++ b/libavformat/mxfdec.c
@@ -981,6 +981,15 @@ static const MXFCodecUL mxf_sound_essence_container_uls[] = {
{ { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, 0, AV_CODEC_ID_NONE },
};
+static const MXFCodecUL mxf_data_essence_container_uls[] = {
+ { { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x09,0x0d,0x01,0x03,0x01,0x02,0x0e,0x00,0x00 }, 16, 0 },
+ { { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x09,0x0d,0x01,0x03,0x01,0x02,0x0e,0x00,0x00 }, 16, AV_CODEC_ID_NONE },
+};
+
+static const char* mxf_data_essence_descriptor[] = {
+ "vbi_vanc_smpte_436M",
+};
+
static int mxf_get_sorted_table_segments(MXFContext *mxf, int *nb_sorted_segments, MXFIndexTableSegment ***sorted_segments)
{
int i, j, nb_segments = 0;
@@ -1657,6 +1666,14 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
} else if (st->codec->codec_id == AV_CODEC_ID_MP2) {
st->need_parsing = AVSTREAM_PARSE_FULL;
}
+ } else if (st->codec->codec_type == AVMEDIA_TYPE_DATA) {
+ int codec_id = mxf_get_codec_ul(mxf_data_essence_container_uls,
+ essence_container_ul)->id;
+ if (codec_id >= 0 &&
+ codec_id < FF_ARRAY_ELEMS(mxf_data_essence_descriptor)) {
+ av_dict_set(&st->metadata, "data_type",
+ mxf_data_essence_descriptor[codec_id], 0);
+ }
}
if (descriptor->extradata) {
if (!ff_alloc_extradata(st->codec, descriptor->extradata_size)) {
@@ -1826,6 +1843,7 @@ static const MXFMetadataReadTableEntry mxf_metadata_read_table[] = {
{ { 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x51,0x00 }, mxf_read_generic_descriptor, sizeof(MXFDescriptor), Descriptor }, /* MPEG 2 Video */
{ { 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x48,0x00 }, mxf_read_generic_descriptor, sizeof(MXFDescriptor), Descriptor }, /* Wave */
{ { 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x47,0x00 }, mxf_read_generic_descriptor, sizeof(MXFDescriptor), Descriptor }, /* AES3 */
+ { { 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x5c,0x00 }, mxf_read_generic_descriptor, sizeof(MXFDescriptor), Descriptor }, /* VANC/VBI - SMPTE 436M */
{ { 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x3A,0x00 }, mxf_read_track, sizeof(MXFTrack), Track }, /* Static Track */
{ { 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x3B,0x00 }, mxf_read_track, sizeof(MXFTrack), Track }, /* Generic Track */
{ { 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x14,0x00 }, mxf_read_timecode_component, sizeof(MXFTimecodeComponent), TimecodeComponent },