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

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 (214) hide show
  1. package/RNAudioAPI.podspec +15 -6
  2. package/android/build.gradle +10 -1
  3. package/android/src/main/cpp/audioapi/CMakeLists.txt +21 -5
  4. package/android/src/main/jniLibs/arm64-v8a/libavcodec.so +0 -0
  5. package/android/src/main/jniLibs/arm64-v8a/libavformat.so +0 -0
  6. package/android/src/main/jniLibs/arm64-v8a/libavutil.so +0 -0
  7. package/android/src/main/jniLibs/arm64-v8a/libswresample.so +0 -0
  8. package/android/src/main/jniLibs/armeabi-v7a/libavcodec.so +0 -0
  9. package/android/src/main/jniLibs/armeabi-v7a/libavformat.so +0 -0
  10. package/android/src/main/jniLibs/armeabi-v7a/libavutil.so +0 -0
  11. package/android/src/main/jniLibs/armeabi-v7a/libswresample.so +0 -0
  12. package/android/src/main/jniLibs/x86/libavcodec.so +0 -0
  13. package/android/src/main/jniLibs/x86/libavformat.so +0 -0
  14. package/android/src/main/jniLibs/x86/libavutil.so +0 -0
  15. package/android/src/main/jniLibs/x86/libswresample.so +0 -0
  16. package/android/src/main/jniLibs/x86_64/libavcodec.so +0 -0
  17. package/android/src/main/jniLibs/x86_64/libavformat.so +0 -0
  18. package/android/src/main/jniLibs/x86_64/libavutil.so +0 -0
  19. package/android/src/main/jniLibs/x86_64/libswresample.so +0 -0
  20. package/common/cpp/audioapi/HostObjects/BaseAudioContextHostObject.h +11 -0
  21. package/common/cpp/audioapi/HostObjects/StreamerNodeHostObject.h +30 -0
  22. package/common/cpp/audioapi/core/BaseAudioContext.cpp +9 -0
  23. package/common/cpp/audioapi/core/BaseAudioContext.h +2 -0
  24. package/common/cpp/audioapi/core/sources/StreamerNode.cpp +299 -0
  25. package/common/cpp/audioapi/core/sources/StreamerNode.h +123 -0
  26. package/common/cpp/audioapi/external/arm64-v8a/libcrypto.a +0 -0
  27. package/common/cpp/audioapi/external/arm64-v8a/libssl.a +0 -0
  28. package/common/cpp/audioapi/external/armeabi-v7a/libcrypto.a +0 -0
  29. package/common/cpp/audioapi/external/armeabi-v7a/libssl.a +0 -0
  30. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/ac3_parser.h +36 -0
  31. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/adts_parser.h +37 -0
  32. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avcodec.h +2947 -0
  33. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/avdct.h +88 -0
  34. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/bsf.h +332 -0
  35. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec.h +367 -0
  36. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_desc.h +134 -0
  37. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_id.h +681 -0
  38. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/codec_par.h +248 -0
  39. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/d3d11va.h +109 -0
  40. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/defs.h +359 -0
  41. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/dirac.h +135 -0
  42. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/dv_profile.h +82 -0
  43. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/dxva2.h +90 -0
  44. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/jni.h +67 -0
  45. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/mediacodec.h +103 -0
  46. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/packet.h +907 -0
  47. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/qsv.h +109 -0
  48. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/vdpau.h +138 -0
  49. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version.h +45 -0
  50. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/version_major.h +55 -0
  51. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/videotoolbox.h +85 -0
  52. package/common/cpp/audioapi/external/ffmpeg_include/libavcodec/vorbis_parser.h +74 -0
  53. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avformat.h +3004 -0
  54. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/avio.h +831 -0
  55. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version.h +47 -0
  56. package/common/cpp/audioapi/external/ffmpeg_include/libavformat/version_major.h +50 -0
  57. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/adler32.h +63 -0
  58. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/aes.h +69 -0
  59. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/aes_ctr.h +99 -0
  60. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ambient_viewing_environment.h +72 -0
  61. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/attributes.h +175 -0
  62. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/audio_fifo.h +187 -0
  63. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avassert.h +120 -0
  64. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avconfig.h +6 -0
  65. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avstring.h +428 -0
  66. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/avutil.h +364 -0
  67. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/base64.h +72 -0
  68. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/blowfish.h +82 -0
  69. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/bprint.h +254 -0
  70. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/bswap.h +105 -0
  71. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/buffer.h +322 -0
  72. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/camellia.h +70 -0
  73. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/cast5.h +80 -0
  74. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/channel_layout.h +762 -0
  75. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/common.h +589 -0
  76. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/container_fifo.h +130 -0
  77. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/cpu.h +150 -0
  78. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/crc.h +102 -0
  79. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/csp.h +192 -0
  80. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/des.h +81 -0
  81. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/detection_bbox.h +108 -0
  82. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dict.h +242 -0
  83. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/display.h +109 -0
  84. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/dovi_meta.h +396 -0
  85. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/downmix_info.h +115 -0
  86. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/encryption_info.h +205 -0
  87. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/error.h +129 -0
  88. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/eval.h +140 -0
  89. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/executor.h +67 -0
  90. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ffversion.h +5 -0
  91. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/fifo.h +242 -0
  92. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/file.h +62 -0
  93. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/film_grain_params.h +282 -0
  94. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/frame.h +1163 -0
  95. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hash.h +264 -0
  96. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_metadata.h +376 -0
  97. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hdr_dynamic_vivid_metadata.h +292 -0
  98. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hmac.h +99 -0
  99. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext.h +601 -0
  100. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_amf.h +46 -0
  101. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_cuda.h +74 -0
  102. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_d3d11va.h +178 -0
  103. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_d3d12va.h +142 -0
  104. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_drm.h +169 -0
  105. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_dxva2.h +75 -0
  106. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_mediacodec.h +61 -0
  107. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_oh.h +34 -0
  108. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_opencl.h +100 -0
  109. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_qsv.h +87 -0
  110. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vaapi.h +117 -0
  111. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vdpau.h +44 -0
  112. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_videotoolbox.h +106 -0
  113. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/hwcontext_vulkan.h +377 -0
  114. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/iamf.h +694 -0
  115. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/imgutils.h +377 -0
  116. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/intfloat.h +77 -0
  117. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/intreadwrite.h +677 -0
  118. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lfg.h +81 -0
  119. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/log.h +427 -0
  120. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/lzo.h +66 -0
  121. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/macros.h +80 -0
  122. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mastering_display_metadata.h +137 -0
  123. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mathematics.h +300 -0
  124. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/md5.h +89 -0
  125. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/mem.h +607 -0
  126. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/motion_vector.h +57 -0
  127. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/murmur3.h +115 -0
  128. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/opt.h +1194 -0
  129. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/parseutils.h +197 -0
  130. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/pixdesc.h +440 -0
  131. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/pixelutils.h +51 -0
  132. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/pixfmt.h +797 -0
  133. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/random_seed.h +57 -0
  134. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rational.h +225 -0
  135. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/rc4.h +69 -0
  136. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/refstruct.h +297 -0
  137. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/replaygain.h +50 -0
  138. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/ripemd.h +83 -0
  139. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/samplefmt.h +269 -0
  140. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/sha.h +90 -0
  141. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/sha512.h +92 -0
  142. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/spherical.h +243 -0
  143. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/stereo3d.h +325 -0
  144. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tdrdi.h +164 -0
  145. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tea.h +71 -0
  146. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/threadmessage.h +115 -0
  147. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/timecode.h +199 -0
  148. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/timestamp.h +85 -0
  149. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tree.h +137 -0
  150. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/twofish.h +70 -0
  151. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/tx.h +210 -0
  152. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/uuid.h +146 -0
  153. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/version.h +119 -0
  154. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_enc_params.h +171 -0
  155. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/video_hint.h +107 -0
  156. package/common/cpp/audioapi/external/ffmpeg_include/libavutil/xtea.h +94 -0
  157. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/swresample.h +587 -0
  158. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version.h +46 -0
  159. package/common/cpp/audioapi/external/ffmpeg_include/libswresample/version_major.h +31 -0
  160. package/common/cpp/audioapi/external/libavcodec.xcframework/Info.plist +44 -0
  161. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/Info.plist +1 -0
  162. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64/libavcodec.framework/libavcodec +0 -0
  163. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/Info.plist +1 -0
  164. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec +0 -0
  165. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec.framework/Info.plist +1 -0
  166. package/common/cpp/audioapi/external/libavcodec.xcframework/ios-arm64_x86_64-simulator/libavcodec.framework/libavcodec.framework/libavcodec +0 -0
  167. package/common/cpp/audioapi/external/libavformat.xcframework/Info.plist +44 -0
  168. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/Info.plist +1 -0
  169. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64/libavformat.framework/libavformat +0 -0
  170. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/Info.plist +1 -0
  171. package/common/cpp/audioapi/external/libavformat.xcframework/ios-arm64_x86_64-simulator/libavformat.framework/libavformat +0 -0
  172. package/common/cpp/audioapi/external/libavutil.xcframework/Info.plist +44 -0
  173. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/Info.plist +1 -0
  174. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64/libavutil.framework/libavutil +0 -0
  175. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/Info.plist +1 -0
  176. package/common/cpp/audioapi/external/libavutil.xcframework/ios-arm64_x86_64-simulator/libavutil.framework/libavutil +0 -0
  177. package/common/cpp/audioapi/external/libswresample.xcframework/Info.plist +44 -0
  178. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/Info.plist +1 -0
  179. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64/libswresample.framework/libswresample +0 -0
  180. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/Info.plist +1 -0
  181. package/common/cpp/audioapi/external/libswresample.xcframework/ios-arm64_x86_64-simulator/libswresample.framework/libswresample +0 -0
  182. package/common/cpp/audioapi/external/x86/libcrypto.a +0 -0
  183. package/common/cpp/audioapi/external/x86/libssl.a +0 -0
  184. package/common/cpp/audioapi/external/x86_64/libcrypto.a +0 -0
  185. package/common/cpp/audioapi/external/x86_64/libssl.a +0 -0
  186. package/common/cpp/audioapi/libs/ffmpeg/INSTRUCTIONS.md +26 -0
  187. package/common/cpp/audioapi/libs/ffmpeg/create_xcframework.sh +111 -0
  188. package/common/cpp/audioapi/libs/ffmpeg/ffmpeg_setup.sh +360 -0
  189. package/common/cpp/test/CMakeLists.txt +5 -1
  190. package/lib/commonjs/api.js +7 -0
  191. package/lib/commonjs/api.js.map +1 -1
  192. package/lib/commonjs/core/BaseAudioContext.js +4 -0
  193. package/lib/commonjs/core/BaseAudioContext.js.map +1 -1
  194. package/lib/commonjs/core/StreamerNode.js +15 -0
  195. package/lib/commonjs/core/StreamerNode.js.map +1 -0
  196. package/lib/module/api.js +1 -0
  197. package/lib/module/api.js.map +1 -1
  198. package/lib/module/core/BaseAudioContext.js +4 -0
  199. package/lib/module/core/BaseAudioContext.js.map +1 -1
  200. package/lib/module/core/StreamerNode.js +9 -0
  201. package/lib/module/core/StreamerNode.js.map +1 -0
  202. package/lib/typescript/api.d.ts +1 -0
  203. package/lib/typescript/api.d.ts.map +1 -1
  204. package/lib/typescript/core/BaseAudioContext.d.ts +2 -0
  205. package/lib/typescript/core/BaseAudioContext.d.ts.map +1 -1
  206. package/lib/typescript/core/StreamerNode.d.ts +5 -0
  207. package/lib/typescript/core/StreamerNode.d.ts.map +1 -0
  208. package/lib/typescript/interfaces.d.ts +4 -0
  209. package/lib/typescript/interfaces.d.ts.map +1 -1
  210. package/package.json +1 -1
  211. package/src/api.ts +1 -0
  212. package/src/core/BaseAudioContext.ts +5 -0
  213. package/src/core/StreamerNode.ts +8 -0
  214. package/src/interfaces.ts +5 -0
