Factorize common code out of the mxf demuxer.
Patch by zhentan feng. Originally committed as revision 14826 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		
							parent
							
								
									3f3fe38d25
								
							
						
					
					
						commit
						c69968b4fe
					
				@ -108,7 +108,7 @@ OBJS-$(CONFIG_MPJPEG_MUXER)              += mpjpeg.o
 | 
				
			|||||||
OBJS-$(CONFIG_MSNWC_TCP_DEMUXER)         += msnwc_tcp.o
 | 
					OBJS-$(CONFIG_MSNWC_TCP_DEMUXER)         += msnwc_tcp.o
 | 
				
			||||||
OBJS-$(CONFIG_MTV_DEMUXER)               += mtv.o
 | 
					OBJS-$(CONFIG_MTV_DEMUXER)               += mtv.o
 | 
				
			||||||
OBJS-$(CONFIG_MVI_DEMUXER)               += mvi.o
 | 
					OBJS-$(CONFIG_MVI_DEMUXER)               += mvi.o
 | 
				
			||||||
OBJS-$(CONFIG_MXF_DEMUXER)               += mxfdec.o
 | 
					OBJS-$(CONFIG_MXF_DEMUXER)               += mxfdec.o mxf.o
 | 
				
			||||||
OBJS-$(CONFIG_NSV_DEMUXER)               += nsvdec.o
 | 
					OBJS-$(CONFIG_NSV_DEMUXER)               += nsvdec.o
 | 
				
			||||||
OBJS-$(CONFIG_NULL_MUXER)                += raw.o
 | 
					OBJS-$(CONFIG_NULL_MUXER)                += raw.o
 | 
				
			||||||
