@drutech/react-native-audio-analyzer 1.1.1-alpha.1

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 (223) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +124 -0
  3. package/android/CMakeCache.txt +372 -0
  4. package/android/CMakeLists.txt +44 -0
  5. package/android/Makefile +211 -0
  6. package/android/build.gradle +110 -0
  7. package/android/cmake_install.cmake +49 -0
  8. package/android/cpp-adapter.cpp +40 -0
  9. package/android/ffmpeg_16kb/include/config.h +749 -0
  10. package/android/ffmpeg_16kb/include/libavcodec/ac3_parser.h +36 -0
  11. package/android/ffmpeg_16kb/include/libavcodec/adts_parser.h +37 -0
  12. package/android/ffmpeg_16kb/include/libavcodec/arm/mathops.h +108 -0
  13. package/android/ffmpeg_16kb/include/libavcodec/avcodec.h +3192 -0
  14. package/android/ffmpeg_16kb/include/libavcodec/avdct.h +88 -0
  15. package/android/ffmpeg_16kb/include/libavcodec/avfft.h +118 -0
  16. package/android/ffmpeg_16kb/include/libavcodec/bsf.h +332 -0
  17. package/android/ffmpeg_16kb/include/libavcodec/codec.h +375 -0
  18. package/android/ffmpeg_16kb/include/libavcodec/codec_desc.h +128 -0
  19. package/android/ffmpeg_16kb/include/libavcodec/codec_id.h +661 -0
  20. package/android/ffmpeg_16kb/include/libavcodec/codec_par.h +247 -0
  21. package/android/ffmpeg_16kb/include/libavcodec/d3d11va.h +112 -0
  22. package/android/ffmpeg_16kb/include/libavcodec/defs.h +192 -0
  23. package/android/ffmpeg_16kb/include/libavcodec/dirac.h +131 -0
  24. package/android/ffmpeg_16kb/include/libavcodec/dv_profile.h +82 -0
  25. package/android/ffmpeg_16kb/include/libavcodec/dxva2.h +93 -0
  26. package/android/ffmpeg_16kb/include/libavcodec/jni.h +46 -0
  27. package/android/ffmpeg_16kb/include/libavcodec/mathops.h +255 -0
  28. package/android/ffmpeg_16kb/include/libavcodec/mediacodec.h +103 -0
  29. package/android/ffmpeg_16kb/include/libavcodec/packet.h +731 -0
  30. package/android/ffmpeg_16kb/include/libavcodec/qsv.h +109 -0
  31. package/android/ffmpeg_16kb/include/libavcodec/vdpau.h +157 -0
  32. package/android/ffmpeg_16kb/include/libavcodec/version.h +45 -0
  33. package/android/ffmpeg_16kb/include/libavcodec/version_major.h +52 -0
  34. package/android/ffmpeg_16kb/include/libavcodec/videotoolbox.h +150 -0
  35. package/android/ffmpeg_16kb/include/libavcodec/vorbis_parser.h +74 -0
  36. package/android/ffmpeg_16kb/include/libavcodec/x86/mathops.h +133 -0
  37. package/android/ffmpeg_16kb/include/libavcodec/xvmc.h +171 -0
  38. package/android/ffmpeg_16kb/include/libavdevice/avdevice.h +397 -0
  39. package/android/ffmpeg_16kb/include/libavdevice/version.h +45 -0
  40. package/android/ffmpeg_16kb/include/libavdevice/version_major.h +36 -0
  41. package/android/ffmpeg_16kb/include/libavfilter/avfilter.h +1491 -0
  42. package/android/ffmpeg_16kb/include/libavfilter/buffersink.h +173 -0
  43. package/android/ffmpeg_16kb/include/libavfilter/buffersrc.h +218 -0
  44. package/android/ffmpeg_16kb/include/libavfilter/version.h +48 -0
  45. package/android/ffmpeg_16kb/include/libavfilter/version_major.h +38 -0
  46. package/android/ffmpeg_16kb/include/libavformat/avformat.h +2826 -0
  47. package/android/ffmpeg_16kb/include/libavformat/avio.h +837 -0
  48. package/android/ffmpeg_16kb/include/libavformat/network.h +341 -0
  49. package/android/ffmpeg_16kb/include/libavformat/os_support.h +317 -0
  50. package/android/ffmpeg_16kb/include/libavformat/url.h +409 -0
  51. package/android/ffmpeg_16kb/include/libavformat/version.h +47 -0
  52. package/android/ffmpeg_16kb/include/libavformat/version_major.h +52 -0
  53. package/android/ffmpeg_16kb/include/libavutil/aarch64/timer.h +50 -0
  54. package/android/ffmpeg_16kb/include/libavutil/adler32.h +63 -0
  55. package/android/ffmpeg_16kb/include/libavutil/aes.h +69 -0
  56. package/android/ffmpeg_16kb/include/libavutil/aes_ctr.h +99 -0
  57. package/android/ffmpeg_16kb/include/libavutil/ambient_viewing_environment.h +72 -0
  58. package/android/ffmpeg_16kb/include/libavutil/arm/timer.h +46 -0
  59. package/android/ffmpeg_16kb/include/libavutil/attributes.h +173 -0
  60. package/android/ffmpeg_16kb/include/libavutil/attributes_internal.h +34 -0
  61. package/android/ffmpeg_16kb/include/libavutil/audio_fifo.h +186 -0
  62. package/android/ffmpeg_16kb/include/libavutil/avassert.h +75 -0
  63. package/android/ffmpeg_16kb/include/libavutil/avconfig.h +6 -0
  64. package/android/ffmpeg_16kb/include/libavutil/avstring.h +429 -0
  65. package/android/ffmpeg_16kb/include/libavutil/avutil.h +371 -0
  66. package/android/ffmpeg_16kb/include/libavutil/base64.h +72 -0
  67. package/android/ffmpeg_16kb/include/libavutil/blowfish.h +82 -0
  68. package/android/ffmpeg_16kb/include/libavutil/bprint.h +251 -0
  69. package/android/ffmpeg_16kb/include/libavutil/bswap.h +111 -0
  70. package/android/ffmpeg_16kb/include/libavutil/buffer.h +322 -0
  71. package/android/ffmpeg_16kb/include/libavutil/camellia.h +70 -0
  72. package/android/ffmpeg_16kb/include/libavutil/cast5.h +80 -0
  73. package/android/ffmpeg_16kb/include/libavutil/channel_layout.h +783 -0
  74. package/android/ffmpeg_16kb/include/libavutil/common.h +578 -0
  75. package/android/ffmpeg_16kb/include/libavutil/cpu.h +134 -0
  76. package/android/ffmpeg_16kb/include/libavutil/crc.h +102 -0
  77. package/android/ffmpeg_16kb/include/libavutil/csp.h +150 -0
  78. package/android/ffmpeg_16kb/include/libavutil/des.h +81 -0
  79. package/android/ffmpeg_16kb/include/libavutil/detection_bbox.h +108 -0
  80. package/android/ffmpeg_16kb/include/libavutil/dict.h +241 -0
  81. package/android/ffmpeg_16kb/include/libavutil/display.h +109 -0
  82. package/android/ffmpeg_16kb/include/libavutil/dovi_meta.h +236 -0
  83. package/android/ffmpeg_16kb/include/libavutil/downmix_info.h +115 -0
  84. package/android/ffmpeg_16kb/include/libavutil/encryption_info.h +205 -0
  85. package/android/ffmpeg_16kb/include/libavutil/error.h +128 -0
  86. package/android/ffmpeg_16kb/include/libavutil/eval.h +140 -0
  87. package/android/ffmpeg_16kb/include/libavutil/ffversion.h +5 -0
  88. package/android/ffmpeg_16kb/include/libavutil/fifo.h +448 -0
  89. package/android/ffmpeg_16kb/include/libavutil/file.h +115 -0
  90. package/android/ffmpeg_16kb/include/libavutil/film_grain_params.h +260 -0
  91. package/android/ffmpeg_16kb/include/libavutil/frame.h +964 -0
  92. package/android/ffmpeg_16kb/include/libavutil/getenv_utf8.h +86 -0
  93. package/android/ffmpeg_16kb/include/libavutil/hash.h +264 -0
  94. package/android/ffmpeg_16kb/include/libavutil/hdr_dynamic_metadata.h +343 -0
  95. package/android/ffmpeg_16kb/include/libavutil/hdr_dynamic_vivid_metadata.h +285 -0
  96. package/android/ffmpeg_16kb/include/libavutil/hmac.h +99 -0
  97. package/android/ffmpeg_16kb/include/libavutil/hwcontext.h +610 -0
  98. package/android/ffmpeg_16kb/include/libavutil/hwcontext_cuda.h +69 -0
  99. package/android/ffmpeg_16kb/include/libavutil/hwcontext_d3d11va.h +178 -0
  100. package/android/ffmpeg_16kb/include/libavutil/hwcontext_drm.h +169 -0
  101. package/android/ffmpeg_16kb/include/libavutil/hwcontext_dxva2.h +75 -0
  102. package/android/ffmpeg_16kb/include/libavutil/hwcontext_mediacodec.h +61 -0
  103. package/android/ffmpeg_16kb/include/libavutil/hwcontext_opencl.h +100 -0
  104. package/android/ffmpeg_16kb/include/libavutil/hwcontext_qsv.h +64 -0
  105. package/android/ffmpeg_16kb/include/libavutil/hwcontext_vaapi.h +117 -0
  106. package/android/ffmpeg_16kb/include/libavutil/hwcontext_vdpau.h +44 -0
  107. package/android/ffmpeg_16kb/include/libavutil/hwcontext_videotoolbox.h +96 -0
  108. package/android/ffmpeg_16kb/include/libavutil/hwcontext_vulkan.h +281 -0
  109. package/android/ffmpeg_16kb/include/libavutil/imgutils.h +331 -0
  110. package/android/ffmpeg_16kb/include/libavutil/internal.h +190 -0
  111. package/android/ffmpeg_16kb/include/libavutil/intfloat.h +77 -0
  112. package/android/ffmpeg_16kb/include/libavutil/intreadwrite.h +644 -0
  113. package/android/ffmpeg_16kb/include/libavutil/lfg.h +81 -0
  114. package/android/ffmpeg_16kb/include/libavutil/libm.h +471 -0
  115. package/android/ffmpeg_16kb/include/libavutil/log.h +387 -0
  116. package/android/ffmpeg_16kb/include/libavutil/lzo.h +66 -0
  117. package/android/ffmpeg_16kb/include/libavutil/macros.h +80 -0
  118. package/android/ffmpeg_16kb/include/libavutil/mastering_display_metadata.h +128 -0
  119. package/android/ffmpeg_16kb/include/libavutil/mathematics.h +245 -0
  120. package/android/ffmpeg_16kb/include/libavutil/md5.h +89 -0
  121. package/android/ffmpeg_16kb/include/libavutil/mem.h +609 -0
  122. package/android/ffmpeg_16kb/include/libavutil/motion_vector.h +57 -0
  123. package/android/ffmpeg_16kb/include/libavutil/murmur3.h +115 -0
  124. package/android/ffmpeg_16kb/include/libavutil/opt.h +891 -0
  125. package/android/ffmpeg_16kb/include/libavutil/parseutils.h +197 -0
  126. package/android/ffmpeg_16kb/include/libavutil/pixdesc.h +435 -0
  127. package/android/ffmpeg_16kb/include/libavutil/pixelutils.h +51 -0
  128. package/android/ffmpeg_16kb/include/libavutil/pixfmt.h +691 -0
  129. package/android/ffmpeg_16kb/include/libavutil/random_seed.h +43 -0
  130. package/android/ffmpeg_16kb/include/libavutil/rational.h +221 -0
  131. package/android/ffmpeg_16kb/include/libavutil/rc4.h +69 -0
  132. package/android/ffmpeg_16kb/include/libavutil/replaygain.h +50 -0
  133. package/android/ffmpeg_16kb/include/libavutil/reverse.h +28 -0
  134. package/android/ffmpeg_16kb/include/libavutil/ripemd.h +83 -0
  135. package/android/ffmpeg_16kb/include/libavutil/samplefmt.h +269 -0
  136. package/android/ffmpeg_16kb/include/libavutil/sha.h +90 -0
  137. package/android/ffmpeg_16kb/include/libavutil/sha512.h +92 -0
  138. package/android/ffmpeg_16kb/include/libavutil/spherical.h +227 -0
  139. package/android/ffmpeg_16kb/include/libavutil/stereo3d.h +229 -0
  140. package/android/ffmpeg_16kb/include/libavutil/tea.h +71 -0
  141. package/android/ffmpeg_16kb/include/libavutil/thread.h +204 -0
  142. package/android/ffmpeg_16kb/include/libavutil/threadmessage.h +115 -0
  143. package/android/ffmpeg_16kb/include/libavutil/time.h +56 -0
  144. package/android/ffmpeg_16kb/include/libavutil/timecode.h +199 -0
  145. package/android/ffmpeg_16kb/include/libavutil/timer.h +156 -0
  146. package/android/ffmpeg_16kb/include/libavutil/timestamp.h +78 -0
  147. package/android/ffmpeg_16kb/include/libavutil/tree.h +137 -0
  148. package/android/ffmpeg_16kb/include/libavutil/twofish.h +70 -0
  149. package/android/ffmpeg_16kb/include/libavutil/tx.h +176 -0
  150. package/android/ffmpeg_16kb/include/libavutil/uuid.h +146 -0
  151. package/android/ffmpeg_16kb/include/libavutil/version.h +122 -0
  152. package/android/ffmpeg_16kb/include/libavutil/video_enc_params.h +171 -0
  153. package/android/ffmpeg_16kb/include/libavutil/x86/asm.h +154 -0
  154. package/android/ffmpeg_16kb/include/libavutil/x86/emms.h +58 -0
  155. package/android/ffmpeg_16kb/include/libavutil/x86/timer.h +50 -0
  156. package/android/ffmpeg_16kb/include/libavutil/xtea.h +94 -0
  157. package/android/ffmpeg_16kb/include/libswresample/swresample.h +650 -0
  158. package/android/ffmpeg_16kb/include/libswresample/version.h +46 -0
  159. package/android/ffmpeg_16kb/include/libswresample/version_major.h +31 -0
  160. package/android/ffmpeg_16kb/include/libswscale/swscale.h +436 -0
  161. package/android/ffmpeg_16kb/include/libswscale/version.h +44 -0
  162. package/android/ffmpeg_16kb/include/libswscale/version_major.h +35 -0
  163. package/android/ffmpeg_16kb/lib/arm64-v8a/libavcodec.so +0 -0
  164. package/android/ffmpeg_16kb/lib/arm64-v8a/libavdevice.so +0 -0
  165. package/android/ffmpeg_16kb/lib/arm64-v8a/libavfilter.so +0 -0
  166. package/android/ffmpeg_16kb/lib/arm64-v8a/libavformat.so +0 -0
  167. package/android/ffmpeg_16kb/lib/arm64-v8a/libavutil.so +0 -0
  168. package/android/ffmpeg_16kb/lib/arm64-v8a/libswresample.so +0 -0
  169. package/android/ffmpeg_16kb/lib/arm64-v8a/libswscale.so +0 -0
  170. package/android/ffmpeg_16kb/lib/armeabi-v7a/libavcodec_neon.so +0 -0
  171. package/android/ffmpeg_16kb/lib/armeabi-v7a/libavdevice_neon.so +0 -0
  172. package/android/ffmpeg_16kb/lib/armeabi-v7a/libavfilter_neon.so +0 -0
  173. package/android/ffmpeg_16kb/lib/armeabi-v7a/libavformat_neon.so +0 -0
  174. package/android/ffmpeg_16kb/lib/armeabi-v7a/libavutil_neon.so +0 -0
  175. package/android/ffmpeg_16kb/lib/armeabi-v7a/libswresample_neon.so +0 -0
  176. package/android/ffmpeg_16kb/lib/armeabi-v7a/libswscale_neon.so +0 -0
  177. package/android/ffmpeg_16kb/lib/x86/libavcodec.so +0 -0
  178. package/android/ffmpeg_16kb/lib/x86/libavdevice.so +0 -0
  179. package/android/ffmpeg_16kb/lib/x86/libavfilter.so +0 -0
  180. package/android/ffmpeg_16kb/lib/x86/libavformat.so +0 -0
  181. package/android/ffmpeg_16kb/lib/x86/libavutil.so +0 -0
  182. package/android/ffmpeg_16kb/lib/x86/libswresample.so +0 -0
  183. package/android/ffmpeg_16kb/lib/x86/libswscale.so +0 -0
  184. package/android/ffmpeg_16kb/lib/x86_64/libavcodec.so +0 -0
  185. package/android/ffmpeg_16kb/lib/x86_64/libavdevice.so +0 -0
  186. package/android/ffmpeg_16kb/lib/x86_64/libavfilter.so +0 -0
  187. package/android/ffmpeg_16kb/lib/x86_64/libavformat.so +0 -0
  188. package/android/ffmpeg_16kb/lib/x86_64/libavutil.so +0 -0
  189. package/android/ffmpeg_16kb/lib/x86_64/libswresample.so +0 -0
  190. package/android/ffmpeg_16kb/lib/x86_64/libswscale.so +0 -0
  191. package/android/gradle.properties +5 -0
  192. package/android/src/main/AndroidManifest.xml +3 -0
  193. package/android/src/main/AndroidManifestNew.xml +2 -0
  194. package/android/src/main/java/com/audioanalyzer/AmplitudeData.java +20 -0
  195. package/android/src/main/java/com/audioanalyzer/AudioAnalyzerModule.java +52 -0
  196. package/android/src/main/java/com/audioanalyzer/AudioAnalyzerPackage.java +28 -0
  197. package/cpp/react-native-audio-analyzer.cpp +143 -0
  198. package/cpp/react-native-audio-analyzer.h +27 -0
  199. package/ios/AudioAnalyzer.h +19 -0
  200. package/ios/AudioAnalyzer.mm +43 -0
  201. package/lib/commonjs/helpers.js +34 -0
  202. package/lib/commonjs/helpers.js.map +1 -0
  203. package/lib/commonjs/helpers.test.js +49 -0
  204. package/lib/commonjs/helpers.test.js.map +1 -0
  205. package/lib/commonjs/index.js +35 -0
  206. package/lib/commonjs/index.js.map +1 -0
  207. package/lib/module/helpers.js +27 -0
  208. package/lib/module/helpers.js.map +1 -0
  209. package/lib/module/helpers.test.js +47 -0
  210. package/lib/module/helpers.test.js.map +1 -0
  211. package/lib/module/index.js +15 -0
  212. package/lib/module/index.js.map +1 -0
  213. package/lib/typescript/src/helpers.d.ts +3 -0
  214. package/lib/typescript/src/helpers.d.ts.map +1 -0
  215. package/lib/typescript/src/helpers.test.d.ts +2 -0
  216. package/lib/typescript/src/helpers.test.d.ts.map +1 -0
  217. package/lib/typescript/src/index.d.ts +7 -0
  218. package/lib/typescript/src/index.d.ts.map +1 -0
  219. package/package.json +163 -0
  220. package/react-native-audio-analyzer.podspec +44 -0
  221. package/src/helpers.test.ts +59 -0
  222. package/src/helpers.ts +34 -0
  223. package/src/index.tsx +30 -0
