mxfdec.c File Reference
#include "libavutil/aes.h"
#include "libavutil/mathematics.h"
#include "libavcodec/bytestream.h"
#include "avformat.h"
#include "internal.h"
#include "mxf.h"

Go to the source code of this file.

Data Structures

struct  MXFCryptoContext
struct  MXFStructuralComponent
struct  MXFSequence
struct  MXFTrack
struct  MXFDescriptor
struct  MXFIndexTableSegment
struct  MXFPackage
struct  MXFMetadataSet
struct  MXFContext
struct  MXFMetadataReadTableEntry

Macros

#define IS_KLV_KEY(x, y)   (!memcmp(x, y, sizeof(y)))

Typedefs

typedef int MXFMetadataReadFunc (void *arg, AVIOContext *pb, int tag, int size, UID uid)

Enumerations

enum  MXFWrappingScheme { Frame, Clip }

Functions

static int64_t klv_decode_ber_length (AVIOContext *pb)
static int mxf_read_sync (AVIOContext *pb, const uint8_t *key, unsigned size)
static int klv_read_packet (KLVPacket *klv, AVIOContext *pb)
static int mxf_get_stream_index (AVFormatContext *s, KLVPacket *klv)
static int mxf_get_d10_aes3_packet (AVIOContext *pb, AVStream *st, AVPacket *pkt, int64_t length)
static int mxf_decrypt_triplet (AVFormatContext *s, AVPacket *pkt, KLVPacket *klv)
static int mxf_read_packet (AVFormatContext *s, AVPacket *pkt)
static int mxf_read_primer_pack (void *arg, AVIOContext *pb, int tag, int size, UID uid)
static int mxf_add_metadata_set (MXFContext *mxf, void *metadata_set)
static int mxf_read_cryptographic_context (void *arg, AVIOContext *pb, int tag, int size, UID uid)
static int mxf_read_content_storage (void *arg, AVIOContext *pb, int tag, int size, UID uid)
static int mxf_read_source_clip (void *arg, AVIOContext *pb, int tag, int size, UID uid)
static int mxf_read_material_package (void *arg, AVIOContext *pb, int tag, int size, UID uid)
static int mxf_read_track (void *arg, AVIOContext *pb, int tag, int size, UID uid)
static int mxf_read_sequence (void *arg, AVIOContext *pb, int tag, int size, UID uid)
static int mxf_read_source_package (void *arg, AVIOContext *pb, int tag, int size, UID uid)
static int mxf_read_index_table_segment (void *arg, AVIOContext *pb, int tag, int size, UID uid)
static void mxf_read_pixel_layout (AVIOContext *pb, MXFDescriptor *descriptor)
static int mxf_read_generic_descriptor (void *arg, AVIOContext *pb, int tag, int size, UID uid)
static int mxf_match_uid (const UID key, const UID uid, int len)
static const MXFCodecULmxf_get_codec_ul (const MXFCodecUL *uls, UID *uid)
static voidmxf_resolve_strong_ref (MXFContext *mxf, UID *strong_ref, enum MXFMetadataSetType type)
static int mxf_parse_structural_metadata (MXFContext *mxf)
static int mxf_read_local_tags (MXFContext *mxf, KLVPacket *klv, MXFMetadataReadFunc *read_child, int ctx_size, enum MXFMetadataSetType type)
static int mxf_read_header (AVFormatContext *s, AVFormatParameters *ap)
static int mxf_read_close (AVFormatContext *s)
static int mxf_probe (AVProbeData *p)
static int mxf_read_seek (AVFormatContext *s, int stream_index, int64_t sample_time, int flags)

Variables

