MultipleDescriptor,
Descriptor,
Track,
- EssenceContainerData,
CryptoContext,
};
-typedef struct MXFCryptoContext {
+typedef struct {
UID uid;
enum MXFMetadataSetType type;
UID context_uid;
UID source_container_ul;
} MXFCryptoContext;
-typedef struct MXFStructuralComponent {
+typedef struct {
UID uid;
enum MXFMetadataSetType type;
UID source_package_uid;
int source_track_id;
} MXFStructuralComponent;
-typedef struct MXFSequence {
+typedef struct {
UID uid;
enum MXFMetadataSetType type;
UID data_definition_ul;
int64_t duration;
} MXFSequence;
-typedef struct MXFTrack {
+typedef struct {
UID uid;
enum MXFMetadataSetType type;
MXFSequence *sequence; /* mandatory, and only one */
AVRational edit_rate;
} MXFTrack;
-typedef struct MXFDescriptor {
+typedef struct {
UID uid;
enum MXFMetadataSetType type;
UID essence_container_ul;
int extradata_size;
} MXFDescriptor;
-typedef struct MXFPackage {
+typedef struct {
UID uid;
enum MXFMetadataSetType type;
UID package_uid;
UID descriptor_ref;
} MXFPackage;
-typedef struct MXFEssenceContainerData {
- UID uid;
- enum MXFMetadataSetType type;
- UID linked_package_uid;
-} MXFEssenceContainerData;
-
typedef struct {
UID uid;
enum MXFMetadataSetType type;
} MXFMetadataSet;
-typedef struct MXFContext {
+typedef struct {
UID *packages_refs;
int packages_count;
MXFMetadataSet **metadata_sets;
struct AVAES *aesc;
} MXFContext;
-typedef struct KLVPacket {
+typedef struct {
UID key;
offset_t offset;
uint64_t length;
Clip,
};
-typedef struct MXFCodecUL {
+typedef struct {
UID uid;
enum CodecID id;
enum MXFWrappingScheme wrapping;
} MXFCodecUL;
-typedef struct MXFDataDefinitionUL {
+typedef struct {
UID uid;
enum CodecType type;
} MXFDataDefinitionUL;
-typedef struct MXFMetadataReadTableEntry {
+typedef struct {
const UID key;
int (*read)();
int ctx_size;
// source klv key
klv_decode_ber_length(pb);
get_buffer(pb, klv->key, 16);
- if (!IS_KLV_KEY(klv, mxf_essence_element_key)) goto err_out;
+ if (!IS_KLV_KEY(klv, mxf_essence_element_key))
+ return -1;
index = mxf_get_stream_index(s, klv);
- if (index < 0) goto err_out;
+ if (index < 0)
+ return -1;
// source size
klv_decode_ber_length(pb);
orig_size = get_be64(pb);
- if (orig_size < plaintext_size) goto err_out;
+ if (orig_size < plaintext_size)
+ return -1;
// enc. code
size = klv_decode_ber_length(pb);
- if (size < 32 || size - 32 < orig_size) goto err_out;
+ if (size < 32 || size - 32 < orig_size)
+ return -1;
get_buffer(pb, ivec, 16);
get_buffer(pb, tmpbuf, 16);
if (mxf->aesc)
pkt->stream_index = index;
url_fskip(pb, end - url_ftell(pb));
return 0;
-
-err_out:
- url_fskip(pb, end - url_ftell(pb));
- return -1;
}
static int mxf_read_packet(AVFormatContext *s, AVPacket *pkt)
} else
av_get_packet(&s->pb, pkt, klv.length);
pkt->stream_index = index;
+ pkt->pos = klv.offset;
return 0;
} else
url_fskip(&s->pb, klv.length);
}
- return AVERROR_IO;
+ return AVERROR(EIO);
}
static int mxf_add_metadata_set(MXFContext *mxf, void *metadata_set)
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 }, CODEC_ID_PCM_S16LE, Frame }, /* Uncompressed */
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x7F,0x00,0x00,0x00 }, CODEC_ID_PCM_S16LE, Frame },
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x07,0x04,0x02,0x02,0x01,0x7E,0x00,0x00,0x00 }, CODEC_ID_PCM_S16BE, Frame }, /* From Omneon MXF file */
- { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x02,0x03,0x01,0x01,0x00 }, CODEC_ID_PCM_ALAW, Frame },
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x04,0x04,0x02,0x02,0x02,0x03,0x01,0x01,0x00 }, CODEC_ID_PCM_ALAW, Frame }, /* XDCAM Proxy C0023S01.mxf */
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x02,0x03,0x02,0x01,0x00 }, CODEC_ID_AC3, Frame },
{ { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x02,0x03,0x02,0x05,0x00 }, CODEC_ID_MP2, Frame }, /* MP2 or MP3 */