OBJS-$(CONFIG_NUT_DEMUXER)               += nutdec.o nut.o riff.o
 | 
					OBJS-$(CONFIG_NUT_DEMUXER)               += nutdec.o nut.o riff.o
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										62
									
								
								libavformat/mxf.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								libavformat/mxf.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,62 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * MXF
 | 
				
			||||||
 | 
					 * Copyright (c) 2006 SmartJog S.A., Baptiste Coudurier <baptiste dot coudurier at smartjog dot com>.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This file is part of FFmpeg.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * FFmpeg is free software; you can redistribute it and/or
 | 
				
			||||||
 | 
					 * modify it under the terms of the GNU Lesser General Public
 | 
				
			||||||
 | 
					 * License as published by the Free Software Foundation; either
 | 
				
			||||||
 | 
					 * version 2.1 of the License, or (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * FFmpeg is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
				
			||||||
 | 
					 * Lesser General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU Lesser General Public
 | 
				
			||||||
 | 
					 * License along with FFmpeg; if not, write to the Free Software
 | 
				
			||||||
 | 
					 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "mxf.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const MXFDataDefinitionUL ff_mxf_data_definition_uls[] = {
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x01,0x03,0x02,0x02,0x01,0x00,0x00,0x00 }, CODEC_TYPE_VIDEO },
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x01,0x03,0x02,0x02,0x02,0x00,0x00,0x00 }, CODEC_TYPE_AUDIO },
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x05,0x01,0x03,0x02,0x02,0x02,0x02,0x00,0x00 }, CODEC_TYPE_AUDIO },
 | 
				
			||||||
 | 
					    { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },  CODEC_TYPE_DATA },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const MXFCodecUL ff_mxf_codec_uls[] = {
 | 
				
			||||||
 | 
					    /* PictureEssenceCoding */
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x01,0x11,0x00 }, 14, CODEC_ID_MPEG2VIDEO }, /* MP@ML Long GoP */
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x01 }, 14, CODEC_ID_MPEG2VIDEO }, /* D-10 50Mbps PAL */
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x03,0x03,0x00 }, 14, CODEC_ID_MPEG2VIDEO }, /* MP@HL Long GoP */
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x04,0x02,0x00 }, 14, CODEC_ID_MPEG2VIDEO }, /* 422P@HL I-Frame */
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x20,0x02,0x03 }, 14,      CODEC_ID_MPEG4 }, /* XDCAM proxy_pal030926.mxf */
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x02,0x01,0x02,0x00 }, 13,    CODEC_ID_DVVIDEO }, /* DV25 IEC PAL */
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x07,0x04,0x01,0x02,0x02,0x03,0x01,0x01,0x00 }, 14,   CODEC_ID_JPEG2000 }, /* JPEG2000 Codestream */
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x01,0x7F,0x00,0x00,0x00 }, 13,   CODEC_ID_RAWVIDEO }, /* Uncompressed */
 | 
				
			||||||
 | 
					    /* SoundEssenceCompression */
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 }, 13,  CODEC_ID_PCM_S16LE }, /* Uncompressed */
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x7F,0x00,0x00,0x00 }, 13,  CODEC_ID_PCM_S16LE },
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x07,0x04,0x02,0x02,0x01,0x7E,0x00,0x00,0x00 }, 13,  CODEC_ID_PCM_S16BE }, /* From Omneon MXF file */
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x04,0x04,0x02,0x02,0x02,0x03,0x01,0x01,0x00 }, 15,   CODEC_ID_PCM_ALAW }, /* XDCAM Proxy C0023S01.mxf */
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x02,0x03,0x02,0x01,0x00 }, 15,        CODEC_ID_AC3 },
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x02,0x03,0x02,0x05,0x00 }, 15,        CODEC_ID_MP2 }, /* MP2 or MP3 */
 | 
				
			||||||
 | 
					  //{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x02,0x03,0x02,0x1C,0x00 }, 15,    CODEC_ID_DOLBY_E }, /* Dolby-E */
 | 
				
			||||||
 | 
					    { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },  0,       CODEC_ID_NONE },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const MXFCodecUL ff_mxf_essence_container_uls[] = {
 | 
				
			||||||
 | 
					    // video essence container uls
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x02,0x0D,0x01,0x03,0x01,0x02,0x04,0x60,0x01 }, 14, CODEC_ID_MPEG2VIDEO }, /* MPEG-ES Frame wrapped */
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x41,0x01 }, 14,    CODEC_ID_DVVIDEO }, /* DV 625 25mbps */
 | 
				
			||||||
 | 
					    // sound essence container uls
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x06,0x01,0x00 }, 14, CODEC_ID_PCM_S16LE }, /* BWF Frame wrapped */
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x02,0x0D,0x01,0x03,0x01,0x02,0x04,0x40,0x01 }, 14,       CODEC_ID_MP2 }, /* MPEG-ES Frame wrapped, 0x40 ??? stream id */
 | 
				
			||||||
 | 
					    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x01,0x01 }, 14, CODEC_ID_PCM_S16LE }, /* D-10 Mapping 50Mbps PAL Extended Template */
 | 
				
			||||||
 | 
					    { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },  0,      CODEC_ID_NONE },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										70
									
								
								libavformat/mxf.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								libavformat/mxf.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,70 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * MXF
 | 
				
			||||||
 | 
					 * Copyright (c) 2006 SmartJog S.A., Baptiste Coudurier <baptiste dot coudurier at smartjog dot com>.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This file is part of FFmpeg.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * FFmpeg is free software; you can redistribute it and/or
 | 
				
			||||||
 | 
					 * modify it under the terms of the GNU Lesser General Public
 | 
				
			||||||
 | 
					 * License as published by the Free Software Foundation; either
 | 
				
			||||||
 | 
					 * version 2.1 of the License, or (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * FFmpeg is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
				
			||||||
 | 
					 * Lesser General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU Lesser General Public
 | 
				
			||||||
 | 
					 * License along with FFmpeg; if not, write to the Free Software
 | 
				
			||||||
 | 
					 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#ifndef FFMPEG_MXF_H
 | 
				
			||||||
 | 
					#define FFMPEG_MXF_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "avformat.h"
 | 
				
			||||||
 | 
					#include "libavcodec/bytestream.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef uint8_t UID[16];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum MXFMetadataSetType {
 | 
				
			||||||
 | 
					    AnyType,
 | 
				
			||||||
 | 
					    MaterialPackage,
 | 
				
			||||||
 | 
					    SourcePackage,
 | 
				
			||||||
 | 
					    SourceClip,
 | 
				
			||||||
 | 
					    TimecodeComponent,
 | 
				
			||||||
 | 
					    Sequence,
 | 
				
			||||||
 | 
					    MultipleDescriptor,
 | 
				
			||||||
 | 
					    Descriptor,
 | 
				
			||||||
 | 
					    Track,
 | 
				
			||||||
 | 
					    CryptoContext,
 | 
				
			||||||
 | 
					    Preface,
 | 
				
			||||||
 | 
					    Identification,
 | 
				
			||||||
 | 
					    ContentStorage,
 | 
				
			||||||
 | 
					    SubDescriptor,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
					    UID key;
 | 
				
			||||||
 | 
					    offset_t offset;
 | 
				
			||||||
 | 
					    uint64_t length;
 | 
				
			||||||
 | 
					} KLVPacket;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
					    UID uid;
 | 
				
			||||||
 | 
					    unsigned matching_len;
 | 
				
			||||||
 | 
					    enum CodecID id;
 | 
				
			||||||
 | 
					} MXFCodecUL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
					    UID uid;
 | 
				
			||||||
 | 
					    enum CodecType type;
 | 
				
			||||||
 | 
					} MXFDataDefinitionUL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern const MXFDataDefinitionUL ff_mxf_data_definition_uls[];
 | 
				
			||||||
 | 
					extern const MXFCodecUL ff_mxf_codec_uls[];
 | 
				
			||||||
 | 
					extern const MXFCodecUL ff_mxf_essence_container_uls[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define PRINT_KEY(pc, s, x) dprintf(pc, "%s %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n", s, \
 | 
				
			||||||
 | 
					                             (x)[0], (x)[1], (x)[2], (x)[3], (x)[4], (x)[5], (x)[6], (x)[7], (x)[8], (x)[9], (x)[10], (x)[11], (x)[12], (x)[13], (x)[14], (x)[15])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* FFMPEG_MXF_H */
 | 
				
			||||||
@ -46,23 +46,7 @@
 | 
				
			|||||||
//#define DEBUG
 | 
					//#define DEBUG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "libavutil/aes.h"
 | 
					#include "libavutil/aes.h"
 | 
				
			||||||
#include "libavcodec/bytestream.h"
 | 
					#include "mxf.h"
 | 
				
			||||||
#include "avformat.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef uint8_t UID[16];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
enum MXFMetadataSetType {
 | 
					 | 
				
			||||||
    AnyType,
 | 
					 | 
				
			||||||
    MaterialPackage,
 | 
					 | 
				
			||||||
    SourcePackage,
 | 
					 | 
				
			||||||
    SourceClip,
 | 
					 | 
				
			||||||
    TimecodeComponent,
 | 
					 | 
				
			||||||
    Sequence,
 | 
					 | 
				
			||||||
    MultipleDescriptor,
 | 
					 | 
				
			||||||
    Descriptor,
 | 
					 | 
				
			||||||
    Track,
 | 
					 | 
				
			||||||
    CryptoContext,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
    UID uid;
 | 
					    UID uid;
 | 
				
			||||||
@ -143,28 +127,11 @@ typedef struct {
 | 
				
			|||||||
    int local_tags_count;
 | 
					    int local_tags_count;
 | 
				
			||||||
} MXFContext;
 | 
					} MXFContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					 | 
				
			||||||
    UID key;
 | 
					 | 
				
			||||||
    offset_t offset;
 | 
					 | 
				
			||||||
    uint64_t length;
 | 
					 | 
				
			||||||
} KLVPacket;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
enum MXFWrappingScheme {
 | 
					enum MXFWrappingScheme {
 | 
				