static const uint8_t mxf_header_partition_pack_key [] = { 0x06,0x0e,0x2b,0x34,0x02,0x05,0x01,0x01,0x0d,0x01,0x02,0x01,0x01,0x02 }
static const uint8_t mxf_essence_element_key [] = { 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01 }
static const uint8_t mxf_klv_key [] = { 0x06,0x0e,0x2b,0x34 }
static const uint8_t mxf_crypto_source_container_ul [] = { 0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x09,0x06,0x01,0x01,0x02,0x02,0x00,0x00,0x00 }
static const uint8_t mxf_encrypted_triplet_key [] = { 0x06,0x0e,0x2b,0x34,0x02,0x04,0x01,0x07,0x0d,0x01,0x03,0x01,0x02,0x7e,0x01,0x00 }
static const uint8_t mxf_encrypted_essence_container [] = { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x07,0x0d,0x01,0x03,0x01,0x02,0x0b,0x01,0x00 }
static const uint8_t mxf_sony_mpeg4_extradata [] = { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x01,0x0e,0x06,0x06,0x02,0x02,0x01,0x00,0x00 }
static const MXFCodecUL mxf_essence_container_uls []
static const
MXFMetadataReadTableEntry 
mxf_metadata_read_table []
AVInputFormat ff_mxf_demuxer

Macro Definition Documentation

#define IS_KLV_KEY (   x,
 
)    (!memcmp(x, y, sizeof(y)))

Typedef Documentation

typedef int MXFMetadataReadFunc(void *arg, AVIOContext *pb, int tag, int size, UID uid)

Definition at line 145 of file mxfdec.c.

Enumeration Type Documentation

Enumerator:
Frame 
Clip 

Definition at line 140 of file mxfdec.c.

Function Documentation

static int64_t klv_decode_ber_length ( AVIOContext pb)
static

Definition at line 166 of file mxfdec.c.

Referenced by klv_read_packet(), and mxf_decrypt_triplet().

static int klv_read_packet ( KLVPacket klv,
AVIOContext pb 
)
static

Definition at line 194 of file mxfdec.c.

Referenced by mxf_read_header(), and mxf_read_packet().

static int mxf_add_metadata_set ( MXFContext mxf,
void metadata_set 
)
static

Definition at line 379 of file mxfdec.c.

Referenced by mxf_read_local_tags().

static int mxf_decrypt_triplet ( AVFormatContext s,
AVPacket pkt,
KLVPacket klv 
)
static

Definition at line 248 of file mxfdec.c.

Referenced by mxf_read_packet().

static const MXFCodecUL* mxf_get_codec_ul ( const MXFCodecUL uls,
UID uid 
)
static

Definition at line 639 of file mxfdec.c.

Referenced by mxf_parse_structural_metadata().

static int mxf_get_d10_aes3_packet ( AVIOContext pb,
AVStream st,
AVPacket pkt,
int64_t  length 
)
static

Definition at line 220 of file mxfdec.c.

Referenced by mxf_read_packet().

static int mxf_get_stream_index ( AVFormatContext s,
KLVPacket klv 
)
static

Definition at line 205 of file mxfdec.c.

Referenced by mxf_decrypt_triplet(), and mxf_read_packet().

static int mxf_match_uid ( const UID  key,
const UID  uid,
int  len 
)
static

Definition at line 629 of file mxfdec.c.

Referenced by mxf_get_codec_ul().

static int mxf_parse_structural_metadata ( MXFContext mxf)
static

Definition at line 675 of file mxfdec.c.

Referenced by mxf_read_header().

static int mxf_probe ( AVProbeData p)
static

Definition at line 1009 of file mxfdec.c.

static int mxf_read_close ( AVFormatContext s)
static

Definition at line 976 of file mxfdec.c.

static int mxf_read_content_storage ( void arg,
AVIOContext pb,
int  tag,
int  size,
UID  uid 
)
static

Definition at line 401 of file mxfdec.c.

static int mxf_read_cryptographic_context ( void arg,
AVIOContext pb,
int  tag,
int  size,
UID  uid 
)
static

Definition at line 391 of file mxfdec.c.

static int mxf_read_generic_descriptor ( void arg,
AVIOContext pb,
int  tag,
int  size,
UID  uid 
)
static