@@ -0,0 +1,891 @@
1
+ /*
2
+ * AVOptions
3
+ * copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at>
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_OPT_H
23
+ #define AVUTIL_OPT_H
24
+
25
+ /**
26
+ * @file
27
+ * AVOptions
28
+ */
29
+
30
+ #include "rational.h"
31
+ #include "avutil.h"
32
+ #include "channel_layout.h"
33
+ #include "dict.h"
34
+ #include "log.h"
35
+ #include "pixfmt.h"
36
+ #include "samplefmt.h"
37
+
38
+ /**
39
+ * @defgroup avoptions AVOptions
40
+ * @ingroup lavu_data
41
+ * @{
42
+ * AVOptions provide a generic system to declare options on arbitrary structs
43
+ * ("objects"). An option can have a help text, a type and a range of possible
44
+ * values. Options may then be enumerated, read and written to.
45
+ *
46
+ * @section avoptions_implement Implementing AVOptions
47
+ * This section describes how to add AVOptions capabilities to a struct.
48
+ *
49
+ * All AVOptions-related information is stored in an AVClass. Therefore
50
+ * the first member of the struct should be a pointer to an AVClass describing it.
51
+ * The option field of the AVClass must be set to a NULL-terminated static array
52
+ * of AVOptions. Each AVOption must have a non-empty name, a type, a default
53
+ * value and for number-type AVOptions also a range of allowed values. It must
54
+ * also declare an offset in bytes from the start of the struct, where the field
55
+ * associated with this AVOption is located. Other fields in the AVOption struct
56
+ * should also be set when applicable, but are not required.
57
+ *
58
+ * The following example illustrates an AVOptions-enabled struct:
59
+ * @code
60
+ * typedef struct test_struct {
61
+ * const AVClass *class;
62
+ * int int_opt;
63
+ * char *str_opt;
64
+ * uint8_t *bin_opt;
65
+ * int bin_len;
66
+ * } test_struct;
67
+ *
68
+ * static const AVOption test_options[] = {
69
+ * { "test_int", "This is a test option of int type.", offsetof(test_struct, int_opt),
70
+ * AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX },
71
+ * { "test_str", "This is a test option of string type.", offsetof(test_struct, str_opt),
72
+ * AV_OPT_TYPE_STRING },
73
+ * { "test_bin", "This is a test option of binary type.", offsetof(test_struct, bin_opt),
74
+ * AV_OPT_TYPE_BINARY },
75
+ * { NULL },
76
+ * };
77
+ *
78
+ * static const AVClass test_class = {
79
+ * .class_name = "test class",
80
+ * .item_name = av_default_item_name,
81
+ * .option = test_options,
82
+ * .version = LIBAVUTIL_VERSION_INT,
83
+ * };
84
+ * @endcode
85
+ *
86
+ * Next, when allocating your struct, you must ensure that the AVClass pointer
87
+ * is set to the correct value. Then, av_opt_set_defaults() can be called to
88
+ * initialize defaults. After that the struct is ready to be used with the
89
+ * AVOptions API.
90
+ *
91
+ * When cleaning up, you may use the av_opt_free() function to automatically
92
+ * free all the allocated string and binary options.
93
+ *
94
+ * Continuing with the above example:
95
+ *
96
+ * @code
97
+ * test_struct *alloc_test_struct(void)
98
+ * {
99
+ * test_struct *ret = av_mallocz(sizeof(*ret));
100
+ * ret->class = &test_class;
101
+ * av_opt_set_defaults(ret);
102
+ * return ret;
103
+ * }
104
+ * void free_test_struct(test_struct **foo)
105
+ * {
106
+ * av_opt_free(*foo);
107
+ * av_freep(foo);
108
+ * }
109
+ * @endcode
110
+ *
111
+ * @subsection avoptions_implement_nesting Nesting
112
+ * It may happen that an AVOptions-enabled struct contains another
113
+ * AVOptions-enabled struct as a member (e.g. AVCodecContext in
114
+ * libavcodec exports generic options, while its priv_data field exports
115
+ * codec-specific options). In such a case, it is possible to set up the
116
+ * parent struct to export a child's options. To do that, simply
117
+ * implement AVClass.child_next() and AVClass.child_class_iterate() in the
118
+ * parent struct's AVClass.
119
+ * Assuming that the test_struct from above now also contains a
120
+ * child_struct field:
121
+ *
122
+ * @code
123
+ * typedef struct child_struct {
124
+ * AVClass *class;
125
+ * int flags_opt;
126
+ * } child_struct;
127
+ * static const AVOption child_opts[] = {
128
+ * { "test_flags", "This is a test option of flags type.",
129
+ * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX },
130
+ * { NULL },
131
+ * };
132
+ * static const AVClass child_class = {
133
+ * .class_name = "child class",
134
+ * .item_name = av_default_item_name,
135
+ * .option = child_opts,
136
+ * .version = LIBAVUTIL_VERSION_INT,
137
+ * };
138
+ *
139
+ * void *child_next(void *obj, void *prev)
140
+ * {
141
+ * test_struct *t = obj;
142
+ * if (!prev && t->child_struct)
143
+ * return t->child_struct;
144
+ * return NULL
145
+ * }
146
+ * const AVClass child_class_iterate(void **iter)
147
+ * {
148
+ * const AVClass *c = *iter ? NULL : &child_class;
149
+ * *iter = (void*)(uintptr_t)c;
150
+ * return c;
151
+ * }
152
+ * @endcode
153
+ * Putting child_next() and child_class_iterate() as defined above into
154
+ * test_class will now make child_struct's options accessible through
155
+ * test_struct (again, proper setup as described above needs to be done on
156
+ * child_struct right after it is created).
157
+ *
158
+ * From the above example it might not be clear why both child_next()
159
+ * and child_class_iterate() are needed. The distinction is that child_next()
160
+ * iterates over actually existing objects, while child_class_iterate()
161
+ * iterates over all possible child classes. E.g. if an AVCodecContext
162
+ * was initialized to use a codec which has private options, then its
163
+ * child_next() will return AVCodecContext.priv_data and finish
164
+ * iterating. OTOH child_class_iterate() on AVCodecContext.av_class will
165
+ * iterate over all available codecs with private options.
166
+ *
167
+ * @subsection avoptions_implement_named_constants Named constants
168
+ * It is possible to create named constants for options. Simply set the unit
169
+ * field of the option the constants should apply to a string and
170
+ * create the constants themselves as options of type AV_OPT_TYPE_CONST
171
+ * with their unit field set to the same string.
172
+ * Their default_val field should contain the value of the named
173
+ * constant.
174
+ * For example, to add some named constants for the test_flags option
175
+ * above, put the following into the child_opts array:
176
+ * @code
177
+ * { "test_flags", "This is a test option of flags type.",
178
+ * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, "test_unit" },
179
+ * { "flag1", "This is a flag with value 16", 0, AV_OPT_TYPE_CONST, { .i64 = 16 }, 0, 0, "test_unit" },
180
+ * @endcode
181
+ *
182
+ * @section avoptions_use Using AVOptions
183
+ * This section deals with accessing options in an AVOptions-enabled struct.
184
+ * Such structs in FFmpeg are e.g. AVCodecContext in libavcodec or
185
+ * AVFormatContext in libavformat.
186
+ *
187
+ * @subsection avoptions_use_examine Examining AVOptions
188
+ * The basic functions for examining options are av_opt_next(), which iterates
189
+ * over all options defined for one object, and av_opt_find(), which searches
190
+ * for an option with the given name.
191
+ *
192
+ * The situation is more complicated with nesting. An AVOptions-enabled struct
193
+ * may have AVOptions-enabled children. Passing the AV_OPT_SEARCH_CHILDREN flag
194
+ * to av_opt_find() will make the function search children recursively.
195
+ *
196
+ * For enumerating there are basically two cases. The first is when you want to
197
+ * get all options that may potentially exist on the struct and its children
198
+ * (e.g. when constructing documentation). In that case you should call
199
+ * av_opt_child_class_iterate() recursively on the parent struct's AVClass. The
200
+ * second case is when you have an already initialized struct with all its
201
+ * children and you want to get all options that can be actually written or read
202
+ * from it. In that case you should call av_opt_child_next() recursively (and
203
+ * av_opt_next() on each result).
204
+ *
205
+ * @subsection avoptions_use_get_set Reading and writing AVOptions
206
+ * When setting options, you often have a string read directly from the
207
+ * user. In such a case, simply passing it to av_opt_set() is enough. For
208
+ * non-string type options, av_opt_set() will parse the string according to the
209
+ * option type.
210
+ *
211
+ * Similarly av_opt_get() will read any option type and convert it to a string
212
+ * which will be returned. Do not forget that the string is allocated, so you
213
+ * have to free it with av_free().
214
+ *
215
+ * In some cases it may be more convenient to put all options into an
216
+ * AVDictionary and call av_opt_set_dict() on it. A specific case of this
217
+ * are the format/codec open functions in lavf/lavc which take a dictionary
218
+ * filled with option as a parameter. This makes it possible to set some options
219
+ * that cannot be set otherwise, since e.g. the input file format is not known
220
+ * before the file is actually opened.
221
+ */
222
+
223
+ enum AVOptionType{
224
+ AV_OPT_TYPE_FLAGS,
225
+ AV_OPT_TYPE_INT,
226
+ AV_OPT_TYPE_INT64,
227
+ AV_OPT_TYPE_DOUBLE,
228
+ AV_OPT_TYPE_FLOAT,
229
+ AV_OPT_TYPE_STRING,
230
+ AV_OPT_TYPE_RATIONAL,
231
+ AV_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length
232
+ AV_OPT_TYPE_DICT,
233
+ AV_OPT_TYPE_UINT64,
234
+ AV_OPT_TYPE_CONST,
235
+ AV_OPT_TYPE_IMAGE_SIZE, ///< offset must point to two consecutive integers
236
+ AV_OPT_TYPE_PIXEL_FMT,
237
+ AV_OPT_TYPE_SAMPLE_FMT,
238
+ AV_OPT_TYPE_VIDEO_RATE, ///< offset must point to AVRational
239
+ AV_OPT_TYPE_DURATION,
240
+ AV_OPT_TYPE_COLOR,
241
+ #if FF_API_OLD_CHANNEL_LAYOUT
242
+ AV_OPT_TYPE_CHANNEL_LAYOUT,
243
+ #endif
244
+ AV_OPT_TYPE_BOOL,
245
+ AV_OPT_TYPE_CHLAYOUT,
246
+ };
247
+
248
+ /**
249
+ * AVOption
250
+ */
251
+ typedef struct AVOption {
252
+ const char *name;
253
+
254
+ /**
255
+ * short English help text
256
+ * @todo What about other languages?
257
+ */
258
+ const char *help;
259
+
260
+ /**
261
+ * The offset relative to the context structure where the option
262
+ * value is stored. It should be 0 for named constants.
263
+ */
264
+ int offset;
265
+ enum AVOptionType type;
266
+
267
+ /**
268
+ * the default value for scalar options
269
+ */
270
+ union {
271
+ int64_t i64;
272
+ double dbl;
273
+ const char *str;
274
+ /* TODO those are unused now */
275
+ AVRational q;
276
+ } default_val;
277
+ double min; ///< minimum valid value for the option
278
+ double max; ///< maximum valid value for the option
279
+
280
+ int flags;
281
+ #define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding
282
+ #define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding
283
+ #define AV_OPT_FLAG_AUDIO_PARAM 8
284
+ #define AV_OPT_FLAG_VIDEO_PARAM 16
285
+ #define AV_OPT_FLAG_SUBTITLE_PARAM 32
286
+ /**
287
+ * The option is intended for exporting values to the caller.
288
+ */
289
+ #define AV_OPT_FLAG_EXPORT 64
290
+ /**
291
+ * The option may not be set through the AVOptions API, only read.
292
+ * This flag only makes sense when AV_OPT_FLAG_EXPORT is also set.
293
+ */
294
+ #define AV_OPT_FLAG_READONLY 128
295
+ #define AV_OPT_FLAG_BSF_PARAM (1<<8) ///< a generic parameter which can be set by the user for bit stream filtering
296
+ #define AV_OPT_FLAG_RUNTIME_PARAM (1<<15) ///< a generic parameter which can be set by the user at runtime
297
+ #define AV_OPT_FLAG_FILTERING_PARAM (1<<16) ///< a generic parameter which can be set by the user for filtering
298
+ #define AV_OPT_FLAG_DEPRECATED (1<<17) ///< set if option is deprecated, users should refer to AVOption.help text for more information
299
+ #define AV_OPT_FLAG_CHILD_CONSTS (1<<18) ///< set if option constants can also reside in child objects
300
+ //FIXME think about enc-audio, ... style flags
301
+
302
+ /**
303
+ * The logical unit to which the option belongs. Non-constant
304
+ * options and corresponding named constants share the same
305
+ * unit. May be NULL.
306
+ */
307
+ const char *unit;
308
+ } AVOption;
309
+
310
+ /**
311
+ * A single allowed range of values, or a single allowed value.
312
+ */
313
+ typedef struct AVOptionRange {
314
+ const char *str;
315
+ /**
316
+ * Value range.
317
+ * For string ranges this represents the min/max length.
318
+ * For dimensions this represents the min/max pixel count or width/height in multi-component case.
319
+ */
320
+ double value_min, value_max;
321
+ /**
322
+ * Value's component range.
323
+ * For string this represents the unicode range for chars, 0-127 limits to ASCII.
324
+ */
325
+ double component_min, component_max;
326
+ /**
327
+ * Range flag.
328
+ * If set to 1 the struct encodes a range, if set to 0 a single value.
329
+ */
330
+ int is_range;
331
+ } AVOptionRange;
332
+
333
+ /**
334
+ * List of AVOptionRange structs.
335
+ */
336
+ typedef struct AVOptionRanges {
337
+ /**
338
+ * Array of option ranges.
339
+ *
340
+ * Most of option types use just one component.
341
+ * Following describes multi-component option types:
342
+ *
343
+ * AV_OPT_TYPE_IMAGE_SIZE:
344
+ * component index 0: range of pixel count (width * height).
345
+ * component index 1: range of width.
346
+ * component index 2: range of height.
347
+ *
348
+ * @note To obtain multi-component version of this structure, user must
349
+ * provide AV_OPT_MULTI_COMPONENT_RANGE to av_opt_query_ranges or
350
+ * av_opt_query_ranges_default function.
351
+ *
352
+ * Multi-component range can be read as in following example:
353
+ *
354
+ * @code
355
+ * int range_index, component_index;
356
+ * AVOptionRanges *ranges;
357
+ * AVOptionRange *range[3]; //may require more than 3 in the future.
358
+ * av_opt_query_ranges(&ranges, obj, key, AV_OPT_MULTI_COMPONENT_RANGE);
359
+ * for (range_index = 0; range_index < ranges->nb_ranges; range_index++) {
360
+ * for (component_index = 0; component_index < ranges->nb_components; component_index++)
361
+ * range[component_index] = ranges->range[ranges->nb_ranges * component_index + range_index];
362
+ * //do something with range here.
363
+ * }
364
+ * av_opt_freep_ranges(&ranges);
365
+ * @endcode
366
+ */
367
+ AVOptionRange **range;
368
+ /**
369
+ * Number of ranges per component.
370
+ */
371
+ int nb_ranges;
372
+ /**
373
+ * Number of componentes.
374
+ */
375
+ int nb_components;
376
+ } AVOptionRanges;
377
+
378
+ /**
379
+ * Show the obj options.
380
+ *
381
+ * @param req_flags requested flags for the options to show. Show only the
382
+ * options for which it is opt->flags & req_flags.
383
+ * @param rej_flags rejected flags for the options to show. Show only the
384
+ * options for which it is !(opt->flags & req_flags).
385
+ * @param av_log_obj log context to use for showing the options
386
+ */
387
+ int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags);
388
+
389
+ /**
390
+ * Set the values of all AVOption fields to their default values.
391
+ *
392
+ * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass)
393
+ */
394
+ void av_opt_set_defaults(void *s);
395
+
396
+ /**
397
+ * Set the values of all AVOption fields to their default values. Only these
398
+ * AVOption fields for which (opt->flags & mask) == flags will have their
399
+ * default applied to s.
400
+ *
401
+ * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass)
402
+ * @param mask combination of AV_OPT_FLAG_*
403
+ * @param flags combination of AV_OPT_FLAG_*
404
+ */
405
+ void av_opt_set_defaults2(void *s, int mask, int flags);
406
+
407
+ /**
408
+ * Parse the key/value pairs list in opts. For each key/value pair
409
+ * found, stores the value in the field in ctx that is named like the
410
+ * key. ctx must be an AVClass context, storing is done using
411
+ * AVOptions.
412
+ *
413
+ * @param opts options string to parse, may be NULL
414
+ * @param key_val_sep a 0-terminated list of characters used to
415
+ * separate key from value
416
+ * @param pairs_sep a 0-terminated list of characters used to separate
417
+ * two pairs from each other
418
+ * @return the number of successfully set key/value pairs, or a negative
419
+ * value corresponding to an AVERROR code in case of error:
420
+ * AVERROR(EINVAL) if opts cannot be parsed,
421
+ * the error code issued by av_opt_set() if a key/value pair
422
+ * cannot be set
423
+ */
424
+ int av_set_options_string(void *ctx, const char *opts,
425
+ const char *key_val_sep, const char *pairs_sep);
426
+
427
+ /**
428
+ * Parse the key-value pairs list in opts. For each key=value pair found,
429
+ * set the value of the corresponding option in ctx.
430
+ *
431
+ * @param ctx the AVClass object to set options on
432
+ * @param opts the options string, key-value pairs separated by a
433
+ * delimiter
434
+ * @param shorthand a NULL-terminated array of options names for shorthand
435
+ * notation: if the first field in opts has no key part,
436
+ * the key is taken from the first element of shorthand;
437
+ * then again for the second, etc., until either opts is
438
+ * finished, shorthand is finished or a named option is
439
+ * found; after that, all options must be named
440
+ * @param key_val_sep a 0-terminated list of characters used to separate
441
+ * key from value, for example '='
442
+ * @param pairs_sep a 0-terminated list of characters used to separate
443
+ * two pairs from each other, for example ':' or ','
444
+ * @return the number of successfully set key=value pairs, or a negative
445
+ * value corresponding to an AVERROR code in case of error:
446
+ * AVERROR(EINVAL) if opts cannot be parsed,
447
+ * the error code issued by av_set_string3() if a key/value pair
448
+ * cannot be set
449
+ *
450
+ * Options names must use only the following characters: a-z A-Z 0-9 - . / _
451
+ * Separators must use characters distinct from option names and from each
452
+ * other.
453
+ */
454
+ int av_opt_set_from_string(void *ctx, const char *opts,
455
+ const char *const *shorthand,
456
+ const char *key_val_sep, const char *pairs_sep);
457
+ /**
458
+ * Free all allocated objects in obj.
459
+ */
460
+ void av_opt_free(void *obj);
461
+
462
+ /**
463
+ * Check whether a particular flag is set in a flags field.
464
+ *
465
+ * @param field_name the name of the flag field option
466
+ * @param flag_name the name of the flag to check
467
+ * @return non-zero if the flag is set, zero if the flag isn't set,
468
+ * isn't of the right type, or the flags field doesn't exist.
469
+ */
470
+ int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name);
471
+
472
+ /**
473
+ * Set all the options from a given dictionary on an object.
474
+ *
475
+ * @param obj a struct whose first element is a pointer to AVClass
476
+ * @param options options to process. This dictionary will be freed and replaced
477
+ * by a new one containing all options not found in obj.
478
+ * Of course this new dictionary needs to be freed by caller
479
+ * with av_dict_free().
480
+ *
481
+ * @return 0 on success, a negative AVERROR if some option was found in obj,
482
+ * but could not be set.
483
+ *
484
+ * @see av_dict_copy()
485
+ */
486
+ int av_opt_set_dict(void *obj, struct AVDictionary **options);
487
+
488
+
489
+ /**
490
+ * Set all the options from a given dictionary on an object.
491
+ *
492
+ * @param obj a struct whose first element is a pointer to AVClass
493
+ * @param options options to process. This dictionary will be freed and replaced
494
+ * by a new one containing all options not found in obj.
495
+ * Of course this new dictionary needs to be freed by caller
496
+ * with av_dict_free().
497
+ * @param search_flags A combination of AV_OPT_SEARCH_*.
498
+ *
499
+ * @return 0 on success, a negative AVERROR if some option was found in obj,
500
+ * but could not be set.
501
+ *
502
+ * @see av_dict_copy()
503
+ */
504
+ int av_opt_set_dict2(void *obj, struct AVDictionary **options, int search_flags);
505
+
506
+ /**
507
+ * Extract a key-value pair from the beginning of a string.
508
+ *
509
+ * @param ropts pointer to the options string, will be updated to
510
+ * point to the rest of the string (one of the pairs_sep
511
+ * or the final NUL)
512
+ * @param key_val_sep a 0-terminated list of characters used to separate
513
+ * key from value, for example '='
514
+ * @param pairs_sep a 0-terminated list of characters used to separate
515
+ * two pairs from each other, for example ':' or ','
516
+ * @param flags flags; see the AV_OPT_FLAG_* values below
517
+ * @param rkey parsed key; must be freed using av_free()
518
+ * @param rval parsed value; must be freed using av_free()
519
+ *
520
+ * @return >=0 for success, or a negative value corresponding to an
521
+ * AVERROR code in case of error; in particular:
522
+ * AVERROR(EINVAL) if no key is present
523
+ *
524
+ */
525
+ int av_opt_get_key_value(const char **ropts,
526
+ const char *key_val_sep, const char *pairs_sep,
527
+ unsigned flags,
528
+ char **rkey, char **rval);
529
+
530
+ enum {
531
+
532
+ /**
533
+ * Accept to parse a value without a key; the key will then be returned
534
+ * as NULL.
535
+ */
536
+ AV_OPT_FLAG_IMPLICIT_KEY = 1,
537
+ };
538
+
539
+ /**
540
+ * @defgroup opt_eval_funcs Evaluating option strings
541
+ * @{
542
+ * This group of functions can be used to evaluate option strings
543
+ * and get numbers out of them. They do the same thing as av_opt_set(),
544
+ * except the result is written into the caller-supplied pointer.
545
+ *
546
+ * @param obj a struct whose first element is a pointer to AVClass.
547
+ * @param o an option for which the string is to be evaluated.
548
+ * @param val string to be evaluated.
549
+ * @param *_out value of the string will be written here.
550
+ *
551
+ * @return 0 on success, a negative number on failure.
552
+ */
553
+ int av_opt_eval_flags (void *obj, const AVOption *o, const char *val, int *flags_out);
554
+ int av_opt_eval_int (void *obj, const AVOption *o, const char *val, int *int_out);
555
+ int av_opt_eval_int64 (void *obj, const AVOption *o, const char *val, int64_t *int64_out);
556
+ int av_opt_eval_float (void *obj, const AVOption *o, const char *val, float *float_out);
557
+ int av_opt_eval_double(void *obj, const AVOption *o, const char *val, double *double_out);
558
+ int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational *q_out);
559
+ /**
560
+ * @}
561
+ */
562
+
563
+ #define AV_OPT_SEARCH_CHILDREN (1 << 0) /**< Search in possible children of the
564
+ given object first. */
565
+ /**
566
+ * The obj passed to av_opt_find() is fake -- only a double pointer to AVClass
567
+ * instead of a required pointer to a struct containing AVClass. This is
568
+ * useful for searching for options without needing to allocate the corresponding
569
+ * object.
570
+ */
571
+ #define AV_OPT_SEARCH_FAKE_OBJ (1 << 1)
572
+
573
+ /**
574
+ * In av_opt_get, return NULL if the option has a pointer type and is set to NULL,
575
+ * rather than returning an empty string.
576
+ */
577
+ #define AV_OPT_ALLOW_NULL (1 << 2)
578
+
579
+ /**
580
+ * Allows av_opt_query_ranges and av_opt_query_ranges_default to return more than
581
+ * one component for certain option types.
582
+ * @see AVOptionRanges for details.
583
+ */
584
+ #define AV_OPT_MULTI_COMPONENT_RANGE (1 << 12)
585
+
586
+ /**
587
+ * Look for an option in an object. Consider only options which
588
+ * have all the specified flags set.
589
+ *
590
+ * @param[in] obj A pointer to a struct whose first element is a
591
+ * pointer to an AVClass.
592
+ * Alternatively a double pointer to an AVClass, if
593
+ * AV_OPT_SEARCH_FAKE_OBJ search flag is set.
594
+ * @param[in] name The name of the option to look for.
595
+ * @param[in] unit When searching for named constants, name of the unit
596
+ * it belongs to.
597
+ * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG).
598
+ * @param search_flags A combination of AV_OPT_SEARCH_*.
599
+ *
600
+ * @return A pointer to the option found, or NULL if no option
601
+ * was found.
602
+ *
603
+ * @note Options found with AV_OPT_SEARCH_CHILDREN flag may not be settable
604
+ * directly with av_opt_set(). Use special calls which take an options
605
+ * AVDictionary (e.g. avformat_open_input()) to set options found with this
606
+ * flag.
607
+ */
608
+ const AVOption *av_opt_find(void *obj, const char *name, const char *unit,
609
+ int opt_flags, int search_flags);
610
+
611
+ /**
612
+ * Look for an option in an object. Consider only options which
613
+ * have all the specified flags set.
614
+ *
615
+ * @param[in] obj A pointer to a struct whose first element is a
616
+ * pointer to an AVClass.
617
+ * Alternatively a double pointer to an AVClass, if
618
+ * AV_OPT_SEARCH_FAKE_OBJ search flag is set.
619
+ * @param[in] name The name of the option to look for.
620
+ * @param[in] unit When searching for named constants, name of the unit
621
+ * it belongs to.
622
+ * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG).
623
+ * @param search_flags A combination of AV_OPT_SEARCH_*.
624
+ * @param[out] target_obj if non-NULL, an object to which the option belongs will be
625
+ * written here. It may be different from obj if AV_OPT_SEARCH_CHILDREN is present
626
+ * in search_flags. This parameter is ignored if search_flags contain
627
+ * AV_OPT_SEARCH_FAKE_OBJ.
628
+ *
629
+ * @return A pointer to the option found, or NULL if no option
630
+ * was found.
631
+ */
632
+ const AVOption *av_opt_find2(void *obj, const char *name, const char *unit,
633
+ int opt_flags, int search_flags, void **target_obj);
634
+
635
+ /**
636
+ * Iterate over all AVOptions belonging to obj.
637
+ *
638
+ * @param obj an AVOptions-enabled struct or a double pointer to an
639
+ * AVClass describing it.
640
+ * @param prev result of the previous call to av_opt_next() on this object
641
+ * or NULL
642
+ * @return next AVOption or NULL
643
+ */
644
+ const AVOption *av_opt_next(const void *obj, const AVOption *prev);
645
+
646
+ /**
647
+ * Iterate over AVOptions-enabled children of obj.
648
+ *
649
+ * @param prev result of a previous call to this function or NULL
650
+ * @return next AVOptions-enabled child or NULL
651
+ */
652
+ void *av_opt_child_next(void *obj, void *prev);
653
+
654
+ /**
655
+ * Iterate over potential AVOptions-enabled children of parent.
656
+ *
657
+ * @param iter a pointer where iteration state is stored.
658
+ * @return AVClass corresponding to next potential child or NULL
659
+ */
660
+ const AVClass *av_opt_child_class_iterate(const AVClass *parent, void **iter);
661
+
662
+ /**
663
+ * @defgroup opt_set_funcs Option setting functions
664
+ * @{
665
+ * Those functions set the field of obj with the given name to value.
666
+ *
667
+ * @param[in] obj A struct whose first element is a pointer to an AVClass.
668
+ * @param[in] name the name of the field to set
669
+ * @param[in] val The value to set. In case of av_opt_set() if the field is not
670
+ * of a string type, then the given string is parsed.
671
+ * SI postfixes and some named scalars are supported.
672
+ * If the field is of a numeric type, it has to be a numeric or named
673
+ * scalar. Behavior with more than one scalar and +- infix operators
674
+ * is undefined.
675
+ * If the field is of a flags type, it has to be a sequence of numeric
676
+ * scalars or named flags separated by '+' or '-'. Prefixing a flag
677
+ * with '+' causes it to be set without affecting the other flags;
678
+ * similarly, '-' unsets a flag.
679
+ * If the field is of a dictionary type, it has to be a ':' separated list of
680
+ * key=value parameters. Values containing ':' special characters must be
681
+ * escaped.
682
+ * @param search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN
683
+ * is passed here, then the option may be set on a child of obj.
684
+ *
685
+ * @return 0 if the value has been set, or an AVERROR code in case of
686
+ * error:
687
+ * AVERROR_OPTION_NOT_FOUND if no matching option exists
688
+ * AVERROR(ERANGE) if the value is out of range
689
+ * AVERROR(EINVAL) if the value is not valid
690
+ */
691
+ int av_opt_set (void *obj, const char *name, const char *val, int search_flags);
692
+ int av_opt_set_int (void *obj, const char *name, int64_t val, int search_flags);
693
+ int av_opt_set_double (void *obj, const char *name, double val, int search_flags);
694
+ int av_opt_set_q (void *obj, const char *name, AVRational val, int search_flags);
695
+ int av_opt_set_bin (void *obj, const char *name, const uint8_t *val, int size, int search_flags);
696
+ int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_flags);
697
+ int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags);
698
+ int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags);
699
+ int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags);
700
+ #if FF_API_OLD_CHANNEL_LAYOUT
701
+ attribute_deprecated
702
+ int av_opt_set_channel_layout(void *obj, const char *name, int64_t ch_layout, int search_flags);
703
+ #endif
704
+ int av_opt_set_chlayout(void *obj, const char *name, const AVChannelLayout *layout, int search_flags);
705
+ /**
706
+ * @note Any old dictionary present is discarded and replaced with a copy of the new one. The
707
+ * caller still owns val is and responsible for freeing it.
708
+ */
709
+ int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, int search_flags);
710
+
711
+ /**
712
+ * Set a binary option to an integer list.
713
+ *
714
+ * @param obj AVClass object to set options on
715
+ * @param name name of the binary option
716
+ * @param val pointer to an integer list (must have the correct type with
717
+ * regard to the contents of the list)
718
+ * @param term list terminator (usually 0 or -1)
719
+ * @param flags search flags
720
+ */
721
+ #define av_opt_set_int_list(obj, name, val, term, flags) \
722
+ (av_int_list_length(val, term) > INT_MAX / sizeof(*(val)) ? \
723
+ AVERROR(EINVAL) : \
724
+ av_opt_set_bin(obj, name, (const uint8_t *)(val), \
725
+ av_int_list_length(val, term) * sizeof(*(val)), flags))
726
+
727
+ /**
728
+ * @}
729
+ */
730
+
731
+ /**
732
+ * @defgroup opt_get_funcs Option getting functions
733
+ * @{
734
+ * Those functions get a value of the option with the given name from an object.
735
+ *
736
+ * @param[in] obj a struct whose first element is a pointer to an AVClass.
737
+ * @param[in] name name of the option to get.
738
+ * @param[in] search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN
739
+ * is passed here, then the option may be found in a child of obj.
740
+ * @param[out] out_val value of the option will be written here
741
+ * @return >=0 on success, a negative error code otherwise
742
+ */
743
+ /**
744
+ * @note the returned string will be av_malloc()ed and must be av_free()ed by the caller
745
+ *
746
+ * @note if AV_OPT_ALLOW_NULL is set in search_flags in av_opt_get, and the
747
+ * option is of type AV_OPT_TYPE_STRING, AV_OPT_TYPE_BINARY or AV_OPT_TYPE_DICT
748
+ * and is set to NULL, *out_val will be set to NULL instead of an allocated
749
+ * empty string.
750
+ */
751
+ int av_opt_get (void *obj, const char *name, int search_flags, uint8_t **out_val);
752
+ int av_opt_get_int (void *obj, const char *name, int search_flags, int64_t *out_val);
753
+ int av_opt_get_double (void *obj, const char *name, int search_flags, double *out_val);
754
+ int av_opt_get_q (void *obj, const char *name, int search_flags, AVRational *out_val);
755
+ int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_out, int *h_out);
756
+ int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt);
757
+ int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt);
758
+ int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val);
759
+ #if FF_API_OLD_CHANNEL_LAYOUT
760
+ attribute_deprecated
761
+ int av_opt_get_channel_layout(void *obj, const char *name, int search_flags, int64_t *ch_layout);
762
+ #endif
763
+ int av_opt_get_chlayout(void *obj, const char *name, int search_flags, AVChannelLayout *layout);
764
+ /**
765
+ * @param[out] out_val The returned dictionary is a copy of the actual value and must
766
+ * be freed with av_dict_free() by the caller
767
+ */
768
+ int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDictionary **out_val);
769
+ /**
770
+ * @}
771
+ */
772
+ /**
773
+ * Gets a pointer to the requested field in a struct.
774
+ * This function allows accessing a struct even when its fields are moved or
775
+ * renamed since the application making the access has been compiled,
776
+ *
777
+ * @returns a pointer to the field, it can be cast to the correct type and read
778
+ * or written to.
779
+ */
780
+ void *av_opt_ptr(const AVClass *avclass, void *obj, const char *name);
781
+
782
+ /**
783
+ * Free an AVOptionRanges struct and set it to NULL.
784
+ */
785
+ void av_opt_freep_ranges(AVOptionRanges **ranges);
786
+
787
+ /**
788
+ * Get a list of allowed ranges for the given option.
789
+ *
790
+ * The returned list may depend on other fields in obj like for example profile.
791
+ *
792
+ * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored
793
+ * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance
794
+ * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges
795
+ *
796
+ * The result must be freed with av_opt_freep_ranges.
797
+ *
798
+ * @return number of compontents returned on success, a negative errro code otherwise
799
+ */
800
+ int av_opt_query_ranges(AVOptionRanges **, void *obj, const char *key, int flags);
801
+
802
+ /**
803
+ * Copy options from src object into dest object.
804
+ *
805
+ * The underlying AVClass of both src and dest must coincide. The guarantee
806
+ * below does not apply if this is not fulfilled.
807
+ *
808
+ * Options that require memory allocation (e.g. string or binary) are malloc'ed in dest object.
809
+ * Original memory allocated for such options is freed unless both src and dest options points to the same memory.
810
+ *
811
+ * Even on error it is guaranteed that allocated options from src and dest
812
+ * no longer alias each other afterwards; in particular calling av_opt_free()
813
+ * on both src and dest is safe afterwards if dest has been memdup'ed from src.
814
+ *
815
+ * @param dest Object to copy from
816
+ * @param src Object to copy into
817
+ * @return 0 on success, negative on error
818
+ */
819
+ int av_opt_copy(void *dest, const void *src);
820
+
821
+ /**
822
+ * Get a default list of allowed ranges for the given option.
823
+ *
824
+ * This list is constructed without using the AVClass.query_ranges() callback
825
+ * and can be used as fallback from within the callback.
826
+ *
827
+ * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored
828
+ * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance
829
+ * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges
830
+ *
831
+ * The result must be freed with av_opt_free_ranges.
832
+ *
833
+ * @return number of compontents returned on success, a negative errro code otherwise
834
+ */
835
+ int av_opt_query_ranges_default(AVOptionRanges **, void *obj, const char *key, int flags);
836
+
837
+ /**
838
+ * Check if given option is set to its default value.
839
+ *
840
+ * Options o must belong to the obj. This function must not be called to check child's options state.
841
+ * @see av_opt_is_set_to_default_by_name().
842
+ *
843
+ * @param obj AVClass object to check option on
844
+ * @param o option to be checked
845
+ * @return >0 when option is set to its default,
846
+ * 0 when option is not set its default,
847
+ * <0 on error
848
+ */
849
+ int av_opt_is_set_to_default(void *obj, const AVOption *o);
850
+
851
+ /**
852
+ * Check if given option is set to its default value.
853
+ *
854
+ * @param obj AVClass object to check option on
855
+ * @param name option name
856
+ * @param search_flags combination of AV_OPT_SEARCH_*
857
+ * @return >0 when option is set to its default,
858
+ * 0 when option is not set its default,
859
+ * <0 on error
860
+ */
861
+ int av_opt_is_set_to_default_by_name(void *obj, const char *name, int search_flags);
862
+
863
+
864
+ #define AV_OPT_SERIALIZE_SKIP_DEFAULTS 0x00000001 ///< Serialize options that are not set to default values only.
865
+ #define AV_OPT_SERIALIZE_OPT_FLAGS_EXACT 0x00000002 ///< Serialize options that exactly match opt_flags only.
866
+
867
+ /**
868
+ * Serialize object's options.
869
+ *
870
+ * Create a string containing object's serialized options.
871
+ * Such string may be passed back to av_opt_set_from_string() in order to restore option values.
872
+ * A key/value or pairs separator occurring in the serialized value or
873
+ * name string are escaped through the av_escape() function.
874
+ *
875
+ * @param[in] obj AVClass object to serialize
876
+ * @param[in] opt_flags serialize options with all the specified flags set (AV_OPT_FLAG)
877
+ * @param[in] flags combination of AV_OPT_SERIALIZE_* flags
878
+ * @param[out] buffer Pointer to buffer that will be allocated with string containg serialized options.
879
+ * Buffer must be freed by the caller when is no longer needed.
880
+ * @param[in] key_val_sep character used to separate key from value
881
+ * @param[in] pairs_sep character used to separate two pairs from each other
882
+ * @return >= 0 on success, negative on error
883
+ * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same.
884
+ */
885
+ int av_opt_serialize(void *obj, int opt_flags, int flags, char **buffer,
886
+ const char key_val_sep, const char pairs_sep);
887
+ /**
888
+ * @}
889
+ */
890
+
891
+ #endif /* AVUTIL_OPT_H */