yading@11: /* yading@11: * MXF yading@11: * Copyright (c) 2006 SmartJog S.A., Baptiste Coudurier yading@11: * yading@11: * This file is part of FFmpeg. yading@11: * yading@11: * FFmpeg is free software; you can redistribute it and/or yading@11: * modify it under the terms of the GNU Lesser General Public yading@11: * License as published by the Free Software Foundation; either yading@11: * version 2.1 of the License, or (at your option) any later version. yading@11: * yading@11: * FFmpeg is distributed in the hope that it will be useful, yading@11: * but WITHOUT ANY WARRANTY; without even the implied warranty of yading@11: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yading@11: * Lesser General Public License for more details. yading@11: * yading@11: * You should have received a copy of the GNU Lesser General Public yading@11: * License along with FFmpeg; if not, write to the Free Software yading@11: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA yading@11: */ yading@11: #ifndef AVFORMAT_MXF_H yading@11: #define AVFORMAT_MXF_H yading@11: yading@11: #include "avformat.h" yading@11: #include "libavcodec/avcodec.h" yading@11: #include yading@11: yading@11: typedef uint8_t UID[16]; yading@11: yading@11: enum MXFMetadataSetType { yading@11: AnyType, yading@11: MaterialPackage, yading@11: SourcePackage, yading@11: SourceClip, yading@11: TimecodeComponent, yading@11: Sequence, yading@11: MultipleDescriptor, yading@11: Descriptor, yading@11: Track, yading@11: CryptoContext, yading@11: Preface, yading@11: Identification, yading@11: ContentStorage, yading@11: SubDescriptor, yading@11: IndexTableSegment, yading@11: EssenceContainerData, yading@11: TypeBottom,// add metadata type before this yading@11: }; yading@11: yading@11: enum MXFFrameLayout { yading@11: FullFrame = 0, yading@11: SeparateFields, yading@11: OneField, yading@11: MixedFields, yading@11: SegmentedFrame, yading@11: }; yading@11: yading@11: typedef struct KLVPacket { yading@11: UID key; yading@11: int64_t offset; yading@11: uint64_t length; yading@11: } KLVPacket; yading@11: yading@11: typedef struct MXFCodecUL { yading@11: UID uid; yading@11: unsigned matching_len; yading@11: int id; yading@11: } MXFCodecUL; yading@11: yading@11: typedef struct { yading@11: struct AVRational time_base; yading@11: int samples_per_frame[6]; yading@11: } MXFSamplesPerFrame; yading@11: yading@11: extern const MXFCodecUL ff_mxf_data_definition_uls[]; yading@11: extern const MXFCodecUL ff_mxf_codec_uls[]; yading@11: extern const MXFCodecUL ff_mxf_pixel_format_uls[]; yading@11: yading@11: int ff_mxf_decode_pixel_layout(const char pixel_layout[16], enum AVPixelFormat *pix_fmt); yading@11: const MXFSamplesPerFrame *ff_mxf_get_samples_per_frame(AVFormatContext *s, AVRational time_base); yading@11: yading@11: #define PRINT_KEY(pc, s, x) av_dlog(pc, "%s %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n", s, \ yading@11: (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]) yading@11: yading@11: #endif /* AVFORMAT_MXF_H */