@@ -0,0 +1,164 @@
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_video_3d_reference_displays_info
22
+ * Spherical video
23
+ */
24
+
25
+ #ifndef AVUTIL_TDRDI_H
26
+ #define AVUTIL_TDRDI_H
27
+
28
+ #include <stddef.h>
29
+ #include <stdint.h>
30
+
31
+ #include "libavutil/avassert.h"
32
+
33
+ /**
34
+ * @defgroup lavu_video_3d_reference_displays_info 3D Reference Displays Information
35
+ * @ingroup lavu_video
36
+ *
37
+ * The 3D Reference Displays Information describes information about the reference display
38
+ * width(s) and reference viewing distance(s) as well as information about the corresponding
39
+ * reference stereo pair(s).
40
+ * @{
41
+ */
42
+
43
+ #define AV_TDRDI_MAX_NUM_REF_DISPLAY 32
44
+
45
+ /**
46
+ * This structure describes information about the reference display width(s) and reference
47
+ * viewing distance(s) as well as information about the corresponding reference stereo pair(s).
48
+ * See section G.14.3.2.3 of ITU-T H.265 for more information.
49
+ *
50
+ * @note The struct must be allocated with av_tdrdi_alloc() and
51
+ * its size is not a part of the public ABI.
52
+ */
53
+ typedef struct AV3DReferenceDisplaysInfo {
54
+ /**
55
+ * The exponent of the maximum allowable truncation error for
56
+ * {exponent,mantissa}_ref_display_width as given by 2<sup>(-prec_ref_display_width)</sup>.
57
+ */
58
+ uint8_t prec_ref_display_width;
59
+
60
+ /**
61
+ * A flag to indicate the presence of reference viewing distance.
62
+ * If false, the values of prec_ref_viewing_dist, exponent_ref_viewing_distance,
63
+ * and mantissa_ref_viewing_distance are undefined.
64
+ */
65
+ uint8_t ref_viewing_distance_flag;
66
+
67
+ /**
68
+ * The exponent of the maximum allowable truncation error for
69
+ * {exponent,mantissa}_ref_viewing_distance as given by 2<sup>^(-prec_ref_viewing_dist)</sup>.
70
+ * The value of prec_ref_viewing_dist shall be in the range of 0 to 31, inclusive.
71
+ */
72
+ uint8_t prec_ref_viewing_dist;
73
+
74
+ /**
75
+ * The number of reference displays that are signalled in this struct.
76
+ * Allowed range is 1 to 32, inclusive.
77
+ */
78
+ uint8_t num_ref_displays;
79
+
80
+ /**
81
+ * Offset in bytes from the beginning of this structure at which the array
82
+ * of reference displays starts.
83
+ */
84
+ size_t entries_offset;
85
+
86
+ /**
87
+ * Size of each entry in bytes. May not match sizeof(AV3DReferenceDisplay).
88
+ */
89
+ size_t entry_size;
90
+ } AV3DReferenceDisplaysInfo;
91
+
92
+ /**
93
+ * Data structure for single deference display information.
94
+ * It is allocated as a part of AV3DReferenceDisplaysInfo and should be retrieved with
95
+ * av_tdrdi_get_display().
96
+ *
97
+ * sizeof(AV3DReferenceDisplay) is not a part of the ABI and new fields may be
98
+ * added to it.
99
+ */
100
+ typedef struct AV3DReferenceDisplay {
101
+ /**
102
+ * The ViewId of the left view of a stereo pair corresponding to the n-th reference display.
103
+ */
104
+ uint16_t left_view_id;
105
+
106
+ /**
107
+ * The ViewId of the left view of a stereo pair corresponding to the n-th reference display.
108
+ */
109
+ uint16_t right_view_id;
110
+
111
+ /**
112
+ * The exponent part of the reference display width of the n-th reference display.
113
+ */
114
+ uint8_t exponent_ref_display_width;
115
+
116
+ /**
117
+ * The mantissa part of the reference display width of the n-th reference display.
118
+ */
119
+ uint8_t mantissa_ref_display_width;
120
+
121
+ /**
122
+ * Tthe exponent part of the reference viewing distance of the n-th reference display.
123
+ */
124
+ uint8_t exponent_ref_viewing_distance;
125
+
126
+ /**
127
+ * The mantissa part of the reference viewing distance of the n-th reference display.
128
+ */
129
+ uint8_t mantissa_ref_viewing_distance;
130
+
131
+ /**
132
+ * An array of flags to indicates that the information about additional horizontal shift of
133
+ * the left and right views for the n-th reference display is present.
134
+ */
135
+ uint8_t additional_shift_present_flag;
136
+
137
+ /**
138
+ * The recommended additional horizontal shift for a stereo pair corresponding to the n-th
139
+ * reference baseline and the n-th reference display.
140
+ */
141
+ int16_t num_sample_shift;
142
+ } AV3DReferenceDisplay;
143
+
144
+ static av_always_inline AV3DReferenceDisplay*
145
+ av_tdrdi_get_display(AV3DReferenceDisplaysInfo *tdrdi, unsigned int idx)
146
+ {
147
+ av_assert0(idx < tdrdi->num_ref_displays);
148
+ return (AV3DReferenceDisplay *)((uint8_t *)tdrdi + tdrdi->entries_offset +
149
+ idx * tdrdi->entry_size);
150
+ }
151
+
152
+ /**
153
+ * Allocate a AV3DReferenceDisplaysInfo structure and initialize its fields to default
154
+ * values.
155
+ *
156
+ * @return the newly allocated struct or NULL on failure
157
+ */
158
+ AV3DReferenceDisplaysInfo *av_tdrdi_alloc(unsigned int nb_displays, size_t *size);
159
+
160
+ /**
161
+ * @}
162
+ */
163
+
164
+ #endif /* AVUTIL_TDRDI_H */
@@ -0,0 +1,71 @@
1
+ /*
2
+ * A 32-bit implementation of the TEA algorithm
3
+ * Copyright (c) 2015 Vesselin Bontchev
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
+
22
+ #ifndef AVUTIL_TEA_H
23
+ #define AVUTIL_TEA_H
24
+
25
+ #include <stdint.h>
26
+
27
+ /**
28
+ * @file
29
+ * @brief Public header for libavutil TEA algorithm
30
+ * @defgroup lavu_tea TEA
31
+ * @ingroup lavu_crypto
32
+ * @{
33
+ */
34
+
35
+ extern const int av_tea_size;
36
+
37
+ struct AVTEA;
38
+
39
+ /**
40
+ * Allocate an AVTEA context
41
+ * To free the struct: av_free(ptr)
42
+ */
43
+ struct AVTEA *av_tea_alloc(void);
44
+
45
+ /**
46
+ * Initialize an AVTEA context.
47
+ *
48
+ * @param ctx an AVTEA context
49
+ * @param key a key of 16 bytes used for encryption/decryption
50
+ * @param rounds the number of rounds in TEA (64 is the "standard")
51
+ */
52
+ void av_tea_init(struct AVTEA *ctx, const uint8_t key[16], int rounds);
53
+
54
+ /**
55
+ * Encrypt or decrypt a buffer using a previously initialized context.
56
+ *
57
+ * @param ctx an AVTEA context
58
+ * @param dst destination array, can be equal to src
59
+ * @param src source array, can be equal to dst
60
+ * @param count number of 8 byte blocks
61
+ * @param iv initialization vector for CBC mode, if NULL then ECB will be used
62
+ * @param decrypt 0 for encryption, 1 for decryption
63
+ */
64
+ void av_tea_crypt(struct AVTEA *ctx, uint8_t *dst, const uint8_t *src,
65
+ int count, uint8_t *iv, int decrypt);
66
+
67
+ /**
68
+ * @}
69
+ */
70
+
71
+ #endif /* AVUTIL_TEA_H */
@@ -0,0 +1,115 @@
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 License
6
+ * 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
12
+ * GNU Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public License
15
+ * along with FFmpeg; if not, write to the Free Software Foundation, Inc.,
16
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
19
+ #ifndef AVUTIL_THREADMESSAGE_H
20
+ #define AVUTIL_THREADMESSAGE_H
21
+
22
+ typedef struct AVThreadMessageQueue AVThreadMessageQueue;
23
+
24
+ typedef enum AVThreadMessageFlags {
25
+
26
+ /**
27
+ * Perform non-blocking operation.
28
+ * If this flag is set, send and recv operations are non-blocking and
29
+ * return AVERROR(EAGAIN) immediately if they can not proceed.
30
+ */
31
+ AV_THREAD_MESSAGE_NONBLOCK = 1,
32
+
33
+ } AVThreadMessageFlags;
34
+
35
+ /**
36
+ * Allocate a new message queue.
37
+ *
38
+ * @param mq pointer to the message queue
39
+ * @param nelem maximum number of elements in the queue
40
+ * @param elsize size of each element in the queue
41
+ * @return >=0 for success; <0 for error, in particular AVERROR(ENOSYS) if
42
+ * lavu was built without thread support
43
+ */
44
+ int av_thread_message_queue_alloc(AVThreadMessageQueue **mq,
45
+ unsigned nelem,
46
+ unsigned elsize);
47
+
48
+ /**
49
+ * Free a message queue.
50
+ *
51
+ * The message queue must no longer be in use by another thread.
52
+ */
53
+ void av_thread_message_queue_free(AVThreadMessageQueue **mq);
54
+
55
+ /**
56
+ * Send a message on the queue.
57
+ */
58
+ int av_thread_message_queue_send(AVThreadMessageQueue *mq,
59
+ void *msg,
60
+ unsigned flags);
61
+
62
+ /**
63
+ * Receive a message from the queue.
64
+ */
65
+ int av_thread_message_queue_recv(AVThreadMessageQueue *mq,
66
+ void *msg,
67
+ unsigned flags);
68
+
69
+ /**
70
+ * Set the sending error code.
71
+ *
72
+ * If the error code is set to non-zero, av_thread_message_queue_send() will
73
+ * return it immediately. Conventional values, such as AVERROR_EOF or
74
+ * AVERROR(EAGAIN), can be used to cause the sending thread to stop or
75
+ * suspend its operation.
76
+ */
77
+ void av_thread_message_queue_set_err_send(AVThreadMessageQueue *mq,
78
+ int err);
79
+
80
+ /**
81
+ * Set the receiving error code.
82
+ *
83
+ * If the error code is set to non-zero, av_thread_message_queue_recv() will
84
+ * return it immediately when there are no longer available messages.
85
+ * Conventional values, such as AVERROR_EOF or AVERROR(EAGAIN), can be used
86
+ * to cause the receiving thread to stop or suspend its operation.
87
+ */
88
+ void av_thread_message_queue_set_err_recv(AVThreadMessageQueue *mq,
89
+ int err);
90
+
91
+ /**
92
+ * Set the optional free message callback function which will be called if an
93
+ * operation is removing messages from the queue.
94
+ */
95
+ void av_thread_message_queue_set_free_func(AVThreadMessageQueue *mq,
96
+ void (*free_func)(void *msg));
97
+
98
+ /**
99
+ * Return the current number of messages in the queue.
100
+ *
101
+ * @return the current number of messages or AVERROR(ENOSYS) if lavu was built
102
+ * without thread support
103
+ */
104
+ int av_thread_message_queue_nb_elems(AVThreadMessageQueue *mq);
105
+
106
+ /**
107
+ * Flush the message queue
108
+ *
109
+ * This function is mostly equivalent to reading and free-ing every message
110
+ * except that it will be done in a single operation (no lock/unlock between
111
+ * reads).
112
+ */
113
+ void av_thread_message_flush(AVThreadMessageQueue *mq);
114
+
115
+ #endif /* AVUTIL_THREADMESSAGE_H */
@@ -0,0 +1,199 @@
1
+ /*
2
+ * Copyright (c) 2006 Smartjog S.A.S, Baptiste Coudurier <baptiste.coudurier@gmail.com>
3
+ * Copyright (c) 2011-2012 Smartjog S.A.S, Clément Bœsch <clement.boesch@smartjog.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
+
22
+ /**
23
+ * @file
24
+ * Timecode helpers header
25
+ */
26
+
27
+ #ifndef AVUTIL_TIMECODE_H
28
+ #define AVUTIL_TIMECODE_H
29
+
30
+ #include <stdint.h>
31
+ #include "rational.h"
32
+
33
+ #define AV_TIMECODE_STR_SIZE 23
34
+
35
+ enum AVTimecodeFlag {
36
+ AV_TIMECODE_FLAG_DROPFRAME = 1<<0, ///< timecode is drop frame
37
+ AV_TIMECODE_FLAG_24HOURSMAX = 1<<1, ///< timecode wraps after 24 hours
38
+ AV_TIMECODE_FLAG_ALLOWNEGATIVE = 1<<2, ///< negative time values are allowed
39
+ };
40
+
41
+ typedef struct {
42
+ int start; ///< timecode frame start (first base frame number)
43
+ uint32_t flags; ///< flags such as drop frame, +24 hours support, ...
44
+ AVRational rate; ///< frame rate in rational form
45
+ unsigned fps; ///< frame per second; must be consistent with the rate field
46
+ } AVTimecode;
47
+
48
+ /**
49
+ * Adjust frame number for NTSC drop frame time code.
50
+ *
51
+ * @param framenum frame number to adjust
52
+ * @param fps frame per second, multiples of 30
53
+ * @return adjusted frame number
54
+ * @warning adjustment is only valid for multiples of NTSC 29.97
55
+ */
56
+ int av_timecode_adjust_ntsc_framenum2(int framenum, int fps);
57
+
58
+ /**
59
+ * Convert frame number to SMPTE 12M binary representation.
60
+ *
61
+ * @param tc timecode data correctly initialized
62
+ * @param framenum frame number
63
+ * @return the SMPTE binary representation
64
+ *
65
+ * See SMPTE ST 314M-2005 Sec 4.4.2.2.1 "Time code pack (TC)"
66
+ * the format description as follows:
67
+ * bits 0-5: hours, in BCD(6bits)
68
+ * bits 6: BGF1
69
+ * bits 7: BGF2 (NTSC) or FIELD (PAL)
70
+ * bits 8-14: minutes, in BCD(7bits)
71
+ * bits 15: BGF0 (NTSC) or BGF2 (PAL)
72
+ * bits 16-22: seconds, in BCD(7bits)
73
+ * bits 23: FIELD (NTSC) or BGF0 (PAL)
74
+ * bits 24-29: frames, in BCD(6bits)
75
+ * bits 30: drop frame flag (0: non drop, 1: drop)
76
+ * bits 31: color frame flag (0: unsync mode, 1: sync mode)
77
+ * @note BCD numbers (6 or 7 bits): 4 or 5 lower bits for units, 2 higher bits for tens.
78
+ * @note Frame number adjustment is automatically done in case of drop timecode,
79
+ * you do NOT have to call av_timecode_adjust_ntsc_framenum2().
80
+ * @note The frame number is relative to tc->start.
81
+ * @note Color frame (CF) and binary group flags (BGF) bits are set to zero.
82
+ */
83
+ uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum);
84
+
85
+ /**
86
+ * Convert sei info to SMPTE 12M binary representation.
87
+ *
88
+ * @param rate frame rate in rational form
89
+ * @param drop drop flag
90
+ * @param hh hour
91
+ * @param mm minute
92
+ * @param ss second
93
+ * @param ff frame number
94
+ * @return the SMPTE binary representation
95
+ */
96
+ uint32_t av_timecode_get_smpte(AVRational rate, int drop, int hh, int mm, int ss, int ff);
97
+
98
+ /**
99
+ * Load timecode string in buf.
100
+ *
101
+ * @param tc timecode data correctly initialized
102
+ * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long
103
+ * @param framenum frame number
104
+ * @return the buf parameter
105
+ *
106
+ * @note Timecode representation can be a negative timecode and have more than
107
+ * 24 hours, but will only be honored if the flags are correctly set.
108
+ * @note The frame number is relative to tc->start.
109
+ */
110
+ char *av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum);
111
+
112
+ /**
113
+ * Get the timecode string from the SMPTE timecode format.
114
+ *
115
+ * In contrast to av_timecode_make_smpte_tc_string this function supports 50/60
116
+ * fps timecodes by using the field bit.
117
+ *
118
+ * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long
119
+ * @param rate frame rate of the timecode
120
+ * @param tcsmpte the 32-bit SMPTE timecode
121
+ * @param prevent_df prevent the use of a drop flag when it is known the DF bit
122
+ * is arbitrary
123
+ * @param skip_field prevent the use of a field flag when it is known the field
124
+ * bit is arbitrary (e.g. because it is used as PC flag)
125
+ * @return the buf parameter
126
+ */
127
+ char *av_timecode_make_smpte_tc_string2(char *buf, AVRational rate, uint32_t tcsmpte, int prevent_df, int skip_field);
128
+
129
+ /**
130
+ * Get the timecode string from the SMPTE timecode format.
131
+ *
132
+ * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long
133
+ * @param tcsmpte the 32-bit SMPTE timecode
134
+ * @param prevent_df prevent the use of a drop flag when it is known the DF bit
135
+ * is arbitrary
136
+ * @return the buf parameter
137
+ */
138
+ char *av_timecode_make_smpte_tc_string(char *buf, uint32_t tcsmpte, int prevent_df);
139
+
140
+ /**
141
+ * Get the timecode string from the 25-bit timecode format (MPEG GOP format).
142
+ *
143
+ * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long
144
+ * @param tc25bit the 25-bits timecode
145
+ * @return the buf parameter
146
+ */
147
+ char *av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit);
148
+
149
+ /**
150
+ * Init a timecode struct with the passed parameters.
151
+ *
152
+ * @param tc pointer to an allocated AVTimecode
153
+ * @param rate frame rate in rational form
154
+ * @param flags miscellaneous flags such as drop frame, +24 hours, ...
155
+ * (see AVTimecodeFlag)
156
+ * @param frame_start the first frame number
157
+ * @param log_ctx a pointer to an arbitrary struct of which the first field
158
+ * is a pointer to an AVClass struct (used for av_log)
159
+ * @return 0 on success, AVERROR otherwise
160
+ */
161
+ int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start, void *log_ctx);
162
+
163
+ /**
164
+ * Init a timecode struct from the passed timecode components.
165
+ *
166
+ * @param tc pointer to an allocated AVTimecode
167
+ * @param rate frame rate in rational form
168
+ * @param flags miscellaneous flags such as drop frame, +24 hours, ...
169
+ * (see AVTimecodeFlag)
170
+ * @param hh hours
171
+ * @param mm minutes
172
+ * @param ss seconds
173
+ * @param ff frames
174
+ * @param log_ctx a pointer to an arbitrary struct of which the first field
175
+ * is a pointer to an AVClass struct (used for av_log)
176
+ * @return 0 on success, AVERROR otherwise
177
+ */
178
+ int av_timecode_init_from_components(AVTimecode *tc, AVRational rate, int flags, int hh, int mm, int ss, int ff, void *log_ctx);
179
+
180
+ /**
181
+ * Parse timecode representation (hh:mm:ss[:;.]ff).
182
+ *
183
+ * @param tc pointer to an allocated AVTimecode
184
+ * @param rate frame rate in rational form
185
+ * @param str timecode string which will determine the frame start
186
+ * @param log_ctx a pointer to an arbitrary struct of which the first field is a
187
+ * pointer to an AVClass struct (used for av_log).
188
+ * @return 0 on success, AVERROR otherwise
189
+ */
190
+ int av_timecode_init_from_string(AVTimecode *tc, AVRational rate, const char *str, void *log_ctx);
191
+
192
+ /**
193
+ * Check if the timecode feature is available for the given frame rate
194
+ *
195
+ * @return 0 if supported, <0 otherwise
196
+ */
197
+ int av_timecode_check_frame_rate(AVRational rate);
198
+
199
+ #endif /* AVUTIL_TIMECODE_H */
@@ -0,0 +1,85 @@
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
+ * timestamp utils, mostly useful for debugging/logging purposes
22
+ */
23
+
24
+ #ifndef AVUTIL_TIMESTAMP_H
25
+ #define AVUTIL_TIMESTAMP_H
26
+
27
+ #include "avutil.h"
28
+
29
+ #if defined(__cplusplus) && !defined(__STDC_FORMAT_MACROS) && !defined(PRId64)
30
+ #error missing -D__STDC_FORMAT_MACROS / #define __STDC_FORMAT_MACROS
31
+ #endif
32
+
33
+ #define AV_TS_MAX_STRING_SIZE 32
34
+
35
+ /**
36
+ * Fill the provided buffer with a string containing a timestamp
37
+ * representation.
38
+ *
39
+ * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE
40
+ * @param ts the timestamp to represent
41
+ * @return the buffer in input
42
+ */
43
+ static inline char *av_ts_make_string(char *buf, int64_t ts)
44
+ {
45
+ if (ts == AV_NOPTS_VALUE) snprintf(buf, AV_TS_MAX_STRING_SIZE, "NOPTS");
46
+ else snprintf(buf, AV_TS_MAX_STRING_SIZE, "%" PRId64, ts);
47
+ return buf;
48
+ }
49
+
50
+ /**
51
+ * Convenience macro, the return value should be used only directly in
52
+ * function arguments but never stand-alone.
53
+ */
54
+ #define av_ts2str(ts) av_ts_make_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts)
55
+
56
+ /**
57
+ * Fill the provided buffer with a string containing a timestamp time
58
+ * representation.
59
+ *
60
+ * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE
61
+ * @param ts the timestamp to represent
62
+ * @param tb the timebase of the timestamp
63
+ * @return the buffer in input
64
+ */
65
+ char *av_ts_make_time_string2(char *buf, int64_t ts, AVRational tb);
66
+
67
+ /**
68
+ * Fill the provided buffer with a string containing a timestamp
69
+ * representation.
70
+ *
71
+ * @see av_ts_make_time_string2
72
+ */
73
+ static inline char *av_ts_make_time_string(char *buf, int64_t ts,
74
+ const AVRational *tb)
75
+ {
76
+ return av_ts_make_time_string2(buf, ts, *tb);
77
+ }
78
+
79
+ /**
80
+ * Convenience macro, the return value should be used only directly in
81
+ * function arguments but never stand-alone.
82
+ */
83
+ #define av_ts2timestr(ts, tb) av_ts_make_time_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts, tb)
84
+
85
+ #endif /* AVUTIL_TIMESTAMP_H */