1/* 2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> 3 * 4 * This file is part of Libav. 5 * 6 * Libav 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 * Libav 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 Libav; 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 libav_intro Introduction 33 * 34 * This document describe the usage of the different libraries 35 * provided by Libav. 36 * 37 * @li @ref libavc "libavcodec" encoding/decoding library 38 * @li @subpage 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 @subpage libpostproc post processing library 43 * @li @subpage libswscale color conversion and scaling library 44 * 45 */ 46 47/** 48 * @defgroup lavu Common utility functions 49 * 50 * @brief 51 * libavutil contains the code shared across all the other Libav 52 * libraries 53 * 54 * @note In order to use the functions provided by avutil you must include 55 * the specific header. 56 * 57 * @{ 58 * 59 * @defgroup lavu_crypto Crypto and Hashing 60 * 61 * @{ 62 * @} 63 * 64 * @defgroup lavu_math Maths 65 * @{ 66 * 67 * @} 68 * 69 * @defgroup lavu_string String Manipulation 70 * 71 * @{ 72 * 73 * @} 74 * 75 * @defgroup lavu_mem Memory Management 76 * 77 * @{ 78 * 79 * @} 80 * 81 * @defgroup lavu_data Data Structures 82 * @{ 83 * 84 * @} 85 * 86 * @defgroup lavu_audio Audio related 87 * 88 * @{ 89 * 90 * @} 91 * 92 * @defgroup lavu_error Error Codes 93 * 94 * @{ 95 * 96 * @} 97 * 98 * @defgroup lavu_misc Other 99 * 100 * @{ 101 * 102 * @defgroup lavu_internal Internal 103 * 104 * Not exported functions, for internal usage only 105 * 106 * @{ 107 * 108 * @} 109 */ 110 111 112/** 113 * @defgroup preproc_misc Preprocessor String Macros 114 * 115 * String manipulation macros 116 * 117 * @{ 118 */ 119 120#define AV_STRINGIFY(s) AV_TOSTRING(s) 121#define AV_TOSTRING(s) #s 122 123#define AV_GLUE(a, b) a ## b 124#define AV_JOIN(a, b) AV_GLUE(a, b) 125 126#define AV_PRAGMA(s) _Pragma(#s) 127 128/** 129 * @} 130 */ 131 132/** 133 * @defgroup version_utils Library Version Macros 134 * 135 * Useful to check and match library version in order to maintain 136 * backward compatibility. 137 * 138 * @{ 139 */ 140 141#define AV_VERSION_INT(a, b, c) (a<<16 | b<<8 | c) 142#define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c 143#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) 144 145/** 146 * @} 147 * 148 * @defgroup lavu_ver Version and Build diagnostics 149 * 150 * Macros and function useful to check at compiletime and at runtime 151 * which version of libavutil is in use. 152 * 153 * @{ 154 */ 155 156#define LIBAVUTIL_VERSION_MAJOR 51 157#define LIBAVUTIL_VERSION_MINOR 22 158#define LIBAVUTIL_VERSION_MICRO 1 159 160#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ 161 LIBAVUTIL_VERSION_MINOR, \ 162 LIBAVUTIL_VERSION_MICRO) 163#define LIBAVUTIL_VERSION AV_VERSION(LIBAVUTIL_VERSION_MAJOR, \ 164 LIBAVUTIL_VERSION_MINOR, \ 165 LIBAVUTIL_VERSION_MICRO) 166#define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT 167 168#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION) 169 170/** 171 * @} 172 * 173 * @defgroup depr_guards Deprecation guards 174 * Those FF_API_* defines are not part of public API. 175 * They may change, break or disappear at any time. 176 * 177 * They are used mostly internally to mark code that will be removed 178 * on the next major version. 179 * 180 * @{ 181 */ 182#ifndef FF_API_GET_BITS_PER_SAMPLE_FMT 183#define FF_API_GET_BITS_PER_SAMPLE_FMT (LIBAVUTIL_VERSION_MAJOR < 52) 184#endif 185#ifndef FF_API_FIND_OPT 186#define FF_API_FIND_OPT (LIBAVUTIL_VERSION_MAJOR < 52) 187#endif 188#ifndef FF_API_AV_FIFO_PEEK 189#define FF_API_AV_FIFO_PEEK (LIBAVUTIL_VERSION_MAJOR < 52) 190#endif 191#ifndef FF_API_OLD_AVOPTIONS 192#define FF_API_OLD_AVOPTIONS (LIBAVUTIL_VERSION_MAJOR < 52) 193#endif 194 195/** 196 * @} 197 */ 198 199/** 200 * @addtogroup lavu_ver 201 * @{ 202 */ 203 204/** 205 * Return the LIBAVUTIL_VERSION_INT constant. 206 */ 207unsigned avutil_version(void); 208 209/** 210 * Return the libavutil build-time configuration. 211 */ 212const char *avutil_configuration(void); 213 214/** 215 * Return the libavutil license. 216 */ 217const char *avutil_license(void); 218 219/** 220 * @} 221 */ 222 223/** 224 * @addtogroup lavu_media Media Type 225 * @brief Media Type 226 */ 227 228enum AVMediaType { 229 AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA 230 AVMEDIA_TYPE_VIDEO, 231 AVMEDIA_TYPE_AUDIO, 232 AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous 233 AVMEDIA_TYPE_SUBTITLE, 234 AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse 235 AVMEDIA_TYPE_NB 236}; 237 238/** 239 * @defgroup lavu_const Constants 240 * @{ 241 * 242 * @defgroup lavu_enc Encoding specific 243 * 244 * @note those definition should move to avcodec 245 * @{ 246 */ 247 248#define FF_LAMBDA_SHIFT 7 249#define FF_LAMBDA_SCALE (1<<FF_LAMBDA_SHIFT) 250#define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda 251#define FF_LAMBDA_MAX (256*128-1) 252 253#define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove 254 255/** 256 * @} 257 * @defgroup lavu_time Timestamp specific 258 * 259 * Libav internal timebase and timestamp definitions 260 * 261 * @{ 262 */ 263 264/** 265 * @brief Undefined timestamp value 266 * 267 * Usually reported by demuxer that work on containers that do not provide 268 * either pts or dts. 269 */ 270 271#define AV_NOPTS_VALUE INT64_C(0x8000000000000000) 272 273/** 274 * Internal time base represented as integer 275 */ 276 277#define AV_TIME_BASE 1000000 278 279/** 280 * Internal time base represented as fractional value 281 */ 282 283#define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE} 284 285/** 286 * @} 287 * @} 288 * @defgroup lavu_picture Image related 289 * 290 * AVPicture types, pixel formats and basic image planes manipulation. 291 * 292 * @{ 293 */ 294 295enum AVPictureType { 296 AV_PICTURE_TYPE_I = 1, ///< Intra 297 AV_PICTURE_TYPE_P, ///< Predicted 298 AV_PICTURE_TYPE_B, ///< Bi-dir predicted 299 AV_PICTURE_TYPE_S, ///< S(GMC)-VOP MPEG4 300 AV_PICTURE_TYPE_SI, ///< Switching Intra 301 AV_PICTURE_TYPE_SP, ///< Switching Predicted 302 AV_PICTURE_TYPE_BI, ///< BI type 303}; 304 305/** 306 * Return a single letter to describe the given picture type 307 * pict_type. 308 * 309 * @param[in] pict_type the picture type @return a single character 310 * representing the picture type, '?' if pict_type is unknown 311 */ 312char av_get_picture_type_char(enum AVPictureType pict_type); 313 314/** 315 * @} 316 */ 317 318#include "common.h" 319#include "error.h" 320 321/** 322 * @} 323 * @} 324 */ 325 326#endif /* AVUTIL_AVUTIL_H */ 327