react-native-audio-api 0.8.0-nightly-5a12f24-20250901 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/RNAudioAPI.podspec +15 -6
  2. package/android/build.gradle +11 -2
  3. package/android/src/main/cpp/audioapi/CMakeLists.txt +24 -17
  4. package/android/src/main/cpp/audioapi/android/core/AudioDecoder.cpp +51 -21
  5. package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
  6. package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
  7. package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
  8. package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
  9. package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
  10. package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
  11. package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
  12. package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
  13. package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
  14. package/android/src/main/jniLibs/x86/libavformat.so +0 -0
  15. package/android/src/main/jniLibs/x86/libavutil.so +0 -0
  16. package/android/src/main/jniLibs/x86/libswresample.so +0 -0
  17. package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
  18. package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
  19. package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
  20. package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
  21. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +11 -0
  22. package/common/cpp/audioapi/HostObjects/StreamerNodeHostObject.h +30 -0
  23. package/common/cpp/audioapi/core/BaseAudioContext.cpp +9 -0
  24. package/common/cpp/audioapi/core/BaseAudioContext.h +2 -0
  25. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +299 -0
  26. package/common/cpp/audioapi/core/sources/StreamerNode.h +123 -0
  27. package/common/cpp/audioapi/core/utils/AudioDecoder.h +61 -0
  28. package/common/cpp/audioapi/core/utils/AudioNodeManager.cpp +14 -2
  29. package/common/cpp/audioapi/core/utils/AudioNodeManager.h +3 -0
  30. package/common/cpp/audioapi/external/arm64-v8a/libcrypto.a +0 -0
  31. package/common/cpp/audioapi/external/arm64-v8a/libssl.a +0 -0
  32. package/common/cpp/audioapi/external/armeabi-v7a/libcrypto.a +0 -0
  33. package/common/cpp/audioapi/external/armeabi-v7a/libssl.a +0 -0
  34. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/ac3_parser.h +36 -0
  35. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/adts_parser.h +37 -0
  36. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +2947 -0
  37. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avdct.h +88 -0
  38. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/bsf.h +332 -0
  39. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +367 -0
  40. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +134 -0
  41. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +681 -0
  42. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +248 -0
  43. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/d3d11va.h +109 -0
  44. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +359 -0
  45. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/dirac.h +135 -0
  46. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/dv_profile.h +82 -0
  47. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/dxva2.h +90 -0
  48. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/jni.h +67 -0
  49. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/mediacodec.h +103 -0
  50. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +907 -0
  51. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/qsv.h +109 -0
  52. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/vdpau.h +138 -0
  53. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +45 -0
  54. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version_major.h +55 -0
  55. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/videotoolbox.h +85 -0
  56. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/vorbis_parser.h +74 -0
  57. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +3004 -0
  58. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avio.h +831 -0
  59. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +47 -0
  60. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +50 -0
  61. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/adler32.h +63 -0
  62. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/aes.h +69 -0
  63. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/aes_ctr.h +99 -0
  64. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ambient_viewing_environment.h +72 -0
  65. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/attributes.h +175 -0
  66. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/audio_fifo.h +187 -0
  67. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +120 -0
  68. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avconfig.h +6 -0
  69. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avstring.h +428 -0
  70. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +364 -0
  71. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/base64.h +72 -0
  72. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/blowfish.h +82 -0
  73. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/bprint.h +254 -0
  74. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/bswap.h +105 -0
  75. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/buffer.h +322 -0
  76. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/camellia.h +70 -0
  77. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/cast5.h +80 -0
  78. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +762 -0
  79. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/common.h +589 -0
  80. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/container_fifo.h +130 -0
  81. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/cpu.h +150 -0
  82. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/crc.h +102 -0
  83. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +192 -0
  84. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/des.h +81 -0
  85. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/detection_bbox.h +108 -0
  86. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +242 -0
  87. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/display.h +109 -0
  88. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dovi_meta.h +396 -0
  89. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/downmix_info.h +115 -0
  90. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/encryption_info.h +205 -0
  91. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/error.h +129 -0
  92. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/eval.h +140 -0
  93. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/executor.h +67 -0
  94. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +5 -0
  95. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/fifo.h +242 -0
  96. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/file.h +62 -0
  97. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +282 -0
  98. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1163 -0
  99. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hash.h +264 -0
  100. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_metadata.h +376 -0
  101. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +292 -0
  102. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hmac.h +99 -0
  103. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +601 -0
  104. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_amf.h +46 -0
  105. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_cuda.h +74 -0
  106. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_d3d11va.h +178 -0
  107. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_d3d12va.h +142 -0
  108. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_drm.h +169 -0
  109. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_dxva2.h +75 -0
  110. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_mediacodec.h +61 -0
  111. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_oh.h +34 -0
  112. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +100 -0
  113. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +87 -0
  114. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vaapi.h +117 -0
  115. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vdpau.h +44 -0
  116. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_videotoolbox.h +106 -0
  117. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +377 -0
  118. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +694 -0
  119. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/imgutils.h +377 -0
  120. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/intfloat.h +77 -0
  121. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/intreadwrite.h +677 -0
  122. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +81 -0
  123. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +427 -0
  124. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lzo.h +66 -0
  125. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/macros.h +80 -0
  126. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mastering_display_metadata.h +137 -0
  127. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +300 -0
  128. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/md5.h +89 -0
  129. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mem.h +607 -0
  130. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/motion_vector.h +57 -0
  131. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/murmur3.h +115 -0
  132. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +1194 -0
  133. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/parseutils.h +197 -0
  134. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/pixdesc.h +440 -0
  135. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/pixelutils.h +51 -0
  136. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/pixfmt.h +797 -0
  137. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/random_seed.h +57 -0
  138. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +225 -0
  139. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +69 -0
  140. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +297 -0
  141. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/replaygain.h +50 -0
  142. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ripemd.h +83 -0
  143. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/samplefmt.h +269 -0
  144. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/sha.h +90 -0
  145. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/sha512.h +92 -0
  146. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +243 -0
  147. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/stereo3d.h +325 -0
  148. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +164 -0
  149. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tea.h +71 -0
  150. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/threadmessage.h +115 -0
  151. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/timecode.h +199 -0
  152. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/timestamp.h +85 -0
  153. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tree.h +137 -0
  154. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/twofish.h +70 -0
  155. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +210 -0
  156. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/uuid.h +146 -0
  157. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +119 -0
  158. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_enc_params.h +171 -0
  159. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +107 -0
  160. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/xtea.h +94 -0
  161. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +587 -0
  162. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +46 -0
  163. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version_major.h +31 -0
  164. package/common/cpp/audioapi/external/libavcodec.xcframework/Info.plist +44 -0
  165. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/Info.plist +1 -0
  166. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/libavcodec +0 -0
  167. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +1 -0
  168. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
  169. package/common/cpp/audioapi/external/libavformat.xcframework/Info.plist +44 -0
  170. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/Info.plist +1 -0
  171. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/libavformat +0 -0
  172. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +1 -0
  173. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
  174. package/common/cpp/audioapi/external/libavutil.xcframework/Info.plist +44 -0
  175. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/Info.plist +1 -0
  176. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/libavutil +0 -0
  177. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +1 -0
  178. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
  179. package/common/cpp/audioapi/external/libswresample.xcframework/Info.plist +44 -0
  180. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/Info.plist +1 -0
  181. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/libswresample +0 -0
  182. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +1 -0
  183. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
  184. package/common/cpp/audioapi/external/x86/libcrypto.a +0 -0
  185. package/common/cpp/audioapi/external/x86/libssl.a +0 -0
  186. package/common/cpp/audioapi/external/x86_64/libcrypto.a +0 -0
  187. package/common/cpp/audioapi/external/x86_64/libssl.a +0 -0
  188. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.cpp +402 -0
  189. package/common/cpp/audioapi/libs/ffmpeg/FFmpegDecoding.h +27 -0
  190. package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +26 -0
  191. package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +111 -0
  192. package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +361 -0
  193. package/common/cpp/audioapi/utils/SpscChannel.hpp +47 -38
  194. package/common/cpp/test/CMakeLists.txt +7 -1
  195. package/ios/audioapi/ios/core/AudioDecoder.mm +22 -2
  196. package/lib/commonjs/api.js +7 -0
  197. package/lib/commonjs/api.js.map +1 -1
  198. package/lib/commonjs/core/AudioContext.js.map +1 -1
  199. package/lib/commonjs/core/BaseAudioContext.js +4 -0
  200. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  201. package/lib/commonjs/core/StreamerNode.js +15 -0
  202. package/lib/commonjs/core/StreamerNode.js.map +1 -0
  203. package/lib/module/api.js +1 -0
  204. package/lib/module/api.js.map +1 -1
  205. package/lib/module/core/AudioContext.js.map +1 -1
  206. package/lib/module/core/BaseAudioContext.js +4 -0
  207. package/lib/module/core/BaseAudioContext.js.map +1 -1
  208. package/lib/module/core/StreamerNode.js +9 -0
  209. package/lib/module/core/StreamerNode.js.map +1 -0
  210. package/lib/typescript/api.d.ts +1 -0
  211. package/lib/typescript/api.d.ts.map +1 -1
  212. package/lib/typescript/core/AudioContext.d.ts +1 -1
  213. package/lib/typescript/core/AudioContext.d.ts.map +1 -1
  214. package/lib/typescript/core/BaseAudioContext.d.ts +2 -0
  215. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  216. package/lib/typescript/core/StreamerNode.d.ts +5 -0
  217. package/lib/typescript/core/StreamerNode.d.ts.map +1 -0
  218. package/lib/typescript/interfaces.d.ts +5 -1
  219. package/lib/typescript/interfaces.d.ts.map +1 -1
  220. package/package.json +1 -1
  221. package/src/api.ts +1 -0
  222. package/src/core/AudioContext.ts +1 -1
  223. package/src/core/BaseAudioContext.ts +5 -0
  224. package/src/core/StreamerNode.ts +8 -0
  225. package/src/interfaces.ts +6 -1
