tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

avutil.h (8783B)


      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 * 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 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 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 preproc_misc Preprocessor String Macros
    142 *
    143 * @{
    144 *
    145 * @}
    146 *
    147 * @defgroup version_utils Library Version Macros
    148 *
    149 * @{
    150 *
    151 * @}
    152 */
    153 
    154 
    155 /**
    156 * @addtogroup lavu_ver
    157 * @{
    158 */
    159 
    160 /**
    161 * Return the LIBAVUTIL_VERSION_INT constant.
    162 */
    163 unsigned avutil_version(void);
    164 
    165 /**
    166 * Return an informative version string. This usually is the actual release
    167 * version number or a git commit description. This string has no fixed format
    168 * and can change any time. It should never be parsed by code.
    169 */
    170 const char *av_version_info(void);
    171 
    172 /**
    173 * Return the libavutil build-time configuration.
    174 */
    175 const char *avutil_configuration(void);
    176 
    177 /**
    178 * Return the libavutil license.
    179 */
    180 const char *avutil_license(void);
    181 
    182 /**
    183 * @}
    184 */
    185 
    186 /**
    187 * @addtogroup lavu_media Media Type
    188 * @brief Media Type
    189 */
    190 
    191 enum AVMediaType {
    192    AVMEDIA_TYPE_UNKNOWN = -1,  ///< Usually treated as AVMEDIA_TYPE_DATA
    193    AVMEDIA_TYPE_VIDEO,
    194    AVMEDIA_TYPE_AUDIO,
    195    AVMEDIA_TYPE_DATA,          ///< Opaque data information usually continuous
    196    AVMEDIA_TYPE_SUBTITLE,
    197    AVMEDIA_TYPE_ATTACHMENT,    ///< Opaque data information usually sparse
    198    AVMEDIA_TYPE_NB
    199 };
    200 
    201 /**
    202 * Return a string describing the media_type enum, NULL if media_type
    203 * is unknown.
    204 */
    205 const char *av_get_media_type_string(enum AVMediaType media_type);
    206 
    207 /**
    208 * @defgroup lavu_const Constants
    209 * @{
    210 *
    211 * @defgroup lavu_enc Encoding specific
    212 *
    213 * @note those definition should move to avcodec
    214 * @{
    215 */
    216 
    217 #define FF_LAMBDA_SHIFT 7
    218 #define FF_LAMBDA_SCALE (1<<FF_LAMBDA_SHIFT)
    219 #define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda
    220 #define FF_LAMBDA_MAX (256*128-1)
    221 
    222 #define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove
    223 
    224 /**
    225 * @}
    226 * @defgroup lavu_time Timestamp specific
    227 *
    228 * FFmpeg internal timebase and timestamp definitions
    229 *
    230 * @{
    231 */
    232 
    233 /**
    234 * @brief Undefined timestamp value
    235 *
    236 * Usually reported by demuxer that work on containers that do not provide
    237 * either pts or dts.
    238 */
    239 
    240 #define AV_NOPTS_VALUE          ((int64_t)UINT64_C(0x8000000000000000))
    241 
    242 /**
    243 * Internal time base represented as integer
    244 */
    245 
    246 #define AV_TIME_BASE            1000000
    247 
    248 /**
    249 * Internal time base represented as fractional value
    250 */
    251 
    252 #define AV_TIME_BASE_Q          (AVRational){1, AV_TIME_BASE}
    253 
    254 /**
    255 * @}
    256 * @}
    257 * @defgroup lavu_picture Image related
    258 *
    259 * AVPicture types, pixel formats and basic image planes manipulation.
    260 *
    261 * @{
    262 */
    263 
    264 enum AVPictureType {
    265    AV_PICTURE_TYPE_NONE = 0, ///< Undefined
    266    AV_PICTURE_TYPE_I,     ///< Intra
    267    AV_PICTURE_TYPE_P,     ///< Predicted
    268    AV_PICTURE_TYPE_B,     ///< Bi-dir predicted
    269    AV_PICTURE_TYPE_S,     ///< S(GMC)-VOP MPEG4
    270    AV_PICTURE_TYPE_SI,    ///< Switching Intra
    271    AV_PICTURE_TYPE_SP,    ///< Switching Predicted
    272    AV_PICTURE_TYPE_BI,    ///< BI type
    273 };
    274 
    275 /**
    276 * Return a single letter to describe the given picture type
    277 * pict_type.
    278 *
    279 * @param[in] pict_type the picture type @return a single character
    280 * representing the picture type, '?' if pict_type is unknown
    281 */
    282 char av_get_picture_type_char(enum AVPictureType pict_type);
    283 
    284 /**
    285 * @}
    286 */
    287 
    288 #include "common.h"
    289 #include "error.h"
    290 #include "rational.h"
    291 #include "version.h"
    292 #include "macros.h"
    293 #include "mathematics.h"
    294 #include "log.h"
    295 #include "pixfmt.h"
    296 
    297 /**
    298 * Return x default pointer in case p is NULL.
    299 */
    300 static inline void *av_x_if_null(const void *p, const void *x)
    301 {
    302    return (void *)(intptr_t)(p ? p : x);
    303 }
    304 
    305 /**
    306 * Compute the length of an integer list.
    307 *
    308 * @param elsize  size in bytes of each list element (only 1, 2, 4 or 8)
    309 * @param term    list terminator (usually 0 or -1)
    310 * @param list    pointer to the list
    311 * @return  length of the list, in elements, not counting the terminator
    312 */
    313 unsigned av_int_list_length_for_size(unsigned elsize,
    314                                     const void *list, uint64_t term) av_pure;
    315 
    316 /**
    317 * Compute the length of an integer list.
    318 *
    319 * @param term  list terminator (usually 0 or -1)
    320 * @param list  pointer to the list
    321 * @return  length of the list, in elements, not counting the terminator
    322 */
    323 #define av_int_list_length(list, term) \
    324    av_int_list_length_for_size(sizeof(*(list)), list, term)
    325 
    326 /**
    327 * Open a file using a UTF-8 filename.
    328 * The API of this function matches POSIX fopen(), errors are returned through
    329 * errno.
    330 */
    331 FILE *av_fopen_utf8(const char *path, const char *mode);
    332 
    333 /**
    334 * Return the fractional representation of the internal time base.
    335 */
    336 AVRational av_get_time_base_q(void);
    337 
    338 /**
    339 * @}
    340 * @}
    341 */
    342 
    343 #endif /* AVUTIL_AVUTIL_H */