blob: f3db1f939bbd7ef96f35c6ee656023d3a447a7ad
1 | /* |
2 | * MXF |
3 | * Copyright (c) 2006 SmartJog S.A., Baptiste Coudurier <baptiste dot coudurier at smartjog dot com> |
4 | * |
5 | * This file is part of FFmpeg. |
6 | * |
7 | * FFmpeg is free software; you can redistribute it and/or |
8 | * modify it under the terms of the GNU Lesser General Public |
9 | * License as published by the Free Software Foundation; either |
10 | * version 2.1 of the License, or (at your option) any later version. |
11 | * |
12 | * FFmpeg is distributed in the hope that it will be useful, |
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
15 | * Lesser General Public License for more details. |
16 | * |
17 | * You should have received a copy of the GNU Lesser General Public |
18 | * License along with FFmpeg; if not, write to the Free Software |
19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
20 | */ |
21 | #ifndef AVFORMAT_MXF_H |
22 | #define AVFORMAT_MXF_H |
23 | |
24 | #include "avformat.h" |
25 | #include "libavcodec/avcodec.h" |
26 | #include <stdint.h> |
27 | |
28 | typedef uint8_t UID[16]; |
29 | |
30 | enum MXFMetadataSetType { |
31 | AnyType, |
32 | MaterialPackage, |
33 | SourcePackage, |
34 | SourceClip, |
35 | TimecodeComponent, |
36 | PulldownComponent, |
37 | Sequence, |
38 | MultipleDescriptor, |
39 | Descriptor, |
40 | Track, |
41 | CryptoContext, |
42 | Preface, |
43 | Identification, |
44 | ContentStorage, |
45 | SubDescriptor, |
46 | IndexTableSegment, |
47 | EssenceContainerData, |
48 | TypeBottom,// add metadata type before this |
49 | EssenceGroup, |
50 | TaggedValue, |
51 | }; |
52 | |
53 | enum MXFFrameLayout { |
54 | FullFrame = 0, |
55 | SeparateFields, |
56 | OneField, |
57 | MixedFields, |
58 | SegmentedFrame, |
59 | }; |
60 | |
61 | typedef struct KLVPacket { |
62 | UID key; |
63 | int64_t offset; |
64 | uint64_t length; |
65 | } KLVPacket; |
66 | |
67 | typedef struct MXFCodecUL { |
68 | UID uid; |
69 | unsigned matching_len; |
70 | int id; |
71 | } MXFCodecUL; |
72 | |
73 | typedef struct { |
74 | struct AVRational time_base; |
75 | int samples_per_frame[6]; |
76 | } MXFSamplesPerFrame; |
77 | |
78 | extern const MXFCodecUL ff_mxf_data_definition_uls[]; |
79 | extern const MXFCodecUL ff_mxf_codec_uls[]; |
80 | extern const MXFCodecUL ff_mxf_pixel_format_uls[]; |
81 | extern const MXFCodecUL ff_mxf_codec_tag_uls[]; |
82 | |
83 | int ff_mxf_decode_pixel_layout(const char pixel_layout[16], enum AVPixelFormat *pix_fmt); |
84 | const MXFSamplesPerFrame *ff_mxf_get_samples_per_frame(AVFormatContext *s, AVRational time_base); |
85 | |
86 | #define PRIxUID \ |
87 | "%02x.%02x.%02x.%02x." \ |
88 | "%02x.%02x.%02x.%02x." \ |
89 | "%02x.%02x.%02x.%02x." \ |
90 | "%02x.%02x.%02x.%02x" |
91 | |
92 | #define UID_ARG(x) \ |
93 | (x)[0], (x)[1], (x)[2], (x)[3], \ |
94 | (x)[4], (x)[5], (x)[6], (x)[7], \ |
95 | (x)[8], (x)[9], (x)[10], (x)[11], \ |
96 | (x)[12], (x)[13], (x)[14], (x)[15] \ |
97 | |
98 | #ifdef DEBUG |
99 | #define PRINT_KEY(pc, s, x) \ |
100 | av_log(pc, AV_LOG_VERBOSE, \ |
101 | "%s " \ |
102 | "0x%02x,0x%02x,0x%02x,0x%02x," \ |
103 | "0x%02x,0x%02x,0x%02x,0x%02x," \ |
104 | "0x%02x,0x%02x,0x%02x,0x%02x," \ |
105 | "0x%02x,0x%02x,0x%02x,0x%02x ", \ |
106 | s, UID_ARG(x)); \ |
107 | av_log(pc, AV_LOG_INFO, \ |
108 | "%s " \ |
109 | "%02x.%02x.%02x.%02x." \ |
110 | "%02x.%02x.%02x.%02x." \ |
111 | "%02x.%02x.%02x.%02x." \ |
112 | "%02x.%02x.%02x.%02x\n", \ |
113 | s, UID_ARG(x)) |
114 | #else |
115 | #define PRINT_KEY(pc, s, x) do { if(0) \ |
116 | av_log(pc, AV_LOG_VERBOSE, \ |
117 | "%s " \ |
118 | "0x%02x,0x%02x,0x%02x,0x%02x," \ |
119 | "0x%02x,0x%02x,0x%02x,0x%02x," \ |
120 | "0x%02x,0x%02x,0x%02x,0x%02x," \ |
121 | "0x%02x,0x%02x,0x%02x,0x%02x ", \ |
122 | s, UID_ARG(x)); \ |
123 | }while(0) |
124 | #endif |
125 | |
126 | #endif /* AVFORMAT_MXF_H */ |
127 |