diff options
author | Marc-Antoine Arnaud <arnaud.marcantoine@gmail.com> | 2014-07-22 16:08:52 +0200 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2014-07-28 22:17:42 +0200 |
commit | c9d982aa11a6267611c3770792f0e04b48438348 (patch) | |
tree | 9e5a91920c07bb90630a9cb511fa3227c0419684 /libavformat | |
parent | dc71f1958846bb1d96de43a4603983dc8450cfcc (diff) | |
download | ffmpeg-streaming-c9d982aa11a6267611c3770792f0e04b48438348.zip ffmpeg-streaming-c9d982aa11a6267611c3770792f0e04b48438348.tar.gz |
mxf: Detect Vanc/Vbi SMPTE-436M mxf track
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/mxfdec.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index 58d9027..bb876c0 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -971,6 +971,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; @@ -1618,6 +1627,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) { st->codec->extradata = av_mallocz(descriptor->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); @@ -1790,6 +1807,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,0x04,0x01,0x02,0x02,0x00,0x00 }, mxf_read_cryptographic_context, sizeof(MXFCryptoContext), CryptoContext }, |