mxf.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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. #include "avformat.h"
  24. #include "libavcodec/avcodec.h"
  25. #include <stdint.h>
  26. typedef uint8_t UID[16];
  27. enum MXFMetadataSetType {
  28. AnyType,
  29. MaterialPackage,
  30. SourcePackage,
  31. SourceClip,
  32. TimecodeComponent,
  33. PulldownComponent,
  34. Sequence,
  35. MultipleDescriptor,
  36. Descriptor,
  37. Track,
  38. CryptoContext,
  39. Preface,
  40. Identification,
  41. ContentStorage,
  42. SubDescriptor,
  43. IndexTableSegment,
  44. EssenceContainerData,
  45. EssenceGroup,
  46. TaggedValue,
  47. TapeDescriptor,
  48. AVCSubDescriptor,
  49. };
  50. enum MXFFrameLayout {
  51. FullFrame = 0,
  52. SeparateFields,
  53. OneField,
  54. MixedFields,
  55. SegmentedFrame,
  56. };
  57. typedef struct MXFContentPackageRate {
  58. int rate;
  59. AVRational tb;
  60. } MXFContentPackageRate;
  61. typedef struct KLVPacket {
  62. UID key;
  63. int64_t offset;
  64. uint64_t length;
  65. int64_t next_klv;
  66. } KLVPacket;
  67. typedef enum {
  68. NormalWrap = 0,
  69. D10D11Wrap,
  70. RawAWrap,
  71. RawVWrap
  72. } MXFWrappingIndicatorType;
  73. typedef struct MXFCodecUL {
  74. UID uid;
  75. unsigned matching_len;
  76. int id;
  77. const char *desc;
  78. unsigned wrapping_indicator_pos;
  79. MXFWrappingIndicatorType wrapping_indicator_type;
  80. } MXFCodecUL;
  81. extern const MXFCodecUL ff_mxf_data_definition_uls[];
  82. extern const MXFCodecUL ff_mxf_codec_uls[];
  83. extern const MXFCodecUL ff_mxf_pixel_format_uls[];
  84. extern const MXFCodecUL ff_mxf_codec_tag_uls[];
  85. extern const MXFCodecUL ff_mxf_color_primaries_uls[];
  86. extern const MXFCodecUL ff_mxf_color_trc_uls[];
  87. extern const MXFCodecUL ff_mxf_color_space_uls[];
  88. int ff_mxf_decode_pixel_layout(const char pixel_layout[16], enum AVPixelFormat *pix_fmt);
  89. int ff_mxf_get_content_package_rate(AVRational time_base);
  90. #define PRIxUID \
  91. "%02x.%02x.%02x.%02x." \
  92. "%02x.%02x.%02x.%02x." \
  93. "%02x.%02x.%02x.%02x." \
  94. "%02x.%02x.%02x.%02x"
  95. #define UID_ARG(x) \
  96. (x)[0], (x)[1], (x)[2], (x)[3], \
  97. (x)[4], (x)[5], (x)[6], (x)[7], \
  98. (x)[8], (x)[9], (x)[10], (x)[11], \
  99. (x)[12], (x)[13], (x)[14], (x)[15] \
  100. #ifdef DEBUG
  101. #define PRINT_KEY(pc, s, x) \
  102. av_log(pc, AV_LOG_VERBOSE, \
  103. "%s " \
  104. "0x%02x,0x%02x,0x%02x,0x%02x," \
  105. "0x%02x,0x%02x,0x%02x,0x%02x," \
  106. "0x%02x,0x%02x,0x%02x,0x%02x," \
  107. "0x%02x,0x%02x,0x%02x,0x%02x ", \
  108. s, UID_ARG(x)); \
  109. av_log(pc, AV_LOG_INFO, \
  110. "%s " \
  111. "%02x.%02x.%02x.%02x." \
  112. "%02x.%02x.%02x.%02x." \
  113. "%02x.%02x.%02x.%02x." \
  114. "%02x.%02x.%02x.%02x\n", \
  115. s, UID_ARG(x))
  116. #else
  117. #define PRINT_KEY(pc, s, x) do { if(0) \
  118. av_log(pc, AV_LOG_VERBOSE, \
  119. "%s " \
  120. "0x%02x,0x%02x,0x%02x,0x%02x," \
  121. "0x%02x,0x%02x,0x%02x,0x%02x," \
  122. "0x%02x,0x%02x,0x%02x,0x%02x," \
  123. "0x%02x,0x%02x,0x%02x,0x%02x ", \
  124. s, UID_ARG(x)); \
  125. }while(0)
  126. #endif
  127. #endif /* AVFORMAT_MXF_H */