Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4349 Serge 1
/*
2
 * copyright (c) 2006 Michael Niedermayer 
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
 * external API header
27
 */
28
 
29
/**
30
 * @mainpage
31
 *
32
 * @section ffmpeg_intro Introduction
33
 *
34
 * This document describes the usage of the different libraries
35
 * provided by FFmpeg.
36
 *
37
 * @li @ref libavc "libavcodec" encoding/decoding library
38
 * @li @ref lavfi "libavfilter" graph-based frame editing library
39
 * @li @ref libavf "libavformat" I/O and muxing/demuxing library
40
 * @li @ref lavd "libavdevice" special devices muxing/demuxing library
41
 * @li @ref lavu "libavutil" common utility library
42
 * @li @ref lswr "libswresample" audio resampling, format conversion and mixing
43
 * @li @ref lpp  "libpostproc" post processing library
44
 * @li @ref lsws "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
 * LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO} 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 Common utility functions
82
 *
83
 * @brief
84
 * libavutil contains the code shared across all the other FFmpeg
85
 * libraries
86
 *
87
 * @note In order to use the functions provided by avutil you must include
88
 * the specific header.
89
 *
90
 * @{
91
 *
92
 * @defgroup lavu_crypto Crypto and Hashing
93
 *
94
 * @{
95
 * @}
96
 *
97
 * @defgroup lavu_math Maths
98
 * @{
99
 *
100
 * @}
101
 *
102
 * @defgroup lavu_string String Manipulation
103
 *
104
 * @{
105
 *
106
 * @}
107
 *
108
 * @defgroup lavu_mem Memory Management
109
 *
110
 * @{
111
 *
112
 * @}
113
 *
114
 * @defgroup lavu_data Data Structures
115
 * @{
116
 *
117
 * @}
118
 *
119
 * @defgroup lavu_audio Audio related
120
 *
121
 * @{
122
 *
123
 * @}
124
 *
125
 * @defgroup lavu_error Error Codes
126
 *
127
 * @{
128
 *
129
 * @}
130
 *
131
 * @defgroup lavu_log Logging Facility
132
 *
133
 * @{
134
 *
135
 * @}
136
 *
137
 * @defgroup lavu_misc Other
138
 *
139
 * @{
140
 *
141
 * @defgroup lavu_internal Internal
142
 *
143
 * Not exported functions, for internal usage only
144
 *
145
 * @{
146
 *
147
 * @}
148
 */
149
 
150
 
151
/**
152
 * @addtogroup lavu_ver
153
 * @{
154
 */
155
 
156
/**
157
 * Return the LIBAVUTIL_VERSION_INT constant.
158
 */
159
unsigned avutil_version(void);
160
 
161
/**
162
 * Return the libavutil build-time configuration.
163
 */
164
const char *avutil_configuration(void);
165
 
166
/**
167
 * Return the libavutil license.
168
 */
169
const char *avutil_license(void);
170
 
171
/**
172
 * @}
173
 */
174
 
175
/**
176
 * @addtogroup lavu_media Media Type
177
 * @brief Media Type
178
 */
179
 
180
enum AVMediaType {
181
    AVMEDIA_TYPE_UNKNOWN = -1,  ///< Usually treated as AVMEDIA_TYPE_DATA
182
    AVMEDIA_TYPE_VIDEO,
183
    AVMEDIA_TYPE_AUDIO,
184
    AVMEDIA_TYPE_DATA,          ///< Opaque data information usually continuous
185
    AVMEDIA_TYPE_SUBTITLE,
186
    AVMEDIA_TYPE_ATTACHMENT,    ///< Opaque data information usually sparse
187
    AVMEDIA_TYPE_NB
188
};
189
 
190
/**
191
 * Return a string describing the media_type enum, NULL if media_type
192
 * is unknown.
193
 */
194
const char *av_get_media_type_string(enum AVMediaType media_type);
195
 
