/src/ffmpeg/libavutil/avutil.h
Line | Count | Source |
1 | | /* |
2 | | * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> |
3 | | * |
4 | | * This file is part of FFmpeg. |
5 | | * |
6 | | * FFmpeg is free software; you can redistribute it and/or |
7 | | * modify it under the terms of the GNU Lesser General Public |
8 | | * License as published by the Free Software Foundation; either |
9 | | * version 2.1 of the License, or (at your option) any later version. |
10 | | * |
11 | | * FFmpeg is distributed in the hope that it will be useful, |
12 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | | * Lesser General Public License for more details. |
15 | | * |
16 | | * You should have received a copy of the GNU Lesser General Public |
17 | | * License along with FFmpeg; if not, write to the Free Software |
18 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
19 | | */ |
20 | | |
21 | | #ifndef AVUTIL_AVUTIL_H |
22 | | #define AVUTIL_AVUTIL_H |
23 | | |
24 | | /** |
25 | | * @file |
26 | | * @ingroup lavu |
27 | | * Convenience header that includes @ref lavu "libavutil"'s core. |
28 | | */ |
29 | | |
30 | | /** |
31 | | * @mainpage |
32 | | * |
33 | | * @section ffmpeg_intro Introduction |
34 | | * |
35 | | * This document describes the usage of the different libraries |
36 | | * provided by FFmpeg. |
37 | | * |
38 | | * @li @ref libavc "libavcodec" encoding/decoding library |
39 | | * @li @ref lavfi "libavfilter" graph-based frame editing library |
40 | | * @li @ref libavf "libavformat" I/O and muxing/demuxing library |
41 | | * @li @ref lavd "libavdevice" special devices muxing/demuxing library |
42 | | * @li @ref lavu "libavutil" common utility library |
43 | | * @li @ref lswr "libswresample" audio resampling, format conversion and mixing |
44 | | * @li @ref libsws "libswscale" color conversion and scaling library |
45 | | * |
46 | | * @section ffmpeg_versioning Versioning and compatibility |
47 | | * |
48 | | * Each of the FFmpeg libraries contains a version.h header, which defines a |
49 | | * major, minor and micro version number with the |
50 | | * <em>LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO}</em> macros. The major version |
51 | | * number is incremented with backward incompatible changes - e.g. removing |
52 | | * parts of the public API, reordering public struct members, etc. The minor |
53 | | * version number is incremented for backward compatible API changes or major |
54 | | * new features - e.g. adding a new public function or a new decoder. The micro |
55 | | * version number is incremented for smaller changes that a calling program |
56 | | * might still want to check for - e.g. changing behavior in a previously |
57 | | * unspecified situation. |
58 | | * |
59 | | * FFmpeg guarantees backward API and ABI compatibility for each library as long |
60 | | * as its major version number is unchanged. This means that no public symbols |
61 | | * will be removed or renamed. Types and names of the public struct members and |
62 | | * values of public macros and enums will remain the same (unless they were |
63 | | * explicitly declared as not part of the public API). Documented behavior will |
64 | | * not change. |
65 | | * |
66 | | * In other words, any correct program that works with a given FFmpeg snapshot |
67 | | * should work just as well without any changes with any later snapshot with the |
68 | | * same major versions. This applies to both rebuilding the program against new |
69 | | * FFmpeg versions or to replacing the dynamic FFmpeg libraries that a program |
70 | | * links against. |
71 | | * |
72 | | * However, new public symbols may be added and new members may be appended to |
73 | | * public structs whose size is not part of public ABI (most public structs in |
74 | | * FFmpeg). New macros and enum values may be added. Behavior in undocumented |
75 | | * situations may change slightly (and be documented). All those are accompanied |
76 | | * by an entry in doc/APIchanges and incrementing either the minor or micro |
77 | | * version number. |
78 | | */ |
79 | | |
80 | | /** |
81 | | * @defgroup lavu libavutil |
82 | | * Common code shared across all FFmpeg libraries. |
83 | | * |
84 | | * @note |
85 | | * libavutil is designed to be modular. In most cases, in order to use the |
86 | | * functions provided by one component of libavutil you must explicitly include |
87 | | * the specific header containing that feature. If you are only using |
88 | | * media-related components, you could simply include libavutil/avutil.h, which |
89 | | * brings in most of the "core" components. |
90 | | * |
91 | | * @{ |
92 | | * |
93 | | * @defgroup lavu_crypto Crypto and Hashing |
94 | | * |
95 | | * @{ |
96 | | * @} |
97 | | * |
98 | | * @defgroup lavu_math Mathematics |
99 | | * @{ |
100 | | * |
101 | | * @} |
102 | | * |
103 | | * @defgroup lavu_string String Manipulation |
104 | | * |
105 | | * @{ |
106 | | * |
107 | | * @} |
108 | | * |
109 | | * @defgroup lavu_mem Memory Management |
110 | | * |
111 | | * @{ |
112 | | * |
113 | | * @} |
114 | | * |
115 | | * @defgroup lavu_data Data Structures |
116 | | * @{ |
117 | | * |
118 | | * @} |
119 | | * |
120 | | * @defgroup lavu_video Video related |
121 | | * |
122 | | * @{ |
123 | | * |
124 | | * @} |
125 | | * |
126 | | * @defgroup lavu_audio Audio related |
127 | | * |
128 | | * @{ |
129 | | * |
130 | | * @} |
131 | | * |
132 | | * @defgroup lavu_error Error Codes |
133 | | * |
134 | | * @{ |
135 | | * |
136 | | * @} |
137 | | * |
138 | | * @defgroup lavu_log Logging Facility |
139 | | * |
140 | | * @{ |
141 | | * |
142 | | * @} |
143 | | * |
144 | | * @defgroup lavu_misc Other |
145 | | * |
146 | | * @{ |
147 | | * |
148 | | * @defgroup preproc_misc Preprocessor String Macros |
149 | | * |
150 | | * @{ |
151 | | * |
152 | | * @} |
153 | | * |
154 | | * @defgroup version_utils Library Version Macros |
155 | | * |
156 | | * @{ |
157 | | * |
158 | | * @} |
159 | | */ |
160 | | |
161 | | |
162 | | /** |
163 | | * @addtogroup lavu_ver |
164 | | * @{ |
165 | | */ |
166 | | |
167 | | /** |
168 | | * Return the LIBAVUTIL_VERSION_INT constant. |
169 | | */ |
170 | | unsigned avutil_version(void); |
171 | | |
172 | | /** |
173 | | * Return an informative version string. This usually is the actual release |
174 | | * version number or a git commit description. This string has no fixed format |
175 | | * and can change any time. It should never be parsed by code. |
176 | | */ |
177 | | const char *av_version_info(void); |
178 | | |
179 | | /** |
180 | | * Return the libavutil build-time configuration. |
181 | | */ |
182 | | const char *avutil_configuration(void); |
183 | | |
184 | | /** |
185 | | * Return the libavutil license. |
186 | | */ |
187 | | const char *avutil_license(void); |
188 | | |
189 | | /** |
190 | | * @} |
191 | | */ |
192 | | |
193 | | /** |
194 | | * @addtogroup lavu_media Media Type |
195 | | * @brief Media Type |
196 | | */ |
197 | | |
198 | | enum AVMediaType { |
199 | | AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA |
200 | | AVMEDIA_TYPE_VIDEO, |
201 | | AVMEDIA_TYPE_AUDIO, |
202 | | AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous |
203 | | AVMEDIA_TYPE_SUBTITLE, |
204 | | AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse |
205 | | AVMEDIA_TYPE_NB |
206 | | }; |
207 | | |
208 | | /** |
209 | | * Return a string describing the media_type enum, NULL if media_type |
210 | | * is unknown. |
211 | | */ |
212 | | const char *av_get_media_type_string(enum AVMediaType media_type); |
213 | | |
214 | | /** |
215 | | * @defgroup lavu_const Constants |
216 | | * @{ |
217 | | * |
218 | | * @defgroup lavu_enc Encoding specific |
219 | | * |
220 | | * @note those definition should move to avcodec |
221 | | * @{ |
222 | | */ |
223 | | |
224 | | #define FF_LAMBDA_SHIFT 7 |
225 | | #define FF_LAMBDA_SCALE (1<<FF_LAMBDA_SHIFT) |
226 | | #define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda |
227 | | #define FF_LAMBDA_MAX (256*128-1) |
228 | | |
229 | | #define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove |
230 | | |
231 | | /** |
232 | | * @} |
233 | | * @defgroup lavu_time Timestamp specific |
234 | | * |
235 | | * FFmpeg internal timebase and timestamp definitions |
236 | | * |
237 | | * @{ |
238 | | */ |
239 | | |
240 | | /** |
241 | | * @brief Undefined timestamp value |
242 | | * |
243 | | * Usually reported by demuxer that work on containers that do not provide |
244 | | * either pts or dts. |
245 | | */ |
246 | | |
247 | 10.9k | #define AV_NOPTS_VALUE ((int64_t)UINT64_C(0x8000000000000000)) |
248 | | |
249 | | /** |
250 | | * Internal time base represented as integer |
251 | | */ |
252 | | |
253 | 0 | #define AV_TIME_BASE 1000000 |
254 | | |
255 | | /** |
256 | | * Internal time base represented as fractional value |
257 | | */ |
258 | | |
259 | | #ifdef __cplusplus |
260 | | /* ISO C++ forbids compound-literals. */ |
261 | | #define AV_TIME_BASE_Q av_make_q(1, AV_TIME_BASE) |
262 | | #else |
263 | 0 | #define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE} |
264 | | #endif |
265 | | |
266 | | /** |
267 | | * @} |
268 | | * @} |
269 | | * @defgroup lavu_picture Image related |
270 | | * |
271 | | * AVPicture types, pixel formats and basic image planes manipulation. |
272 | | * |
273 | | * @{ |
274 | | */ |
275 | | |
276 | | enum AVPictureType { |
277 | | AV_PICTURE_TYPE_NONE = 0, ///< Undefined |
278 | | AV_PICTURE_TYPE_I, ///< Intra |
279 | | AV_PICTURE_TYPE_P, ///< Predicted |
280 | | AV_PICTURE_TYPE_B, ///< Bi-dir predicted |
281 | | AV_PICTURE_TYPE_S, ///< S(GMC)-VOP MPEG-4 |
282 | | AV_PICTURE_TYPE_SI, ///< Switching Intra |
283 | | AV_PICTURE_TYPE_SP, ///< Switching Predicted |
284 | | AV_PICTURE_TYPE_BI, ///< BI type |
285 | | }; |
286 | | |
287 | | /** |
288 | | * Return a single letter to describe the given picture type |
289 | | * pict_type. |
290 | | * |
291 | | * @param[in] pict_type the picture type @return a single character |
292 | | * representing the picture type, '?' if pict_type is unknown |
293 | | */ |
294 | | char av_get_picture_type_char(enum AVPictureType pict_type); |
295 | | |
296 | | /** |
297 | | * @} |
298 | | */ |
299 | | |
300 | | #include "common.h" |
301 | | #include "rational.h" |
302 | | #include "version.h" |
303 | | #include "macros.h" |
304 | | #include "mathematics.h" |
305 | | #include "log.h" |
306 | | #include "pixfmt.h" |
307 | | |
308 | | /** |
309 | | * Return x default pointer in case p is NULL. |
310 | | */ |
311 | | static inline void *av_x_if_null(const void *p, const void *x) |
312 | 0 | { |
313 | 0 | return (void *)(intptr_t)(p ? p : x); |
314 | 0 | } Unexecuted instantiation: avfiltergraph.c:av_x_if_null Unexecuted instantiation: buffersink.c:av_x_if_null Unexecuted instantiation: buffersrc.c:av_x_if_null Unexecuted instantiation: formats.c:av_x_if_null Unexecuted instantiation: framequeue.c:av_x_if_null Unexecuted instantiation: graphparser.c:av_x_if_null Unexecuted instantiation: pthread.c:av_x_if_null Unexecuted instantiation: video.c:av_x_if_null Unexecuted instantiation: allfilters.c:av_x_if_null Unexecuted instantiation: avfilter.c:av_x_if_null Unexecuted instantiation: framepool.c:av_x_if_null Unexecuted instantiation: audio.c:av_x_if_null Unexecuted instantiation: swscale.c:av_x_if_null Unexecuted instantiation: utils.c:av_x_if_null Unexecuted instantiation: vscale.c:av_x_if_null Unexecuted instantiation: hscale_fast_bilinear_simd.c:av_x_if_null Unexecuted instantiation: yuv2rgb.c:av_x_if_null Unexecuted instantiation: alphablend.c:av_x_if_null Unexecuted instantiation: format.c:av_x_if_null Unexecuted instantiation: graph.c:av_x_if_null Unexecuted instantiation: hscale_fast_bilinear.c:av_x_if_null Unexecuted instantiation: input.c:av_x_if_null Unexecuted instantiation: lut3d.c:av_x_if_null Unexecuted instantiation: ops.c:av_x_if_null Unexecuted instantiation: ops_backend.c:av_x_if_null Unexecuted instantiation: ops_chain.c:av_x_if_null Unexecuted instantiation: ops_memcpy.c:av_x_if_null Unexecuted instantiation: ops_optimizer.c:av_x_if_null Unexecuted instantiation: options.c:av_x_if_null Unexecuted instantiation: output.c:av_x_if_null Unexecuted instantiation: rgb2rgb.c:av_x_if_null Unexecuted instantiation: slice.c:av_x_if_null Unexecuted instantiation: swscale_unscaled.c:av_x_if_null Unexecuted instantiation: cms.c:av_x_if_null Unexecuted instantiation: csputils.c:av_x_if_null Unexecuted instantiation: gamma.c:av_x_if_null Unexecuted instantiation: hscale.c:av_x_if_null Unexecuted instantiation: avformat.c:av_x_if_null Unexecuted instantiation: demux.c:av_x_if_null Unexecuted instantiation: demux_utils.c:av_x_if_null Unexecuted instantiation: id3v2.c:av_x_if_null Unexecuted instantiation: metadata.c:av_x_if_null Unexecuted instantiation: seek.c:av_x_if_null Unexecuted instantiation: allformats.c:av_x_if_null Unexecuted instantiation: avio.c:av_x_if_null Unexecuted instantiation: aviobuf.c:av_x_if_null Unexecuted instantiation: id3v1.c:av_x_if_null Unexecuted instantiation: network.c:av_x_if_null Unexecuted instantiation: os_support.c:av_x_if_null Unexecuted instantiation: allcodecs.c:av_x_if_null Unexecuted instantiation: avcodec.c:av_x_if_null Unexecuted instantiation: bitstream_filters.c:av_x_if_null Unexecuted instantiation: bsf.c:av_x_if_null Unexecuted instantiation: codec_desc.c:av_x_if_null Unexecuted instantiation: codec_par.c:av_x_if_null Unexecuted instantiation: decode.c:av_x_if_null Unexecuted instantiation: encode.c:av_x_if_null Unexecuted instantiation: exif.c:av_x_if_null Unexecuted instantiation: get_buffer.c:av_x_if_null Unexecuted instantiation: packet.c:av_x_if_null Unexecuted instantiation: parser.c:av_x_if_null Unexecuted instantiation: parsers.c:av_x_if_null Unexecuted instantiation: profiles.c:av_x_if_null Unexecuted instantiation: pthread_frame.c:av_x_if_null Unexecuted instantiation: pthread_slice.c:av_x_if_null Unexecuted instantiation: raw.c:av_x_if_null Unexecuted instantiation: threadprogress.c:av_x_if_null Unexecuted instantiation: to_upper4.c:av_x_if_null Unexecuted instantiation: channel_layout.c:av_x_if_null Unexecuted instantiation: container_fifo.c:av_x_if_null Unexecuted instantiation: cpu.c:av_x_if_null Unexecuted instantiation: eval.c:av_x_if_null Unexecuted instantiation: frame.c:av_x_if_null Unexecuted instantiation: hwcontext.c:av_x_if_null Unexecuted instantiation: iamf.c:av_x_if_null Unexecuted instantiation: mastering_display_metadata.c:av_x_if_null Unexecuted instantiation: mathematics.c:av_x_if_null Unexecuted instantiation: opt.c:av_x_if_null Unexecuted instantiation: parseutils.c:av_x_if_null Unexecuted instantiation: side_data.c:av_x_if_null Unexecuted instantiation: timestamp.c:av_x_if_null Unexecuted instantiation: file_open.c:av_x_if_null |
315 | | |
316 | | #if FF_API_OPT_INT_LIST |
317 | | /** |
318 | | * Compute the length of an integer list. |
319 | | * |
320 | | * @param elsize size in bytes of each list element (only 1, 2, 4 or 8) |
321 | | * @param term list terminator (usually 0 or -1) |
322 | | * @param list pointer to the list |
323 | | * @return length of the list, in elements, not counting the terminator |
324 | | */ |
325 | | attribute_deprecated |
326 | | unsigned av_int_list_length_for_size(unsigned elsize, |
327 | | const void *list, uint64_t term) av_pure; |
328 | | |
329 | | /** |
330 | | * Compute the length of an integer list. |
331 | | * |
332 | | * @param term list terminator (usually 0 or -1) |
333 | | * @param list pointer to the list |
334 | | * @return length of the list, in elements, not counting the terminator |
335 | | */ |
336 | | #define av_int_list_length(list, term) \ |
337 | | av_int_list_length_for_size(sizeof(*(list)), list, term) |
338 | | #endif |
339 | | |
340 | | /** |
341 | | * Return the fractional representation of the internal time base. |
342 | | */ |
343 | | AVRational av_get_time_base_q(void); |
344 | | |
345 | 0 | #define AV_FOURCC_MAX_STRING_SIZE 32 |
346 | | |
347 | 0 | #define av_fourcc2str(fourcc) av_fourcc_make_string((char[AV_FOURCC_MAX_STRING_SIZE]){0}, fourcc) |
348 | | |
349 | | /** |
350 | | * Fill the provided buffer with a string containing a FourCC (four-character |
351 | | * code) representation. |
352 | | * |
353 | | * @param buf a buffer with size in bytes of at least AV_FOURCC_MAX_STRING_SIZE |
354 | | * @param fourcc the fourcc to represent |
355 | | * @return the buffer in input |
356 | | */ |
357 | | char *av_fourcc_make_string(char *buf, uint32_t fourcc); |
358 | | |
359 | | /** |
360 | | * @} |
361 | | * @} |
362 | | */ |
363 | | |
364 | | #endif /* AVUTIL_AVUTIL_H */ |