1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
/*
* 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 AVFORMAT_MXF_H
#define AVFORMAT_MXF_H
#include "avformat.h"
#include "libavcodec/avcodec.h"
#include <stdint.h>
typedef uint8_t UID[16];
enum MXFMetadataSetType {
AnyType,
MaterialPackage,
SourcePackage,
SourceClip,
TimecodeComponent,
PulldownComponent,
Sequence,
MultipleDescriptor,
Descriptor,
Track,
CryptoContext,
Preface,
Identification,
ContentStorage,
SubDescriptor,
IndexTableSegment,
EssenceContainerData,
TypeBottom,// add metadata type before this
EssenceGroup,
TaggedValue,
};
enum MXFFrameLayout {
FullFrame = 0,
SeparateFields,
OneField,
MixedFields,
SegmentedFrame,
};
typedef struct KLVPacket {
UID key;
int64_t offset;
uint64_t length;
} KLVPacket;
typedef struct MXFCodecUL {
UID uid;
unsigned matching_len;
int id;
} MXFCodecUL;
typedef struct {
struct AVRational time_base;
int samples_per_frame[6];
} MXFSamplesPerFrame;
extern const MXFCodecUL ff_mxf_data_definition_uls[];
extern const MXFCodecUL ff_mxf_codec_uls[];
extern const MXFCodecUL ff_mxf_pixel_format_uls[];
extern const MXFCodecUL ff_mxf_codec_tag_uls[];
int ff_mxf_decode_pixel_layout(const char pixel_layout[16], enum AVPixelFormat *pix_fmt);
const MXFSamplesPerFrame *ff_mxf_get_samples_per_frame(AVFormatContext *s, AVRational time_base);
#define PRIxUID \
"%02x.%02x.%02x.%02x." \
"%02x.%02x.%02x.%02x." \
"%02x.%02x.%02x.%02x." \
"%02x.%02x.%02x.%02x"
#define UID_ARG(x) \
(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] \
#ifdef DEBUG
#define PRINT_KEY(pc, s, x) \
av_log(pc, AV_LOG_VERBOSE, \
"%s " \
"0x%02x,0x%02x,0x%02x,0x%02x," \
"0x%02x,0x%02x,0x%02x,0x%02x," \
"0x%02x,0x%02x,0x%02x,0x%02x," \
"0x%02x,0x%02x,0x%02x,0x%02x ", \
s, UID_ARG(x)); \
av_log(pc, AV_LOG_INFO, \
"%s " \
"%02x.%02x.%02x.%02x." \
"%02x.%02x.%02x.%02x." \
"%02x.%02x.%02x.%02x." \
"%02x.%02x.%02x.%02x\n", \
s, UID_ARG(x))
#else
#define PRINT_KEY(pc, s, x) do { if(0) \
av_log(pc, AV_LOG_VERBOSE, \
"%s " \
"0x%02x,0x%02x,0x%02x,0x%02x," \
"0x%02x,0x%02x,0x%02x,0x%02x," \
"0x%02x,0x%02x,0x%02x,0x%02x," \
"0x%02x,0x%02x,0x%02x,0x%02x ", \
s, UID_ARG(x)); \
}while(0)
#endif
#endif /* AVFORMAT_MXF_H */
|