mirror of https://github.com/FFmpeg/FFmpeg.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
4.5 KiB
154 lines
4.5 KiB
/* |
|
* 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, |
|
EssenceGroup, |
|
TaggedValue, |
|
TapeDescriptor, |
|
AVCSubDescriptor, |
|
}; |
|
|
|
enum MXFFrameLayout { |
|
FullFrame = 0, |
|
SeparateFields, |
|
OneField, |
|
MixedFields, |
|
SegmentedFrame, |
|
}; |
|
|
|
typedef struct MXFContentPackageRate { |
|
int rate; |
|
AVRational tb; |
|
} MXFContentPackageRate; |
|
|
|
typedef struct KLVPacket { |
|
UID key; |
|
int64_t offset; |
|
uint64_t length; |
|
int64_t next_klv; |
|
} KLVPacket; |
|
|
|
typedef enum { |
|
NormalWrap = 0, |
|
D10D11Wrap, |
|
RawAWrap, |
|
RawVWrap |
|
} MXFWrappingIndicatorType; |
|
|
|
typedef struct MXFLocalTagPair { |
|
int local_tag; |
|
UID uid; |
|
} MXFLocalTagPair; |
|
|
|
extern const uint8_t ff_mxf_mastering_display_prefix[13]; |
|
extern const uint8_t ff_mxf_random_index_pack_key[16]; |
|
extern const MXFLocalTagPair ff_mxf_mastering_display_local_tags[4]; |
|
|
|
#define FF_MXF_MASTERING_CHROMA_DEN 50000 |
|
#define FF_MXF_MASTERING_LUMA_DEN 10000 |
|
|
|
typedef struct MXFCodecUL { |
|
UID uid; |
|
unsigned matching_len; |
|
int id; |
|
const char *desc; |
|
unsigned wrapping_indicator_pos; |
|
MXFWrappingIndicatorType wrapping_indicator_type; |
|
} MXFCodecUL; |
|
|
|
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[]; |
|
extern const MXFCodecUL ff_mxf_color_primaries_uls[]; |
|
extern const MXFCodecUL ff_mxf_color_trc_uls[]; |
|
extern const MXFCodecUL ff_mxf_color_space_uls[]; |
|
|
|
int ff_mxf_decode_pixel_layout(const char pixel_layout[16], enum AVPixelFormat *pix_fmt); |
|
int ff_mxf_get_content_package_rate(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 */
|
|
|