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 describes the usage of the different libraries 35 * provided by Libav. 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 lavr "libavresample" audio resampling, format conversion and mixing 43 * @li @ref libsws "libswscale" color conversion and scaling library 44 * 45 * @section libav_versioning Versioning and compatibility 46 * 47 * Each of the Libav libraries contains a version.h header, which defines a 48 * major, minor and micro version number with the 49 * <em>LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO}</em> macros. The major version 50 * number is incremented with backward incompatible changes - e.g. removing 51 * parts of the public API, reordering public struct members, etc. The minor 52 * version number is incremented for backward compatible API changes or major 53 * new features - e.g. adding a new public function or a new decoder. The micro 54 * version number is incremented for smaller changes that a calling program 55 * might still want to check for - e.g. changing behavior in a previously 56 * unspecified situation. 57 * 58 * Libav guarantees backward API and ABI compatibility for each library as long 59 * as its major version number is unchanged. This means that no public symbols 60 * will be removed or renamed. Types and names of the public struct members and 61 * values of public macros and enums will remain the same (unless they were 62 * explicitly declared as not part of the public API). Documented behavior will 63 * not change. 64 * 65 * In other words, any correct program that works with a given Libav snapshot 66 * should work just as well without any changes with any later snapshot with the 67 * same major versions. This applies to both rebuilding the program against new 68 * Libav versions or to replacing the dynamic Libav libraries that a program 69 * links against. 70 * 71 * However, new public symbols may be added and new members may be appended to 72 * public structs whose size is not part of public ABI (most public structs in 73 * Libav). New macros and enum values may be added. Behavior in undocumented 74 * situations may change slightly (and be documented). All those are accompanied 75 * by an entry in doc/APIchanges and incrementing either the minor or micro 76 * version number. 77 */ 78 79 /** 80 * @defgroup lavu Common utility functions 81 * 82 * @brief 83 * libavutil contains the code shared across all the other Libav 84 * libraries 85 * 86 * @note In order to use the functions provided by avutil you must include 87 * the specific header. 88 * 89 * @{ 90 * 91 * @defgroup lavu_crypto Crypto and Hashing 92 * 93 * @{ 94 * @} 95 * 96 * @defgroup lavu_math Maths 97 * @{ 98 * 99 * @} 100 * 101 * @defgroup lavu_string String Manipulation 102 * 103 * @{ 104 * 105 * @} 106 * 107 * @defgroup lavu_mem Memory Management 108 * 109 * @{ 110 * 111 * @} 112 * 113 * @defgroup lavu_data Data Structures 114 * @{ 115 * 116 * @} 117 * 118 * @defgroup lavu_audio Audio related 119 * 120 * @{ 121 * 122 * @} 123 * 124 * @defgroup lavu_error Error Codes 125 * 126 * @{ 127 * 128 * @} 129 * 130 * @defgroup lavu_log Logging Facility 131 * 132 * @{ 133 * 134 * @} 135 * 136 * @defgroup lavu_misc Other 137 * 138 * @{ 139 * 140 * @defgroup lavu_internal Internal 141 * 142 * Not exported functions, for internal usage only 143 * 144 * @{ 145 * 146 * @} 147 * 148 * @defgroup preproc_misc Preprocessor String Macros 149 * 150 * @{ 151 * 152 * @} 153 */ 154 155 156 /** 157 * @addtogroup lavu_ver 158 * @{ 159 */ 160 161 /** 162 * Return the LIBAVUTIL_VERSION_INT constant. 163 */ 164 unsigned avutil_version(void); 165 166 /** 167 * Return the libavutil build-time configuration. 168 */ 169 const char *avutil_configuration(void); 170 171 /** 172 * Return the libavutil license. 173 */ 174 const char *avutil_license(void); 175 176 /** 177 * @} 178 */ 179 180 /** 181 * @addtogroup lavu_media Media Type 182 * @brief Media Type 183 */ 184 185 enum AVMediaType { 186 AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA 187 AVMEDIA_TYPE_VIDEO, 188 AVMEDIA_TYPE_AUDIO, 189 AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous 190 AVMEDIA_TYPE_SUBTITLE, 191 AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse 192 AVMEDIA_TYPE_NB 193 }; 194 195 /** 196 * @defgroup lavu_const Constants 197 * @{ 198 * 199 * @defgroup lavu_enc Encoding specific 200 * 201 * @note those definition should move to avcodec 202 * @{ 203 */ 204 205 #define FF_LAMBDA_SHIFT 7 206 #define FF_LAMBDA_SCALE (1<<FF_LAMBDA_SHIFT) 207 #define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda 208 #define FF_LAMBDA_MAX (256*128-1) 209 210 #define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove 211 212 /** 213 * @} 214 * @defgroup lavu_time Timestamp specific 215 * 216 * Libav internal timebase and timestamp definitions 217 * 218 * @{ 219 */ 220 221 /** 222 * @brief Undefined timestamp value 223 * 224 * Usually reported by demuxer that work on containers that do not provide 225 * either pts or dts. 226 */ 227 228 #define AV_NOPTS_VALUE INT64_C(0x8000000000000000) 229 230 /** 231 * Internal time base represented as integer 232 */ 233 234 #define AV_TIME_BASE 1000000 235 236 /** 237 * Internal time base represented as fractional value 238 */ 239 240 #define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE} 241 242 /** 243 * @} 244 * @} 245 * @defgroup lavu_picture Image related 246 * 247 * AVPicture types, pixel formats and basic image planes manipulation. 248 * 249 * @{ 250 */ 251 252 enum AVPictureType { 253 AV_PICTURE_TYPE_I = 1, ///< Intra 254 AV_PICTURE_TYPE_P, ///< Predicted 255 AV_PICTURE_TYPE_B, ///< Bi-dir predicted 256 AV_PICTURE_TYPE_S, ///< S(GMC)-VOP MPEG4 257 AV_PICTURE_TYPE_SI, ///< Switching Intra 258 AV_PICTURE_TYPE_SP, ///< Switching Predicted 259 AV_PICTURE_TYPE_BI, ///< BI type 260 }; 261 262 /** 263 * Return a single letter to describe the given picture type 264 * pict_type. 265 * 266 * @param[in] pict_type the picture type @return a single character 267 * representing the picture type, '?' if pict_type is unknown 268 */ 269 char av_get_picture_type_char(enum AVPictureType pict_type); 270 271 /** 272 * @} 273 */ 274 275 #include "error.h" 276 #include "rational.h" 277 #include "version.h" 278 #include "macros.h" 279 280 /** 281 * Return the fractional representation of the internal time base. 282 */ 283 AVRational av_get_time_base_q(void); 284 285 /** 286 * @} 287 * @} 288 */ 289 290 #endif /* AVUTIL_AVUTIL_H */ 291