c69968b4 |
/*
* MXF |
406792e7 |
* Copyright (c) 2006 SmartJog S.A., Baptiste Coudurier <baptiste dot coudurier at smartjog dot com> |
c69968b4 |
*
* 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
*/ |
98790382 |
#ifndef AVFORMAT_MXF_H
#define AVFORMAT_MXF_H |
c69968b4 |
|
41f7e064 |
#include "avformat.h" |
251bf875 |
#include "libavcodec/avcodec.h"
#include <stdint.h> |
c69968b4 |
typedef uint8_t UID[16];
enum MXFMetadataSetType {
AnyType,
MaterialPackage,
SourcePackage,
SourceClip,
TimecodeComponent, |
90bf1e30 |
PulldownComponent, |
c69968b4 |
Sequence,
MultipleDescriptor,
Descriptor,
Track,
CryptoContext,
Preface,
Identification,
ContentStorage,
SubDescriptor, |
15cdff85 |
IndexTableSegment, |
6e4668b8 |
EssenceContainerData, |
6986662b |
TypeBottom,// add metadata type before this |
e5d217f0 |
EssenceGroup, |
43cafb95 |
TaggedValue, |
c69968b4 |
};
|
84b9b4aa |
enum MXFFrameLayout {
FullFrame = 0, |
70ca163b |
SeparateFields, |
84b9b4aa |
OneField, |
70ca163b |
MixedFields, |
84b9b4aa |
SegmentedFrame,
};
|
e4cbf752 |
typedef struct KLVPacket { |
c69968b4 |
UID key; |
bc5c918e |
int64_t offset; |
c69968b4 |
uint64_t length;
} KLVPacket;
|
e4cbf752 |
typedef struct MXFCodecUL { |
c69968b4 |
UID uid;
unsigned matching_len; |
5ac4d768 |
int id; |
c69968b4 |
} MXFCodecUL;
|
41f7e064 |
typedef struct {
struct AVRational time_base;
int samples_per_frame[6];
} MXFSamplesPerFrame;
|
5ac4d768 |
extern const MXFCodecUL ff_mxf_data_definition_uls[]; |
c69968b4 |
extern const MXFCodecUL ff_mxf_codec_uls[]; |
34210e8d |
extern const MXFCodecUL ff_mxf_pixel_format_uls[]; |
35b33f1a |
extern const MXFCodecUL ff_mxf_codec_tag_uls[]; |
c69968b4 |
|
716d413c |
int ff_mxf_decode_pixel_layout(const char pixel_layout[16], enum AVPixelFormat *pix_fmt); |
41f7e064 |
const MXFSamplesPerFrame *ff_mxf_get_samples_per_frame(AVFormatContext *s, AVRational time_base); |
11fdc4d4 |
|
304089ac |
#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] \
|
6920fb2b |
#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 ", \ |
8b42b222 |
s, UID_ARG(x)); \ |
6920fb2b |
av_log(pc, AV_LOG_INFO, \
"%s " \
"%02x.%02x.%02x.%02x." \
"%02x.%02x.%02x.%02x." \
"%02x.%02x.%02x.%02x." \
"%02x.%02x.%02x.%02x\n", \ |
8b42b222 |
s, UID_ARG(x)) |
6920fb2b |
#else |
3d65570f |
#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) |
6920fb2b |
#endif |
c69968b4 |
|
98790382 |
#endif /* AVFORMAT_MXF_H */ |