1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * MXF
3cabdff1aSopenharmony_ci * Copyright (c) 2006 SmartJog S.A., Baptiste Coudurier <baptiste dot coudurier at smartjog dot com>
4cabdff1aSopenharmony_ci *
5cabdff1aSopenharmony_ci * This file is part of FFmpeg.
6cabdff1aSopenharmony_ci *
7cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or
8cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
9cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either
10cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version.
11cabdff1aSopenharmony_ci *
12cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
13cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
14cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15cabdff1aSopenharmony_ci * Lesser General Public License for more details.
16cabdff1aSopenharmony_ci *
17cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
18cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software
19cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20cabdff1aSopenharmony_ci */
21cabdff1aSopenharmony_ci#ifndef AVFORMAT_MXF_H
22cabdff1aSopenharmony_ci#define AVFORMAT_MXF_H
23cabdff1aSopenharmony_ci
24cabdff1aSopenharmony_ci#include <stdint.h>
25cabdff1aSopenharmony_ci#include "libavutil/log.h"
26cabdff1aSopenharmony_ci#include "libavutil/pixfmt.h"
27cabdff1aSopenharmony_ci#include "libavutil/rational.h"
28cabdff1aSopenharmony_ci#include "libavutil/uuid.h"
29cabdff1aSopenharmony_ci
30cabdff1aSopenharmony_citypedef AVUUID UID;
31cabdff1aSopenharmony_ci
32cabdff1aSopenharmony_cienum MXFMetadataSetType {
33cabdff1aSopenharmony_ci    AnyType,
34cabdff1aSopenharmony_ci    MaterialPackage,
35cabdff1aSopenharmony_ci    SourcePackage,
36cabdff1aSopenharmony_ci    SourceClip,
37cabdff1aSopenharmony_ci    TimecodeComponent,
38cabdff1aSopenharmony_ci    PulldownComponent,
39cabdff1aSopenharmony_ci    Sequence,
40cabdff1aSopenharmony_ci    MultipleDescriptor,
41cabdff1aSopenharmony_ci    Descriptor,
42cabdff1aSopenharmony_ci    Track,
43cabdff1aSopenharmony_ci    CryptoContext,
44cabdff1aSopenharmony_ci    Preface,
45cabdff1aSopenharmony_ci    Identification,
46cabdff1aSopenharmony_ci    ContentStorage,
47cabdff1aSopenharmony_ci    SubDescriptor,
48cabdff1aSopenharmony_ci    IndexTableSegment,
49cabdff1aSopenharmony_ci    EssenceContainerData,
50cabdff1aSopenharmony_ci    EssenceGroup,
51cabdff1aSopenharmony_ci    TaggedValue,
52cabdff1aSopenharmony_ci    TapeDescriptor,
53cabdff1aSopenharmony_ci    AVCSubDescriptor,
54cabdff1aSopenharmony_ci    AudioChannelLabelSubDescriptor,
55cabdff1aSopenharmony_ci    SoundfieldGroupLabelSubDescriptor,
56cabdff1aSopenharmony_ci    GroupOfSoundfieldGroupsLabelSubDescriptor,
57cabdff1aSopenharmony_ci};
58cabdff1aSopenharmony_ci
59cabdff1aSopenharmony_cienum MXFFrameLayout {
60cabdff1aSopenharmony_ci    FullFrame = 0,
61cabdff1aSopenharmony_ci    SeparateFields,
62cabdff1aSopenharmony_ci    OneField,
63cabdff1aSopenharmony_ci    MixedFields,
64cabdff1aSopenharmony_ci    SegmentedFrame,
65cabdff1aSopenharmony_ci};
66cabdff1aSopenharmony_ci
67cabdff1aSopenharmony_citypedef struct MXFContentPackageRate {
68cabdff1aSopenharmony_ci    int rate;
69cabdff1aSopenharmony_ci    AVRational tb;
70cabdff1aSopenharmony_ci} MXFContentPackageRate;
71cabdff1aSopenharmony_ci
72cabdff1aSopenharmony_citypedef struct KLVPacket {
73cabdff1aSopenharmony_ci    UID key;
74cabdff1aSopenharmony_ci    int64_t offset;
75cabdff1aSopenharmony_ci    uint64_t length;
76cabdff1aSopenharmony_ci    int64_t next_klv;
77cabdff1aSopenharmony_ci} KLVPacket;
78cabdff1aSopenharmony_ci
79cabdff1aSopenharmony_citypedef enum {
80cabdff1aSopenharmony_ci    NormalWrap = 0,
81cabdff1aSopenharmony_ci    D10D11Wrap,
82cabdff1aSopenharmony_ci    RawAWrap,
83cabdff1aSopenharmony_ci    RawVWrap,
84cabdff1aSopenharmony_ci    J2KWrap
85cabdff1aSopenharmony_ci} MXFWrappingIndicatorType;
86cabdff1aSopenharmony_ci
87cabdff1aSopenharmony_citypedef struct MXFLocalTagPair {
88cabdff1aSopenharmony_ci    int local_tag;
89cabdff1aSopenharmony_ci    UID uid;
90cabdff1aSopenharmony_ci} MXFLocalTagPair;
91cabdff1aSopenharmony_ci
92cabdff1aSopenharmony_ciextern const uint8_t ff_mxf_random_index_pack_key[16];
93cabdff1aSopenharmony_ci
94cabdff1aSopenharmony_ci#define FF_MXF_MasteringDisplay_PREFIX                  0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x0e,0x04,0x20,0x04,0x01,0x01
95cabdff1aSopenharmony_ci#define FF_MXF_MasteringDisplayPrimaries                { FF_MXF_MasteringDisplay_PREFIX,0x01,0x00,0x00 }
96cabdff1aSopenharmony_ci#define FF_MXF_MasteringDisplayWhitePointChromaticity   { FF_MXF_MasteringDisplay_PREFIX,0x02,0x00,0x00 }
97cabdff1aSopenharmony_ci#define FF_MXF_MasteringDisplayMaximumLuminance         { FF_MXF_MasteringDisplay_PREFIX,0x03,0x00,0x00 }
98cabdff1aSopenharmony_ci#define FF_MXF_MasteringDisplayMinimumLuminance         { FF_MXF_MasteringDisplay_PREFIX,0x04,0x00,0x00 }
99cabdff1aSopenharmony_ci
100cabdff1aSopenharmony_ci#define FF_MXF_MASTERING_CHROMA_DEN 50000
101cabdff1aSopenharmony_ci#define FF_MXF_MASTERING_LUMA_DEN   10000
102cabdff1aSopenharmony_ci
103cabdff1aSopenharmony_citypedef struct MXFCodecUL {
104cabdff1aSopenharmony_ci    UID uid;
105cabdff1aSopenharmony_ci    unsigned matching_len;
106cabdff1aSopenharmony_ci    int id;
107cabdff1aSopenharmony_ci    const char *desc;
108cabdff1aSopenharmony_ci    unsigned wrapping_indicator_pos;
109cabdff1aSopenharmony_ci    MXFWrappingIndicatorType wrapping_indicator_type;
110cabdff1aSopenharmony_ci} MXFCodecUL;
111cabdff1aSopenharmony_ci
112cabdff1aSopenharmony_ciextern const MXFCodecUL ff_mxf_data_definition_uls[];
113cabdff1aSopenharmony_ciextern const MXFCodecUL ff_mxf_codec_uls[];
114cabdff1aSopenharmony_ciextern const MXFCodecUL ff_mxf_pixel_format_uls[];
115cabdff1aSopenharmony_ciextern const MXFCodecUL ff_mxf_codec_tag_uls[];
116cabdff1aSopenharmony_ciextern const MXFCodecUL ff_mxf_color_primaries_uls[];
117cabdff1aSopenharmony_ciextern const MXFCodecUL ff_mxf_color_trc_uls[];
118cabdff1aSopenharmony_ciextern const MXFCodecUL ff_mxf_color_space_uls[];
119cabdff1aSopenharmony_ci
120cabdff1aSopenharmony_ciint ff_mxf_decode_pixel_layout(const char pixel_layout[16], enum AVPixelFormat *pix_fmt);
121cabdff1aSopenharmony_ciint ff_mxf_get_content_package_rate(AVRational time_base);
122cabdff1aSopenharmony_ci
123cabdff1aSopenharmony_ci
124cabdff1aSopenharmony_ci#define PRIxUID                             \
125cabdff1aSopenharmony_ci    "%02x.%02x.%02x.%02x."                  \
126cabdff1aSopenharmony_ci    "%02x.%02x.%02x.%02x."                  \
127cabdff1aSopenharmony_ci    "%02x.%02x.%02x.%02x."                  \
128cabdff1aSopenharmony_ci    "%02x.%02x.%02x.%02x"
129cabdff1aSopenharmony_ci
130cabdff1aSopenharmony_ci#define UID_ARG(x) \
131cabdff1aSopenharmony_ci    (x)[0],  (x)[1],  (x)[2],  (x)[3],      \
132cabdff1aSopenharmony_ci    (x)[4],  (x)[5],  (x)[6],  (x)[7],      \
133cabdff1aSopenharmony_ci    (x)[8],  (x)[9],  (x)[10], (x)[11],     \
134cabdff1aSopenharmony_ci    (x)[12], (x)[13], (x)[14], (x)[15]      \
135cabdff1aSopenharmony_ci
136cabdff1aSopenharmony_ci#ifdef DEBUG
137cabdff1aSopenharmony_ci#define PRINT_KEY(pc, s, x)                         \
138cabdff1aSopenharmony_ci    av_log(pc, AV_LOG_VERBOSE,                      \
139cabdff1aSopenharmony_ci           "%s "                                    \
140cabdff1aSopenharmony_ci           "0x%02x,0x%02x,0x%02x,0x%02x,"           \
141cabdff1aSopenharmony_ci           "0x%02x,0x%02x,0x%02x,0x%02x,"           \
142cabdff1aSopenharmony_ci           "0x%02x,0x%02x,0x%02x,0x%02x,"           \
143cabdff1aSopenharmony_ci           "0x%02x,0x%02x,0x%02x,0x%02x ",          \
144cabdff1aSopenharmony_ci            s, UID_ARG(x));                         \
145cabdff1aSopenharmony_ci    av_log(pc, AV_LOG_INFO,                         \
146cabdff1aSopenharmony_ci           "%s "                                    \
147cabdff1aSopenharmony_ci           "%02x.%02x.%02x.%02x."                   \
148cabdff1aSopenharmony_ci           "%02x.%02x.%02x.%02x."                   \
149cabdff1aSopenharmony_ci           "%02x.%02x.%02x.%02x."                   \
150cabdff1aSopenharmony_ci           "%02x.%02x.%02x.%02x\n",                 \
151cabdff1aSopenharmony_ci            s, UID_ARG(x))
152cabdff1aSopenharmony_ci#else
153cabdff1aSopenharmony_ci#define PRINT_KEY(pc, s, x) do { if(0)              \
154cabdff1aSopenharmony_ci    av_log(pc, AV_LOG_VERBOSE,                      \
155cabdff1aSopenharmony_ci           "%s "                                    \
156cabdff1aSopenharmony_ci           "0x%02x,0x%02x,0x%02x,0x%02x,"           \
157cabdff1aSopenharmony_ci           "0x%02x,0x%02x,0x%02x,0x%02x,"           \
158cabdff1aSopenharmony_ci           "0x%02x,0x%02x,0x%02x,0x%02x,"           \
159cabdff1aSopenharmony_ci           "0x%02x,0x%02x,0x%02x,0x%02x ",          \
160cabdff1aSopenharmony_ci            s, UID_ARG(x));                         \
161cabdff1aSopenharmony_ci    }while(0)
162cabdff1aSopenharmony_ci#endif
163cabdff1aSopenharmony_ci
164cabdff1aSopenharmony_ci#endif /* AVFORMAT_MXF_H */
165