			||||||
    Frame,
 | 
					    Frame,
 | 
				
			||||||
    Clip,
 | 
					    Clip,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					 | 
				
			||||||
    UID uid;
 | 
					 | 
				
			||||||
    unsigned matching_len;
 | 
					 | 
				
			||||||
    enum CodecID id;
 | 
					 | 
				
			||||||
} MXFCodecUL;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef struct {
 | 
					 | 
				
			||||||
    UID uid;
 | 
					 | 
				
			||||||
    enum CodecType type;
 | 
					 | 
				
			||||||
} MXFDataDefinitionUL;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
    const UID key;
 | 
					    const UID key;
 | 
				
			||||||
    int (*read)();
 | 
					    int (*read)();
 | 
				
			||||||
@ -184,9 +151,6 @@ static const uint8_t mxf_sony_mpeg4_extradata[]            = { 0x06,0x0e,0x2b,0x
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define IS_KLV_KEY(x, y) (!memcmp(x, y, sizeof(y)))
 | 
					#define IS_KLV_KEY(x, y) (!memcmp(x, y, sizeof(y)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PRINT_KEY(pc, s, x) dprintf(pc, "%s %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n", s, \
 | 
					 | 
				
			||||||
                             (x)[0], (x)[1], (x)[2], (x)[3], (x)[4], (x)[5], (x)[6], (x)[7], (x)[8], (x)[9], (x)[10], (x)[11], (x)[12], (x)[13], (x)[14], (x)[15])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int64_t klv_decode_ber_length(ByteIOContext *pb)
 | 
					static int64_t klv_decode_ber_length(ByteIOContext *pb)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    uint64_t size = get_byte(pb);
 | 
					    uint64_t size = get_byte(pb);
 | 
				