196
/**
197
 * @defgroup lavu_const Constants
198
 * @{
199
 *
200
 * @defgroup lavu_enc Encoding specific
201
 *
202
 * @note those definition should move to avcodec
203
 * @{
204
 */
205
 
206
#define FF_LAMBDA_SHIFT 7
207
#define FF_LAMBDA_SCALE (1<
208
#define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda
209
#define FF_LAMBDA_MAX (256*128-1)
210
 
211
#define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove
212
 
213
/**
214
 * @}
215
 * @defgroup lavu_time Timestamp specific
216
 *
217
 * FFmpeg internal timebase and timestamp definitions
218
 *
219
 * @{
220
 */
221
 
222
/**
223
 * @brief Undefined timestamp value
224
 *
225
 * Usually reported by demuxer that work on containers that do not provide
226
 * either pts or dts.
227
 */
228
 
229
#define AV_NOPTS_VALUE          ((int64_t)UINT64_C(0x8000000000000000))
230
 
231
/**
232
 * Internal time base represented as integer
233
 */
234
 
235
#define AV_TIME_BASE            1000000
236
 
237
/**
238
 * Internal time base represented as fractional value
239
 */
240
 
241
#define AV_TIME_BASE_Q          (AVRational){1, AV_TIME_BASE}
242
 
243
/**
244
 * @}
245
 * @}
246
 * @defgroup lavu_picture Image related
247
 *
248
 * AVPicture types, pixel formats and basic image planes manipulation.
249
 *
250
 * @{
251
 */
252
 
253
enum AVPictureType {
254
    AV_PICTURE_TYPE_NONE = 0, ///< Undefined
255
    AV_PICTURE_TYPE_I,     ///< Intra
256
    AV_PICTURE_TYPE_P,     ///< Predicted
257
    AV_PICTURE_TYPE_B,     ///< Bi-dir predicted
258
    AV_PICTURE_TYPE_S,     ///< S(GMC)-VOP MPEG4
259
    AV_PICTURE_TYPE_SI,    ///< Switching Intra
260
    AV_PICTURE_TYPE_SP,    ///< Switching Predicted
261
    AV_PICTURE_TYPE_BI,    ///< BI type
262
};
263
 
264
/**
265
 * Return a single letter to describe the given picture type
266
 * pict_type.
267
 *
268
 * @param[in] pict_type the picture type @return a single character
269
 * representing the picture type, '?' if pict_type is unknown
270
 */
271
char av_get_picture_type_char(enum AVPictureType pict_type);
272
 
273
/**
274
 * @}
275
 */
276
 
277
#include "common.h"
278
#include "error.h"
279
#include "version.h"
280
#include "mathematics.h"
281
#include "rational.h"
282
#include "intfloat_readwrite.h"
283
#include "log.h"
284
#include "pixfmt.h"
285
 
286
/**
287
 * Return x default pointer in case p is NULL.
288
 */
289
static inline void *av_x_if_null(const void *p, const void *x)
290
{
291
    return (void *)(intptr_t)(p ? p : x);
292
}
293
 
294
/**
295
 * Compute the length of an integer list.
296
 *
297
 * @param elsize  size in bytes of each list element (only 1, 2, 4 or 8)
298
 * @param term    list terminator (usually 0 or -1)
299
 * @param list    pointer to the list
300
 * @return  length of the list, in elements, not counting the terminator
301
 */
302
unsigned av_int_list_length_for_size(unsigned elsize,
303
                                     const void *list, uint64_t term) av_pure;
304
 
305
/**
306
 * Compute the length of an integer list.
307
 *
308
 * @param term  list terminator (usually 0 or -1)
309
 * @param list  pointer to the list
310
 * @return  length of the list, in elements, not counting the terminator
311
 */
312
#define av_int_list_length(list, term) \
313
    av_int_list_length_for_size(sizeof(*(list)), list, term)
314
 
315
/**
316
 * @}
317
 * @}
318
 */
319
 
320
#endif /* AVUTIL_AVUTIL_H */