Definition at line 562 of file mxfdec.c.

static int mxf_read_header ( AVFormatContext s,
AVFormatParameters ap 
)
static

Definition at line 930 of file mxfdec.c.

static int mxf_read_index_table_segment ( void arg,
AVIOContext pb,
int  tag,
int  size,
UID  uid 
)
static

Definition at line 530 of file mxfdec.c.

static int mxf_read_local_tags ( MXFContext mxf,
KLVPacket klv,
MXFMetadataReadFunc read_child,
int  ctx_size,
enum MXFMetadataSetType  type 
)
static

Definition at line 888 of file mxfdec.c.

Referenced by mxf_read_header().

static int mxf_read_material_package ( void arg,
AVIOContext pb,
int  tag,
int  size,
UID  uid 
)
static

Definition at line 441 of file mxfdec.c.

static int mxf_read_packet ( AVFormatContext s,
AVPacket pkt 
)
static

Definition at line 311 of file mxfdec.c.

static void mxf_read_pixel_layout ( AVIOContext pb,
MXFDescriptor descriptor 
)
static

Definition at line 543 of file mxfdec.c.

Referenced by mxf_read_generic_descriptor().

static int mxf_read_primer_pack ( void arg,
AVIOContext pb,
int  tag,
int  size,
UID  uid 
)
static

Definition at line 358 of file mxfdec.c.

static int mxf_read_seek ( AVFormatContext s,
int  stream_index,
int64_t  sample_time,
int  flags 
)
static

Definition at line 1027 of file mxfdec.c.

static int mxf_read_sequence ( void arg,
AVIOContext pb,
int  tag,
int  size,
UID  uid 
)
static

Definition at line 480 of file mxfdec.c.

static int mxf_read_source_clip ( void arg,
AVIOContext pb,
int  tag,
int  size,
UID  uid 
)
static

Definition at line 419 of file mxfdec.c.

static int mxf_read_source_package ( void arg,
AVIOContext pb,
int  tag,
int  size,
UID  uid 
)
static

Definition at line 504 of file mxfdec.c.

static int mxf_read_sync ( AVIOContext pb,
const uint8_t *  key,
unsigned  size 
)
static

Definition at line 181 of file mxfdec.c.

Referenced by klv_read_packet(), and mxf_read_header().

static int mxf_read_track ( void arg,
AVIOContext pb,
int  tag,
int  size,
UID  uid 
)
static

Definition at line 459 of file mxfdec.c.

static void* mxf_resolve_strong_ref ( MXFContext mxf,
UID strong_ref,
enum MXFMetadataSetType  type 
)
static

Definition at line 649 of file mxfdec.c.

Referenced by mxf_parse_structural_metadata().

Variable Documentation

AVInputFormat ff_mxf_demuxer
Initial value:
{
.name = "mxf",
.long_name = NULL_IF_CONFIG_SMALL("Material eXchange Format"),
.priv_data_size = sizeof(MXFContext),
}

Definition at line 1042 of file mxfdec.c.

const uint8_t mxf_crypto_source_container_ul[] = { 0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x09,0x06,0x01,0x01,0x02,0x02,0x00,0x00,0x00 }
static

Definition at line 159 of file mxfdec.c.

Referenced by mxf_read_cryptographic_context().

const uint8_t mxf_encrypted_essence_container[] = { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x07,0x0d,0x01,0x03,0x01,0x02,0x0b,0x01,0x00 }
static

Definition at line 161 of file mxfdec.c.

Referenced by mxf_parse_structural_metadata().

const uint8_t mxf_encrypted_triplet_key[] = { 0x06,0x0e,0x2b,0x34,0x02,0x04,0x01,0x07,0x0d,0x01,0x03,0x01,0x02,0x7e,0x01,0x00 }
static

Definition at line 160 of file mxfdec.c.

Referenced by mxf_read_header(), and mxf_read_packet().