			||||||
@ -619,48 +583,6 @@ static int mxf_read_generic_descriptor(MXFDescriptor *descriptor, ByteIOContext
 | 
				
			|||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* SMPTE RP224 http://www.smpte-ra.org/mdd/index.html */
 | 
					 | 
				
			||||||
static const MXFDataDefinitionUL mxf_data_definition_uls[] = {
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x01,0x03,0x02,0x02,0x01,0x00,0x00,0x00 }, CODEC_TYPE_VIDEO },
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x01,0x03,0x02,0x02,0x02,0x00,0x00,0x00 }, CODEC_TYPE_AUDIO },
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x05,0x01,0x03,0x02,0x02,0x02,0x02,0x00,0x00 }, CODEC_TYPE_AUDIO },
 | 
					 | 
				
			||||||
    { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },  CODEC_TYPE_DATA },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const MXFCodecUL mxf_codec_uls[] = {
 | 
					 | 
				
			||||||
    /* PictureEssenceCoding */
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x01,0x11,0x00 }, 14, CODEC_ID_MPEG2VIDEO }, /* MP@ML Long GoP */
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x01 }, 14, CODEC_ID_MPEG2VIDEO }, /* D-10 50Mbps PAL */
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x03,0x03,0x00 }, 14, CODEC_ID_MPEG2VIDEO }, /* MP@HL Long GoP */
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x04,0x02,0x00 }, 14, CODEC_ID_MPEG2VIDEO }, /* 422P@HL I-Frame */
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x20,0x02,0x03 }, 14,      CODEC_ID_MPEG4 }, /* XDCAM proxy_pal030926.mxf */
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x02,0x01,0x02,0x00 }, 13,    CODEC_ID_DVVIDEO }, /* DV25 IEC PAL */
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x07,0x04,0x01,0x02,0x02,0x03,0x01,0x01,0x00 }, 14,   CODEC_ID_JPEG2000 }, /* JPEG2000 Codestream */
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x01,0x7F,0x00,0x00,0x00 }, 13,   CODEC_ID_RAWVIDEO }, /* Uncompressed */
 | 
					 | 
				
			||||||
    /* SoundEssenceCompression */
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 }, 13,  CODEC_ID_PCM_S16LE }, /* Uncompressed */
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x7F,0x00,0x00,0x00 }, 13,  CODEC_ID_PCM_S16LE },
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x07,0x04,0x02,0x02,0x01,0x7E,0x00,0x00,0x00 }, 13,  CODEC_ID_PCM_S16BE }, /* From Omneon MXF file */
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x04,0x04,0x02,0x02,0x02,0x03,0x01,0x01,0x00 }, 15,   CODEC_ID_PCM_ALAW }, /* XDCAM Proxy C0023S01.mxf */
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x02,0x03,0x02,0x01,0x00 }, 15,        CODEC_ID_AC3 },
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x02,0x03,0x02,0x05,0x00 }, 15,        CODEC_ID_MP2 }, /* MP2 or MP3 */
 | 
					 | 
				
			||||||
  //{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x02,0x03,0x02,0x1C,0x00 }, 15,    CODEC_ID_DOLBY_E }, /* Dolby-E */
 | 
					 | 
				
			||||||
    { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },  0,       CODEC_ID_NONE },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const MXFCodecUL mxf_picture_essence_container_uls[] = {
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x02,0x0D,0x01,0x03,0x01,0x02,0x04,0x60,0x01 }, 14, CODEC_ID_MPEG2VIDEO }, /* MPEG-ES Frame wrapped */
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x41,0x01 }, 14,    CODEC_ID_DVVIDEO }, /* DV 625 25mbps */
 | 
					 | 
				
			||||||
    { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },  0,       CODEC_ID_NONE },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const MXFCodecUL mxf_sound_essence_container_uls[] = {
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x06,0x01,0x00 }, 14, CODEC_ID_PCM_S16LE }, /* BWF Frame wrapped */
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x02,0x0D,0x01,0x03,0x01,0x02,0x04,0x40,0x01 }, 14,       CODEC_ID_MP2 }, /* MPEG-ES Frame wrapped, 0x40 ??? stream id */
 | 
					 | 
				
			||||||
    { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x01,0x01 }, 14, CODEC_ID_PCM_S16LE }, /* D-10 Mapping 50Mbps PAL Extended Template */
 | 
					 | 
				
			||||||
    { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },  0,      CODEC_ID_NONE },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Match an uid independently of the version byte and up to len common bytes
 | 
					 * Match an uid independently of the version byte and up to len common bytes
 | 
				
			||||||
 * Returns: boolean
 | 
					 * Returns: boolean
 | 
				
			||||||