@@ -0,0 +1,1163 @@
1
+ /*
2
+ * This file is part of FFmpeg.
3
+ *
4
+ * FFmpeg is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * FFmpeg is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public
15
+ * License along with FFmpeg; if not, write to the Free Software
16
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
19
+ /**
20
+ * @file
21
+ * @ingroup lavu_frame
22
+ * reference-counted frame API
23
+ */
24
+
25
+ #ifndef AVUTIL_FRAME_H
26
+ #define AVUTIL_FRAME_H
27
+
28
+ #include <stddef.h>
29
+ #include <stdint.h>
30
+
31
+ #include "avutil.h"
32
+ #include "buffer.h"
33
+ #include "channel_layout.h"
34
+ #include "dict.h"
35
+ #include "rational.h"
36
+ #include "samplefmt.h"
37
+ #include "pixfmt.h"
38
+ #include "version.h"
39
+
40
+
41
+ /**
42
+ * @defgroup lavu_frame AVFrame
43
+ * @ingroup lavu_data
44
+ *
45
+ * @{
46
+ * AVFrame is an abstraction for reference-counted raw multimedia data.
47
+ */
48
+
49
+ enum AVFrameSideDataType {
50
+ /**
51
+ * The data is the AVPanScan struct defined in libavcodec.
52
+ */
53
+ AV_FRAME_DATA_PANSCAN,
54
+ /**
55
+ * ATSC A53 Part 4 Closed Captions.
56
+ * A53 CC bitstream is stored as uint8_t in AVFrameSideData.data.
57
+ * The number of bytes of CC data is AVFrameSideData.size.
58
+ */
59
+ AV_FRAME_DATA_A53_CC,
60
+ /**
61
+ * Stereoscopic 3d metadata.
62
+ * The data is the AVStereo3D struct defined in libavutil/stereo3d.h.
63
+ */
64
+ AV_FRAME_DATA_STEREO3D,
65
+ /**
66
+ * The data is the AVMatrixEncoding enum defined in libavutil/channel_layout.h.
67
+ */
68
+ AV_FRAME_DATA_MATRIXENCODING,
69
+ /**
70
+ * Metadata relevant to a downmix procedure.
71
+ * The data is the AVDownmixInfo struct defined in libavutil/downmix_info.h.
72
+ */
73
+ AV_FRAME_DATA_DOWNMIX_INFO,
74
+ /**
75
+ * ReplayGain information in the form of the AVReplayGain struct.
76
+ */
77
+ AV_FRAME_DATA_REPLAYGAIN,
78
+ /**
79
+ * This side data contains a 3x3 transformation matrix describing an affine
80
+ * transformation that needs to be applied to the frame for correct
81
+ * presentation.
82
+ *
83
+ * See libavutil/display.h for a detailed description of the data.
84
+ */
85
+ AV_FRAME_DATA_DISPLAYMATRIX,
86
+ /**
87
+ * Active Format Description data consisting of a single byte as specified
88
+ * in ETSI TS 101 154 using AVActiveFormatDescription enum.
89
+ */
90
+ AV_FRAME_DATA_AFD,
91
+ /**
92
+ * Motion vectors exported by some codecs (on demand through the export_mvs
93
+ * flag set in the libavcodec AVCodecContext flags2 option).
94
+ * The data is the AVMotionVector struct defined in
95
+ * libavutil/motion_vector.h.
96
+ */
97
+ AV_FRAME_DATA_MOTION_VECTORS,
98
+ /**
99
+ * Recommmends skipping the specified number of samples. This is exported
100
+ * only if the "skip_manual" AVOption is set in libavcodec.
101
+ * This has the same format as AV_PKT_DATA_SKIP_SAMPLES.
102
+ * @code
103
+ * u32le number of samples to skip from start of this packet
104
+ * u32le number of samples to skip from end of this packet
105
+ * u8 reason for start skip
106
+ * u8 reason for end skip (0=padding silence, 1=convergence)
107
+ * @endcode
108
+ */
109
+ AV_FRAME_DATA_SKIP_SAMPLES,
110
+ /**
111
+ * This side data must be associated with an audio frame and corresponds to
112
+ * enum AVAudioServiceType defined in avcodec.h.
113
+ */
114
+ AV_FRAME_DATA_AUDIO_SERVICE_TYPE,
115
+ /**
116
+ * Mastering display metadata associated with a video frame. The payload is
117
+ * an AVMasteringDisplayMetadata type and contains information about the
118
+ * mastering display color volume.
119
+ */
120
+ AV_FRAME_DATA_MASTERING_DISPLAY_METADATA,
121
+ /**
122
+ * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer.
123
+ * This is set on the first frame of a GOP that has a temporal reference of 0.
124
+ */
125
+ AV_FRAME_DATA_GOP_TIMECODE,
126
+
127
+ /**
128
+ * The data represents the AVSphericalMapping structure defined in
129
+ * libavutil/spherical.h.
130
+ */
131
+ AV_FRAME_DATA_SPHERICAL,
132
+
133
+ /**
134
+ * Content light level (based on CTA-861.3). This payload contains data in
135
+ * the form of the AVContentLightMetadata struct.
136
+ */
137
+ AV_FRAME_DATA_CONTENT_LIGHT_LEVEL,
138
+
139
+ /**
140
+ * The data contains an ICC profile as an opaque octet buffer following the
141
+ * format described by ISO 15076-1 with an optional name defined in the
142
+ * metadata key entry "name".
143
+ */
144
+ AV_FRAME_DATA_ICC_PROFILE,
145
+
146
+ /**
147
+ * Timecode which conforms to SMPTE ST 12-1. The data is an array of 4 uint32_t
148
+ * where the first uint32_t describes how many (1-3) of the other timecodes are used.
149
+ * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum()
150
+ * function in libavutil/timecode.h.
151
+ */
152
+ AV_FRAME_DATA_S12M_TIMECODE,
153
+
154
+ /**
155
+ * HDR dynamic metadata associated with a video frame. The payload is
156
+ * an AVDynamicHDRPlus type and contains information for color
157
+ * volume transform - application 4 of SMPTE 2094-40:2016 standard.
158
+ */
159
+ AV_FRAME_DATA_DYNAMIC_HDR_PLUS,
160
+
161
+ /**
162
+ * Regions Of Interest, the data is an array of AVRegionOfInterest type, the number of
163
+ * array element is implied by AVFrameSideData.size / AVRegionOfInterest.self_size.
164
+ */
165
+ AV_FRAME_DATA_REGIONS_OF_INTEREST,
166
+
167
+ /**
168
+ * Encoding parameters for a video frame, as described by AVVideoEncParams.
169
+ */
170
+ AV_FRAME_DATA_VIDEO_ENC_PARAMS,
171
+
172
+ /**
173
+ * User data unregistered metadata associated with a video frame.
174
+ * This is the H.26[45] UDU SEI message, and shouldn't be used for any other purpose
175
+ * The data is stored as uint8_t in AVFrameSideData.data which is 16 bytes of
176
+ * uuid_iso_iec_11578 followed by AVFrameSideData.size - 16 bytes of user_data_payload_byte.
177
+ */
178
+ AV_FRAME_DATA_SEI_UNREGISTERED,
179
+
180
+ /**
181
+ * Film grain parameters for a frame, described by AVFilmGrainParams.
182
+ * Must be present for every frame which should have film grain applied.
183
+ *
184
+ * May be present multiple times, for example when there are multiple
185
+ * alternative parameter sets for different video signal characteristics.
186
+ * The user should select the most appropriate set for the application.
187
+ */
188
+ AV_FRAME_DATA_FILM_GRAIN_PARAMS,
189
+
190
+ /**
191
+ * Bounding boxes for object detection and classification,
192
+ * as described by AVDetectionBBoxHeader.
193
+ */
194
+ AV_FRAME_DATA_DETECTION_BBOXES,
195
+
196
+ /**
197
+ * Dolby Vision RPU raw data, suitable for passing to x265
198
+ * or other libraries. Array of uint8_t, with NAL emulation
199
+ * bytes intact.
200
+ */
201
+ AV_FRAME_DATA_DOVI_RPU_BUFFER,
202
+
203
+ /**
204
+ * Parsed Dolby Vision metadata, suitable for passing to a software
205
+ * implementation. The payload is the AVDOVIMetadata struct defined in
206
+ * libavutil/dovi_meta.h.
207
+ */
208
+ AV_FRAME_DATA_DOVI_METADATA,
209
+
210
+ /**
211
+ * HDR Vivid dynamic metadata associated with a video frame. The payload is
212
+ * an AVDynamicHDRVivid type and contains information for color
213
+ * volume transform - CUVA 005.1-2021.
214
+ */
215
+ AV_FRAME_DATA_DYNAMIC_HDR_VIVID,
216
+
217
+ /**
218
+ * Ambient viewing environment metadata, as defined by H.274.
219
+ */
220
+ AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT,
221
+
222
+ /**
223
+ * Provide encoder-specific hinting information about changed/unchanged
224
+ * portions of a frame. It can be used to pass information about which
225
+ * macroblocks can be skipped because they didn't change from the
226
+ * corresponding ones in the previous frame. This could be useful for
227
+ * applications which know this information in advance to speed up
228
+ * encoding.
229
+ */
230
+ AV_FRAME_DATA_VIDEO_HINT,
231
+
232
+ /**
233
+ * Raw LCEVC payload data, as a uint8_t array, with NAL emulation
234
+ * bytes intact.
235
+ */
236
+ AV_FRAME_DATA_LCEVC,
237
+
238
+ /**
239
+ * This side data must be associated with a video frame.
240
+ * The presence of this side data indicates that the video stream is
241
+ * composed of multiple views (e.g. stereoscopic 3D content,
242
+ * cf. H.264 Annex H or H.265 Annex G).
243
+ * The data is an int storing the view ID.
244
+ */
245
+ AV_FRAME_DATA_VIEW_ID,
246
+
247
+ /**
248
+ * This side data contains information about the reference display width(s)
249
+ * and reference viewing distance(s) as well as information about the
250
+ * corresponding reference stereo pair(s), i.e., the pair(s) of views to be
251
+ * displayed for the viewer's left and right eyes on the reference display
252
+ * at the reference viewing distance.
253
+ * The payload is the AV3DReferenceDisplaysInfo struct defined in
254
+ * libavutil/tdrdi.h.
255
+ */
256
+ AV_FRAME_DATA_3D_REFERENCE_DISPLAYS,
257
+ };
258
+
259
+ enum AVActiveFormatDescription {
260
+ AV_AFD_SAME = 8,
261
+ AV_AFD_4_3 = 9,
262
+ AV_AFD_16_9 = 10,
263
+ AV_AFD_14_9 = 11,
264
+ AV_AFD_4_3_SP_14_9 = 13,
265
+ AV_AFD_16_9_SP_14_9 = 14,
266
+ AV_AFD_SP_4_3 = 15,
267
+ };
268
+
269
+
270
+ /**
271
+ * Structure to hold side data for an AVFrame.
272
+ *
273
+ * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be added
274
+ * to the end with a minor bump.
275
+ */
276
+ typedef struct AVFrameSideData {
277
+ enum AVFrameSideDataType type;
278
+ uint8_t *data;
279
+ size_t size;
280
+ AVDictionary *metadata;
281
+ AVBufferRef *buf;
282
+ } AVFrameSideData;
283
+
284
+ enum AVSideDataProps {
285
+ /**
286
+ * The side data type can be used in stream-global structures.
287
+ * Side data types without this property are only meaningful on per-frame
288
+ * basis.
289
+ */
290
+ AV_SIDE_DATA_PROP_GLOBAL = (1 << 0),
291
+
292
+ /**
293
+ * Multiple instances of this side data type can be meaningfully present in
294
+ * a single side data array.
295
+ */
296
+ AV_SIDE_DATA_PROP_MULTI = (1 << 1),
297
+
298
+ /**
299
+ * Side data depends on the video dimensions. Side data with this property
300
+ * loses its meaning when rescaling or cropping the image, unless
301
+ * either recomputed or adjusted to the new resolution.
302
+ */
303
+ AV_SIDE_DATA_PROP_SIZE_DEPENDENT = (1 << 2),
304
+
305
+ /**
306
+ * Side data depends on the video color space. Side data with this property
307
+ * loses its meaning when changing the video color encoding, e.g. by
308
+ * adapting to a different set of primaries or transfer characteristics.
309
+ */
310
+ AV_SIDE_DATA_PROP_COLOR_DEPENDENT = (1 << 3),
311
+
312
+ /**
313
+ * Side data depends on the channel layout. Side data with this property
314
+ * loses its meaning when downmixing or upmixing, unless either recomputed
315
+ * or adjusted to the new layout.
316
+ */
317
+ AV_SIDE_DATA_PROP_CHANNEL_DEPENDENT = (1 << 4),
318
+ };
319
+
320
+ /**
321
+ * This struct describes the properties of a side data type. Its instance
322
+ * corresponding to a given type can be obtained from av_frame_side_data_desc().
323
+ */
324
+ typedef struct AVSideDataDescriptor {
325
+ /**
326
+ * Human-readable side data description.
327
+ */
328
+ const char *name;
329
+
330
+ /**
331
+ * Side data property flags, a combination of AVSideDataProps values.
332
+ */
333
+ unsigned props;
334
+ } AVSideDataDescriptor;
335
+
336
+ /**
337
+ * Structure describing a single Region Of Interest.
338
+ *
339
+ * When multiple regions are defined in a single side-data block, they
340
+ * should be ordered from most to least important - some encoders are only
341
+ * capable of supporting a limited number of distinct regions, so will have
342
+ * to truncate the list.
343
+ *
344
+ * When overlapping regions are defined, the first region containing a given
345
+ * area of the frame applies.
346
+ */
347
+ typedef struct AVRegionOfInterest {
348
+ /**
349
+ * Must be set to the size of this data structure (that is,
350
+ * sizeof(AVRegionOfInterest)).
351
+ */
352
+ uint32_t self_size;
353
+ /**
354
+ * Distance in pixels from the top edge of the frame to the top and
355
+ * bottom edges and from the left edge of the frame to the left and
356
+ * right edges of the rectangle defining this region of interest.
357
+ *
358
+ * The constraints on a region are encoder dependent, so the region
359
+ * actually affected may be slightly larger for alignment or other
360
+ * reasons.
361
+ */
362
+ int top;
363
+ int bottom;
364
+ int left;
365
+ int right;
366
+ /**
367
+ * Quantisation offset.
368
+ *
369
+ * Must be in the range -1 to +1. A value of zero indicates no quality
370
+ * change. A negative value asks for better quality (less quantisation),
371
+ * while a positive value asks for worse quality (greater quantisation).
372
+ *
373
+ * The range is calibrated so that the extreme values indicate the
374
+ * largest possible offset - if the rest of the frame is encoded with the
375
+ * worst possible quality, an offset of -1 indicates that this region
376
+ * should be encoded with the best possible quality anyway. Intermediate
377
+ * values are then interpolated in some codec-dependent way.
378
+ *
379
+ * For example, in 10-bit H.264 the quantisation parameter varies between
380
+ * -12 and 51. A typical qoffset value of -1/10 therefore indicates that
381
+ * this region should be encoded with a QP around one-tenth of the full
382
+ * range better than the rest of the frame. So, if most of the frame
383
+ * were to be encoded with a QP of around 30, this region would get a QP
384
+ * of around 24 (an offset of approximately -1/10 * (51 - -12) = -6.3).
385
+ * An extreme value of -1 would indicate that this region should be
386
+ * encoded with the best possible quality regardless of the treatment of
387
+ * the rest of the frame - that is, should be encoded at a QP of -12.
388
+ */
389
+ AVRational qoffset;
390
+ } AVRegionOfInterest;
391
+
392
+ /**
393
+ * This structure describes decoded (raw) audio or video data.
394
+ *
395
+ * AVFrame must be allocated using av_frame_alloc(). Note that this only
396
+ * allocates the AVFrame itself, the buffers for the data must be managed
397
+ * through other means (see below).
398
+ * AVFrame must be freed with av_frame_free().
399
+ *
400
+ * AVFrame is typically allocated once and then reused multiple times to hold
401
+ * different data (e.g. a single AVFrame to hold frames received from a
402
+ * decoder). In such a case, av_frame_unref() will free any references held by
403
+ * the frame and reset it to its original clean state before it
404
+ * is reused again.
405
+ *
406
+ * The data described by an AVFrame is usually reference counted through the
407
+ * AVBuffer API. The underlying buffer references are stored in AVFrame.buf /
408
+ * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at
409
+ * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case,
410
+ * every single data plane must be contained in one of the buffers in
411
+ * AVFrame.buf or AVFrame.extended_buf.
412
+ * There may be a single buffer for all the data, or one separate buffer for
413
+ * each plane, or anything in between.
414
+ *
415
+ * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added
416
+ * to the end with a minor bump.
417
+ *
418
+ * Fields can be accessed through AVOptions, the name string used, matches the
419
+ * C structure field name for fields accessible through AVOptions.
420
+ */
421
+ typedef struct AVFrame {
422
+ #define AV_NUM_DATA_POINTERS 8
423
+ /**
424
+ * pointer to the picture/channel planes.
425
+ * This might be different from the first allocated byte. For video,
426
+ * it could even point to the end of the image data.
427
+ *
428
+ * All pointers in data and extended_data must point into one of the
429
+ * AVBufferRef in buf or extended_buf.
430
+ *
431
+ * Some decoders access areas outside 0,0 - width,height, please
432
+ * see avcodec_align_dimensions2(). Some filters and swscale can read
433
+ * up to 16 bytes beyond the planes, if these filters are to be used,
434
+ * then 16 extra bytes must be allocated.
435
+ *
436
+ * NOTE: Pointers not needed by the format MUST be set to NULL.
437
+ *
438
+ * @attention In case of video, the data[] pointers can point to the
439
+ * end of image data in order to reverse line order, when used in
440
+ * combination with negative values in the linesize[] array.
441
+ */
442
+ uint8_t *data[AV_NUM_DATA_POINTERS];
443
+
444
+ /**
445
+ * For video, a positive or negative value, which is typically indicating
446
+ * the size in bytes of each picture line, but it can also be:
447
+ * - the negative byte size of lines for vertical flipping
448
+ * (with data[n] pointing to the end of the data
449
+ * - a positive or negative multiple of the byte size as for accessing
450
+ * even and odd fields of a frame (possibly flipped)
451
+ *
452
+ * For audio, only linesize[0] may be set. For planar audio, each channel
453
+ * plane must be the same size.
454
+ *
455
+ * For video the linesizes should be multiples of the CPUs alignment
456
+ * preference, this is 16 or 32 for modern desktop CPUs.
457
+ * Some code requires such alignment other code can be slower without
458
+ * correct alignment, for yet other it makes no difference.
459
+ *
460
+ * @note The linesize may be larger than the size of usable data -- there
461
+ * may be extra padding present for performance reasons.
462
+ *
463
+ * @attention In case of video, line size values can be negative to achieve
464
+ * a vertically inverted iteration over image lines.
465
+ */
466
+ int linesize[AV_NUM_DATA_POINTERS];
467
+
468
+ /**
469
+ * pointers to the data planes/channels.
470
+ *
471
+ * For video, this should simply point to data[].
472
+ *
473
+ * For planar audio, each channel has a separate data pointer, and
474
+ * linesize[0] contains the size of each channel buffer.
475
+ * For packed audio, there is just one data pointer, and linesize[0]
476
+ * contains the total size of the buffer for all channels.
477
+ *
478
+ * Note: Both data and extended_data should always be set in a valid frame,
479
+ * but for planar audio with more channels that can fit in data,
480
+ * extended_data must be used in order to access all channels.
481
+ */
482
+ uint8_t **extended_data;
483
+
484
+ /**
485
+ * @name Video dimensions
486
+ * Video frames only. The coded dimensions (in pixels) of the video frame,
487
+ * i.e. the size of the rectangle that contains some well-defined values.
488
+ *
489
+ * @note The part of the frame intended for display/presentation is further
490
+ * restricted by the @ref cropping "Cropping rectangle".
491
+ * @{
492
+ */
493
+ int width, height;
494
+ /**
495
+ * @}
496
+ */
497
+
498
+ /**
499
+ * number of audio samples (per channel) described by this frame
500
+ */
501
+ int nb_samples;
502
+
503
+ /**
504
+ * format of the frame, -1 if unknown or unset
505
+ * Values correspond to enum AVPixelFormat for video frames,
506
+ * enum AVSampleFormat for audio)
507
+ */
508
+ int format;
509
+
510
+ /**
511
+ * Picture type of the frame.
512
+ */
513
+ enum AVPictureType pict_type;
514
+
515
+ /**
516
+ * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
517
+ */
518
+ AVRational sample_aspect_ratio;
519
+
520
+ /**
521
+ * Presentation timestamp in time_base units (time when frame should be shown to user).
522
+ */
523
+ int64_t pts;
524
+
525
+ /**
526
+ * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used)
527
+ * This is also the Presentation time of this AVFrame calculated from
528
+ * only AVPacket.dts values without pts values.
529
+ */
530
+ int64_t pkt_dts;
531
+
532
+ /**
533
+ * Time base for the timestamps in this frame.
534
+ * In the future, this field may be set on frames output by decoders or
535
+ * filters, but its value will be by default ignored on input to encoders
536
+ * or filters.
537
+ */
538
+ AVRational time_base;
539
+
540
+ /**
541
+ * quality (between 1 (good) and FF_LAMBDA_MAX (bad))
542
+ */
543
+ int quality;
544
+
545
+ /**
546
+ * Frame owner's private data.
547
+ *
548
+ * This field may be set by the code that allocates/owns the frame data.
549
+ * It is then not touched by any library functions, except:
550
+ * - it is copied to other references by av_frame_copy_props() (and hence by
551
+ * av_frame_ref());
552
+ * - it is set to NULL when the frame is cleared by av_frame_unref()
553
+ * - on the caller's explicit request. E.g. libavcodec encoders/decoders
554
+ * will copy this field to/from @ref AVPacket "AVPackets" if the caller sets
555
+ * @ref AV_CODEC_FLAG_COPY_OPAQUE.
556
+ *
557
+ * @see opaque_ref the reference-counted analogue
558
+ */
559
+ void *opaque;
560
+
561
+ /**
562
+ * Number of fields in this frame which should be repeated, i.e. the total
563
+ * duration of this frame should be repeat_pict + 2 normal field durations.
564
+ *
565
+ * For interlaced frames this field may be set to 1, which signals that this
566
+ * frame should be presented as 3 fields: beginning with the first field (as
567
+ * determined by AV_FRAME_FLAG_TOP_FIELD_FIRST being set or not), followed
568
+ * by the second field, and then the first field again.
569
+ *
570
+ * For progressive frames this field may be set to a multiple of 2, which
571
+ * signals that this frame's duration should be (repeat_pict + 2) / 2
572
+ * normal frame durations.
573
+ *
574
+ * @note This field is computed from MPEG2 repeat_first_field flag and its
575
+ * associated flags, H.264 pic_struct from picture timing SEI, and
576
+ * their analogues in other codecs. Typically it should only be used when
577
+ * higher-layer timing information is not available.
578
+ */
579
+ int repeat_pict;
580
+
581
+ /**
582
+ * Sample rate of the audio data.
583
+ */
584
+ int sample_rate;
585
+
586
+ /**
587
+ * AVBuffer references backing the data for this frame. All the pointers in
588
+ * data and extended_data must point inside one of the buffers in buf or
589
+ * extended_buf. This array must be filled contiguously -- if buf[i] is
590
+ * non-NULL then buf[j] must also be non-NULL for all j < i.
591
+ *
592
+ * There may be at most one AVBuffer per data plane, so for video this array
593
+ * always contains all the references. For planar audio with more than
594
+ * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in
595
+ * this array. Then the extra AVBufferRef pointers are stored in the
596
+ * extended_buf array.
597
+ */
598
+ AVBufferRef *buf[AV_NUM_DATA_POINTERS];
599
+
600
+ /**
601
+ * For planar audio which requires more than AV_NUM_DATA_POINTERS
602
+ * AVBufferRef pointers, this array will hold all the references which
603
+ * cannot fit into AVFrame.buf.
604
+ *
605
+ * Note that this is different from AVFrame.extended_data, which always
606
+ * contains all the pointers. This array only contains the extra pointers,
607
+ * which cannot fit into AVFrame.buf.
608
+ *
609
+ * This array is always allocated using av_malloc() by whoever constructs
610
+ * the frame. It is freed in av_frame_unref().
611
+ */
612
+ AVBufferRef **extended_buf;
613
+ /**
614
+ * Number of elements in extended_buf.
615
+ */
616
+ int nb_extended_buf;
617
+
618
+ AVFrameSideData **side_data;
619
+ int nb_side_data;
620
+
621
+ /**
622
+ * @defgroup lavu_frame_flags AV_FRAME_FLAGS
623
+ * @ingroup lavu_frame
624
+ * Flags describing additional frame properties.
625
+ *
626
+ * @{
627
+ */
628
+
629
+ /**
630
+ * The frame data may be corrupted, e.g. due to decoding errors.
631
+ */
632
+ #define AV_FRAME_FLAG_CORRUPT (1 << 0)
633
+ /**
634
+ * A flag to mark frames that are keyframes.
635
+ */
636
+ #define AV_FRAME_FLAG_KEY (1 << 1)
637
+ /**
638
+ * A flag to mark the frames which need to be decoded, but shouldn't be output.
639
+ */
640
+ #define AV_FRAME_FLAG_DISCARD (1 << 2)
641
+ /**
642
+ * A flag to mark frames whose content is interlaced.
643
+ */
644
+ #define AV_FRAME_FLAG_INTERLACED (1 << 3)
645
+ /**
646
+ * A flag to mark frames where the top field is displayed first if the content
647
+ * is interlaced.
648
+ */
649
+ #define AV_FRAME_FLAG_TOP_FIELD_FIRST (1 << 4)
650
+ /**
651
+ * A decoder can use this flag to mark frames which were originally encoded losslessly.
652
+ *
653
+ * For coding bitstream formats which support both lossless and lossy
654
+ * encoding, it is sometimes possible for a decoder to determine which method
655
+ * was used when the bitsream was encoded.
656
+ */
657
+ #define AV_FRAME_FLAG_LOSSLESS (1 << 5)
658
+ /**
659
+ * @}
660
+ */
661
+
662
+ /**
663
+ * Frame flags, a combination of @ref lavu_frame_flags
664
+ */
665
+ int flags;
666
+
667
+ /**
668
+ * MPEG vs JPEG YUV range.
669
+ * - encoding: Set by user
670
+ * - decoding: Set by libavcodec
671
+ */
672
+ enum AVColorRange color_range;
673
+
674
+ enum AVColorPrimaries color_primaries;
675
+
676
+ enum AVColorTransferCharacteristic color_trc;
677
+
678
+ /**
679
+ * YUV colorspace type.
680
+ * - encoding: Set by user
681
+ * - decoding: Set by libavcodec
682
+ */
683
+ enum AVColorSpace colorspace;
684
+
685
+ enum AVChromaLocation chroma_location;
686
+
687
+ /**
688
+ * frame timestamp estimated using various heuristics, in stream time base
689
+ * - encoding: unused
690
+ * - decoding: set by libavcodec, read by user.
691
+ */
692
+ int64_t best_effort_timestamp;
693
+
694
+ /**
695
+ * metadata.
696
+ * - encoding: Set by user.
697
+ * - decoding: Set by libavcodec.
698
+ */
699
+ AVDictionary *metadata;
700
+
701
+ /**
702
+ * decode error flags of the frame, set to a combination of
703
+ * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there
704
+ * were errors during the decoding.
705
+ * - encoding: unused
706
+ * - decoding: set by libavcodec, read by user.
707
+ */
708
+ int decode_error_flags;
709
+ #define FF_DECODE_ERROR_INVALID_BITSTREAM 1
710
+ #define FF_DECODE_ERROR_MISSING_REFERENCE 2
711
+ #define FF_DECODE_ERROR_CONCEALMENT_ACTIVE 4
712
+ #define FF_DECODE_ERROR_DECODE_SLICES 8
713
+
714
+ /**
715
+ * For hwaccel-format frames, this should be a reference to the
716
+ * AVHWFramesContext describing the frame.
717
+ */
718
+ AVBufferRef *hw_frames_ctx;
719
+
720
+ /**
721
+ * Frame owner's private data.
722
+ *
723
+ * This field may be set by the code that allocates/owns the frame data.
724
+ * It is then not touched by any library functions, except:
725
+ * - a new reference to the underlying buffer is propagated by
726
+ * av_frame_copy_props() (and hence by av_frame_ref());
727
+ * - it is unreferenced in av_frame_unref();
728
+ * - on the caller's explicit request. E.g. libavcodec encoders/decoders
729
+ * will propagate a new reference to/from @ref AVPacket "AVPackets" if the
730
+ * caller sets @ref AV_CODEC_FLAG_COPY_OPAQUE.
731
+ *
732
+ * @see opaque the plain pointer analogue
733
+ */
734
+ AVBufferRef *opaque_ref;
735
+
736
+ /**
737
+ * @anchor cropping
738
+ * @name Cropping
739
+ * Video frames only. The number of pixels to discard from the the
740
+ * top/bottom/left/right border of the frame to obtain the sub-rectangle of
741
+ * the frame intended for presentation.
742
+ * @{
743
+ */
744
+ size_t crop_top;
745
+ size_t crop_bottom;
746
+ size_t crop_left;
747
+ size_t crop_right;
748
+ /**
749
+ * @}
750
+ */
751
+
752
+ /**
753
+ * RefStruct reference for internal use by a single libav* library.
754
+ * Must not be used to transfer data between libraries.
755
+ * Has to be NULL when ownership of the frame leaves the respective library.
756
+ *
757
+ * Code outside the FFmpeg libs must never check or change private_ref.
758
+ */
759
+ void *private_ref;
760
+
761
+ /**
762
+ * Channel layout of the audio data.
763
+ */
764
+ AVChannelLayout ch_layout;
765
+
766
+ /**
767
+ * Duration of the frame, in the same units as pts. 0 if unknown.
768
+ */
769
+ int64_t duration;
770
+ } AVFrame;
771
+
772
+
773
+ /**
774
+ * Allocate an AVFrame and set its fields to default values. The resulting
775
+ * struct must be freed using av_frame_free().
776
+ *
777
+ * @return An AVFrame filled with default values or NULL on failure.
778
+ *
779
+ * @note this only allocates the AVFrame itself, not the data buffers. Those
780
+ * must be allocated through other means, e.g. with av_frame_get_buffer() or
781
+ * manually.
782
+ */
783
+ AVFrame *av_frame_alloc(void);
784
+
785
+ /**
786
+ * Free the frame and any dynamically allocated objects in it,
787
+ * e.g. extended_data. If the frame is reference counted, it will be
788
+ * unreferenced first.
789
+ *
790
+ * @param frame frame to be freed. The pointer will be set to NULL.
791
+ */
792
+ void av_frame_free(AVFrame **frame);
793
+
794
+ /**
795
+ * Set up a new reference to the data described by the source frame.
796
+ *
797
+ * Copy frame properties from src to dst and create a new reference for each
798
+ * AVBufferRef from src.
799
+ *
800
+ * If src is not reference counted, new buffers are allocated and the data is
801
+ * copied.
802
+ *
803
+ * @warning: dst MUST have been either unreferenced with av_frame_unref(dst),
804
+ * or newly allocated with av_frame_alloc() before calling this
805
+ * function, or undefined behavior will occur.
806
+ *
807
+ * @return 0 on success, a negative AVERROR on error
808
+ */
809
+ int av_frame_ref(AVFrame *dst, const AVFrame *src);
810
+
811
+ /**
812
+ * Ensure the destination frame refers to the same data described by the source
813
+ * frame, either by creating a new reference for each AVBufferRef from src if
814
+ * they differ from those in dst, by allocating new buffers and copying data if
815
+ * src is not reference counted, or by unrefencing it if src is empty.
816
+ *
817
+ * Frame properties on dst will be replaced by those from src.
818
+ *
819
+ * @return 0 on success, a negative AVERROR on error. On error, dst is
820
+ * unreferenced.
821
+ */
822
+ int av_frame_replace(AVFrame *dst, const AVFrame *src);
823
+
824
+ /**
825
+ * Create a new frame that references the same data as src.
826
+ *
827
+ * This is a shortcut for av_frame_alloc()+av_frame_ref().
828
+ *
829
+ * @return newly created AVFrame on success, NULL on error.
830
+ */
831
+ AVFrame *av_frame_clone(const AVFrame *src);
832
+
833
+ /**
834
+ * Unreference all the buffers referenced by frame and reset the frame fields.
835
+ */
836
+ void av_frame_unref(AVFrame *frame);
837
+
838
+ /**
839
+ * Move everything contained in src to dst and reset src.
840
+ *
841
+ * @warning: dst is not unreferenced, but directly overwritten without reading
842
+ * or deallocating its contents. Call av_frame_unref(dst) manually
843
+ * before calling this function to ensure that no memory is leaked.
844
+ */
845
+ void av_frame_move_ref(AVFrame *dst, AVFrame *src);
846
+
847
+ /**
848
+ * Allocate new buffer(s) for audio or video data.
849
+ *
850
+ * The following fields must be set on frame before calling this function:
851
+ * - format (pixel format for video, sample format for audio)
852
+ * - width and height for video
853
+ * - nb_samples and ch_layout for audio
854
+ *
855
+ * This function will fill AVFrame.data and AVFrame.buf arrays and, if
856
+ * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf.
857
+ * For planar formats, one buffer will be allocated for each plane.
858
+ *
859
+ * @warning: if frame already has been allocated, calling this function will
860
+ * leak memory. In addition, undefined behavior can occur in certain
861
+ * cases.
862
+ *
863
+ * @param frame frame in which to store the new buffers.
864
+ * @param align Required buffer size and data pointer alignment. If equal to 0,
865
+ * alignment will be chosen automatically for the current CPU.
866
+ * It is highly recommended to pass 0 here unless you know what
867
+ * you are doing.
868
+ *
869
+ * @return 0 on success, a negative AVERROR on error.
870
+ */
871
+ int av_frame_get_buffer(AVFrame *frame, int align);
872
+
873
+ /**
874
+ * Check if the frame data is writable.
875
+ *
876
+ * @return A positive value if the frame data is writable (which is true if and
877
+ * only if each of the underlying buffers has only one reference, namely the one
878
+ * stored in this frame). Return 0 otherwise.
879
+ *
880
+ * If 1 is returned the answer is valid until av_buffer_ref() is called on any
881
+ * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly).
882
+ *
883
+ * @see av_frame_make_writable(), av_buffer_is_writable()
884
+ */
885
+ int av_frame_is_writable(AVFrame *frame);
886
+
887
+ /**
888
+ * Ensure that the frame data is writable, avoiding data copy if possible.
889
+ *
890
+ * Do nothing if the frame is writable, allocate new buffers and copy the data
891
+ * if it is not. Non-refcounted frames behave as non-writable, i.e. a copy
892
+ * is always made.
893
+ *
894
+ * @return 0 on success, a negative AVERROR on error.
895
+ *
896
+ * @see av_frame_is_writable(), av_buffer_is_writable(),
897
+ * av_buffer_make_writable()
898
+ */
899
+ int av_frame_make_writable(AVFrame *frame);
900
+
901
+ /**
902
+ * Copy the frame data from src to dst.
903
+ *
904
+ * This function does not allocate anything, dst must be already initialized and
905
+ * allocated with the same parameters as src.
906
+ *
907
+ * This function only copies the frame data (i.e. the contents of the data /
908
+ * extended data arrays), not any other properties.
909
+ *
910
+ * @return >= 0 on success, a negative AVERROR on error.
911
+ */
912
+ int av_frame_copy(AVFrame *dst, const AVFrame *src);
913
+
914
+ /**
915
+ * Copy only "metadata" fields from src to dst.
916
+ *
917
+ * Metadata for the purpose of this function are those fields that do not affect
918
+ * the data layout in the buffers. E.g. pts, sample rate (for audio) or sample
919
+ * aspect ratio (for video), but not width/height or channel layout.
920
+ * Side data is also copied.
921
+ */
922
+ int av_frame_copy_props(AVFrame *dst, const AVFrame *src);
923
+
924
+ /**
925
+ * Get the buffer reference a given data plane is stored in.
926
+ *
927
+ * @param frame the frame to get the plane's buffer from
928
+ * @param plane index of the data plane of interest in frame->extended_data.
929
+ *
930
+ * @return the buffer reference that contains the plane or NULL if the input
931
+ * frame is not valid.
932
+ */
933
+ AVBufferRef *av_frame_get_plane_buffer(const AVFrame *frame, int plane);
934
+
935
+ /**
936
+ * Add a new side data to a frame.
937
+ *
938
+ * @param frame a frame to which the side data should be added
939
+ * @param type type of the added side data
940
+ * @param size size of the side data
941
+ *
942
+ * @return newly added side data on success, NULL on error
943
+ */
944
+ AVFrameSideData *av_frame_new_side_data(AVFrame *frame,
945
+ enum AVFrameSideDataType type,
946
+ size_t size);
947
+
948
+ /**
949
+ * Add a new side data to a frame from an existing AVBufferRef
950
+ *
951
+ * @param frame a frame to which the side data should be added
952
+ * @param type the type of the added side data
953
+ * @param buf an AVBufferRef to add as side data. The ownership of
954
+ * the reference is transferred to the frame.
955
+ *
956
+ * @return newly added side data on success, NULL on error. On failure
957
+ * the frame is unchanged and the AVBufferRef remains owned by
958
+ * the caller.
959
+ */
960
+ AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame,
961
+ enum AVFrameSideDataType type,
962
+ AVBufferRef *buf);
963
+
964
+ /**
965
+ * @return a pointer to the side data of a given type on success, NULL if there
966
+ * is no side data with such type in this frame.
967
+ */
968
+ AVFrameSideData *av_frame_get_side_data(const AVFrame *frame,
969
+ enum AVFrameSideDataType type);
970
+
971
+ /**
972
+ * Remove and free all side data instances of the given type.
973
+ */
974
+ void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type);
975
+
976
+
977
+ /**
978
+ * Flags for frame cropping.
979
+ */
980
+ enum {
981
+ /**
982
+ * Apply the maximum possible cropping, even if it requires setting the
983
+ * AVFrame.data[] entries to unaligned pointers. Passing unaligned data
984
+ * to FFmpeg API is generally not allowed, and causes undefined behavior
985
+ * (such as crashes). You can pass unaligned data only to FFmpeg APIs that
986
+ * are explicitly documented to accept it. Use this flag only if you
987
+ * absolutely know what you are doing.
988
+ */
989
+ AV_FRAME_CROP_UNALIGNED = 1 << 0,
990
+ };
991
+
992
+ /**
993
+ * Crop the given video AVFrame according to its crop_left/crop_top/crop_right/
994
+ * crop_bottom fields. If cropping is successful, the function will adjust the
995
+ * data pointers and the width/height fields, and set the crop fields to 0.
996
+ *
997
+ * In all cases, the cropping boundaries will be rounded to the inherent
998
+ * alignment of the pixel format. In some cases, such as for opaque hwaccel
999
+ * formats, the left/top cropping is ignored. The crop fields are set to 0 even
1000
+ * if the cropping was rounded or ignored.
1001
+ *
1002
+ * @param frame the frame which should be cropped
1003
+ * @param flags Some combination of AV_FRAME_CROP_* flags, or 0.
1004
+ *
1005
+ * @return >= 0 on success, a negative AVERROR on error. If the cropping fields
1006
+ * were invalid, AVERROR(ERANGE) is returned, and nothing is changed.
1007
+ */
1008
+ int av_frame_apply_cropping(AVFrame *frame, int flags);
1009
+
1010
+ /**
1011
+ * @return a string identifying the side data type
1012
+ */
1013
+ const char *av_frame_side_data_name(enum AVFrameSideDataType type);
1014
+
1015
+ /**
1016
+ * @return side data descriptor corresponding to a given side data type, NULL
1017
+ * when not available.
1018
+ */
1019
+ const AVSideDataDescriptor *av_frame_side_data_desc(enum AVFrameSideDataType type);
1020
+
1021
+ /**
1022
+ * Free all side data entries and their contents, then zeroes out the
1023
+ * values which the pointers are pointing to.
1024
+ *
1025
+ * @param sd pointer to array of side data to free. Will be set to NULL
1026
+ * upon return.
1027
+ * @param nb_sd pointer to an integer containing the number of entries in
1028
+ * the array. Will be set to 0 upon return.
1029
+ */
1030
+ void av_frame_side_data_free(AVFrameSideData ***sd, int *nb_sd);
1031
+
1032
+ /**
1033
+ * Remove existing entries before adding new ones.
1034
+ */
1035
+ #define AV_FRAME_SIDE_DATA_FLAG_UNIQUE (1 << 0)
1036
+ /**
1037
+ * Don't add a new entry if another of the same type exists.
1038
+ * Applies only for side data types without the AV_SIDE_DATA_PROP_MULTI prop.
1039
+ */
1040
+ #define AV_FRAME_SIDE_DATA_FLAG_REPLACE (1 << 1)
1041
+ /**
1042
+ * Create a new reference to the passed in buffer instead of taking ownership
1043
+ * of it.
1044
+ */
1045
+ #define AV_FRAME_SIDE_DATA_FLAG_NEW_REF (1 << 2)
1046
+
1047
+ /**
1048
+ * Add new side data entry to an array.
1049
+ *
1050
+ * @param sd pointer to array of side data to which to add another entry,
1051
+ * or to NULL in order to start a new array.
1052
+ * @param nb_sd pointer to an integer containing the number of entries in
1053
+ * the array.
1054
+ * @param type type of the added side data
1055
+ * @param size size of the side data
1056
+ * @param flags Some combination of AV_FRAME_SIDE_DATA_FLAG_* flags, or 0.
1057
+ *
1058
+ * @return newly added side data on success, NULL on error.
1059
+ * @note In case of AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of
1060
+ * matching AVFrameSideDataType will be removed before the addition
1061
+ * is attempted.
1062
+ * @note In case of AV_FRAME_SIDE_DATA_FLAG_REPLACE being set, if an
1063
+ * entry of the same type already exists, it will be replaced instead.
1064
+ */
1065
+ AVFrameSideData *av_frame_side_data_new(AVFrameSideData ***sd, int *nb_sd,
1066
+ enum AVFrameSideDataType type,
1067
+ size_t size, unsigned int flags);
1068
+
1069
+ /**
1070
+ * Add a new side data entry to an array from an existing AVBufferRef.
1071
+ *
1072
+ * @param sd pointer to array of side data to which to add another entry,
1073
+ * or to NULL in order to start a new array.
1074
+ * @param nb_sd pointer to an integer containing the number of entries in
1075
+ * the array.
1076
+ * @param type type of the added side data
1077
+ * @param buf Pointer to AVBufferRef to add to the array. On success,
1078
+ * the function takes ownership of the AVBufferRef and *buf is
1079
+ * set to NULL, unless AV_FRAME_SIDE_DATA_FLAG_NEW_REF is set
1080
+ * in which case the ownership will remain with the caller.
1081
+ * @param flags Some combination of AV_FRAME_SIDE_DATA_FLAG_* flags, or 0.
1082
+ *
1083
+ * @return newly added side data on success, NULL on error.
1084
+ * @note In case of AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of
1085
+ * matching AVFrameSideDataType will be removed before the addition
1086
+ * is attempted.
1087
+ * @note In case of AV_FRAME_SIDE_DATA_FLAG_REPLACE being set, if an
1088
+ * entry of the same type already exists, it will be replaced instead.
1089
+ *
1090
+ */
1091
+ AVFrameSideData *av_frame_side_data_add(AVFrameSideData ***sd, int *nb_sd,
1092
+ enum AVFrameSideDataType type,
1093
+ AVBufferRef **buf, unsigned int flags);
1094
+
1095
+ /**
1096
+ * Add a new side data entry to an array based on existing side data, taking
1097
+ * a reference towards the contained AVBufferRef.
1098
+ *
1099
+ * @param sd pointer to array of side data to which to add another entry,
1100
+ * or to NULL in order to start a new array.
1101
+ * @param nb_sd pointer to an integer containing the number of entries in
1102
+ * the array.
1103
+ * @param src side data to be cloned, with a new reference utilized
1104
+ * for the buffer.
1105
+ * @param flags Some combination of AV_FRAME_SIDE_DATA_FLAG_* flags, or 0.
1106
+ *
1107
+ * @return negative error code on failure, >=0 on success.
1108
+ * @note In case of AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of
1109
+ * matching AVFrameSideDataType will be removed before the addition
1110
+ * is attempted.
1111
+ * @note In case of AV_FRAME_SIDE_DATA_FLAG_REPLACE being set, if an
1112
+ * entry of the same type already exists, it will be replaced instead.
1113
+ */
1114
+ int av_frame_side_data_clone(AVFrameSideData ***sd, int *nb_sd,
1115
+ const AVFrameSideData *src, unsigned int flags);
1116
+
1117
+ /**
1118
+ * Get a side data entry of a specific type from an array.
1119
+ *
1120
+ * @param sd array of side data.
1121
+ * @param nb_sd integer containing the number of entries in the array.
1122
+ * @param type type of side data to be queried
1123
+ *
1124
+ * @return a pointer to the side data of a given type on success, NULL if there
1125
+ * is no side data with such type in this set.
1126
+ */
1127
+ const AVFrameSideData *av_frame_side_data_get_c(const AVFrameSideData * const *sd,
1128
+ const int nb_sd,
1129
+ enum AVFrameSideDataType type);
1130
+
1131
+ /**
1132
+ * Wrapper around av_frame_side_data_get_c() to workaround the limitation
1133
+ * that for any type T the conversion from T * const * to const T * const *
1134
+ * is not performed automatically in C.
1135
+ * @see av_frame_side_data_get_c()
1136
+ */
1137
+ static inline
1138
+ const AVFrameSideData *av_frame_side_data_get(AVFrameSideData * const *sd,
1139
+ const int nb_sd,
1140
+ enum AVFrameSideDataType type)
1141
+ {
1142
+ return av_frame_side_data_get_c((const AVFrameSideData * const *)sd,
1143
+ nb_sd, type);
1144
+ }
1145
+
1146
+ /**
1147
+ * Remove and free all side data instances of the given type from an array.
1148
+ */
1149
+ void av_frame_side_data_remove(AVFrameSideData ***sd, int *nb_sd,
1150
+ enum AVFrameSideDataType type);
1151
+
1152
+ /**
1153
+ * Remove and free all side data instances that match any of the given
1154
+ * side data properties. (See enum AVSideDataProps)
1155
+ */
1156
+ void av_frame_side_data_remove_by_props(AVFrameSideData ***sd, int *nb_sd,
1157
+ int props);
1158
+
1159
+ /**
1160
+ * @}
1161
+ */
1162
+
1163
+ #endif /* AVUTIL_FRAME_H */