const MXFCodecUL mxf_essence_container_uls[]
static
Initial value:
{
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x02,0x0D,0x01,0x03,0x01,0x02,0x04,0x60,0x01 }, 14, CODEC_ID_MPEG2VIDEO },
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x41,0x01 }, 14, CODEC_ID_DVVIDEO },
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x06,0x01,0x00 }, 14, CODEC_ID_PCM_S16LE },
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x02,0x0D,0x01,0x03,0x01,0x02,0x04,0x40,0x01 }, 14, CODEC_ID_MP2 },
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x01,0x01 }, 14, CODEC_ID_PCM_S16LE },
{ { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, 0, CODEC_ID_NONE },
}

Definition at line 664 of file mxfdec.c.

const uint8_t mxf_essence_element_key[] = { 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01 }
static
const uint8_t mxf_header_partition_pack_key[] = { 0x06,0x0e,0x2b,0x34,0x02,0x05,0x01,0x01,0x0d,0x01,0x02,0x01,0x01,0x02 }
static

Definition at line 155 of file mxfdec.c.

Referenced by mxf_probe(), and mxf_read_header().

const uint8_t mxf_klv_key[] = { 0x06,0x0e,0x2b,0x34 }
static

Definition at line 157 of file mxfdec.c.

Referenced by klv_read_packet().

const MXFMetadataReadTableEntry mxf_metadata_read_table[]
static
Initial value:
{
{ { 0x06,0x0E,0x2B,0x34,0x02,0x05,0x01,0x01,0x0d,0x01,0x02,0x01,0x01,0x05,0x01,0x00 }, mxf_read_primer_pack },
{ { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x18,0x00 }, mxf_read_content_storage, 0, AnyType },
{ { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x37,0x00 }, mxf_read_source_package, sizeof(MXFPackage), SourcePackage },
{ { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x36,0x00 }, mxf_read_material_package, sizeof(MXFPackage), MaterialPackage },
{ { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x0F,0x00 }, mxf_read_sequence, sizeof(MXFSequence), Sequence },
{ { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x11,0x00 }, mxf_read_source_clip, sizeof(MXFStructuralComponent), SourceClip },
{ { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x44,0x00 }, mxf_read_generic_descriptor, sizeof(MXFDescriptor), MultipleDescriptor },
{ { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x42,0x00 }, mxf_read_generic_descriptor, sizeof(MXFDescriptor), Descriptor },
{ { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x28,0x00 }, mxf_read_generic_descriptor, sizeof(MXFDescriptor), Descriptor },
{ { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x29,0x00 }, mxf_read_generic_descriptor, sizeof(MXFDescriptor), Descriptor },
{ { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x51,0x00 }, mxf_read_generic_descriptor, sizeof(MXFDescriptor), Descriptor },
{ { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x48,0x00 }, mxf_read_generic_descriptor, sizeof(MXFDescriptor), Descriptor },
{ { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x47,0x00 }, mxf_read_generic_descriptor, sizeof(MXFDescriptor), Descriptor },
{ { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x3A,0x00 }, mxf_read_track, sizeof(MXFTrack), Track },
{ { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x3B,0x00 }, mxf_read_track, sizeof(MXFTrack), Track },
{ { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x04,0x01,0x02,0x02,0x00,0x00 }, mxf_read_cryptographic_context, sizeof(MXFCryptoContext), CryptoContext },
{ { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x02,0x01,0x01,0x10,0x01,0x00 }, mxf_read_index_table_segment, sizeof(MXFIndexTableSegment), IndexTableSegment },
{ { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, NULL, 0, AnyType },
}

Definition at line 867 of file mxfdec.c.

const uint8_t mxf_sony_mpeg4_extradata[] = { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x01,0x0e,0x06,0x06,0x02,0x02,0x01,0x00,0x00 }
static

Definition at line 162 of file mxfdec.c.

Referenced by mxf_read_generic_descriptor().