@ -807,7 +729,7 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
 | 
				
			|||||||
#ifdef DEBUG
 | 
					#ifdef DEBUG
 | 
				
			||||||
        PRINT_KEY(mxf->fc, "data definition   ul", source_track->sequence->data_definition_ul);
 | 
					        PRINT_KEY(mxf->fc, "data definition   ul", source_track->sequence->data_definition_ul);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
        st->codec->codec_type = mxf_get_codec_type(mxf_data_definition_uls, &source_track->sequence->data_definition_ul);
 | 
					        st->codec->codec_type = mxf_get_codec_type(ff_mxf_data_definition_uls, &source_track->sequence->data_definition_ul);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        source_package->descriptor = mxf_resolve_strong_ref(mxf, &source_package->descriptor_ref, AnyType);
 | 
					        source_package->descriptor = mxf_resolve_strong_ref(mxf, &source_package->descriptor_ref, AnyType);
 | 
				
			||||||
        if (source_package->descriptor) {
 | 
					        if (source_package->descriptor) {
 | 
				
			||||||
@ -849,14 +771,14 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        /* TODO: drop PictureEssenceCoding and SoundEssenceCompression, only check EssenceContainer */
 | 
					        /* TODO: drop PictureEssenceCoding and SoundEssenceCompression, only check EssenceContainer */
 | 
				
			||||||
        codec_ul = mxf_get_codec_ul(mxf_codec_uls, &descriptor->essence_codec_ul);
 | 
					        codec_ul = mxf_get_codec_ul(ff_mxf_codec_uls, &descriptor->essence_codec_ul);
 | 
				
			||||||
        st->codec->codec_id = codec_ul->id;
 | 
					        st->codec->codec_id = codec_ul->id;
 | 
				
			||||||
        if (descriptor->extradata) {
 | 
					        if (descriptor->extradata) {
 | 
				
			||||||
            st->codec->extradata = descriptor->extradata;
 | 
					            st->codec->extradata = descriptor->extradata;
 | 
				
			||||||
            st->codec->extradata_size = descriptor->extradata_size;
 | 
					            st->codec->extradata_size = descriptor->extradata_size;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (st->codec->codec_type == CODEC_TYPE_VIDEO) {
 | 
					        if (st->codec->codec_type == CODEC_TYPE_VIDEO) {
 | 
				
			||||||
            container_ul = mxf_get_codec_ul(mxf_picture_essence_container_uls, essence_container_ul);
 | 
					            container_ul = mxf_get_codec_ul(ff_mxf_essence_container_uls, essence_container_ul);
 | 
				
			||||||
            if (st->codec->codec_id == CODEC_ID_NONE)
 | 
					            if (st->codec->codec_id == CODEC_ID_NONE)
 | 
				
			||||||
                st->codec->codec_id = container_ul->id;
 | 
					                st->codec->codec_id = container_ul->id;
 | 
				
			||||||
            st->codec->width = descriptor->width;
 | 
					            st->codec->width = descriptor->width;
 | 
				
			||||||
@ -864,7 +786,7 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
 | 
				
			|||||||
            st->codec->bits_per_sample = descriptor->bits_per_sample; /* Uncompressed */
 | 
					            st->codec->bits_per_sample = descriptor->bits_per_sample; /* Uncompressed */
 | 
				
			||||||
            st->need_parsing = AVSTREAM_PARSE_HEADERS;
 | 
					            st->need_parsing = AVSTREAM_PARSE_HEADERS;
 | 
				
			||||||
        } else if (st->codec->codec_type == CODEC_TYPE_AUDIO) {
 | 
					        } else if (st->codec->codec_type == CODEC_TYPE_AUDIO) {
 | 
				
			||||||
            container_ul = mxf_get_codec_ul(mxf_sound_essence_container_uls, essence_container_ul);
 | 
					            container_ul = mxf_get_codec_ul(ff_mxf_essence_container_uls, essence_container_ul);
 | 
				
			||||||
            if (st->codec->codec_id == CODEC_ID_NONE)
 | 
					            if (st->codec->codec_id == CODEC_ID_NONE)
 | 
				
			||||||
                st->codec->codec_id = container_ul->id;
 | 
					                st->codec->codec_id = container_ul->id;
 | 
				
			||||||
            st->codec->channels = descriptor->channels;
 | 
					            st->codec->channels = descriptor->channels;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user