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