avcodec.h 169 KB
Newer Older
1 2 3
/*
 * copyright (c) 2001 Fabrice Bellard
 *
4 5 6
 * This file is part of FFmpeg.
 *
 * FFmpeg is free software; you can redistribute it and/or
7 8
 * modify it under the terms of the GNU Lesser General Public
 * 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 13 14 15 16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * 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 22
#ifndef AVCODEC_AVCODEC_H
#define AVCODEC_AVCODEC_H
Fabrice Bellard's avatar
Fabrice Bellard committed
23

24
/**
25
 * @file
26 27
 * @ingroup libavc
 * Libavcodec external API header
28 29
 */

30
#include <errno.h>
31
#include "libavutil/samplefmt.h"
32
#include "libavutil/attributes.h"
33
#include "libavutil/avutil.h"
34
#include "libavutil/buffer.h"
35
#include "libavutil/cpu.h"
36
#include "libavutil/channel_layout.h"
37
#include "libavutil/dict.h"
38
#include "libavutil/frame.h"
39
#include "libavutil/log.h"
40
#include "libavutil/pixfmt.h"
41
#include "libavutil/rational.h"
Fabrice Bellard's avatar
Fabrice Bellard committed
42

43 44
#include "version.h"

45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
/**
 * @defgroup libavc Encoding/Decoding Library
 * @{
 *
 * @defgroup lavc_decoding Decoding
 * @{
 * @}
 *
 * @defgroup lavc_encoding Encoding
 * @{
 * @}
 *
 * @defgroup lavc_codec Codecs
 * @{
 * @defgroup lavc_codec_native Native Codecs
 * @{
 * @}
 * @defgroup lavc_codec_wrappers External library wrappers
 * @{
 * @}
 * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge
 * @{
 * @}
 * @}
 * @defgroup lavc_internal Internal
 * @{
 * @}
 * @}
 *
 */

76 77 78 79 80 81 82 83
/**
 * @defgroup lavc_core Core functions/structures.
 * @ingroup libavc
 *
 * Basic definitions, functions for querying libavcodec capabilities,
 * allocating core structures, etc.
 * @{
 */
84

85

86
/**
Måns Rullgård's avatar
Måns Rullgård committed
87
 * Identify the syntax and semantics of the bitstream.
88 89 90 91 92
 * The principle is roughly:
 * Two decoders with the same ID can decode the same streams.
 * Two encoders with the same ID can encode compatible streams.
 * There may be slight deviations from the principle due to implementation
 * details.
93
 *
Diego Biurrun's avatar
Diego Biurrun committed
94 95
 * If you add a codec ID to this list, add it so that
 * 1. no value of a existing codec ID changes (that would break ABI),
96
 * 2. it is as close as possible to similar codecs
97 98 99
 *
 * After adding new codec IDs, do not forget to add an entry to the codec
 * descriptor list and bump libavcodec minor version.
100
 */
101 102
enum AVCodecID {
    AV_CODEC_ID_NONE,
103 104

    /* video codecs */
105 106
    AV_CODEC_ID_MPEG1VIDEO,
    AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
107
#if FF_API_XVMC
108
    AV_CODEC_ID_MPEG2VIDEO_XVMC,
109
#endif /* FF_API_XVMC */
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273
    AV_CODEC_ID_H261,
    AV_CODEC_ID_H263,
    AV_CODEC_ID_RV10,
    AV_CODEC_ID_RV20,
    AV_CODEC_ID_MJPEG,
    AV_CODEC_ID_MJPEGB,
    AV_CODEC_ID_LJPEG,
    AV_CODEC_ID_SP5X,
    AV_CODEC_ID_JPEGLS,
    AV_CODEC_ID_MPEG4,
    AV_CODEC_ID_RAWVIDEO,
    AV_CODEC_ID_MSMPEG4V1,
    AV_CODEC_ID_MSMPEG4V2,
    AV_CODEC_ID_MSMPEG4V3,
    AV_CODEC_ID_WMV1,
    AV_CODEC_ID_WMV2,
    AV_CODEC_ID_H263P,
    AV_CODEC_ID_H263I,
    AV_CODEC_ID_FLV1,
    AV_CODEC_ID_SVQ1,
    AV_CODEC_ID_SVQ3,
    AV_CODEC_ID_DVVIDEO,
    AV_CODEC_ID_HUFFYUV,
    AV_CODEC_ID_CYUV,
    AV_CODEC_ID_H264,
    AV_CODEC_ID_INDEO3,
    AV_CODEC_ID_VP3,
    AV_CODEC_ID_THEORA,
    AV_CODEC_ID_ASV1,
    AV_CODEC_ID_ASV2,
    AV_CODEC_ID_FFV1,
    AV_CODEC_ID_4XM,
    AV_CODEC_ID_VCR1,
    AV_CODEC_ID_CLJR,
    AV_CODEC_ID_MDEC,
    AV_CODEC_ID_ROQ,
    AV_CODEC_ID_INTERPLAY_VIDEO,
    AV_CODEC_ID_XAN_WC3,
    AV_CODEC_ID_XAN_WC4,
    AV_CODEC_ID_RPZA,
    AV_CODEC_ID_CINEPAK,
    AV_CODEC_ID_WS_VQA,
    AV_CODEC_ID_MSRLE,
    AV_CODEC_ID_MSVIDEO1,
    AV_CODEC_ID_IDCIN,
    AV_CODEC_ID_8BPS,
    AV_CODEC_ID_SMC,
    AV_CODEC_ID_FLIC,
    AV_CODEC_ID_TRUEMOTION1,
    AV_CODEC_ID_VMDVIDEO,
    AV_CODEC_ID_MSZH,
    AV_CODEC_ID_ZLIB,
    AV_CODEC_ID_QTRLE,
    AV_CODEC_ID_TSCC,
    AV_CODEC_ID_ULTI,
    AV_CODEC_ID_QDRAW,
    AV_CODEC_ID_VIXL,
    AV_CODEC_ID_QPEG,
    AV_CODEC_ID_PNG,
    AV_CODEC_ID_PPM,
    AV_CODEC_ID_PBM,
    AV_CODEC_ID_PGM,
    AV_CODEC_ID_PGMYUV,
    AV_CODEC_ID_PAM,
    AV_CODEC_ID_FFVHUFF,
    AV_CODEC_ID_RV30,
    AV_CODEC_ID_RV40,
    AV_CODEC_ID_VC1,
    AV_CODEC_ID_WMV3,
    AV_CODEC_ID_LOCO,
    AV_CODEC_ID_WNV1,
    AV_CODEC_ID_AASC,
    AV_CODEC_ID_INDEO2,
    AV_CODEC_ID_FRAPS,
    AV_CODEC_ID_TRUEMOTION2,
    AV_CODEC_ID_BMP,
    AV_CODEC_ID_CSCD,
    AV_CODEC_ID_MMVIDEO,
    AV_CODEC_ID_ZMBV,
    AV_CODEC_ID_AVS,
    AV_CODEC_ID_SMACKVIDEO,
    AV_CODEC_ID_NUV,
    AV_CODEC_ID_KMVC,
    AV_CODEC_ID_FLASHSV,
    AV_CODEC_ID_CAVS,
    AV_CODEC_ID_JPEG2000,
    AV_CODEC_ID_VMNC,
    AV_CODEC_ID_VP5,
    AV_CODEC_ID_VP6,
    AV_CODEC_ID_VP6F,
    AV_CODEC_ID_TARGA,
    AV_CODEC_ID_DSICINVIDEO,
    AV_CODEC_ID_TIERTEXSEQVIDEO,
    AV_CODEC_ID_TIFF,
    AV_CODEC_ID_GIF,
    AV_CODEC_ID_DXA,
    AV_CODEC_ID_DNXHD,
    AV_CODEC_ID_THP,
    AV_CODEC_ID_SGI,
    AV_CODEC_ID_C93,
    AV_CODEC_ID_BETHSOFTVID,
    AV_CODEC_ID_PTX,
    AV_CODEC_ID_TXD,
    AV_CODEC_ID_VP6A,
    AV_CODEC_ID_AMV,
    AV_CODEC_ID_VB,
    AV_CODEC_ID_PCX,
    AV_CODEC_ID_SUNRAST,
    AV_CODEC_ID_INDEO4,
    AV_CODEC_ID_INDEO5,
    AV_CODEC_ID_MIMIC,
    AV_CODEC_ID_RL2,
    AV_CODEC_ID_ESCAPE124,
    AV_CODEC_ID_DIRAC,
    AV_CODEC_ID_BFI,
    AV_CODEC_ID_CMV,
    AV_CODEC_ID_MOTIONPIXELS,
    AV_CODEC_ID_TGV,
    AV_CODEC_ID_TGQ,
    AV_CODEC_ID_TQI,
    AV_CODEC_ID_AURA,
    AV_CODEC_ID_AURA2,
    AV_CODEC_ID_V210X,
    AV_CODEC_ID_TMV,
    AV_CODEC_ID_V210,
    AV_CODEC_ID_DPX,
    AV_CODEC_ID_MAD,
    AV_CODEC_ID_FRWU,
    AV_CODEC_ID_FLASHSV2,
    AV_CODEC_ID_CDGRAPHICS,
    AV_CODEC_ID_R210,
    AV_CODEC_ID_ANM,
    AV_CODEC_ID_BINKVIDEO,
    AV_CODEC_ID_IFF_ILBM,
    AV_CODEC_ID_IFF_BYTERUN1,
    AV_CODEC_ID_KGV1,
    AV_CODEC_ID_YOP,
    AV_CODEC_ID_VP8,
    AV_CODEC_ID_PICTOR,
    AV_CODEC_ID_ANSI,
    AV_CODEC_ID_A64_MULTI,
    AV_CODEC_ID_A64_MULTI5,
    AV_CODEC_ID_R10K,
    AV_CODEC_ID_MXPEG,
    AV_CODEC_ID_LAGARITH,
    AV_CODEC_ID_PRORES,
    AV_CODEC_ID_JV,
    AV_CODEC_ID_DFA,
    AV_CODEC_ID_WMV3IMAGE,
    AV_CODEC_ID_VC1IMAGE,
    AV_CODEC_ID_UTVIDEO,
    AV_CODEC_ID_BMV_VIDEO,
    AV_CODEC_ID_VBLE,
    AV_CODEC_ID_DXTORY,
    AV_CODEC_ID_V410,
    AV_CODEC_ID_XWD,
    AV_CODEC_ID_CDXL,
    AV_CODEC_ID_XBM,
    AV_CODEC_ID_ZEROCODEC,
    AV_CODEC_ID_MSS1,
    AV_CODEC_ID_MSA1,
    AV_CODEC_ID_TSCC2,
    AV_CODEC_ID_MTS2,
    AV_CODEC_ID_CLLC,
Alberto Delmás's avatar
Alberto Delmás committed
274
    AV_CODEC_ID_MSS2,
Tom Finegan's avatar
Tom Finegan committed
275
    AV_CODEC_ID_VP9,
276
    AV_CODEC_ID_AIC,
277 278 279
    AV_CODEC_ID_ESCAPE130,
    AV_CODEC_ID_G2M,
    AV_CODEC_ID_WEBP,
280
    AV_CODEC_ID_HNM4_VIDEO,
281 282
    AV_CODEC_ID_HEVC,
#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC
283
    AV_CODEC_ID_FIC,
284
    AV_CODEC_ID_ALIAS_PIX,
285 286 287 288 289 290 291 292
    AV_CODEC_ID_BRENDER_PIX,
    AV_CODEC_ID_PAF_VIDEO,
    AV_CODEC_ID_EXR,
    AV_CODEC_ID_VP7,
    AV_CODEC_ID_SANM,
    AV_CODEC_ID_SGIRLE,
    AV_CODEC_ID_MVC1,
    AV_CODEC_ID_MVC2,
Vittorio Giovara's avatar
Vittorio Giovara committed
293
    AV_CODEC_ID_HQX,
Vittorio Giovara's avatar
Vittorio Giovara committed
294
    AV_CODEC_ID_TDSC,
295
    AV_CODEC_ID_HQ_HQA,
296
    AV_CODEC_ID_HAP,
297
    AV_CODEC_ID_DDS,
Vittorio Giovara's avatar
Vittorio Giovara committed
298
    AV_CODEC_ID_DXV,
299
    AV_CODEC_ID_SCREENPRESSO,
300

301 302 303 304 305 306 307 308 309 310 311 312 313 314 315
    AV_CODEC_ID_Y41P = 0x8000,
    AV_CODEC_ID_AVRP,
    AV_CODEC_ID_012V,
    AV_CODEC_ID_AVUI,
    AV_CODEC_ID_AYUV,
    AV_CODEC_ID_TARGA_Y216,
    AV_CODEC_ID_V308,
    AV_CODEC_ID_V408,
    AV_CODEC_ID_YUV4,
    AV_CODEC_ID_AVRN,
    AV_CODEC_ID_CPIA,
    AV_CODEC_ID_XFACE,
    AV_CODEC_ID_SNOW,
    AV_CODEC_ID_SMVJPEG,
    AV_CODEC_ID_APNG,
316

Diego Biurrun's avatar
Diego Biurrun committed
317
    /* various PCM "codecs" */
318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346
    AV_CODEC_ID_FIRST_AUDIO = 0x10000,     ///< A dummy id pointing at the start of audio codecs
    AV_CODEC_ID_PCM_S16LE = 0x10000,
    AV_CODEC_ID_PCM_S16BE,
    AV_CODEC_ID_PCM_U16LE,
    AV_CODEC_ID_PCM_U16BE,
    AV_CODEC_ID_PCM_S8,
    AV_CODEC_ID_PCM_U8,
    AV_CODEC_ID_PCM_MULAW,
    AV_CODEC_ID_PCM_ALAW,
    AV_CODEC_ID_PCM_S32LE,
    AV_CODEC_ID_PCM_S32BE,
    AV_CODEC_ID_PCM_U32LE,
    AV_CODEC_ID_PCM_U32BE,
    AV_CODEC_ID_PCM_S24LE,
    AV_CODEC_ID_PCM_S24BE,
    AV_CODEC_ID_PCM_U24LE,
    AV_CODEC_ID_PCM_U24BE,
    AV_CODEC_ID_PCM_S24DAUD,
    AV_CODEC_ID_PCM_ZORK,
    AV_CODEC_ID_PCM_S16LE_PLANAR,
    AV_CODEC_ID_PCM_DVD,
    AV_CODEC_ID_PCM_F32BE,
    AV_CODEC_ID_PCM_F32LE,
    AV_CODEC_ID_PCM_F64BE,
    AV_CODEC_ID_PCM_F64LE,
    AV_CODEC_ID_PCM_BLURAY,
    AV_CODEC_ID_PCM_LXF,
    AV_CODEC_ID_S302M,
    AV_CODEC_ID_PCM_S8_PLANAR,
347 348 349
    AV_CODEC_ID_PCM_S24LE_PLANAR,
    AV_CODEC_ID_PCM_S32LE_PLANAR,
    AV_CODEC_ID_PCM_S16BE_PLANAR,
350 351 352
    /* new PCM "codecs" should be added right below this line starting with
     * an explicit value of for example 0x10800
     */
353

Diego Biurrun's avatar
Diego Biurrun committed
354
    /* various ADPCM codecs */
355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384
    AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
    AV_CODEC_ID_ADPCM_IMA_WAV,
    AV_CODEC_ID_ADPCM_IMA_DK3,
    AV_CODEC_ID_ADPCM_IMA_DK4,
    AV_CODEC_ID_ADPCM_IMA_WS,
    AV_CODEC_ID_ADPCM_IMA_SMJPEG,
    AV_CODEC_ID_ADPCM_MS,
    AV_CODEC_ID_ADPCM_4XM,
    AV_CODEC_ID_ADPCM_XA,
    AV_CODEC_ID_ADPCM_ADX,
    AV_CODEC_ID_ADPCM_EA,
    AV_CODEC_ID_ADPCM_G726,
    AV_CODEC_ID_ADPCM_CT,
    AV_CODEC_ID_ADPCM_SWF,
    AV_CODEC_ID_ADPCM_YAMAHA,
    AV_CODEC_ID_ADPCM_SBPRO_4,
    AV_CODEC_ID_ADPCM_SBPRO_3,
    AV_CODEC_ID_ADPCM_SBPRO_2,
    AV_CODEC_ID_ADPCM_THP,
    AV_CODEC_ID_ADPCM_IMA_AMV,
    AV_CODEC_ID_ADPCM_EA_R1,
    AV_CODEC_ID_ADPCM_EA_R3,
    AV_CODEC_ID_ADPCM_EA_R2,
    AV_CODEC_ID_ADPCM_IMA_EA_SEAD,
    AV_CODEC_ID_ADPCM_IMA_EA_EACS,
    AV_CODEC_ID_ADPCM_EA_XAS,
    AV_CODEC_ID_ADPCM_EA_MAXIS_XA,
    AV_CODEC_ID_ADPCM_IMA_ISS,
    AV_CODEC_ID_ADPCM_G722,
    AV_CODEC_ID_ADPCM_IMA_APC,
385
    AV_CODEC_ID_ADPCM_VIMA,
386
#if FF_API_VIMA_DECODER
387
    AV_CODEC_ID_VIMA = AV_CODEC_ID_ADPCM_VIMA,
388
#endif
389 390 391 392 393 394 395

    AV_CODEC_ID_ADPCM_AFC = 0x11800,
    AV_CODEC_ID_ADPCM_IMA_OKI,
    AV_CODEC_ID_ADPCM_DTK,
    AV_CODEC_ID_ADPCM_IMA_RAD,
    AV_CODEC_ID_ADPCM_G726LE,
    AV_CODEC_ID_ADPCM_THP_LE,
396

397
    /* AMR */
398 399
    AV_CODEC_ID_AMR_NB = 0x12000,
    AV_CODEC_ID_AMR_WB,
400

401
    /* RealAudio codecs*/
402 403
    AV_CODEC_ID_RA_144 = 0x13000,
    AV_CODEC_ID_RA_288,
404 405

    /* various DPCM codecs */
406 407 408 409
    AV_CODEC_ID_ROQ_DPCM = 0x14000,
    AV_CODEC_ID_INTERPLAY_DPCM,
    AV_CODEC_ID_XAN_DPCM,
    AV_CODEC_ID_SOL_DPCM,
410

411
    /* audio codecs */
412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443
    AV_CODEC_ID_MP2 = 0x15000,
    AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
    AV_CODEC_ID_AAC,
    AV_CODEC_ID_AC3,
    AV_CODEC_ID_DTS,
    AV_CODEC_ID_VORBIS,
    AV_CODEC_ID_DVAUDIO,
    AV_CODEC_ID_WMAV1,
    AV_CODEC_ID_WMAV2,
    AV_CODEC_ID_MACE3,
    AV_CODEC_ID_MACE6,
    AV_CODEC_ID_VMDAUDIO,
    AV_CODEC_ID_FLAC,
    AV_CODEC_ID_MP3ADU,
    AV_CODEC_ID_MP3ON4,
    AV_CODEC_ID_SHORTEN,
    AV_CODEC_ID_ALAC,
    AV_CODEC_ID_WESTWOOD_SND1,
    AV_CODEC_ID_GSM, ///< as in Berlin toast format
    AV_CODEC_ID_QDM2,
    AV_CODEC_ID_COOK,
    AV_CODEC_ID_TRUESPEECH,
    AV_CODEC_ID_TTA,
    AV_CODEC_ID_SMACKAUDIO,
    AV_CODEC_ID_QCELP,
    AV_CODEC_ID_WAVPACK,
    AV_CODEC_ID_DSICINAUDIO,
    AV_CODEC_ID_IMC,
    AV_CODEC_ID_MUSEPACK7,
    AV_CODEC_ID_MLP,
    AV_CODEC_ID_GSM_MS, /* as found in WAV */
    AV_CODEC_ID_ATRAC3,
444
#if FF_API_VOXWARE
445
    AV_CODEC_ID_VOXWARE,
446
#endif
447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474
    AV_CODEC_ID_APE,
    AV_CODEC_ID_NELLYMOSER,
    AV_CODEC_ID_MUSEPACK8,
    AV_CODEC_ID_SPEEX,
    AV_CODEC_ID_WMAVOICE,
    AV_CODEC_ID_WMAPRO,
    AV_CODEC_ID_WMALOSSLESS,
    AV_CODEC_ID_ATRAC3P,
    AV_CODEC_ID_EAC3,
    AV_CODEC_ID_SIPR,
    AV_CODEC_ID_MP1,
    AV_CODEC_ID_TWINVQ,
    AV_CODEC_ID_TRUEHD,
    AV_CODEC_ID_MP4ALS,
    AV_CODEC_ID_ATRAC1,
    AV_CODEC_ID_BINKAUDIO_RDFT,
    AV_CODEC_ID_BINKAUDIO_DCT,
    AV_CODEC_ID_AAC_LATM,
    AV_CODEC_ID_QDMC,
    AV_CODEC_ID_CELT,
    AV_CODEC_ID_G723_1,
    AV_CODEC_ID_G729,
    AV_CODEC_ID_8SVX_EXP,
    AV_CODEC_ID_8SVX_FIB,
    AV_CODEC_ID_BMV_AUDIO,
    AV_CODEC_ID_RALF,
    AV_CODEC_ID_IAC,
    AV_CODEC_ID_ILBC,
475
    AV_CODEC_ID_OPUS,
476
    AV_CODEC_ID_COMFORT_NOISE,
477
    AV_CODEC_ID_TAK,
478
    AV_CODEC_ID_METASOUND,
479
    AV_CODEC_ID_PAF_AUDIO,
Kostya Shishkov's avatar
Kostya Shishkov committed
480
    AV_CODEC_ID_ON2AVC,
481
    AV_CODEC_ID_DSS_SP,
482 483 484 485 486 487 488 489 490 491 492

    AV_CODEC_ID_FFWAVESYNTH = 0x15800,
    AV_CODEC_ID_SONIC,
    AV_CODEC_ID_SONIC_LS,
    AV_CODEC_ID_EVRC,
    AV_CODEC_ID_SMV,
    AV_CODEC_ID_DSD_LSBF,
    AV_CODEC_ID_DSD_MSBF,
    AV_CODEC_ID_DSD_LSBF_PLANAR,
    AV_CODEC_ID_DSD_MSBF_PLANAR,
    AV_CODEC_ID_4GV,
493

494
    /* subtitle codecs */
495 496 497 498 499 500 501 502 503 504
    AV_CODEC_ID_FIRST_SUBTITLE = 0x17000,          ///< A dummy ID pointing at the start of subtitle codecs.
    AV_CODEC_ID_DVD_SUBTITLE = 0x17000,
    AV_CODEC_ID_DVB_SUBTITLE,
    AV_CODEC_ID_TEXT,  ///< raw UTF-8 text
    AV_CODEC_ID_XSUB,
    AV_CODEC_ID_SSA,
    AV_CODEC_ID_MOV_TEXT,
    AV_CODEC_ID_HDMV_PGS_SUBTITLE,
    AV_CODEC_ID_DVB_TELETEXT,
    AV_CODEC_ID_SRT,
505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520

    AV_CODEC_ID_MICRODVD   = 0x17800,
    AV_CODEC_ID_EIA_608,
    AV_CODEC_ID_JACOSUB,
    AV_CODEC_ID_SAMI,
    AV_CODEC_ID_REALTEXT,
    AV_CODEC_ID_STL,
    AV_CODEC_ID_SUBVIEWER1,
    AV_CODEC_ID_SUBVIEWER,
    AV_CODEC_ID_SUBRIP,
    AV_CODEC_ID_WEBVTT,
    AV_CODEC_ID_MPL2,
    AV_CODEC_ID_VPLAYER,
    AV_CODEC_ID_PJS,
    AV_CODEC_ID_ASS,
    AV_CODEC_ID_HDMV_TEXT_SUBTITLE,
521

Diego Biurrun's avatar
Diego Biurrun committed
522
    /* other specific kind of codecs (generally used for attachments) */
523 524
    AV_CODEC_ID_FIRST_UNKNOWN = 0x18000,           ///< A dummy ID pointing at the start of various fake codecs.
    AV_CODEC_ID_TTF = 0x18000,
525 526 527 528 529 530 531 532 533

    AV_CODEC_ID_BINTEXT    = 0x18800,
    AV_CODEC_ID_XBIN,
    AV_CODEC_ID_IDF,
    AV_CODEC_ID_OTF,
    AV_CODEC_ID_SMPTE_KLV,
    AV_CODEC_ID_DVD_NAV,
    AV_CODEC_ID_TIMED_ID3,
    AV_CODEC_ID_BIN_DATA,
534

535

536
    AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it
537

538
    AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
Diego Biurrun's avatar
Diego Biurrun committed
539
                                * stream (only used by libavformat) */
540
    AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems
541
                                * stream (only used by libavformat) */
542
    AV_CODEC_ID_FFMETADATA = 0x21000,   ///< Dummy codec for streams containing only metadata information.
Fabrice Bellard's avatar
Fabrice Bellard committed
543
};
544

545 546 547
/**
 * This struct describes the properties of a single codec described by an
 * AVCodecID.
548
 * @see avcodec_descriptor_get()
549 550 551 552 553 554 555 556 557 558 559 560 561 562
 */
typedef struct AVCodecDescriptor {
    enum AVCodecID     id;
    enum AVMediaType type;
    /**
     * Name of the codec described by this descriptor. It is non-empty and
     * unique for each codec descriptor. It should contain alphanumeric
     * characters and '_' only.
     */
    const char      *name;
    /**
     * A more descriptive name for this codec. May be NULL.
     */
    const char *long_name;
563 564 565 566
    /**
     * Codec properties, a combination of AV_CODEC_PROP_* flags.
     */
    int             props;
567 568 569 570

    /**
     * MIME type(s) associated with the codec.
     * May be NULL; if not, a NULL-terminated array of MIME types.
Lou Logan's avatar
Lou Logan committed
571
     * The first item is always non-NULL and is the preferred MIME type.
572 573
     */
    const char *const *mime_types;
574 575
} AVCodecDescriptor;

576 577 578 579 580
/**
 * Codec uses only intra compression.
 * Video codecs only.
 */
#define AV_CODEC_PROP_INTRA_ONLY    (1 << 0)
581 582 583 584 585 586 587 588 589 590
/**
 * Codec supports lossy compression. Audio and video codecs only.
 * @note a codec may support both lossy and lossless
 * compression modes
 */
#define AV_CODEC_PROP_LOSSY         (1 << 1)
/**
 * Codec supports lossless compression. Audio and video codecs only.
 */
#define AV_CODEC_PROP_LOSSLESS      (1 << 2)
591 592 593 594 595 596 597 598 599 600
/**
 * Codec supports frame reordering. That is, the coded order (the order in which
 * the encoded packets are output by the encoders / stored / input to the
 * decoders) may be different from the presentation order of the corresponding
 * frames.
 *
 * For codecs that do not have this property set, PTS and DTS should always be
 * equal.
 */
#define AV_CODEC_PROP_REORDER       (1 << 3)
601 602
/**
 * Subtitle codec is bitmap based
603
 * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field.
604 605
 */
#define AV_CODEC_PROP_BITMAP_SUB    (1 << 16)
606 607 608 609 610
/**
 * Subtitle codec is text based.
 * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field.
 */
#define AV_CODEC_PROP_TEXT_SUB      (1 << 17)
611

612
/**
613
 * @ingroup lavc_decoding
614
 * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
615 616
 * This is mainly needed because some optimized bitstream readers read
 * 32 or 64 bit at once and could read over the end.<br>
Diego Biurrun's avatar
Diego Biurrun committed
617 618
 * Note: If the first 23 bits of the additional bytes are not 0, then damaged
 * MPEG bitstreams could cause overread and segfault.
619
 */
620
#define AV_INPUT_BUFFER_PADDING_SIZE 32
621

622
/**
623
 * @ingroup lavc_encoding
Diego Biurrun's avatar
Diego Biurrun committed
624 625
 * minimum encoding buffer size
 * Used to avoid some checks during header writing.
626
 */
627
#define AV_INPUT_BUFFER_MIN_SIZE 16384
628

629
#if FF_API_WITHOUT_PREFIX
630 631 632
/**
 * @deprecated use AV_INPUT_BUFFER_PADDING_SIZE instead
 */
633
#define FF_INPUT_BUFFER_PADDING_SIZE 32
634

635 636 637 638
/**
 * @deprecated use AV_INPUT_BUFFER_MIN_SIZE instead
 */
#define FF_MIN_BUFFER_SIZE 16384
639
#endif /* FF_API_WITHOUT_PREFIX */
640

641
/**
642
 * @ingroup lavc_encoding
643
 * motion estimation type.
644
 * @deprecated use codec private option instead
645
 */
646
#if FF_API_MOTION_EST
647
enum Motion_Est_ID {
648
    ME_ZERO = 1,    ///< no search, that is use 0,0 vector whenever one is needed
649 650 651
    ME_FULL,
    ME_LOG,
    ME_PHODS,
652 653 654 655
    ME_EPZS,        ///< enhanced predictive zonal search
    ME_X1,          ///< reserved for experiments
    ME_HEX,         ///< hexagon based search
    ME_UMH,         ///< uneven multi-hexagon search
Loren Merritt's avatar
Loren Merritt committed
656
    ME_TESA,        ///< transformed exhaustive search algorithm
657
    ME_ITER=50,     ///< iterative search
658
};
659
#endif
660

661 662 663
/**
 * @ingroup lavc_decoding
 */
Michael Niedermayer's avatar
Michael Niedermayer committed
664
enum AVDiscard{
Diego Biurrun's avatar
Diego Biurrun committed
665 666
    /* We leave some space between them for extensions (drop some
     * keyframes for intra-only or drop just some bidir frames). */
667 668 669 670
    AVDISCARD_NONE    =-16, ///< discard nothing
    AVDISCARD_DEFAULT =  0, ///< discard useless packets like 0 size packets in avi
    AVDISCARD_NONREF  =  8, ///< discard all non reference
    AVDISCARD_BIDIR   = 16, ///< discard all bidirectional frames
671
    AVDISCARD_NONINTRA= 24, ///< discard all non intra frames
672 673
    AVDISCARD_NONKEY  = 32, ///< discard all frames except keyframes
    AVDISCARD_ALL     = 48, ///< discard all
Michael Niedermayer's avatar
Michael Niedermayer committed
674 675
};

676 677 678 679 680 681 682 683 684 685 686 687 688
enum AVAudioServiceType {
    AV_AUDIO_SERVICE_TYPE_MAIN              = 0,
    AV_AUDIO_SERVICE_TYPE_EFFECTS           = 1,
    AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2,
    AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED  = 3,
    AV_AUDIO_SERVICE_TYPE_DIALOGUE          = 4,
    AV_AUDIO_SERVICE_TYPE_COMMENTARY        = 5,
    AV_AUDIO_SERVICE_TYPE_EMERGENCY         = 6,
    AV_AUDIO_SERVICE_TYPE_VOICE_OVER        = 7,
    AV_AUDIO_SERVICE_TYPE_KARAOKE           = 8,
    AV_AUDIO_SERVICE_TYPE_NB                   , ///< Not part of ABI
};

689 690 691
/**
 * @ingroup lavc_encoding
 */
692 693 694
typedef struct RcOverride{
    int start_frame;
    int end_frame;
Diego Biurrun's avatar
Diego Biurrun committed
695
    int qscale; // If this is 0 then quality_factor will be used instead.
696 697 698
    float quality_factor;
} RcOverride;

699 700 701 702
#if FF_API_MAX_BFRAMES
/**
 * @deprecated there is no libavcodec-wide limit on the number of B-frames
 */
703
#define FF_MAX_B_FRAMES 16
704
#endif
705

706
/* encoding support
Diego Biurrun's avatar
Diego Biurrun committed
707 708
   These flags can be passed in AVCodecContext.flags before initialization.
   Note: Not everything is supported yet.
709
*/
Fabrice Bellard's avatar
Fabrice Bellard committed
710

711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784
/**
 * Allow decoders to produce frames with data planes that are not aligned
 * to CPU requirements (e.g. due to cropping).
 */
#define AV_CODEC_FLAG_UNALIGNED       (1 <<  0)
/**
 * Use fixed qscale.
 */
#define AV_CODEC_FLAG_QSCALE          (1 <<  1)
/**
 * 4 MV per MB allowed / advanced prediction for H.263.
 */
#define AV_CODEC_FLAG_4MV             (1 <<  2)
/**
 * Output even those frames that might be corrupted.
 */
#define AV_CODEC_FLAG_OUTPUT_CORRUPT  (1 <<  3)
/**
 * Use qpel MC.
 */
#define AV_CODEC_FLAG_QPEL            (1 <<  4)
/**
 * Use internal 2pass ratecontrol in first pass mode.
 */
#define AV_CODEC_FLAG_PASS1           (1 <<  9)
/**
 * Use internal 2pass ratecontrol in second pass mode.
 */
#define AV_CODEC_FLAG_PASS2           (1 << 10)
/**
 * loop filter.
 */
#define AV_CODEC_FLAG_LOOP_FILTER     (1 << 11)
/**
 * Only decode/encode grayscale.
 */
#define AV_CODEC_FLAG_GRAY            (1 << 13)
/**
 * error[?] variables will be set during encoding.
 */
#define AV_CODEC_FLAG_PSNR            (1 << 15)
/**
 * Input bitstream might be truncated at a random location
 * instead of only at frame boundaries.
 */
#define AV_CODEC_FLAG_TRUNCATED       (1 << 16)
/**
 * Use interlaced DCT.
 */
#define AV_CODEC_FLAG_INTERLACED_DCT  (1 << 18)
/**
 * Force low delay.
 */
#define AV_CODEC_FLAG_LOW_DELAY       (1 << 19)
/**
 * Place global headers in extradata instead of every keyframe.
 */
#define AV_CODEC_FLAG_GLOBAL_HEADER   (1 << 22)
/**
 * Use only bitexact stuff (except (I)DCT).
 */
#define AV_CODEC_FLAG_BITEXACT        (1 << 23)
/* Fx : Flag for h263+ extra options */
/**
 * H.263 advanced intra coding / MPEG-4 AC prediction
 */
#define AV_CODEC_FLAG_AC_PRED         (1 << 24)
/**
 * interlaced motion estimation
 */
#define AV_CODEC_FLAG_INTERLACED_ME   (1 << 29)
/**
 * Allow non spec compliant speedup tricks.
 */
785
#define AV_CODEC_FLAG_CLOSED_GOP      (1U << 31)
786 787 788 789 790 791 792 793 794 795

#define AV_CODEC_FLAG2_FAST           (1 <<  0)
/**
 * Skip bitstream encoding.
 */
#define AV_CODEC_FLAG2_NO_OUTPUT      (1 <<  2)
/**
 * Place global headers at every keyframe instead of in extradata.
 */
#define AV_CODEC_FLAG2_LOCAL_HEADER   (1 <<  3)
796 797 798 799

/**
 * timecode is in drop frame format. DEPRECATED!!!!
 */
800
#define AV_CODEC_FLAG2_DROP_FRAME_TIMECODE (1 << 13)
801

802 803 804 805 806 807 808 809 810 811
/**
 * Input bitstream might be truncated at a packet boundaries
 * instead of only at frame boundaries.
 */
#define AV_CODEC_FLAG2_CHUNKS         (1 << 15)
/**
 * Discard cropping information from SPS.
 */
#define AV_CODEC_FLAG2_IGNORE_CROP    (1 << 16)

812 813 814
/**
 * Show all frames before the first keyframe
 */
815
#define AV_CODEC_FLAG2_SHOW_ALL       (1 << 22)
816 817 818
/**
 * Export motion vectors through frame side data
 */
819
#define AV_CODEC_FLAG2_EXPORT_MVS     (1 << 28)
820 821 822
/**
 * Do not skip samples and export skip information as frame side data
 */
823
#define AV_CODEC_FLAG2_SKIP_MANUAL    (1 << 29)
824

825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871
/* Unsupported options :
 *              Syntax Arithmetic coding (SAC)
 *              Reference Picture Selection
 *              Independent Segment Decoding */
/* /Fx */
/* codec capabilities */

/**
 * Decoder can use draw_horiz_band callback.
 */
#define AV_CODEC_CAP_DRAW_HORIZ_BAND     (1 <<  0)
/**
 * Codec uses get_buffer() for allocating buffers and supports custom allocators.
 * If not set, it might not use get_buffer() at all or use operations that
 * assume the buffer was allocated by avcodec_default_get_buffer.
 */
#define AV_CODEC_CAP_DR1                 (1 <<  1)
#define AV_CODEC_CAP_TRUNCATED           (1 <<  3)
/**
 * Encoder or decoder requires flushing with NULL input at the end in order to
 * give the complete and correct output.
 *
 * NOTE: If this flag is not set, the codec is guaranteed to never be fed with
 *       with NULL data. The user can still send NULL data to the public encode
 *       or decode function, but libavcodec will not pass it along to the codec
 *       unless this flag is set.
 *
 * Decoders:
 * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL,
 * avpkt->size=0 at the end to get the delayed data until the decoder no longer
 * returns frames.
 *
 * Encoders:
 * The encoder needs to be fed with NULL data at the end of encoding until the
 * encoder no longer returns data.
 *
 * NOTE: For encoders implementing the AVCodec.encode2() function, setting this
 *       flag also means that the encoder must set the pts and duration for
 *       each output packet. If this flag is not set, the pts and duration will
 *       be determined by libavcodec from the input frame.
 */
#define AV_CODEC_CAP_DELAY               (1 <<  5)
/**
 * Codec can be fed a final frame with a smaller size.
 * This can be used to prevent truncation of the last audio samples.
 */
#define AV_CODEC_CAP_SMALL_LAST_FRAME    (1 <<  6)
872 873 874 875 876 877 878 879

#if FF_API_CAP_VDPAU
/**
 * Codec can export data for HW decoding (VDPAU).
 */
#define AV_CODEC_CAP_HWACCEL_VDPAU       (1 <<  7)
#endif

880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920
/**
 * Codec can output multiple frames per AVPacket
 * Normally demuxers return one frame at a time, demuxers which do not do
 * are connected to a parser to split what they return into proper frames.
 * This flag is reserved to the very rare category of codecs which have a
 * bitstream that cannot be split into frames without timeconsuming
 * operations like full decoding. Demuxers carring such bitstreams thus
 * may return multiple frames in a packet. This has many disadvantages like
 * prohibiting stream copy in many cases thus it should only be considered
 * as a last resort.
 */
#define AV_CODEC_CAP_SUBFRAMES           (1 <<  8)
/**
 * Codec is experimental and is thus avoided in favor of non experimental
 * encoders
 */
#define AV_CODEC_CAP_EXPERIMENTAL        (1 <<  9)
/**
 * Codec should fill in channel configuration and samplerate instead of container
 */
#define AV_CODEC_CAP_CHANNEL_CONF        (1 << 10)
/**
 * Codec supports frame-level multithreading.
 */
#define AV_CODEC_CAP_FRAME_THREADS       (1 << 12)
/**
 * Codec supports slice-based (or partition-based) multithreading.
 */
#define AV_CODEC_CAP_SLICE_THREADS       (1 << 13)
/**
 * Codec supports changed parameters at any point.
 */
#define AV_CODEC_CAP_PARAM_CHANGE        (1 << 14)
/**
 * Codec supports avctx->thread_count == 0 (auto).
 */
#define AV_CODEC_CAP_AUTO_THREADS        (1 << 15)
/**
 * Audio encoder supports receiving a different number of samples in each call.
 */
#define AV_CODEC_CAP_VARIABLE_FRAME_SIZE (1 << 16)
921 922 923 924 925 926 927 928 929
/**
 * Codec is intra only.
 */
#define AV_CODEC_CAP_INTRA_ONLY       0x40000000
/**
 * Codec is lossless.
 */
#define AV_CODEC_CAP_LOSSLESS         0x80000000

930

931
#if FF_API_WITHOUT_PREFIX
932 933 934 935
/**
 * Allow decoders to produce frames with data planes that are not aligned
 * to CPU requirements (e.g. due to cropping).
 */
936 937 938 939 940
#define CODEC_FLAG_UNALIGNED AV_CODEC_FLAG_UNALIGNED
#define CODEC_FLAG_QSCALE AV_CODEC_FLAG_QSCALE
#define CODEC_FLAG_4MV    AV_CODEC_FLAG_4MV
#define CODEC_FLAG_OUTPUT_CORRUPT AV_CODEC_FLAG_OUTPUT_CORRUPT
#define CODEC_FLAG_QPEL   AV_CODEC_FLAG_QPEL
941 942 943 944
#if FF_API_GMC
/**
 * @deprecated use the "gmc" private option of the libxvid encoder
 */
Diego Biurrun's avatar
Diego Biurrun committed
945
#define CODEC_FLAG_GMC    0x0020  ///< Use GMC.
946
#endif
947 948 949 950 951 952 953
#if FF_API_MV0
/**
 * @deprecated use the flag "mv0" in the "mpv_flags" private option of the
 * mpegvideo encoders
 */
#define CODEC_FLAG_MV0    0x0040
#endif
954
#if FF_API_INPUT_PRESERVED
955
/**
956 957
 * @deprecated passing reference-counted frames to the encoders replaces this
 * flag
958
 */
959
#define CODEC_FLAG_INPUT_PRESERVED 0x0100
960
#endif
961 962 963
#define CODEC_FLAG_PASS1           AV_CODEC_FLAG_PASS1
#define CODEC_FLAG_PASS2           AV_CODEC_FLAG_PASS2
#define CODEC_FLAG_GRAY            AV_CODEC_FLAG_GRAY
964 965 966 967 968 969 970
#if FF_API_EMU_EDGE
/**
 * @deprecated edges are not used/required anymore. I.e. this flag is now always
 * set.
 */
#define CODEC_FLAG_EMU_EDGE        0x4000
#endif
971 972 973
#define CODEC_FLAG_PSNR            AV_CODEC_FLAG_PSNR
#define CODEC_FLAG_TRUNCATED       AV_CODEC_FLAG_TRUNCATED

974 975 976 977 978 979 980
#if FF_API_NORMALIZE_AQP
/**
 * @deprecated use the flag "naq" in the "mpv_flags" private option of the
 * mpegvideo encoders
 */
#define CODEC_FLAG_NORMALIZE_AQP  0x00020000
#endif
981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998
#define CODEC_FLAG_INTERLACED_DCT AV_CODEC_FLAG_INTERLACED_DCT
#define CODEC_FLAG_LOW_DELAY      AV_CODEC_FLAG_LOW_DELAY
#define CODEC_FLAG_GLOBAL_HEADER  AV_CODEC_FLAG_GLOBAL_HEADER
#define CODEC_FLAG_BITEXACT       AV_CODEC_FLAG_BITEXACT
#define CODEC_FLAG_AC_PRED        AV_CODEC_FLAG_AC_PRED
#define CODEC_FLAG_LOOP_FILTER    AV_CODEC_FLAG_LOOP_FILTER
#define CODEC_FLAG_INTERLACED_ME  AV_CODEC_FLAG_INTERLACED_ME
#define CODEC_FLAG_CLOSED_GOP     AV_CODEC_FLAG_CLOSED_GOP
#define CODEC_FLAG2_FAST          AV_CODEC_FLAG2_FAST
#define CODEC_FLAG2_NO_OUTPUT     AV_CODEC_FLAG2_NO_OUTPUT
#define CODEC_FLAG2_LOCAL_HEADER  AV_CODEC_FLAG2_LOCAL_HEADER
#define CODEC_FLAG2_DROP_FRAME_TIMECODE AV_CODEC_FLAG2_DROP_FRAME_TIMECODE
#define CODEC_FLAG2_IGNORE_CROP   AV_CODEC_FLAG2_IGNORE_CROP

#define CODEC_FLAG2_CHUNKS        AV_CODEC_FLAG2_CHUNKS
#define CODEC_FLAG2_SHOW_ALL      AV_CODEC_FLAG2_SHOW_ALL
#define CODEC_FLAG2_EXPORT_MVS    AV_CODEC_FLAG2_EXPORT_MVS
#define CODEC_FLAG2_SKIP_MANUAL   AV_CODEC_FLAG2_SKIP_MANUAL
999

1000
/* Unsupported options :
1001 1002
 *              Syntax Arithmetic coding (SAC)
 *              Reference Picture Selection
1003
 *              Independent Segment Decoding */
1004
/* /Fx */
1005 1006
/* codec capabilities */

1007
#define CODEC_CAP_DRAW_HORIZ_BAND AV_CODEC_CAP_DRAW_HORIZ_BAND ///< Decoder can use draw_horiz_band callback.
1008
/**
1009 1010 1011
 * Codec uses get_buffer() for allocating buffers and supports custom allocators.
 * If not set, it might not use get_buffer() at all or use operations that
 * assume the buffer was allocated by avcodec_default_get_buffer.
1012
 */
1013 1014
#define CODEC_CAP_DR1             AV_CODEC_CAP_DR1
#define CODEC_CAP_TRUNCATED       AV_CODEC_CAP_TRUNCATED
1015
#if FF_API_XVMC
1016 1017 1018 1019 1020 1021 1022
/* Codec can export data for HW decoding. This flag indicates that
 * the codec would call get_format() with list that might contain HW accelerated
 * pixel formats (XvMC, VDPAU, VAAPI, etc). The application can pick any of them
 * including raw image format.
 * The application can use the passed context to determine bitstream version,
 * chroma format, resolution etc.
 */
1023
#define CODEC_CAP_HWACCEL         0x0010
1024
#endif /* FF_API_XVMC */
1025
/**
1026 1027 1028 1029 1030 1031 1032 1033 1034 1035
 * Encoder or decoder requires flushing with NULL input at the end in order to
 * give the complete and correct output.
 *
 * NOTE: If this flag is not set, the codec is guaranteed to never be fed with
 *       with NULL data. The user can still send NULL data to the public encode
 *       or decode function, but libavcodec will not pass it along to the codec
 *       unless this flag is set.
 *
 * Decoders:
 * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL,
1036
 * avpkt->size=0 at the end to get the delayed data until the decoder no longer
1037 1038 1039 1040 1041
 * returns frames.
 *
 * Encoders:
 * The encoder needs to be fed with NULL data at the end of encoding until the
 * encoder no longer returns data.
1042 1043 1044 1045 1046
 *
 * NOTE: For encoders implementing the AVCodec.encode2() function, setting this
 *       flag also means that the encoder must set the pts and duration for
 *       each output packet. If this flag is not set, the pts and duration will
 *       be determined by libavcodec from the input frame.
1047
 */
1048
#define CODEC_CAP_DELAY           AV_CODEC_CAP_DELAY
1049 1050 1051 1052
/**
 * Codec can be fed a final frame with a smaller size.
 * This can be used to prevent truncation of the last audio samples.
 */
1053
#define CODEC_CAP_SMALL_LAST_FRAME AV_CODEC_CAP_SMALL_LAST_FRAME
1054
#if FF_API_CAP_VDPAU
1055 1056 1057
/**
 * Codec can export data for HW decoding (VDPAU).
 */
1058
#define CODEC_CAP_HWACCEL_VDPAU    AV_CODEC_CAP_HWACCEL_VDPAU
1059
#endif
1060 1061
/**
 * Codec can output multiple frames per AVPacket
1062 1063 1064 1065 1066 1067 1068 1069
 * Normally demuxers return one frame at a time, demuxers which do not do
 * are connected to a parser to split what they return into proper frames.
 * This flag is reserved to the very rare category of codecs which have a
 * bitstream that cannot be split into frames without timeconsuming
 * operations like full decoding. Demuxers carring such bitstreams thus
 * may return multiple frames in a packet. This has many disadvantages like
 * prohibiting stream copy in many cases thus it should only be considered
 * as a last resort.
1070
 */
1071
#define CODEC_CAP_SUBFRAMES        AV_CODEC_CAP_SUBFRAMES
1072 1073 1074 1075
/**
 * Codec is experimental and is thus avoided in favor of non experimental
 * encoders
 */
1076
#define CODEC_CAP_EXPERIMENTAL     AV_CODEC_CAP_EXPERIMENTAL
1077 1078 1079
/**
 * Codec should fill in channel configuration and samplerate instead of container
 */
1080
#define CODEC_CAP_CHANNEL_CONF     AV_CODEC_CAP_CHANNEL_CONF
1081
#if FF_API_NEG_LINESIZES
1082
/**
1083
 * @deprecated no codecs use this capability
1084 1085
 */
#define CODEC_CAP_NEG_LINESIZES    0x0800
1086
#endif
1087 1088 1089
/**
 * Codec supports frame-level multithreading.
 */
1090
#define CODEC_CAP_FRAME_THREADS    AV_CODEC_CAP_FRAME_THREADS
1091 1092 1093
/**
 * Codec supports slice-based (or partition-based) multithreading.
 */
1094
#define CODEC_CAP_SLICE_THREADS    AV_CODEC_CAP_SLICE_THREADS
1095 1096 1097
/**
 * Codec supports changed parameters at any point.
 */
1098
#define CODEC_CAP_PARAM_CHANGE     AV_CODEC_CAP_PARAM_CHANGE
1099 1100 1101
/**
 * Codec supports avctx->thread_count == 0 (auto).
 */
1102
#define CODEC_CAP_AUTO_THREADS     AV_CODEC_CAP_AUTO_THREADS
1103 1104 1105
/**
 * Audio encoder supports receiving a different number of samples in each call.
 */
1106
#define CODEC_CAP_VARIABLE_FRAME_SIZE AV_CODEC_CAP_VARIABLE_FRAME_SIZE
1107 1108 1109
/**
 * Codec is intra only.
 */
1110
#define CODEC_CAP_INTRA_ONLY       AV_CODEC_CAP_INTRA_ONLY
1111 1112 1113
/**
 * Codec is lossless.
 */
1114
#define CODEC_CAP_LOSSLESS         AV_CODEC_CAP_LOSSLESS
1115

1116 1117 1118 1119 1120
/**
 * HWAccel is experimental and is thus avoided in favor of non experimental
 * codecs
 */
#define HWACCEL_CODEC_CAP_EXPERIMENTAL     0x0200
1121
#endif /* FF_API_WITHOUT_PREFIX */
1122

1123
#if FF_API_MB_TYPE
Diego Biurrun's avatar
Diego Biurrun committed
1124
//The following defines may change, don't expect compatibility if you use them.
1125
#define MB_TYPE_INTRA4x4   0x0001
Diego Biurrun's avatar
Diego Biurrun committed
1126 1127
#define MB_TYPE_INTRA16x16 0x0002 //FIXME H.264-specific
#define MB_TYPE_INTRA_PCM  0x0004 //FIXME H.264-specific
1128 1129 1130 1131 1132
#define MB_TYPE_16x16      0x0008
#define MB_TYPE_16x8       0x0010
#define MB_TYPE_8x16       0x0020
#define MB_TYPE_8x8        0x0040
#define MB_TYPE_INTERLACED 0x0080
Diego Biurrun's avatar
Diego Biurrun committed
1133
#define MB_TYPE_DIRECT2    0x0100 //FIXME
1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146
#define MB_TYPE_ACPRED     0x0200
#define MB_TYPE_GMC        0x0400
#define MB_TYPE_SKIP       0x0800
#define MB_TYPE_P0L0       0x1000
#define MB_TYPE_P1L0       0x2000
#define MB_TYPE_P0L1       0x4000
#define MB_TYPE_P1L1       0x8000
#define MB_TYPE_L0         (MB_TYPE_P0L0 | MB_TYPE_P1L0)
#define MB_TYPE_L1         (MB_TYPE_P0L1 | MB_TYPE_P1L1)
#define MB_TYPE_L0L1       (MB_TYPE_L0   | MB_TYPE_L1)
#define MB_TYPE_QUANT      0x00010000
#define MB_TYPE_CBP        0x00020000
//Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)
1147
#endif
1148

1149 1150
/**
 * Pan Scan area.
Diego Biurrun's avatar
Diego Biurrun committed
1151 1152
 * This specifies the area which should be displayed.
 * Note there may be multiple such areas for one frame.
1153 1154 1155
 */
typedef struct AVPanScan{
    /**
Diego Biurrun's avatar
Diego Biurrun committed
1156 1157 1158
     * id
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
1159 1160 1161 1162 1163
     */
    int id;

    /**
     * width and height in 1/16 pel
Diego Biurrun's avatar
Diego Biurrun committed
1164 1165
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
1166 1167 1168 1169 1170
     */
    int width;
    int height;

    /**
Diego Biurrun's avatar
Diego Biurrun committed
1171 1172 1173
     * position of the top left corner in 1/16 pel for up to 3 fields/frames
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
1174 1175 1176 1177
     */
    int16_t position[3][2];
}AVPanScan;

1178
#if FF_API_QSCALE_TYPE
1179 1180 1181
#define FF_QSCALE_TYPE_MPEG1 0
#define FF_QSCALE_TYPE_MPEG2 1
#define FF_QSCALE_TYPE_H264  2
1182
#define FF_QSCALE_TYPE_VP56  3
1183
#endif
Michael Niedermayer's avatar
Michael Niedermayer committed
1184

1185 1186 1187 1188
/**
 * The decoder will keep a reference to the frame and may reuse it later.
 */
#define AV_GET_BUFFER_FLAG_REF (1 << 0)
1189

1190 1191 1192 1193 1194 1195
/**
 * @defgroup lavc_packet AVPacket
 *
 * Types and functions for working with AVPacket.
 * @{
 */
1196 1197
enum AVPacketSideDataType {
    AV_PKT_DATA_PALETTE,
1198
    AV_PKT_DATA_NEW_EXTRADATA,
1199 1200 1201

    /**
     * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
1202
     * @code
1203 1204 1205 1206 1207 1208 1209 1210 1211 1212
     * u32le param_flags
     * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT)
     *     s32le channel_count
     * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT)
     *     u64le channel_layout
     * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE)
     *     s32le sample_rate
     * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS)
     *     s32le width
     *     s32le height
1213
     * @endcode
1214
     */
1215
    AV_PKT_DATA_PARAM_CHANGE,
1216 1217 1218 1219 1220 1221 1222 1223 1224

    /**
     * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of
     * structures with info about macroblocks relevant to splitting the
     * packet into smaller packets on macroblock edges (e.g. as for RFC 2190).
     * That is, it does not necessarily contain info about all macroblocks,
     * as long as the distance between macroblocks in the info is smaller
     * than the target payload size.
     * Each MB info structure is 12 bytes, and is laid out as follows:
1225
     * @code
1226 1227 1228 1229 1230 1231 1232 1233
     * u32le bit offset from the start of the packet
     * u8    current quantizer at the start of the macroblock
     * u8    GOB number
     * u16le macroblock address within the GOB
     * u8    horizontal MV predictor
     * u8    vertical MV predictor
     * u8    horizontal MV predictor for block number 3
     * u8    vertical MV predictor for block number 3
1234
     * @endcode
1235
     */
1236
    AV_PKT_DATA_H263_MB_INFO,
1237

1238 1239 1240 1241 1242
    /**
     * This side data should be associated with an audio stream and contains
     * ReplayGain information in form of the AVReplayGain struct.
     */
    AV_PKT_DATA_REPLAYGAIN,
1243

1244 1245 1246 1247 1248 1249 1250 1251
    /**
     * This side data contains a 3x3 transformation matrix describing an affine
     * transformation that needs to be applied to the decoded video frames for
     * correct presentation.
     *
     * See libavutil/display.h for a detailed description of the data.
     */
    AV_PKT_DATA_DISPLAYMATRIX,
1252

1253
    /**
1254 1255 1256 1257
     * This side data should be associated with a video stream and contains
     * Stereoscopic 3D information in form of the AVStereo3D struct.
     */
    AV_PKT_DATA_STEREO3D,
1258

1259 1260 1261 1262 1263
    /**
     * This side data should be associated with an audio stream and corresponds
     * to enum AVAudioServiceType.
     */
    AV_PKT_DATA_AUDIO_SERVICE_TYPE,
1264

1265
    /**
1266 1267 1268 1269 1270 1271 1272 1273
     * This side data contains quality related information from the encoder.
     * @code
     * u32le quality factor of the compressed frame. Allowed range is between 1 (good) and FF_LAMBDA_MAX (bad).
     * u8    picture type
     * u8    error count
     * u16   reserved
     * u64le[error count] sum of squared differences between encoder in and output
     * @endcode
1274
     */
1275
    AV_PKT_DATA_QUALITY_STATS,
1276

1277 1278 1279 1280 1281 1282 1283 1284 1285 1286
    /**
     * Recommmends skipping the specified number of samples
     * @code
     * u32le number of samples to skip from start of this packet
     * u32le number of samples to skip from end of this packet
     * u8    reason for start skip
     * u8    reason for end   skip (0=padding silence, 1=convergence)
     * @endcode
     */
    AV_PKT_DATA_SKIP_SAMPLES=70,
1287 1288 1289 1290 1291 1292 1293 1294 1295 1296

    /**
     * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that
     * the packet may contain "dual mono" audio specific to Japanese DTV
     * and if it is true, recommends only the selected channel to be used.
     * @code
     * u8    selected channels (0=mail/left, 1=sub/right, 2=both)
     * @endcode
     */
    AV_PKT_DATA_JP_DUALMONO,
1297 1298 1299 1300 1301 1302

    /**
     * A list of zero terminated key/value strings. There is no end marker for
     * the list, so it is required to rely on the side data size to stop.
     */
    AV_PKT_DATA_STRINGS_METADATA,
1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313

    /**
     * Subtitle event position
     * @code
     * u32le x1
     * u32le y1
     * u32le x2
     * u32le y2
     * @endcode
     */
    AV_PKT_DATA_SUBTITLE_POSITION,
1314 1315 1316 1317 1318 1319 1320 1321

    /**
     * Data found in BlockAdditional element of matroska container. There is
     * no end marker for the data, so it is required to rely on the side data
     * size to recognize the end. 8 byte id (as found in BlockAddId) followed
     * by data.
     */
    AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,
1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332

    /**
     * The optional first identifier line of a WebVTT cue.
     */
    AV_PKT_DATA_WEBVTT_IDENTIFIER,

    /**
     * The optional settings (rendering instructions) that immediately
     * follow the timestamp specifier of a WebVTT cue.
     */
    AV_PKT_DATA_WEBVTT_SETTINGS,
1333 1334 1335 1336 1337 1338 1339

    /**
     * A list of zero terminated key/value strings. There is no end marker for
     * the list, so it is required to rely on the side data size to stop. This
     * side data includes updated metadata which appeared in the stream.
     */
    AV_PKT_DATA_METADATA_UPDATE,
1340 1341
};

1342 1343
#define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED

1344 1345 1346 1347 1348 1349
typedef struct AVPacketSideData {
    uint8_t *data;
    int      size;
    enum AVPacketSideDataType type;
} AVPacketSideData;

1350 1351 1352 1353 1354 1355
/**
 * This structure stores compressed data. It is typically exported by demuxers
 * and then passed as input to decoders, or received as output from encoders and
 * then passed to muxers.
 *
 * For video, it should typically contain one compressed frame. For audio it may
1356 1357 1358
 * contain several compressed frames. Encoders are allowed to output empty
 * packets, with no compressed data, containing only side data
 * (e.g. to update some stream parameters at the end of encoding).
1359
 *
1360
 * AVPacket is one of the few structs in FFmpeg, whose size is a part of public
1361 1362 1363
 * ABI. Thus it may be allocated on stack and no new fields can be added to it
 * without libavcodec and libavformat major bump.
 *
1364 1365 1366 1367 1368 1369
 * The semantics of data ownership depends on the buf or destruct (deprecated)
 * fields. If either is set, the packet data is dynamically allocated and is
 * valid indefinitely until av_free_packet() is called (which in turn calls
 * av_buffer_unref()/the destruct callback to free the data). If neither is set,
 * the packet data is typically backed by some static buffer somewhere and is
 * only valid for a limited time (e.g. until the next read call when demuxing).
1370 1371 1372 1373
 *
 * The side data is always allocated with av_malloc() and is freed in
 * av_free_packet().
 */
1374
typedef struct AVPacket {
1375 1376 1377 1378 1379 1380
    /**
     * A reference to the reference-counted buffer where the packet data is
     * stored.
     * May be NULL, then the packet data is not reference-counted.
     */
    AVBufferRef *buf;
1381
    /**
1382 1383
     * Presentation timestamp in AVStream->time_base units; the time at which
     * the decompressed packet will be presented to the user.
1384 1385 1386 1387 1388 1389 1390 1391
     * Can be AV_NOPTS_VALUE if it is not stored in the file.
     * pts MUST be larger or equal to dts as presentation cannot happen before
     * decompression, unless one wants to view hex dumps. Some formats misuse
     * the terms dts and pts/cts to mean something different. Such timestamps
     * must be converted to true pts/dts before they are stored in AVPacket.
     */
    int64_t pts;
    /**
1392 1393
     * Decompression timestamp in AVStream->time_base units; the time at which
     * the packet is decompressed.
1394 1395 1396 1397 1398 1399
     * Can be AV_NOPTS_VALUE if it is not stored in the file.
     */
    int64_t dts;
    uint8_t *data;
    int   size;
    int   stream_index;
1400 1401 1402
    /**
     * A combination of AV_PKT_FLAG values
     */
1403
    int   flags;
1404 1405 1406 1407
    /**
     * Additional packet data that can be provided by the container.
     * Packet can contain several types of side information.
     */
1408
    AVPacketSideData *side_data;
1409 1410
    int side_data_elems;

1411
    /**
1412
     * Duration of this packet in AVStream->time_base units, 0 if unknown.
1413 1414
     * Equals next_pts - this_pts in presentation order.
     */
1415
    int64_t duration;
1416

1417 1418
    int64_t pos;                            ///< byte position in stream, -1 if unknown

1419
#if FF_API_CONVERGENCE_DURATION
1420
    /**
1421 1422 1423
     * @deprecated Same as the duration field, but as int64_t. This was required
     * for Matroska subtitles, whose duration values could overflow when the
     * duration field was still an int.
1424
     */
1425
    attribute_deprecated
1426
    int64_t convergence_duration;
1427
#endif
1428
} AVPacket;
1429 1430
#define AV_PKT_FLAG_KEY     0x0001 ///< The packet contains a keyframe
#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted
1431

1432 1433 1434 1435 1436 1437
enum AVSideDataParamChangeFlags {
    AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT  = 0x0001,
    AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002,
    AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE    = 0x0004,
    AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS     = 0x0008,
};
1438 1439 1440
/**
 * @}
 */
1441

1442 1443
struct AVCodecInternal;

1444 1445 1446 1447 1448 1449 1450 1451 1452
enum AVFieldOrder {
    AV_FIELD_UNKNOWN,
    AV_FIELD_PROGRESSIVE,
    AV_FIELD_TT,          //< Top coded_first, top displayed first
    AV_FIELD_BB,          //< Bottom coded first, bottom displayed first
    AV_FIELD_TB,          //< Top coded first, bottom displayed first
    AV_FIELD_BT,          //< Bottom coded first, top displayed first
};

Michael Niedermayer's avatar
Michael Niedermayer committed
1453
/**
1454 1455
 * main external API structure.
 * New fields can be added to the end with minor version bumps.
Diego Biurrun's avatar
Diego Biurrun committed
1456
 * Removal, reordering and changes to existing fields require a major
1457
 * version bump.
1458
 * Please use AVOptions (av_opt* / av_set/get*()) to access these fields from user
1459
 * applications.
Diego Biurrun's avatar
Diego Biurrun committed
1460
 * sizeof(AVCodecContext) must not be used outside libav*.
Michael Niedermayer's avatar
Michael Niedermayer committed
1461
 */
Fabrice Bellard's avatar
Fabrice Bellard committed
1462
typedef struct AVCodecContext {
1463
    /**
Diego Biurrun's avatar
Diego Biurrun committed
1464
     * information on struct for av_log
1465
     * - set by avcodec_alloc_context3
1466
     */
1467
    const AVClass *av_class;
1468 1469 1470
    int log_level_offset;

    enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */
1471
    const struct AVCodec  *codec;
1472 1473 1474 1475 1476
#if FF_API_CODEC_NAME
    /**
     * @deprecated this field is not used for anything in libavcodec
     */
    attribute_deprecated
1477
    char             codec_name[32];
1478
#endif
1479
    enum AVCodecID     codec_id; /* see AV_CODEC_ID_xxx */
1480 1481

    /**
1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492
     * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
     * This is used to work around some encoder bugs.
     * A demuxer should set this to what is stored in the field used to identify the codec.
     * If there are multiple such fields in a container then the demuxer should choose the one
     * which maximizes the information about the used codec.
     * If the codec tag field in a container is larger than 32 bits then the demuxer should
     * remap the longer ID to 32 bits with a table or other structure. Alternatively a new
     * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated
     * first.
     * - encoding: Set by user, if not then the default based on codec_id will be used.
     * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
1493
     */
1494
    unsigned int codec_tag;
1495

1496
#if FF_API_STREAM_CODEC_TAG
1497
    /**
1498
     * @deprecated this field is unused
1499
     */
1500
    attribute_deprecated
1501
    unsigned int stream_codec_tag;
1502
#endif
1503

1504 1505
    void *priv_data;

1506
    /**
1507 1508 1509 1510
     * Private context used for internal data.
     *
     * Unlike priv_data, this is not codec-specific. It is used in general
     * libavcodec functions.
1511
     */
1512
    struct AVCodecInternal *internal;
1513 1514

    /**
1515 1516 1517
     * Private data of the user, can be used to carry app specific stuff.
     * - encoding: Set by user.
     * - decoding: Set by user.
1518
     */
1519
    void *opaque;
1520

1521
    /**
Diego Biurrun's avatar
Diego Biurrun committed
1522 1523
     * the average bitrate
     * - encoding: Set by user; unused for constant quantizer encoding.
1524 1525
     * - decoding: Set by user, may be overwritten by libavcodec
     *             if this info is available in the stream
1526
     */
1527
    int64_t bit_rate;
1528

1529
    /**
1530
     * number of bits the bitstream is allowed to diverge from the reference.
1531
     *           the reference can be CBR (for CBR pass1) or VBR (for pass2)
Diego Biurrun's avatar
Diego Biurrun committed
1532
     * - encoding: Set by user; unused for constant quantizer encoding.
1533
     * - decoding: unused
1534
     */
1535 1536
    int bit_rate_tolerance;

1537
    /**
1538 1539
     * Global quality for codecs which cannot change it per frame.
     * This should be proportional to MPEG-1/2/4 qscale.
Diego Biurrun's avatar
Diego Biurrun committed
1540
     * - encoding: Set by user.
1541
     * - decoding: unused
1542
     */
1543
    int global_quality;
1544 1545

    /**
Diego Biurrun's avatar
Diego Biurrun committed
1546
     * - encoding: Set by user.
1547
     * - decoding: unused
1548
     */
1549 1550
    int compression_level;
#define FF_COMPRESSION_DEFAULT -1
1551 1552

    /**
1553
     * AV_CODEC_FLAG_*.
Diego Biurrun's avatar
Diego Biurrun committed
1554
     * - encoding: Set by user.
1555
     * - decoding: Set by user.
1556
     */
1557
    int flags;
1558

1559
    /**
1560
     * AV_CODEC_FLAG2_*
1561
     * - encoding: Set by user.
Diego Biurrun's avatar
Diego Biurrun committed
1562
     * - decoding: Set by user.
1563
     */
1564
    int flags2;
1565

1566
    /**
Diego Biurrun's avatar
Diego Biurrun committed
1567 1568
     * some codecs need / can use extradata like Huffman tables.
     * mjpeg: Huffman tables
1569
     * rv10: additional flags
1570
     * mpeg4: global headers (they can be in the bitstream or here)
1571
     * The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger
1572
     * than extradata_size to avoid problems if it is read with the bitstream reader.
Diego Biurrun's avatar
Diego Biurrun committed
1573 1574 1575
     * The bytewise contents of extradata must not depend on the architecture or CPU endianness.
     * - encoding: Set/allocated/freed by libavcodec.
     * - decoding: Set/allocated/freed by user.
1576
     */
1577
    uint8_t *extradata;
1578
    int extradata_size;
1579 1580

    /**
Diego Biurrun's avatar
Diego Biurrun committed
1581 1582
     * This is the fundamental unit of time (in seconds) in terms
     * of which frame timestamps are represented. For fixed-fps content,
1583 1584
     * timebase should be 1/framerate and timestamp increments should be
     * identically 1.
1585 1586
     * This often, but not always is the inverse of the frame rate or field rate
     * for video.
Diego Biurrun's avatar
Diego Biurrun committed
1587
     * - encoding: MUST be set by user.
1588 1589
     * - decoding: the use of this field for decoding is deprecated.
     *             Use framerate instead.
1590
     */
1591
    AVRational time_base;
Fabrice Bellard's avatar
Fabrice Bellard committed
1592

1593
    /**
1594 1595 1596 1597 1598
     * For some codecs, the time base is closer to the field rate than the frame rate.
     * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration
     * if no telecine is used ...
     *
     * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2.
1599
     */
1600
    int ticks_per_frame;
1601

1602
    /**
1603
     * Codec delay.
1604
     *
1605 1606 1607 1608
     * Encoding: Number of frames delay there will be from the encoder input to
     *           the decoder output. (we assume the decoder matches the spec)
     * Decoding: Number of frames delay in addition to what a standard decoder
     *           as specified in the spec would produce.
1609 1610 1611 1612 1613 1614
     *
     * Video:
     *   Number of frames the decoded output will be delayed relative to the
     *   encoded input.
     *
     * Audio:
1615
     *   For encoding, this field is unused (see initial_padding).
1616
     *
1617 1618 1619
     *   For decoding, this is the number of samples the decoder needs to
     *   output before the decoder's output is valid. When seeking, you should
     *   start decoding this many samples prior to your desired seek point.
1620
     *
Diego Biurrun's avatar
Diego Biurrun committed
1621
     * - encoding: Set by libavcodec.
1622
     * - decoding: Set by libavcodec.
1623 1624
     */
    int delay;
1625 1626


1627
    /* video only */
1628
    /**
1629
     * picture width / height.
1630 1631 1632 1633 1634
     *
     * @note Those fields may not match the values of the last
     * AVFrame outputted by avcodec_decode_video2 due frame
     * reordering.
     *
1635
     * - encoding: MUST be set by user.
1636 1637 1638
     * - decoding: May be set by the user before opening the decoder if known e.g.
     *             from the container. Some decoders will require the dimensions
     *             to be set by the caller. During decoding, the decoder may
1639
     *             overwrite those values as required while parsing the data.
1640
     */
Fabrice Bellard's avatar
Fabrice Bellard committed
1641
    int width, height;
1642 1643

    /**
1644
     * Bitstream width / height, may be different from width/height e.g. when
1645
     * the decoded frame is cropped before being output or lowres is enabled.
1646 1647 1648 1649 1650
     *
     * @note Those field may not match the value of the last
     * AVFrame outputted by avcodec_decode_video2 due frame
     * reordering.
     *
1651
     * - encoding: unused
1652 1653
     * - decoding: May be set by the user before opening the decoder if known
     *             e.g. from the container. During decoding, the decoder may
1654
     *             overwrite those values as required while parsing the data.
1655 1656 1657
     */
    int coded_width, coded_height;

1658
#if FF_API_ASPECT_EXTENDED
1659
#define FF_ASPECT_EXTENDED 15
1660
#endif
1661 1662

    /**
Diego Biurrun's avatar
Diego Biurrun committed
1663 1664
     * the number of pictures in a group of pictures, or 0 for intra_only
     * - encoding: Set by user.
1665
     * - decoding: unused
1666 1667 1668 1669
     */
    int gop_size;

    /**
1670
     * Pixel format, see AV_PIX_FMT_xxx.
1671
     * May be set by the demuxer if known from headers.
1672
     * May be overridden by the decoder if it knows better.
1673 1674 1675 1676 1677
     *
     * @note This field may not match the value of the last
     * AVFrame outputted by avcodec_decode_video2 due frame
     * reordering.
     *
Diego Biurrun's avatar
Diego Biurrun committed
1678
     * - encoding: Set by user.
1679 1680
     * - decoding: Set by user if known, overridden by libavcodec while
     *             parsing the data.
1681
     */
1682
    enum AVPixelFormat pix_fmt;
1683

1684
#if FF_API_MOTION_EST
1685
    /**
1686 1687
     * This option does nothing
     * @deprecated use codec private options instead
1688
     */
1689 1690
    attribute_deprecated int me_method;
#endif
1691

1692
    /**
Diego Biurrun's avatar
Diego Biurrun committed
1693 1694
     * If non NULL, 'draw_horiz_band' is called by the libavcodec
     * decoder to draw a horizontal band. It improves cache usage. Not
1695
     * all codecs can do that. You must check the codec capabilities
Diego Biurrun's avatar
Diego Biurrun committed
1696
     * beforehand.
1697 1698 1699 1700
     * When multithreading is used, it may be called from multiple threads
     * at the same time; threads might draw different parts of the same AVFrame,
     * or multiple AVFrames, and there is no guarantee that slices will be drawn
     * in order.
1701 1702 1703 1704 1705 1706 1707
     * The function is also used by hardware acceleration APIs.
     * It is called at least once during frame decoding to pass
     * the data needed for hardware render.
     * In that mode instead of pixel data, AVFrame points to
     * a structure specific to the acceleration API. The application
     * reads the structure and can change some fields to indicate progress
     * or mark state.
1708
     * - encoding: unused
Diego Biurrun's avatar
Diego Biurrun committed
1709
     * - decoding: Set by user.
1710 1711 1712 1713
     * @param height the height of the slice
     * @param y the y position of the slice
     * @param type 1->top field, 2->bottom field, 3->frame
     * @param offset offset into the AVFrame.data from which the slice should be read
1714
     */
1715
    void (*draw_horiz_band)(struct AVCodecContext *s,
1716
                            const AVFrame *src, int offset[AV_NUM_DATA_POINTERS],
1717
                            int y, int type, int height);
1718

1719
    /**
1720 1721 1722 1723
     * callback to negotiate the pixelFormat
     * @param fmt is the list of formats which are supported by the codec,
     * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality.
     * The first is always the native one.
1724 1725 1726 1727
     * @note The callback may be called again immediately if initialization for
     * the selected (hardware-accelerated) pixel format failed.
     * @warning Behavior is undefined if the callback returns a value not
     * in the fmt list of formats.
1728 1729 1730
     * @return the chosen format
     * - encoding: unused
     * - decoding: Set by user, if not set the native format will be chosen.
1731
     */
1732
    enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt);
1733 1734

    /**
Diego Biurrun's avatar
Diego Biurrun committed
1735 1736 1737
     * maximum number of B-frames between non-B-frames
     * Note: The output will be delayed by max_b_frames+1 relative to the input.
     * - encoding: Set by user.
1738
     * - decoding: unused
1739 1740 1741 1742
     */
    int max_b_frames;

    /**
Diego Biurrun's avatar
Diego Biurrun committed
1743
     * qscale factor between IP and B-frames
1744 1745
     * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset).
     * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
Diego Biurrun's avatar
Diego Biurrun committed
1746
     * - encoding: Set by user.
1747
     * - decoding: unused
1748 1749
     */
    float b_quant_factor;
1750

1751 1752 1753
#if FF_API_RC_STRATEGY
    /** @deprecated use codec private option instead */
    attribute_deprecated int rc_strategy;
1754
#define FF_RC_STRATEGY_XVID 1
1755
#endif
1756

1757
    int b_frame_strategy;
1758

1759
    /**
1760
     * qscale offset between IP and B-frames
Diego Biurrun's avatar
Diego Biurrun committed
1761
     * - encoding: Set by user.
1762
     * - decoding: unused
1763
     */
1764
    float b_quant_offset;
1765

1766
    /**
1767 1768
     * Size of the frame reordering buffer in the decoder.
     * For MPEG-2 it is 1 IPB or 0 low delay IP.
Diego Biurrun's avatar
Diego Biurrun committed
1769
     * - encoding: Set by libavcodec.
1770
     * - decoding: Set by libavcodec.
1771
     */
1772
    int has_b_frames;
1773

1774
    /**
1775
     * 0-> h263 quant 1-> mpeg quant
Diego Biurrun's avatar
Diego Biurrun committed
1776
     * - encoding: Set by user.
1777
     * - decoding: unused
1778
     */
1779
    int mpeg_quant;
1780

1781
    /**
1782 1783
     * qscale factor between P and I-frames
     * If > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset).
1784
     * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
Diego Biurrun's avatar
Diego Biurrun committed
1785
     * - encoding: Set by user.
1786
     * - decoding: unused
1787
     */
1788
    float i_quant_factor;
1789

1790
    /**
1791 1792 1793
     * qscale offset between P and I-frames
     * - encoding: Set by user.
     * - decoding: unused
1794
     */
1795
    float i_quant_offset;
1796

1797
    /**
1798
     * luminance masking (0-> disabled)
Diego Biurrun's avatar
Diego Biurrun committed
1799
     * - encoding: Set by user.
1800
     * - decoding: unused
1801
     */
1802
    float lumi_masking;
1803

1804
    /**
1805
     * temporary complexity masking (0-> disabled)
Diego Biurrun's avatar
Diego Biurrun committed
1806
     * - encoding: Set by user.
1807
     * - decoding: unused
1808
     */
1809
    float temporal_cplx_masking;
1810

1811
    /**
1812
     * spatial complexity masking (0-> disabled)
Diego Biurrun's avatar
Diego Biurrun committed
1813
     * - encoding: Set by user.
1814
     * - decoding: unused
1815
     */
1816
    float spatial_cplx_masking;
1817

1818
    /**
1819
     * p block masking (0-> disabled)
Diego Biurrun's avatar
Diego Biurrun committed
1820
     * - encoding: Set by user.
1821
     * - decoding: unused
1822
     */
1823
    float p_masking;
1824

1825
    /**
1826
     * darkness masking (0-> disabled)
Diego Biurrun's avatar
Diego Biurrun committed
1827
     * - encoding: Set by user.
1828
     * - decoding: unused
1829
     */
1830
    float dark_masking;
1831

1832
    /**
1833 1834 1835
     * slice count
     * - encoding: Set by libavcodec.
     * - decoding: Set by user (or 0).
1836
     */
1837
    int slice_count;
1838
    /**
1839
     * prediction method (needed for huffyuv)
Diego Biurrun's avatar
Diego Biurrun committed
1840
     * - encoding: Set by user.
1841
     * - decoding: unused
1842
     */
1843 1844 1845 1846
     int prediction_method;
#define FF_PRED_LEFT   0
#define FF_PRED_PLANE  1
#define FF_PRED_MEDIAN 2
1847 1848

    /**
1849 1850 1851
     * slice offsets in the frame in bytes
     * - encoding: Set/allocated by libavcodec.
     * - decoding: Set/allocated by user (or NULL).
1852
     */
1853
    int *slice_offset;
1854

1855
    /**
1856 1857 1858
     * sample aspect ratio (0 if unknown)
     * That is the width of a pixel divided by the height of the pixel.
     * Numerator and denominator must be relatively prime and smaller than 256 for some video standards.
Diego Biurrun's avatar
Diego Biurrun committed
1859 1860
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
1861
     */
1862
    AVRational sample_aspect_ratio;
1863

1864
    /**
1865
     * motion estimation comparison function
Diego Biurrun's avatar
Diego Biurrun committed
1866
     * - encoding: Set by user.
1867
     * - decoding: unused
1868
     */
1869
    int me_cmp;
1870
    /**
1871
     * subpixel motion estimation comparison function
Diego Biurrun's avatar
Diego Biurrun committed
1872
     * - encoding: Set by user.
1873
     * - decoding: unused
1874
     */
1875
    int me_sub_cmp;
1876
    /**
1877
     * macroblock comparison function (not supported yet)
Diego Biurrun's avatar
Diego Biurrun committed
1878
     * - encoding: Set by user.
1879
     * - decoding: unused
1880
     */
1881
    int mb_cmp;
1882
    /**
1883
     * interlaced DCT comparison function
Diego Biurrun's avatar
Diego Biurrun committed
1884
     * - encoding: Set by user.
1885
     * - decoding: unused
1886
     */
1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903
    int ildct_cmp;
#define FF_CMP_SAD    0
#define FF_CMP_SSE    1
#define FF_CMP_SATD   2
#define FF_CMP_DCT    3
#define FF_CMP_PSNR   4
#define FF_CMP_BIT    5
#define FF_CMP_RD     6
#define FF_CMP_ZERO   7
#define FF_CMP_VSAD   8
#define FF_CMP_VSSE   9
#define FF_CMP_NSSE   10
#define FF_CMP_W53    11
#define FF_CMP_W97    12
#define FF_CMP_DCTMAX 13
#define FF_CMP_DCT264 14
#define FF_CMP_CHROMA 256
1904

1905
    /**
1906
     * ME diamond size & shape
Diego Biurrun's avatar
Diego Biurrun committed
1907
     * - encoding: Set by user.
1908
     * - decoding: unused
1909
     */
1910
    int dia_size;
1911

1912
    /**
1913
     * amount of previous MV predictors (2a+1 x 2a+1 square)
Diego Biurrun's avatar
Diego Biurrun committed
1914
     * - encoding: Set by user.
1915
     * - decoding: unused
1916
     */
1917
    int last_predictor_count;
1918

1919
    /**
1920
     * prepass for motion estimation
Diego Biurrun's avatar
Diego Biurrun committed
1921
     * - encoding: Set by user.
1922
     * - decoding: unused
1923
     */
1924
    int pre_me;
1925

1926
    /**
1927
     * motion estimation prepass comparison function
Diego Biurrun's avatar
Diego Biurrun committed
1928
     * - encoding: Set by user.
1929
     * - decoding: unused
1930
     */
1931
    int me_pre_cmp;
1932 1933

    /**
1934
     * ME prepass diamond size & shape
Diego Biurrun's avatar
Diego Biurrun committed
1935
     * - encoding: Set by user.
1936
     * - decoding: unused
1937
     */
1938
    int pre_dia_size;
1939

1940
    /**
1941
     * subpel ME quality
Diego Biurrun's avatar
Diego Biurrun committed
1942
     * - encoding: Set by user.
1943
     * - decoding: unused
1944
     */
1945
    int me_subpel_quality;
1946

1947
#if FF_API_AFD
1948
    /**
1949 1950 1951 1952 1953 1954
     * DTG active format information (additional aspect ratio
     * information only used in DVB MPEG-2 transport streams)
     * 0 if not set.
     *
     * - encoding: unused
     * - decoding: Set by decoder.
1955
     * @deprecated Deprecated in favor of AVSideData
1956
     */
1957
    attribute_deprecated int dtg_active_format;
1958 1959 1960 1961 1962 1963 1964
#define FF_DTG_AFD_SAME         8
#define FF_DTG_AFD_4_3          9
#define FF_DTG_AFD_16_9         10
#define FF_DTG_AFD_14_9         11
#define FF_DTG_AFD_4_3_SP_14_9  13
#define FF_DTG_AFD_16_9_SP_14_9 14
#define FF_DTG_AFD_SP_4_3       15
1965
#endif /* FF_API_AFD */
1966

1967
    /**
1968 1969 1970
     * maximum motion estimation search range in subpel units
     * If 0 then no limit.
     *
Diego Biurrun's avatar
Diego Biurrun committed
1971
     * - encoding: Set by user.
1972
     * - decoding: unused
1973
     */
1974
    int me_range;
1975

1976
#if FF_API_QUANT_BIAS
1977
    /**
1978
     * @deprecated use encoder private option instead
1979
     */
1980
    attribute_deprecated int intra_quant_bias;
1981
#define FF_DEFAULT_QUANT_BIAS 999999
1982

1983
    /**
1984
     * @deprecated use encoder private option instead
1985
     */
1986 1987
    attribute_deprecated int inter_quant_bias;
#endif
1988

1989
    /**
1990 1991 1992
     * slice flags
     * - encoding: unused
     * - decoding: Set by user.
1993
     */
1994 1995 1996 1997
    int slice_flags;
#define SLICE_FLAG_CODED_ORDER    0x0001 ///< draw_horiz_band() is called in coded order instead of display
#define SLICE_FLAG_ALLOW_FIELD    0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
#define SLICE_FLAG_ALLOW_PLANE    0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
1998

1999
#if FF_API_XVMC
2000
    /**
2001 2002 2003
     * XVideo Motion Acceleration
     * - encoding: forbidden
     * - decoding: set by decoder
2004
     * @deprecated XvMC doesn't need it anymore.
2005
     */
2006 2007
    attribute_deprecated int xvmc_acceleration;
#endif /* FF_API_XVMC */
2008

2009
    /**
2010
     * macroblock decision mode
Diego Biurrun's avatar
Diego Biurrun committed
2011
     * - encoding: Set by user.
2012
     * - decoding: unused
2013
     */
2014 2015 2016 2017
    int mb_decision;
#define FF_MB_DECISION_SIMPLE 0        ///< uses mb_cmp
#define FF_MB_DECISION_BITS   1        ///< chooses the one which needs the fewest bits
#define FF_MB_DECISION_RD     2        ///< rate distortion
2018

2019
    /**
2020 2021 2022
     * custom intra quantization matrix
     * - encoding: Set by user, can be NULL.
     * - decoding: Set by libavcodec.
2023
     */
2024
    uint16_t *intra_matrix;
2025

2026
    /**
2027 2028 2029
     * custom inter quantization matrix
     * - encoding: Set by user, can be NULL.
     * - decoding: Set by libavcodec.
2030
     */
2031
    uint16_t *inter_matrix;
2032

2033
    /**
2034 2035
     * scene change detection threshold
     * 0 is default, larger means fewer detected scene changes.
Diego Biurrun's avatar
Diego Biurrun committed
2036
     * - encoding: Set by user.
2037
     * - decoding: unused
2038
     */
2039
    int scenechange_threshold;
2040

2041
    /**
2042
     * noise reduction strength
Diego Biurrun's avatar
Diego Biurrun committed
2043
     * - encoding: Set by user.
2044
     * - decoding: unused
2045
     */
2046
    int noise_reduction;
2047

2048
#if FF_API_MPV_OPT
Michael Niedermayer's avatar
Michael Niedermayer committed
2049
    /**
2050
     * @deprecated this field is unused
Michael Niedermayer's avatar
Michael Niedermayer committed
2051
     */
2052
    attribute_deprecated
2053
    int me_threshold;
2054

2055
    /**
2056
     * @deprecated this field is unused
2057
     */
2058
    attribute_deprecated
2059
    int mb_threshold;
2060
#endif
Michael Niedermayer's avatar
Michael Niedermayer committed
2061 2062

    /**
2063
     * precision of the intra DC coefficient - 8
Diego Biurrun's avatar
Diego Biurrun committed
2064
     * - encoding: Set by user.
2065
     * - decoding: Set by libavcodec
Michael Niedermayer's avatar
Michael Niedermayer committed
2066
     */
2067
    int intra_dc_precision;
2068 2069

    /**
2070 2071
     * Number of macroblock rows at the top which are skipped.
     * - encoding: unused
Diego Biurrun's avatar
Diego Biurrun committed
2072
     * - decoding: Set by user.
2073
     */
2074
    int skip_top;
2075

2076
    /**
2077 2078
     * Number of macroblock rows at the bottom which are skipped.
     * - encoding: unused
Diego Biurrun's avatar
Diego Biurrun committed
2079
     * - decoding: Set by user.
2080
     */
2081
    int skip_bottom;
2082

2083
#if FF_API_MPV_OPT
2084
    /**
2085
     * @deprecated use encoder private options instead
2086
     */
2087
    attribute_deprecated
2088
    float border_masking;
2089
#endif
2090

Michael Niedermayer's avatar
Michael Niedermayer committed
2091
    /**
2092
     * minimum MB lagrange multipler
Diego Biurrun's avatar
Diego Biurrun committed
2093
     * - encoding: Set by user.
2094
     * - decoding: unused
Michael Niedermayer's avatar
Michael Niedermayer committed
2095
     */
2096
    int mb_lmin;
2097

Michael Niedermayer's avatar
Michael Niedermayer committed
2098
    /**
2099
     * maximum MB lagrange multipler
Diego Biurrun's avatar
Diego Biurrun committed
2100
     * - encoding: Set by user.
2101
     * - decoding: unused
Michael Niedermayer's avatar
Michael Niedermayer committed
2102
     */
2103
    int mb_lmax;
2104

Michael Niedermayer's avatar
Michael Niedermayer committed
2105
    /**
2106
     *
Diego Biurrun's avatar
Diego Biurrun committed
2107
     * - encoding: Set by user.
2108
     * - decoding: unused
Michael Niedermayer's avatar
Michael Niedermayer committed
2109
     */
2110
    int me_penalty_compensation;
2111

2112
    /**
2113
     *
Diego Biurrun's avatar
Diego Biurrun committed
2114
     * - encoding: Set by user.
2115 2116
     * - decoding: unused
     */
2117
    int bidir_refine;
2118

Michael Niedermayer's avatar
Michael Niedermayer committed
2119
    /**
2120
     *
Diego Biurrun's avatar
Diego Biurrun committed
2121
     * - encoding: Set by user.
2122
     * - decoding: unused
Michael Niedermayer's avatar
Michael Niedermayer committed
2123
     */
2124
    int brd_scale;
2125 2126

    /**
2127
     * minimum GOP size
Diego Biurrun's avatar
Diego Biurrun committed
2128
     * - encoding: Set by user.
2129
     * - decoding: unused
2130
     */
2131
    int keyint_min;
2132

2133
    /**
2134 2135 2136
     * number of reference frames
     * - encoding: Set by user.
     * - decoding: Set by lavc.
Michael Niedermayer's avatar
Michael Niedermayer committed
2137
     */
2138
    int refs;
2139 2140

    /**
2141
     * chroma qp offset from luma
Diego Biurrun's avatar
Diego Biurrun committed
2142
     * - encoding: Set by user.
2143
     * - decoding: unused
2144
     */
2145
    int chromaoffset;
2146

2147
#if FF_API_UNUSED_MEMBERS
2148
    /**
2149
     * Multiplied by qscale for each frame and added to scene_change_score.
Diego Biurrun's avatar
Diego Biurrun committed
2150
     * - encoding: Set by user.
2151
     * - decoding: unused
2152
     */
2153 2154
    attribute_deprecated int scenechange_factor;
#endif
Michael Niedermayer's avatar
Michael Niedermayer committed
2155

2156
    /**
2157 2158
     *
     * Note: Value depends upon the compare function used for fullpel ME.
Diego Biurrun's avatar
Diego Biurrun committed
2159
     * - encoding: Set by user.
2160
     * - decoding: unused
2161
     */
2162
    int mv0_threshold;
2163

Michael Niedermayer's avatar
Michael Niedermayer committed
2164
    /**
2165
     * Adjust sensitivity of b_frame_strategy 1.
Diego Biurrun's avatar
Diego Biurrun committed
2166
     * - encoding: Set by user.
2167
     * - decoding: unused
Michael Niedermayer's avatar
Michael Niedermayer committed
2168
     */
2169
    int b_sensitivity;
Michael Niedermayer's avatar
Michael Niedermayer committed
2170

Michael Niedermayer's avatar
Michael Niedermayer committed
2171
    /**
2172 2173 2174
     * Chromaticity coordinates of the source primaries.
     * - encoding: Set by user
     * - decoding: Set by libavcodec
Michael Niedermayer's avatar
Michael Niedermayer committed
2175
     */
2176
    enum AVColorPrimaries color_primaries;
2177 2178

    /**
2179 2180 2181
     * Color Transfer Characteristic.
     * - encoding: Set by user
     * - decoding: Set by libavcodec
2182
     */
2183
    enum AVColorTransferCharacteristic color_trc;
2184

2185
    /**
2186 2187 2188
     * YUV colorspace type.
     * - encoding: Set by user
     * - decoding: Set by libavcodec
2189
     */
2190
    enum AVColorSpace colorspace;
2191

2192
    /**
2193 2194 2195
     * MPEG vs JPEG YUV range.
     * - encoding: Set by user
     * - decoding: Set by libavcodec
2196
     */
2197
    enum AVColorRange color_range;
2198 2199

    /**
2200 2201 2202
     * This defines the location of chroma samples.
     * - encoding: Set by user
     * - decoding: Set by libavcodec
2203
     */
2204
    enum AVChromaLocation chroma_sample_location;
2205

Michael Niedermayer's avatar
Michael Niedermayer committed
2206
    /**
2207 2208 2209 2210
     * Number of slices.
     * Indicates number of picture subdivisions. Used for parallelized
     * decoding.
     * - encoding: Set by user
Michael Niedermayer's avatar
Michael Niedermayer committed
2211 2212
     * - decoding: unused
     */
2213
    int slices;
2214

2215 2216
    /** Field order
     * - encoding: set by libavcodec
2217
     * - decoding: Set by user.
Michael Niedermayer's avatar
Michael Niedermayer committed
2218
     */
2219 2220 2221 2222 2223
    enum AVFieldOrder field_order;

    /* audio only */
    int sample_rate; ///< samples per second
    int channels;    ///< number of audio channels
Michael Niedermayer's avatar
Michael Niedermayer committed
2224 2225

    /**
2226
     * audio sample format
Diego Biurrun's avatar
Diego Biurrun committed
2227
     * - encoding: Set by user.
2228
     * - decoding: Set by libavcodec.
Michael Niedermayer's avatar
Michael Niedermayer committed
2229
     */
2230
    enum AVSampleFormat sample_fmt;  ///< sample format
2231

2232
    /* The following data should not be initialized. */
2233
    /**
2234 2235 2236 2237
     * Number of samples per channel in an audio frame.
     *
     * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame
     *   except the last must contain exactly frame_size samples per channel.
2238
     *   May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then the
2239 2240
     *   frame size is not restricted.
     * - decoding: may be set by some decoders to indicate constant frame size
2241
     */
2242
    int frame_size;
2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253

    /**
     * Frame counter, set by libavcodec.
     *
     * - decoding: total number of frames returned from the decoder so far.
     * - encoding: total number of frames passed to the encoder so far.
     *
     *   @note the counter is not incremented if encoding/decoding resulted in
     *   an error.
     */
    int frame_number;
2254

Ivan Kalvachev's avatar
Ivan Kalvachev committed
2255
    /**
2256 2257
     * number of bytes per packet if constant and known or 0
     * Used by some WAV based audio codecs.
Ivan Kalvachev's avatar
Ivan Kalvachev committed
2258
     */
2259
    int block_align;
2260

2261
    /**
2262
     * Audio cutoff bandwidth (0 means "automatic")
Diego Biurrun's avatar
Diego Biurrun committed
2263
     * - encoding: Set by user.
2264 2265
     * - decoding: unused
     */
2266
    int cutoff;
2267 2268

    /**
2269 2270
     * Audio channel layout.
     * - encoding: set by user.
2271
     * - decoding: set by user, may be overwritten by libavcodec.
2272
     */
2273
    uint64_t channel_layout;
2274

2275
    /**
2276
     * Request decoder to use this channel layout if it can (0 for default)
2277
     * - encoding: unused
2278
     * - decoding: Set by user.
2279
     */
2280
    uint64_t request_channel_layout;
2281 2282

    /**
2283
     * Type of service that the audio stream conveys.
Diego Biurrun's avatar
Diego Biurrun committed
2284
     * - encoding: Set by user.
2285
     * - decoding: Set by libavcodec.
2286
     */
2287
    enum AVAudioServiceType audio_service_type;
2288 2289

    /**
2290 2291
     * desired sample format
     * - encoding: Not used.
2292
     * - decoding: Set by user.
2293
     * Decoder will decode to this format if it can.
2294
     */
2295
    enum AVSampleFormat request_sample_fmt;
2296

2297 2298 2299
    /**
     * This callback is called at the beginning of each frame to get data
     * buffer(s) for it. There may be one contiguous buffer for all the data or
2300 2301 2302 2303
     * there may be a buffer per each data plane or anything in between. What
     * this means is, you may set however many entries in buf[] you feel necessary.
     * Each buffer must be reference-counted using the AVBuffer API (see description
     * of buf[] below).
2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323
     *
     * The following fields will be set in the frame before this callback is
     * called:
     * - format
     * - width, height (video only)
     * - sample_rate, channel_layout, nb_samples (audio only)
     * Their values may differ from the corresponding values in
     * AVCodecContext. This callback must use the frame values, not the codec
     * context values, to calculate the required buffer size.
     *
     * This callback must fill the following fields in the frame:
     * - data[]
     * - linesize[]
     * - extended_data:
     *   * if the data is planar audio with more than 8 channels, then this
     *     callback must allocate and fill extended_data to contain all pointers
     *     to all data planes. data[] must hold as many pointers as it can.
     *     extended_data must be allocated with av_malloc() and will be freed in
     *     av_frame_unref().
     *   * otherwise exended_data must point to data
2324 2325 2326 2327 2328
     * - buf[] must contain one or more pointers to AVBufferRef structures. Each of
     *   the frame's data and extended_data pointers must be contained in these. That
     *   is, one AVBufferRef for each allocated chunk of memory, not necessarily one
     *   AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(),
     *   and av_buffer_ref().
2329 2330 2331 2332 2333
     * - extended_buf and nb_extended_buf must be allocated with av_malloc() by
     *   this callback and filled with the extra buffers if there are more
     *   buffers than buf[] can hold. extended_buf will be freed in
     *   av_frame_unref().
     *
2334
     * If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call
2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350
     * avcodec_default_get_buffer2() instead of providing buffers allocated by
     * some other means.
     *
     * Each data plane must be aligned to the maximum required by the target
     * CPU.
     *
     * @see avcodec_default_get_buffer2()
     *
     * Video:
     *
     * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused
     * (read and/or written to if it is writable) later by libavcodec.
     *
     * avcodec_align_dimensions2() should be used to find the required width and
     * height, as they normally need to be rounded up to the next multiple of 16.
     *
2351 2352
     * Some decoders do not support linesizes changing between frames.
     *
2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390
     * If frame multithreading is used and thread_safe_callbacks is set,
     * this callback may be called from a different thread, but not from more
     * than one at once. Does not need to be reentrant.
     *
     * @see avcodec_align_dimensions2()
     *
     * Audio:
     *
     * Decoders request a buffer of a particular size by setting
     * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may,
     * however, utilize only part of the buffer by setting AVFrame.nb_samples
     * to a smaller value in the output frame.
     *
     * As a convenience, av_samples_get_buffer_size() and
     * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2()
     * functions to find the required data size and to fill data pointers and
     * linesize. In AVFrame.linesize, only linesize[0] may be set for audio
     * since all planes must be the same size.
     *
     * @see av_samples_get_buffer_size(), av_samples_fill_arrays()
     *
     * - encoding: unused
     * - decoding: Set by libavcodec, user can override.
     */
    int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags);

    /**
     * If non-zero, the decoded audio and video frames returned from
     * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted
     * and are valid indefinitely. The caller must free them with
     * av_frame_unref() when they are not needed anymore.
     * Otherwise, the decoded frames must not be freed by the caller and are
     * only valid until the next decode call.
     *
     * - encoding: unused
     * - decoding: set by the caller before avcodec_open2().
     */
    int refcounted_frames;
2391

2392 2393 2394
    /* - encoding parameters */
    float qcompress;  ///< amount of qscale change between easy & hard scenes (0.0-1.0)
    float qblur;      ///< amount of qscale smoothing over time (0.0-1.0)
2395 2396

    /**
2397
     * minimum quantizer
Diego Biurrun's avatar
Diego Biurrun committed
2398
     * - encoding: Set by user.
2399 2400
     * - decoding: unused
     */
2401
    int qmin;
2402 2403

    /**
2404
     * maximum quantizer
Diego Biurrun's avatar
Diego Biurrun committed
2405
     * - encoding: Set by user.
2406 2407
     * - decoding: unused
     */
2408
    int qmax;
2409 2410

    /**
2411
     * maximum quantizer difference between frames
Diego Biurrun's avatar
Diego Biurrun committed
2412
     * - encoding: Set by user.
2413
     * - decoding: unused
2414
     */
2415
    int max_qdiff;
2416

2417
#if FF_API_MPV_OPT
2418
    /**
2419
     * @deprecated use encoder private options instead
2420
     */
2421
    attribute_deprecated
2422
    float rc_qsquish;
2423

2424
    attribute_deprecated
2425
    float rc_qmod_amp;
2426
    attribute_deprecated
2427
    int rc_qmod_freq;
2428
#endif
2429

2430
    /**
2431
     * decoder bitstream buffer size
Diego Biurrun's avatar
Diego Biurrun committed
2432
     * - encoding: Set by user.
2433 2434
     * - decoding: unused
     */
2435
    int rc_buffer_size;
2436 2437

    /**
2438 2439
     * ratecontrol override, see RcOverride
     * - encoding: Allocated/set/freed by user.
2440
     * - decoding: unused
2441
     */
2442 2443
    int rc_override_count;
    RcOverride *rc_override;
2444

2445
#if FF_API_MPV_OPT
2446
    /**
2447
     * @deprecated use encoder private options instead
2448
     */
2449
    attribute_deprecated
2450
    const char *rc_eq;
2451
#endif
2452 2453

    /**
2454
     * maximum bitrate
Diego Biurrun's avatar
Diego Biurrun committed
2455
     * - encoding: Set by user.
2456
     * - decoding: Set by user, may be overwritten by libavcodec.
2457
     */
2458
    int64_t rc_max_rate;
2459 2460

    /**
2461
     * minimum bitrate
Diego Biurrun's avatar
Diego Biurrun committed
2462
     * - encoding: Set by user.
2463 2464
     * - decoding: unused
     */
2465
    int64_t rc_min_rate;
2466

2467
#if FF_API_MPV_OPT
2468
    /**
2469
     * @deprecated use encoder private options instead
2470
     */
2471 2472 2473 2474
    attribute_deprecated
    float rc_buffer_aggressivity;

    attribute_deprecated
2475
    float rc_initial_cplx;
2476
#endif
Michael Niedermayer's avatar
Michael Niedermayer committed
2477 2478

    /**
2479
     * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
Diego Biurrun's avatar
Diego Biurrun committed
2480
     * - encoding: Set by user.
2481
     * - decoding: unused.
Michael Niedermayer's avatar
Michael Niedermayer committed
2482
     */
2483
    float rc_max_available_vbv_use;
2484 2485

    /**
2486
     * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.
Diego Biurrun's avatar
Diego Biurrun committed
2487
     * - encoding: Set by user.
2488
     * - decoding: unused.
2489
     */
2490
    float rc_min_vbv_overflow_use;
2491 2492

    /**
2493
     * Number of bits which should be loaded into the rc buffer before decoding starts.
Diego Biurrun's avatar
Diego Biurrun committed
2494
     * - encoding: Set by user.
Michael Niedermayer's avatar
Michael Niedermayer committed
2495
     * - decoding: unused
2496
     */
2497
    int rc_initial_buffer_occupancy;
2498

2499 2500 2501 2502
#define FF_CODER_TYPE_VLC       0
#define FF_CODER_TYPE_AC        1
#define FF_CODER_TYPE_RAW       2
#define FF_CODER_TYPE_RLE       3
2503
#if FF_API_UNUSED_MEMBERS
2504
#define FF_CODER_TYPE_DEFLATE   4
2505
#endif /* FF_API_UNUSED_MEMBERS */
2506
    /**
2507
     * coder type
Diego Biurrun's avatar
Diego Biurrun committed
2508
     * - encoding: Set by user.
2509
     * - decoding: unused
2510
     */
2511
    int coder_type;
2512

2513
    /**
2514
     * context model
Diego Biurrun's avatar
Diego Biurrun committed
2515
     * - encoding: Set by user.
2516
     * - decoding: unused
2517
     */
2518
    int context_model;
2519

2520
#if FF_API_MPV_OPT
2521
    /**
2522
     * @deprecated use encoder private options instead
2523
     */
2524
    attribute_deprecated
2525
    int lmin;
2526 2527

    /**
2528
     * @deprecated use encoder private options instead
2529
     */
2530
    attribute_deprecated
2531
    int lmax;
2532
#endif
Michael Niedermayer's avatar
Michael Niedermayer committed
2533 2534 2535

    /**
     * frame skip threshold
Diego Biurrun's avatar
Diego Biurrun committed
2536
     * - encoding: Set by user.
Michael Niedermayer's avatar
Michael Niedermayer committed
2537 2538 2539 2540 2541 2542
     * - decoding: unused
     */
    int frame_skip_threshold;

    /**
     * frame skip factor
Diego Biurrun's avatar
Diego Biurrun committed
2543
     * - encoding: Set by user.
Michael Niedermayer's avatar
Michael Niedermayer committed
2544 2545 2546
     * - decoding: unused
     */
    int frame_skip_factor;
2547 2548 2549

    /**
     * frame skip exponent
Diego Biurrun's avatar
Diego Biurrun committed
2550
     * - encoding: Set by user.
2551 2552 2553 2554 2555
     * - decoding: unused
     */
    int frame_skip_exp;

    /**
Diego Biurrun's avatar
Diego Biurrun committed
2556 2557
     * frame skip comparison function
     * - encoding: Set by user.
2558 2559 2560
     * - decoding: unused
     */
    int frame_skip_cmp;
2561 2562

    /**
2563
     * trellis RD quantization
Diego Biurrun's avatar
Diego Biurrun committed
2564
     * - encoding: Set by user.
2565 2566
     * - decoding: unused
     */
2567
    int trellis;
2568 2569

    /**
Diego Biurrun's avatar
Diego Biurrun committed
2570
     * - encoding: Set by user.
2571 2572
     * - decoding: unused
     */
2573
    int min_prediction_order;
2574 2575

    /**
Diego Biurrun's avatar
Diego Biurrun committed
2576
     * - encoding: Set by user.
2577 2578
     * - decoding: unused
     */
2579
    int max_prediction_order;
2580 2581

    /**
2582 2583 2584
     * GOP timecode frame start number
     * - encoding: Set by user, in non drop frame format
     * - decoding: Set by libavcodec (timecode in the 25 bits format, -1 if unset)
2585
     */
2586
    int64_t timecode_frame_start;
Michael Niedermayer's avatar
Michael Niedermayer committed
2587

2588 2589 2590 2591 2592 2593 2594
    /* The RTP callback: This function is called    */
    /* every time the encoder has a packet to send. */
    /* It depends on the encoder if the data starts */
    /* with a Start Code (it should). H.263 does.   */
    /* mb_nb contains the number of macroblocks     */
    /* encoded in the RTP payload.                  */
    void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);
Michael Niedermayer's avatar
Michael Niedermayer committed
2595

2596 2597 2598 2599 2600 2601
    int rtp_payload_size;   /* The size of the RTP payload: the coder will  */
                            /* do its best to deliver a chunk with size     */
                            /* below rtp_payload_size, the chunk will start */
                            /* with a start code on some codecs like H.263. */
                            /* This doesn't take account of any particular  */
                            /* headers inside the transmitted RTP payload.  */
Michael Niedermayer's avatar
Michael Niedermayer committed
2602

2603 2604 2605 2606 2607 2608 2609 2610 2611
    /* statistics, used for 2-pass encoding */
    int mv_bits;
    int header_bits;
    int i_tex_bits;
    int p_tex_bits;
    int i_count;
    int p_count;
    int skip_count;
    int misc_bits;
2612 2613

    /**
2614 2615
     * number of bits used for the previously encoded frame
     * - encoding: Set by libavcodec.
2616 2617
     * - decoding: unused
     */
2618
    int frame_bits;
2619 2620

    /**
2621 2622
     * pass1 encoding statistics output buffer
     * - encoding: Set by libavcodec.
2623 2624
     * - decoding: unused
     */
2625
    char *stats_out;
Robert Swain's avatar
Robert Swain committed
2626 2627

    /**
2628 2629 2630
     * pass2 encoding statistics input buffer
     * Concatenated stuff from stats_out of pass1 should be placed here.
     * - encoding: Allocated/set/freed by user.
Robert Swain's avatar
Robert Swain committed
2631 2632
     * - decoding: unused
     */
2633
    char *stats_in;
Robert Swain's avatar
Robert Swain committed
2634 2635

    /**
2636 2637 2638
     * Work around bugs in encoders which sometimes cannot be detected automatically.
     * - encoding: Set by user
     * - decoding: Set by user
Robert Swain's avatar
Robert Swain committed
2639
     */
2640 2641
    int workaround_bugs;
#define FF_BUG_AUTODETECT       1  ///< autodetection
2642
#if FF_API_OLD_MSMPEG4
2643
#define FF_BUG_OLD_MSMPEG4      2
2644
#endif
2645 2646 2647 2648
#define FF_BUG_XVID_ILACE       4
#define FF_BUG_UMP4             8
#define FF_BUG_NO_PADDING       16
#define FF_BUG_AMV              32
2649
#if FF_API_AC_VLC
2650
#define FF_BUG_AC_VLC           0  ///< Will be removed, libavcodec can now handle these non-compliant files by default.
2651
#endif
2652 2653 2654 2655 2656 2657 2658 2659 2660
#define FF_BUG_QPEL_CHROMA      64
#define FF_BUG_STD_QPEL         128
#define FF_BUG_QPEL_CHROMA2     256
#define FF_BUG_DIRECT_BLOCKSIZE 512
#define FF_BUG_EDGE             1024
#define FF_BUG_HPEL_CHROMA      2048
#define FF_BUG_DC_CLIP          4096
#define FF_BUG_MS               8192 ///< Work around various bugs in Microsoft's broken decoders.
#define FF_BUG_TRUNCATED       16384
Robert Swain's avatar
Robert Swain committed
2661 2662

    /**
2663
     * strictly follow the standard (MPEG4, ...).
Diego Biurrun's avatar
Diego Biurrun committed
2664
     * - encoding: Set by user.
2665 2666 2667 2668 2669 2670 2671 2672
     * - decoding: Set by user.
     * Setting this to STRICT or higher means the encoder and decoder will
     * generally do stupid things, whereas setting it to unofficial or lower
     * will mean the encoder might produce output that is not supported by all
     * spec-compliant decoders. Decoders don't differentiate between normal,
     * unofficial and experimental (that is, they always try to decode things
     * when they can) unless they are explicitly asked to behave stupidly
     * (=strictly conform to the specs)
Robert Swain's avatar
Robert Swain committed
2673
     */
2674 2675 2676 2677 2678 2679
    int strict_std_compliance;
#define FF_COMPLIANCE_VERY_STRICT   2 ///< Strictly conform to an older more strict version of the spec or reference software.
#define FF_COMPLIANCE_STRICT        1 ///< Strictly conform to all the things in the spec no matter what consequences.
#define FF_COMPLIANCE_NORMAL        0
#define FF_COMPLIANCE_UNOFFICIAL   -1 ///< Allow unofficial extensions
#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.
Robert Swain's avatar
Robert Swain committed
2680 2681

    /**
2682 2683 2684
     * error concealment flags
     * - encoding: unused
     * - decoding: Set by user.
Robert Swain's avatar
Robert Swain committed
2685
     */
2686 2687 2688
    int error_concealment;
#define FF_EC_GUESS_MVS   1
#define FF_EC_DEBLOCK     2
2689
#define FF_EC_FAVOR_INTER 256
Robert Swain's avatar
Robert Swain committed
2690

2691
    /**
2692
     * debug
Diego Biurrun's avatar
Diego Biurrun committed
2693
     * - encoding: Set by user.
2694
     * - decoding: Set by user.
2695
     */
2696 2697 2698 2699 2700 2701
    int debug;
#define FF_DEBUG_PICT_INFO   1
#define FF_DEBUG_RC          2
#define FF_DEBUG_BITSTREAM   4
#define FF_DEBUG_MB_TYPE     8
#define FF_DEBUG_QP          16
2702 2703 2704 2705
#if FF_API_DEBUG_MV
/**
 * @deprecated this option does nothing
 */
2706
#define FF_DEBUG_MV          32
2707
#endif
2708 2709 2710
#define FF_DEBUG_DCT_COEFF   0x00000040
#define FF_DEBUG_SKIP        0x00000080
#define FF_DEBUG_STARTCODE   0x00000100
2711
#if FF_API_UNUSED_MEMBERS
2712
#define FF_DEBUG_PTS         0x00000200
2713
#endif /* FF_API_UNUSED_MEMBERS */
2714 2715 2716
#define FF_DEBUG_ER          0x00000400
#define FF_DEBUG_MMCO        0x00000800
#define FF_DEBUG_BUGS        0x00001000
2717
#if FF_API_DEBUG_MV
2718 2719
#define FF_DEBUG_VIS_QP      0x00002000 ///< only access through AVOptions from outside libavcodec
#define FF_DEBUG_VIS_MB_TYPE 0x00004000 ///< only access through AVOptions from outside libavcodec
2720
#endif
2721 2722
#define FF_DEBUG_BUFFERS     0x00008000
#define FF_DEBUG_THREADS     0x00010000
2723
#define FF_DEBUG_GREEN_MD    0x00800000
2724
#define FF_DEBUG_NOMC        0x01000000
2725

2726
#if FF_API_DEBUG_MV
2727
    /**
2728
     * debug
2729
     * Code outside libavcodec should access this field using AVOptions
Diego Biurrun's avatar
Diego Biurrun committed
2730
     * - encoding: Set by user.
2731
     * - decoding: Set by user.
2732
     */
2733 2734 2735 2736
    int debug_mv;
#define FF_DEBUG_VIS_MV_P_FOR  0x00000001 //visualize forward predicted MVs of P frames
#define FF_DEBUG_VIS_MV_B_FOR  0x00000002 //visualize forward predicted MVs of B frames
#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
2737
#endif
2738 2739

    /**
2740
     * Error recognition; may misdetect some more or less valid parts as errors.
2741 2742
     * - encoding: unused
     * - decoding: Set by user.
2743
     */
2744
    int err_recognition;
2745 2746 2747 2748 2749 2750 2751

/**
 * Verify checksums embedded in the bitstream (could be of either encoded or
 * decoded data, depending on the codec) and print an error message on mismatch.
 * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the
 * decoder returning an error.
 */
2752
#define AV_EF_CRCCHECK  (1<<0)
2753 2754 2755 2756
#define AV_EF_BITSTREAM (1<<1)          ///< detect bitstream specification deviations
#define AV_EF_BUFFER    (1<<2)          ///< detect improper bitstream length
#define AV_EF_EXPLODE   (1<<3)          ///< abort decoding on minor error detection

2757
#define AV_EF_IGNORE_ERR (1<<15)        ///< ignore errors and continue
2758
#define AV_EF_CAREFUL    (1<<16)        ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors
2759
#define AV_EF_COMPLIANT  (1<<17)        ///< consider all spec non compliances as errors
2760
#define AV_EF_AGGRESSIVE (1<<18)        ///< consider things that a sane encoder should not do as an error
2761

2762 2763

    /**
2764 2765 2766 2767
     * opaque 64bit number (generally a PTS) that will be reordered and
     * output in AVFrame.reordered_opaque
     * - encoding: unused
     * - decoding: Set by user.
2768
     */
2769
    int64_t reordered_opaque;
2770 2771

    /**
2772 2773 2774
     * Hardware accelerator in use
     * - encoding: unused.
     * - decoding: Set by libavcodec
2775
     */
2776
    struct AVHWAccel *hwaccel;
2777 2778

    /**
2779 2780 2781
     * Hardware accelerator context.
     * For some hardware accelerators, a global context needs to be
     * provided by the user. In that case, this holds display-dependent
2782 2783
     * data FFmpeg cannot instantiate itself. Please refer to the
     * FFmpeg HW accelerator documentation to know how to fill this
2784 2785 2786
     * is. e.g. for VA API, this is a struct vaapi_context.
     * - encoding: unused
     * - decoding: Set by user
2787
     */
2788
    void *hwaccel_context;
2789 2790

    /**
2791
     * error
2792
     * - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR.
Diego Biurrun's avatar
Diego Biurrun committed
2793
     * - decoding: unused
2794
     */
2795
    uint64_t error[AV_NUM_DATA_POINTERS];
2796 2797

    /**
2798
     * DCT algorithm, see FF_DCT_* below
Diego Biurrun's avatar
Diego Biurrun committed
2799 2800
     * - encoding: Set by user.
     * - decoding: unused
2801
     */
2802 2803 2804 2805 2806 2807 2808
    int dct_algo;
#define FF_DCT_AUTO    0
#define FF_DCT_FASTINT 1
#define FF_DCT_INT     2
#define FF_DCT_MMX     3
#define FF_DCT_ALTIVEC 5
#define FF_DCT_FAAN    6
2809

2810
    /**
2811
     * IDCT algorithm, see FF_IDCT_* below.
2812
     * - encoding: Set by user.
2813
     * - decoding: Set by user.
2814
     */
2815 2816 2817 2818 2819 2820 2821
    int idct_algo;
#define FF_IDCT_AUTO          0
#define FF_IDCT_INT           1
#define FF_IDCT_SIMPLE        2
#define FF_IDCT_SIMPLEMMX     3
#define FF_IDCT_ARM           7
#define FF_IDCT_ALTIVEC       8
2822
#if FF_API_ARCH_SH4
2823
#define FF_IDCT_SH4           9
2824
#endif
2825
#define FF_IDCT_SIMPLEARM     10
2826
#if FF_API_UNUSED_MEMBERS
2827
#define FF_IDCT_IPP           13
2828
#endif /* FF_API_UNUSED_MEMBERS */
2829 2830
#define FF_IDCT_XVID          14
#if FF_API_IDCT_XVIDMMX
2831
#define FF_IDCT_XVIDMMX       14
2832
#endif /* FF_API_IDCT_XVIDMMX */
2833 2834
#define FF_IDCT_SIMPLEARMV5TE 16
#define FF_IDCT_SIMPLEARMV6   17
2835
#if FF_API_ARCH_SPARC
2836
#define FF_IDCT_SIMPLEVIS     18
2837
#endif
2838 2839
#define FF_IDCT_FAAN          20
#define FF_IDCT_SIMPLENEON    22
2840
#if FF_API_ARCH_ALPHA
2841
#define FF_IDCT_SIMPLEALPHA   23
2842
#endif
2843
#define FF_IDCT_SIMPLEAUTO    128
2844

2845
    /**
2846 2847
     * bits per sample/pixel from the demuxer (needed for huffyuv).
     * - encoding: Set by libavcodec.
2848 2849
     * - decoding: Set by user.
     */
2850
     int bits_per_coded_sample;
2851 2852 2853 2854 2855 2856 2857

    /**
     * Bits per sample/pixel of internal libavcodec pixel/sample format.
     * - encoding: set by user.
     * - decoding: set by libavcodec.
     */
    int bits_per_raw_sample;
2858

2859
#if FF_API_LOWRES
2860
    /**
2861
     * low resolution decoding, 1-> 1/2 size, 2->1/4 size
2862 2863
     * - encoding: unused
     * - decoding: Set by user.
2864 2865
     * Code outside libavcodec should access this field using:
     * av_codec_{get,set}_lowres(avctx)
2866
     */
Michael Niedermayer's avatar
Michael Niedermayer committed
2867
     int lowres;
2868
#endif
2869

2870
#if FF_API_CODED_FRAME
2871
    /**
2872 2873
     * the picture in the bitstream
     * - encoding: Set by libavcodec.
2874
     * - decoding: unused
2875 2876
     *
     * @deprecated use the quality factor packet side data instead
2877
     */
2878 2879
    attribute_deprecated AVFrame *coded_frame;
#endif
2880 2881

    /**
2882 2883
     * thread count
     * is used to decide how many independent tasks should be passed to execute()
2884
     * - encoding: Set by user.
2885
     * - decoding: Set by user.
2886
     */
2887
    int thread_count;
2888 2889

    /**
2890 2891 2892
     * Which multithreading methods to use.
     * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread,
     * so clients which cannot provide future frames should not use it.
2893
     *
2894 2895
     * - encoding: Set by user, otherwise the default is used.
     * - decoding: Set by user, otherwise the default is used.
2896
     */
2897 2898 2899
    int thread_type;
#define FF_THREAD_FRAME   1 ///< Decode more than one frame at once
#define FF_THREAD_SLICE   2 ///< Decode more than one part of a single frame at once
2900 2901

    /**
2902 2903 2904
     * Which multithreading methods are in use by the codec.
     * - encoding: Set by libavcodec.
     * - decoding: Set by libavcodec.
2905
     */
2906
    int active_thread_type;
2907 2908

    /**
2909
     * Set by the client if its custom get_buffer() callback can be called
2910
     * synchronously from another thread, which allows faster multithreaded decoding.
2911 2912 2913 2914
     * draw_horiz_band() will be called from other threads regardless of this setting.
     * Ignored if the default get_buffer() is used.
     * - encoding: Set by user.
     * - decoding: Set by user.
2915
     */
2916
    int thread_safe_callbacks;
2917 2918

    /**
2919 2920 2921 2922 2923 2924 2925
     * The codec may call this to execute several independent things.
     * It will return only after finishing all tasks.
     * The user may replace this with some multithreaded implementation,
     * the default implementation will execute the parts serially.
     * @param count the number of things to execute
     * - encoding: Set by libavcodec, user can override.
     * - decoding: Set by libavcodec, user can override.
2926
     */
2927
    int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size);
2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947

    /**
     * The codec may call this to execute several independent things.
     * It will return only after finishing all tasks.
     * The user may replace this with some multithreaded implementation,
     * the default implementation will execute the parts serially.
     * Also see avcodec_thread_init and e.g. the --enable-pthread configure option.
     * @param c context passed also to func
     * @param count the number of things to execute
     * @param arg2 argument passed unchanged to func
     * @param ret return values of executed functions, must have space for "count" values. May be NULL.
     * @param func function that will be called count times, with jobnr from 0 to count-1.
     *             threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no
     *             two instances of func executing at the same time will have the same threadnr.
     * @return always 0 currently, but code should handle a future improvement where when any call to func
     *         returns < 0 no further calls to func may be done and < 0 is returned.
     * - encoding: Set by libavcodec, user can override.
     * - decoding: Set by libavcodec, user can override.
     */
    int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count);
2948

2949
    /**
2950
     * noise vs. sse weight for the nsse comparison function
2951
     * - encoding: Set by user.
2952 2953
     * - decoding: unused
     */
2954
     int nsse_weight;
2955 2956

    /**
2957 2958 2959
     * profile
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
2960
     */
2961 2962 2963 2964 2965 2966 2967 2968
     int profile;
#define FF_PROFILE_UNKNOWN -99
#define FF_PROFILE_RESERVED -100

#define FF_PROFILE_AAC_MAIN 0
#define FF_PROFILE_AAC_LOW  1
#define FF_PROFILE_AAC_SSR  2
#define FF_PROFILE_AAC_LTP  3
2969 2970 2971 2972
#define FF_PROFILE_AAC_HE   4
#define FF_PROFILE_AAC_HE_V2 28
#define FF_PROFILE_AAC_LD   22
#define FF_PROFILE_AAC_ELD  38
2973 2974
#define FF_PROFILE_MPEG2_AAC_LOW 128
#define FF_PROFILE_MPEG2_AAC_HE  131
2975 2976 2977 2978 2979 2980

#define FF_PROFILE_DTS         20
#define FF_PROFILE_DTS_ES      30
#define FF_PROFILE_DTS_96_24   40
#define FF_PROFILE_DTS_HD_HRA  50
#define FF_PROFILE_DTS_HD_MA   60
2981
#define FF_PROFILE_DTS_EXPRESS 70
2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027

#define FF_PROFILE_MPEG2_422    0
#define FF_PROFILE_MPEG2_HIGH   1
#define FF_PROFILE_MPEG2_SS     2
#define FF_PROFILE_MPEG2_SNR_SCALABLE  3
#define FF_PROFILE_MPEG2_MAIN   4
#define FF_PROFILE_MPEG2_SIMPLE 5

#define FF_PROFILE_H264_CONSTRAINED  (1<<9)  // 8+1; constraint_set1_flag
#define FF_PROFILE_H264_INTRA        (1<<11) // 8+3; constraint_set3_flag

#define FF_PROFILE_H264_BASELINE             66
#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED)
#define FF_PROFILE_H264_MAIN                 77
#define FF_PROFILE_H264_EXTENDED             88
#define FF_PROFILE_H264_HIGH                 100
#define FF_PROFILE_H264_HIGH_10              110
#define FF_PROFILE_H264_HIGH_10_INTRA        (110|FF_PROFILE_H264_INTRA)
#define FF_PROFILE_H264_HIGH_422             122
#define FF_PROFILE_H264_HIGH_422_INTRA       (122|FF_PROFILE_H264_INTRA)
#define FF_PROFILE_H264_HIGH_444             144
#define FF_PROFILE_H264_HIGH_444_PREDICTIVE  244
#define FF_PROFILE_H264_HIGH_444_INTRA       (244|FF_PROFILE_H264_INTRA)
#define FF_PROFILE_H264_CAVLC_444            44

#define FF_PROFILE_VC1_SIMPLE   0
#define FF_PROFILE_VC1_MAIN     1
#define FF_PROFILE_VC1_COMPLEX  2
#define FF_PROFILE_VC1_ADVANCED 3

#define FF_PROFILE_MPEG4_SIMPLE                     0
#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE            1
#define FF_PROFILE_MPEG4_CORE                       2
#define FF_PROFILE_MPEG4_MAIN                       3
#define FF_PROFILE_MPEG4_N_BIT                      4
#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE           5
#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION      6
#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE     7
#define FF_PROFILE_MPEG4_HYBRID                     8
#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME         9
#define FF_PROFILE_MPEG4_CORE_SCALABLE             10
#define FF_PROFILE_MPEG4_ADVANCED_CODING           11
#define FF_PROFILE_MPEG4_ADVANCED_CORE             12
#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13
#define FF_PROFILE_MPEG4_SIMPLE_STUDIO             14
#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE           15
3028

3029 3030 3031 3032 3033 3034
#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0   0
#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1   1
#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION  2
#define FF_PROFILE_JPEG2000_DCINEMA_2K              3
#define FF_PROFILE_JPEG2000_DCINEMA_4K              4

3035 3036 3037 3038
#define FF_PROFILE_VP9_0                            0
#define FF_PROFILE_VP9_1                            1
#define FF_PROFILE_VP9_2                            2
#define FF_PROFILE_VP9_3                            3
gcocherel's avatar
gcocherel committed
3039 3040 3041 3042

#define FF_PROFILE_HEVC_MAIN                        1
#define FF_PROFILE_HEVC_MAIN_10                     2
#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE          3
3043
#define FF_PROFILE_HEVC_REXT                        4
gcocherel's avatar
gcocherel committed
3044

3045
    /**
3046 3047 3048
     * level
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
3049
     */
3050 3051
     int level;
#define FF_LEVEL_UNKNOWN -99
3052

3053
    /**
3054
     * Skip loop filtering for selected frames.
3055 3056
     * - encoding: unused
     * - decoding: Set by user.
3057
     */
3058
    enum AVDiscard skip_loop_filter;
3059 3060

    /**
3061
     * Skip IDCT/dequantization for selected frames.
3062 3063
     * - encoding: unused
     * - decoding: Set by user.
3064
     */
3065
    enum AVDiscard skip_idct;
3066 3067

    /**
3068
     * Skip decoding for selected frames.
3069
     * - encoding: unused
3070 3071
     * - decoding: Set by user.
     */
3072
    enum AVDiscard skip_frame;
3073

3074
    /**
3075 3076 3077 3078 3079 3080
     * Header containing style information for text subtitles.
     * For SUBTITLE_ASS subtitle type, it should contain the whole ASS
     * [Script Info] and [V4+ Styles] section, plus the [Events] line and
     * the Format line following. It shouldn't include any Dialogue line.
     * - encoding: Set/allocated/freed by user (before avcodec_open2())
     * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2())
3081
     */
3082 3083
    uint8_t *subtitle_header;
    int subtitle_header_size;
3084

3085
#if FF_API_ERROR_RATE
3086
    /**
3087 3088
     * @deprecated use the 'error_rate' private AVOption of the mpegvideo
     * encoders
3089
     */
3090
    attribute_deprecated
3091
    int error_rate;
3092
#endif
3093

3094
    /**
3095 3096 3097 3098
     * VBV delay coded in the last frame (in periods of a 27 MHz clock).
     * Used for compliant TS muxing.
     * - encoding: Set by libavcodec.
     * - decoding: unused.
3099
     */
3100
    uint64_t vbv_delay;
3101

3102
#if FF_API_SIDEDATA_ONLY_PKT
3103
    /**
3104 3105
     * Encoding only and set by default. Allow encoders to output packets
     * that do not contain any encoded data, only side data.
3106 3107 3108 3109
     *
     * Some encoders need to output such packets, e.g. to update some stream
     * parameters at the end of encoding.
     *
3110 3111
     * @deprecated this field disables the default behaviour and
     *             it is kept only for compatibility.
3112
     */
3113
    attribute_deprecated
3114
    int side_data_only_packets;
3115
#endif
3116

3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132
    /**
     * Audio only. The number of "priming" samples (padding) inserted by the
     * encoder at the beginning of the audio. I.e. this number of leading
     * decoded samples must be discarded by the caller to get the original audio
     * without leading padding.
     *
     * - decoding: unused
     * - encoding: Set by libavcodec. The timestamps on the output packets are
     *             adjusted by the encoder so that they always refer to the
     *             first sample of the data actually contained in the packet,
     *             including any added padding.  E.g. if the timebase is
     *             1/samplerate and the timestamp of the first input sample is
     *             0, the timestamp of the first output packet will be
     *             -initial_padding.
     */
    int initial_padding;
3133

3134
    /**
3135 3136 3137 3138 3139 3140
     * - decoding: For codecs that store a framerate value in the compressed
     *             bitstream, the decoder may export it here. { 0, 1} when
     *             unknown.
     * - encoding: unused
     */
    AVRational framerate;
3141

3142 3143 3144 3145 3146 3147
    /**
     * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx.
     * - encoding: unused.
     * - decoding: Set by libavcodec before calling get_format()
     */
    enum AVPixelFormat sw_pix_fmt;
3148

3149 3150 3151
    /**
     * Timebase in which pkt_dts/pts and AVPacket.dts/pts are.
     * Code outside libavcodec should access this field using:
3152
     * av_codec_{get,set}_pkt_timebase(avctx)
3153
     * - encoding unused.
3154
     * - decoding set by user.
3155 3156 3157
     */
    AVRational pkt_timebase;

3158 3159 3160
    /**
     * AVCodecDescriptor
     * Code outside libavcodec should access this field using:
3161
     * av_codec_{get,set}_codec_descriptor(avctx)
3162 3163 3164
     * - encoding: unused.
     * - decoding: set by libavcodec.
     */
3165
    const AVCodecDescriptor *codec_descriptor;
3166

3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177
#if !FF_API_LOWRES
    /**
     * low resolution decoding, 1-> 1/2 size, 2->1/4 size
     * - encoding: unused
     * - decoding: Set by user.
     * Code outside libavcodec should access this field using:
     * av_codec_{get,set}_lowres(avctx)
     */
     int lowres;
#endif

3178 3179
    /**
     * Current statistics for PTS correction.
3180
     * - decoding: maintained and used by libavcodec, not intended to be used by user apps
3181 3182 3183 3184 3185 3186
     * - encoding: unused
     */
    int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far
    int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far
    int64_t pts_correction_last_pts;       /// PTS of the last frame
    int64_t pts_correction_last_dts;       /// DTS of the last frame
3187

3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204
    /**
     * Character encoding of the input subtitles file.
     * - decoding: set by user
     * - encoding: unused
     */
    char *sub_charenc;

    /**
     * Subtitles character encoding mode. Formats or codecs might be adjusting
     * this setting (if they are doing the conversion themselves for instance).
     * - decoding: set by libavcodec
     * - encoding: unused
     */
    int sub_charenc_mode;
#define FF_SUB_CHARENC_MODE_DO_NOTHING  -1  ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance)
#define FF_SUB_CHARENC_MODE_AUTOMATIC    0  ///< libavcodec will select the mode itself
#define FF_SUB_CHARENC_MODE_PRE_DECODER  1  ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv
3205

3206 3207 3208 3209 3210 3211 3212 3213
    /**
     * Skip processing alpha if supported by codec.
     * Note that if the format uses pre-multiplied alpha (common with VP6,
     * and recommended due to better video quality/compression)
     * the image will look as if alpha-blended onto a black background.
     * However for formats that do not use pre-multiplied alpha
     * there might be serious artefacts (though e.g. libswscale currently
     * assumes pre-multiplied alpha anyway).
3214
     * Code outside libavcodec should access this field using AVOptions
3215 3216 3217 3218 3219
     *
     * - decoding: set by user
     * - encoding: unused
     */
    int skip_alpha;
3220 3221 3222 3223 3224 3225 3226

    /**
     * Number of samples to skip after a discontinuity
     * - decoding: unused
     * - encoding: set by libavcodec
     */
    int seek_preroll;
3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239

#if !FF_API_DEBUG_MV
    /**
     * debug motion vectors
     * Code outside libavcodec should access this field using AVOptions
     * - encoding: Set by user.
     * - decoding: Set by user.
     */
    int debug_mv;
#define FF_DEBUG_VIS_MV_P_FOR  0x00000001 //visualize forward predicted MVs of P frames
#define FF_DEBUG_VIS_MV_B_FOR  0x00000002 //visualize forward predicted MVs of B frames
#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
#endif
3240 3241 3242 3243 3244 3245 3246 3247

    /**
     * custom intra quantization matrix
     * Code outside libavcodec should access this field using av_codec_g/set_chroma_intra_matrix()
     * - encoding: Set by user, can be NULL.
     * - decoding: unused.
     */
    uint16_t *chroma_intra_matrix;
3248 3249

    /**
Michael Niedermayer's avatar
Michael Niedermayer committed
3250
     * dump format separator.
3251 3252 3253 3254 3255 3256 3257 3258
     * can be ", " or "\n      " or anything else
     * Code outside libavcodec should access this field using AVOptions
     * (NO direct access).
     * - encoding: Set by user.
     * - decoding: Set by user.
     */
    uint8_t *dump_separator;

3259
    /**
3260
     * ',' separated list of allowed decoders.
3261 3262 3263 3264 3265
     * If NULL then all are allowed
     * - encoding: unused
     * - decoding: set by user through AVOPtions (NO direct access)
     */
    char *codec_whitelist;
3266 3267 3268 3269 3270 3271 3272 3273 3274 3275

    /*
     * Properties of the stream that gets decoded
     * To be accessed through av_codec_get_properties() (NO direct access)
     * - encoding: unused
     * - decoding: set by libavcodec
     */
    unsigned properties;
#define FF_CODEC_PROPERTY_LOSSLESS        0x00000001
#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002
Fabrice Bellard's avatar
Fabrice Bellard committed
3276 3277
} AVCodecContext;

3278 3279 3280
AVRational av_codec_get_pkt_timebase         (const AVCodecContext *avctx);
void       av_codec_set_pkt_timebase         (AVCodecContext *avctx, AVRational val);

3281 3282
const AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx);
void                     av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc);
3283

3284 3285
unsigned av_codec_get_codec_properties(const AVCodecContext *avctx);

3286 3287 3288
int  av_codec_get_lowres(const AVCodecContext *avctx);
void av_codec_set_lowres(AVCodecContext *avctx, int val);

3289 3290 3291
int  av_codec_get_seek_preroll(const AVCodecContext *avctx);
void av_codec_set_seek_preroll(AVCodecContext *avctx, int val);

3292 3293 3294
uint16_t *av_codec_get_chroma_intra_matrix(const AVCodecContext *avctx);
void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val);

3295 3296 3297 3298 3299 3300 3301 3302
/**
 * AVProfile.
 */
typedef struct AVProfile {
    int profile;
    const char *name; ///< short name for the profile
} AVProfile;

3303 3304
typedef struct AVCodecDefault AVCodecDefault;

3305 3306
struct AVSubtitle;

3307 3308 3309
/**
 * AVCodec.
 */
Fabrice Bellard's avatar
Fabrice Bellard committed
3310
typedef struct AVCodec {
3311 3312 3313 3314 3315 3316
    /**
     * Name of the codec implementation.
     * The name is globally unique among encoders and among decoders (but an
     * encoder and a decoder can share the same name).
     * This is the primary way to find a codec from the user perspective.
     */
3317
    const char *name;
3318 3319 3320 3321 3322
    /**
     * Descriptive name for the codec, meant to be more human readable than name.
     * You should use the NULL_IF_CONFIG_SMALL() macro to define it.
     */
    const char *long_name;
3323
    enum AVMediaType type;
3324
    enum AVCodecID id;
3325 3326
    /**
     * Codec capabilities.
3327
     * see AV_CODEC_CAP_*
3328
     */
3329
    int capabilities;
3330
    const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
3331
    const enum AVPixelFormat *pix_fmts;     ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
3332
    const int *supported_samplerates;       ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
3333
    const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
3334
    const uint64_t *channel_layouts;         ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
3335
    uint8_t max_lowres;                     ///< maximum value for lowres supported by the decoder, no direct access, use av_codec_get_max_lowres()
3336
    const AVClass *priv_class;              ///< AVClass for the private context
3337
    const AVProfile *profiles;              ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}
3338

3339 3340 3341 3342 3343 3344 3345 3346 3347
    /*****************************************************************
     * No fields below this line are part of the public API. They
     * may not be used outside of libavcodec and can be changed and
     * removed at will.
     * New public fields should be added right above.
     *****************************************************************
     */
    int priv_data_size;
    struct AVCodec *next;
3348
    /**
3349
     * @name Frame-level threading support functions
3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366
     * @{
     */
    /**
     * If defined, called on thread contexts when they are created.
     * If the codec allocates writable tables in init(), re-allocate them here.
     * priv_data will be set to a copy of the original.
     */
    int (*init_thread_copy)(AVCodecContext *);
    /**
     * Copy necessary context variables from a previous thread context to the current one.
     * If not defined, the next thread will start automatically; otherwise, the codec
     * must call ff_thread_finish_setup().
     *
     * dst and src will (rarely) point to the same context, in which case memcpy should be skipped.
     */
    int (*update_thread_context)(AVCodecContext *dst, const AVCodecContext *src);
    /** @} */
3367 3368 3369 3370 3371

    /**
     * Private codec-specific defaults.
     */
    const AVCodecDefault *defaults;
3372 3373 3374 3375 3376

    /**
     * Initialize codec static data, called from avcodec_register().
     */
    void (*init_static_data)(struct AVCodec *codec);
3377

3378
    int (*init)(AVCodecContext *);
3379 3380
    int (*encode_sub)(AVCodecContext *, uint8_t *buf, int buf_size,
                      const struct AVSubtitle *sub);
3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392
    /**
     * Encode data to an AVPacket.
     *
     * @param      avctx          codec context
     * @param      avpkt          output AVPacket (may contain a user-provided buffer)
     * @param[in]  frame          AVFrame containing the raw data to be encoded
     * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a
     *                            non-empty packet was returned in avpkt.
     * @return 0 on success, negative error code on failure
     */
    int (*encode2)(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame,
                   int *got_packet_ptr);
3393 3394 3395 3396 3397 3398 3399
    int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt);
    int (*close)(AVCodecContext *);
    /**
     * Flush buffers.
     * Will be called when seeking
     */
    void (*flush)(AVCodecContext *);
3400 3401 3402 3403 3404
    /**
     * Internal codec capabilities.
     * See FF_CODEC_CAP_* in internal.h
     */
    int caps_internal;
Fabrice Bellard's avatar
Fabrice Bellard committed
3405 3406
} AVCodec;

3407 3408
int av_codec_get_max_lowres(const AVCodec *codec);

3409 3410
struct MpegEncContext;

3411
/**
3412 3413
 * @defgroup lavc_hwaccel AVHWAccel
 * @{
3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425
 */
typedef struct AVHWAccel {
    /**
     * Name of the hardware accelerated codec.
     * The name is globally unique among encoders and among decoders (but an
     * encoder and a decoder can share the same name).
     */
    const char *name;

    /**
     * Type of codec implemented by the hardware accelerator.
     *
3426
     * See AVMEDIA_TYPE_xxx
3427
     */
3428
    enum AVMediaType type;
3429 3430 3431 3432

    /**
     * Codec implemented by the hardware accelerator.
     *
3433
     * See AV_CODEC_ID_xxx
3434
     */
3435
    enum AVCodecID id;
3436 3437 3438 3439 3440 3441

    /**
     * Supported pixel format.
     *
     * Only hardware accelerated formats are supported here.
     */
3442
    enum AVPixelFormat pix_fmt;
3443 3444 3445

    /**
     * Hardware accelerated codec capabilities.
3446
     * see HWACCEL_CODEC_CAP_*
3447 3448 3449
     */
    int capabilities;

3450 3451 3452 3453 3454 3455 3456
    /*****************************************************************
     * No fields below this line are part of the public API. They
     * may not be used outside of libavcodec and can be changed and
     * removed at will.
     * New public fields should be added right above.
     *****************************************************************
     */
3457 3458
    struct AVHWAccel *next;

3459 3460 3461 3462 3463
    /**
     * Allocate a custom buffer
     */
    int (*alloc_frame)(AVCodecContext *avctx, AVFrame *frame);

3464 3465 3466 3467 3468 3469
    /**
     * Called at the beginning of each frame or field picture.
     *
     * Meaningful frame information (codec specific) is guaranteed to
     * be parsed at this point. This function is mandatory.
     *
3470
     * Note that buf can be NULL along with buf_size set to 0.
3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484
     * Otherwise, this means the whole frame is available at this point.
     *
     * @param avctx the codec context
     * @param buf the frame data buffer base
     * @param buf_size the size of the frame in bytes
     * @return zero if successful, a negative value otherwise
     */
    int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);

    /**
     * Callback for each slice.
     *
     * Meaningful slice information (codec specific) is guaranteed to
     * be parsed at this point. This function is mandatory.
3485
     * The only exception is XvMC, that works on MB level.
3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503
     *
     * @param avctx the codec context
     * @param buf the slice data buffer base
     * @param buf_size the size of the slice in bytes
     * @return zero if successful, a negative value otherwise
     */
    int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);

    /**
     * Called at the end of each frame or field picture.
     *
     * The whole picture is parsed at this point and can now be sent
     * to the hardware accelerator. This function is mandatory.
     *
     * @param avctx the codec context
     * @return zero if successful, a negative value otherwise
     */
    int (*end_frame)(AVCodecContext *avctx);
3504 3505

    /**
3506
     * Size of per-frame hardware accelerator private data.
3507
     *
3508 3509 3510
     * Private data is allocated with av_mallocz() before
     * AVCodecContext.get_buffer() and deallocated after
     * AVCodecContext.release_buffer().
3511
     */
3512
    int frame_priv_data_size;
3513 3514 3515 3516

    /**
     * Called for every Macroblock in a slice.
     *
3517
     * XvMC uses it to replace the ff_mpv_decode_mb().
3518 3519 3520 3521 3522 3523
     * Instead of decoding to raw picture, MB parameters are
     * stored in an array provided by the video driver.
     *
     * @param s the mpeg context
     */
    void (*decode_mb)(struct MpegEncContext *s);
3524

3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546
    /**
     * Initialize the hwaccel private data.
     *
     * This will be called from ff_get_format(), after hwaccel and
     * hwaccel_context are set and the hwaccel private data in AVCodecInternal
     * is allocated.
     */
    int (*init)(AVCodecContext *avctx);

    /**
     * Uninitialize the hwaccel private data.
     *
     * This will be called from get_format() or avcodec_close(), after hwaccel
     * and hwaccel_context are already uninitialized.
     */
    int (*uninit)(AVCodecContext *avctx);

    /**
     * Size of the private data to allocate in
     * AVCodecInternal.hwaccel_priv_data.
     */
    int priv_data_size;
3547 3548
} AVHWAccel;

3549 3550 3551 3552
/**
 * Hardware acceleration should be used for decoding even if the codec level
 * used is unknown or higher than the maximum supported level reported by the
 * hardware driver.
3553 3554 3555
 *
 * It's generally a good idea to pass this flag unless you have a specific
 * reason not to, as hardware tends to under-report supported levels.
3556 3557 3558
 */
#define AV_HWACCEL_FLAG_IGNORE_LEVEL (1 << 0)

3559 3560 3561 3562 3563 3564
/**
 * Hardware acceleration can output YUV pixel formats with a different chroma
 * sampling than 4:2:0 and/or other than 8 bits per component.
 */
#define AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH (1 << 1)

3565 3566 3567 3568
/**
 * @}
 */

3569 3570 3571 3572 3573 3574 3575
/**
 * @defgroup lavc_picture AVPicture
 *
 * Functions for working with AVPicture
 * @{
 */

3576
/**
3577 3578 3579 3580
 * Picture data structure.
 *
 * Up to four components can be stored into it, the last component is
 * alpha.
3581
 */
Fabrice Bellard's avatar
Fabrice Bellard committed
3582
typedef struct AVPicture {
3583
    uint8_t *data[AV_NUM_DATA_POINTERS];    ///< pointers to the image data planes
3584
    int linesize[AV_NUM_DATA_POINTERS];     ///< number of bytes per line
Fabrice Bellard's avatar
Fabrice Bellard committed
3585 3586
} AVPicture;

3587 3588 3589 3590
/**
 * @}
 */

3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608
enum AVSubtitleType {
    SUBTITLE_NONE,

    SUBTITLE_BITMAP,                ///< A bitmap, pict will be set

    /**
     * Plain text, the text field must be set by the decoder and is
     * authoritative. ass and pict fields may contain approximations.
     */
    SUBTITLE_TEXT,

    /**
     * Formatted text, the ass field must be set by the decoder and is
     * authoritative. pict and text fields may contain approximations.
     */
    SUBTITLE_ASS,
};

3609 3610
#define AV_SUBTITLE_FLAG_FORCED 0x00000001

3611
typedef struct AVSubtitleRect {
3612 3613 3614 3615 3616
    int x;         ///< top left corner  of pict, undefined when pict is not set
    int y;         ///< top left corner  of pict, undefined when pict is not set
    int w;         ///< width            of pict, undefined when pict is not set
    int h;         ///< height           of pict, undefined when pict is not set
    int nb_colors; ///< number of colors in pict, undefined when pict is not set
3617 3618 3619

    /**
     * data+linesize for the bitmap of this subtitle.
3620
     * can be set for text/ass as well once they are rendered
3621 3622
     */
    AVPicture pict;
3623 3624 3625 3626 3627 3628
    enum AVSubtitleType type;

    char *text;                     ///< 0 terminated plain UTF-8 text

    /**
     * 0 terminated ASS/SSA compatible event line.
3629
     * The presentation of this is unaffected by the other values in this
3630 3631 3632
     * struct.
     */
    char *ass;
3633

3634
    int flags;
3635 3636 3637 3638 3639 3640
} AVSubtitleRect;

typedef struct AVSubtitle {
    uint16_t format; /* 0 = graphics */
    uint32_t start_display_time; /* relative to packet pts, in ms */
    uint32_t end_display_time; /* relative to packet pts, in ms */
3641
    unsigned num_rects;
3642
    AVSubtitleRect **rects;
3643
    int64_t pts;    ///< Same as packet pts, in AV_TIME_BASE
3644 3645
} AVSubtitle;

3646
/**
3647 3648 3649
 * If c is NULL, returns the first registered codec,
 * if c is non-NULL, returns the next registered codec after c,
 * or NULL if c is the last one.
3650
 */
3651
AVCodec *av_codec_next(const AVCodec *c);
3652 3653

/**
3654
 * Return the LIBAVCODEC_VERSION_INT constant.
3655
 */
3656
unsigned avcodec_version(void);
3657 3658

/**
3659
 * Return the libavcodec build-time configuration.
3660
 */
3661
const char *avcodec_configuration(void);
3662 3663

/**
3664
 * Return the libavcodec license.
3665
 */
3666
const char *avcodec_license(void);
3667

3668
/**
3669
 * Register the codec codec and initialize libavcodec.
3670
 *
3671 3672 3673 3674
 * @warning either this function or avcodec_register_all() must be called
 * before any other libavcodec functions.
 *
 * @see avcodec_register_all()
3675
 */
3676
void avcodec_register(AVCodec *codec);
3677

3678
/**
3679 3680 3681 3682
 * Register all the codecs, parsers and bitstream filters which were enabled at
 * configuration time. If you do not call this function you can select exactly
 * which formats you want to support, by using the individual registration
 * functions.
3683
 *
3684 3685 3686
 * @see avcodec_register
 * @see av_register_codec_parser
 * @see av_register_bitstream_filter
3687
 */
3688
void avcodec_register_all(void);
3689

3690
/**
3691 3692
 * Allocate an AVCodecContext and set its fields to default values. The
 * resulting struct should be freed with avcodec_free_context().
3693
 *
3694 3695 3696 3697 3698 3699 3700 3701 3702
 * @param codec if non-NULL, allocate private data and initialize defaults
 *              for the given codec. It is illegal to then call avcodec_open2()
 *              with a different codec.
 *              If NULL, then the codec-specific defaults won't be initialized,
 *              which may result in suboptimal default settings (this is
 *              important mainly for encoders, e.g. libx264).
 *
 * @return An AVCodecContext filled with default values or NULL on failure.
 * @see avcodec_get_context_defaults
3703
 */
3704
AVCodecContext *avcodec_alloc_context3(const AVCodec *codec);
3705

3706 3707 3708 3709 3710 3711
/**
 * Free the codec context and everything associated with it and write NULL to
 * the provided pointer.
 */
void avcodec_free_context(AVCodecContext **avctx);

3712
/**
3713 3714
 * Set the fields of the given AVCodecContext to default values corresponding
 * to the given codec (defaults may be codec-dependent).
3715
 *
3716 3717 3718 3719
 * Do not call this function if a non-NULL codec has been passed
 * to avcodec_alloc_context3() that allocated this AVCodecContext.
 * If codec is non-NULL, it is illegal to call avcodec_open2() with a
 * different codec on this AVCodecContext.
3720
 */
3721
int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec);
Fabrice Bellard's avatar
Fabrice Bellard committed
3722

3723
/**
3724 3725
 * Get the AVClass for AVCodecContext. It can be used in combination with
 * AV_OPT_SEARCH_FAKE_OBJ for examining options.
3726
 *
3727
 * @see av_opt_find().
3728
 */
3729
const AVClass *avcodec_get_class(void);
3730 3731

/**
3732 3733
 * Get the AVClass for AVFrame. It can be used in combination with
 * AV_OPT_SEARCH_FAKE_OBJ for examining options.
3734
 *
3735
 * @see av_opt_find().
3736
 */
3737
const AVClass *avcodec_get_frame_class(void);
3738

3739 3740 3741 3742 3743 3744 3745 3746
/**
 * Get the AVClass for AVSubtitleRect. It can be used in combination with
 * AV_OPT_SEARCH_FAKE_OBJ for examining options.
 *
 * @see av_opt_find().
 */
const AVClass *avcodec_get_subtitle_rect_class(void);

3747
/**
3748 3749 3750 3751 3752 3753
 * Copy the settings of the source AVCodecContext into the destination
 * AVCodecContext. The resulting destination codec context will be
 * unopened, i.e. you are required to call avcodec_open2() before you
 * can use this AVCodecContext to decode/encode video/audio data.
 *
 * @param dest target codec context, should be initialized with
3754
 *             avcodec_alloc_context3(NULL), but otherwise uninitialized
3755 3756
 * @param src source codec context
 * @return AVERROR() on error (e.g. memory allocation error), 0 on success
3757
 */
3758
int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src);
3759

3760
/**
3761 3762
 * Initialize the AVCodecContext to use the given AVCodec. Prior to using this
 * function the context has to be allocated with avcodec_alloc_context3().
3763
 *
3764 3765 3766
 * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),
 * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for
 * retrieving a codec.
3767
 *
3768 3769
 * @warning This function is not thread safe!
 *
3770 3771 3772
 * @note Always call this function before using decoding routines (such as
 * @ref avcodec_decode_video2()).
 *
3773 3774 3775
 * @code
 * avcodec_register_all();
 * av_dict_set(&opts, "b", "2.5M", 0);
3776
 * codec = avcodec_find_decoder(AV_CODEC_ID_H264);
3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797
 * if (!codec)
 *     exit(1);
 *
 * context = avcodec_alloc_context3(codec);
 *
 * if (avcodec_open2(context, codec, opts) < 0)
 *     exit(1);
 * @endcode
 *
 * @param avctx The context to initialize.
 * @param codec The codec to open this context for. If a non-NULL codec has been
 *              previously passed to avcodec_alloc_context3() or
 *              avcodec_get_context_defaults3() for this context, then this
 *              parameter MUST be either NULL or equal to the previously passed
 *              codec.
 * @param options A dictionary filled with AVCodecContext and codec-private options.
 *                On return this object will be filled with options that were not found.
 *
 * @return zero on success, a negative value on error
 * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(),
 *      av_dict_set(), av_opt_find().
3798
 */
3799
int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);
3800 3801

/**
3802 3803
 * Close a given AVCodecContext and free all the data associated with it
 * (but not the AVCodecContext itself).
3804
 *
3805 3806 3807 3808
 * Calling this function on an AVCodecContext that hasn't been opened will free
 * the codec-specific data allocated in avcodec_alloc_context3() /
 * avcodec_get_context_defaults3() with a non-NULL codec. Subsequent calls will
 * do nothing.
3809
 */
3810
int avcodec_close(AVCodecContext *avctx);
3811 3812

/**
3813
 * Free all allocated data in the given subtitle struct.
3814
 *
3815
 * @param sub AVSubtitle to free.
3816
 */
3817
void avsubtitle_free(AVSubtitle *sub);
3818

3819
/**
3820
 * @}
3821
 */
3822

3823
/**
3824 3825
 * @addtogroup lavc_packet
 * @{
3826
 */
3827

3828
/**
3829
 * Initialize optional fields of a packet with default values.
3830
 *
3831 3832 3833
 * Note, this does not touch the data and size members, which have to be
 * initialized separately.
 *
3834
 * @param pkt packet
3835
 */
3836
void av_init_packet(AVPacket *pkt);
3837 3838

/**
3839 3840
 * Allocate the payload of a packet and initialize its fields with
 * default values.
3841
 *
3842 3843 3844
 * @param pkt packet
 * @param size wanted payload size
 * @return 0 if OK, AVERROR_xxx otherwise
3845
 */
3846
int av_new_packet(AVPacket *pkt, int size);
3847

3848
/**
3849
 * Reduce packet size, correctly zeroing padding
3850
 *
3851 3852
 * @param pkt packet
 * @param size new size
3853
 */
3854
void av_shrink_packet(AVPacket *pkt, int size);
Fabrice Bellard's avatar
Fabrice Bellard committed
3855

3856
/**
3857 3858 3859 3860
 * Increase packet size, correctly zeroing padding
 *
 * @param pkt packet
 * @param grow_by number of bytes by which to increase the size of the packet
3861
 */
3862
int av_grow_packet(AVPacket *pkt, int grow_by);
Fabrice Bellard's avatar
Fabrice Bellard committed
3863

3864 3865 3866 3867 3868 3869 3870 3871 3872
/**
 * Initialize a reference-counted packet from av_malloc()ed data.
 *
 * @param pkt packet to be initialized. This function will set the data, size,
 *        buf and destruct fields, all others are left untouched.
 * @param data Data allocated by av_malloc() to be used as packet data. If this
 *        function returns successfully, the data is owned by the underlying AVBuffer.
 *        The caller may not access the data through other means.
 * @param size size of data in bytes, without the padding. I.e. the full buffer
3873
 *        size is assumed to be size + AV_INPUT_BUFFER_PADDING_SIZE.
3874 3875 3876 3877 3878
 *
 * @return 0 on success, a negative AVERROR on error
 */
int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size);

3879
/**
3880 3881
 * @warning This is a hack - the packet memory allocation stuff is broken. The
 * packet is allocated if it was not really allocated.
3882
 */
3883
int av_dup_packet(AVPacket *pkt);
3884

Andrey Utkin's avatar
Andrey Utkin committed
3885 3886 3887 3888 3889
/**
 * Copy packet, including contents
 *
 * @return 0 on success, negative AVERROR on fail
 */
3890
int av_copy_packet(AVPacket *dst, const AVPacket *src);
Andrey Utkin's avatar
Andrey Utkin committed
3891

3892 3893 3894 3895 3896
/**
 * Copy packet side data
 *
 * @return 0 on success, negative AVERROR on fail
 */
3897
int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src);
3898

3899
/**
3900
 * Free a packet.
3901
 *
3902
 * @param pkt packet to free
3903
 */
Ramiro Polla's avatar
Ramiro Polla committed
3904
void av_free_packet(AVPacket *pkt);
3905 3906

/**
3907
 * Allocate new information of a packet.
3908
 *
3909 3910 3911 3912
 * @param pkt packet
 * @param type side information type
 * @param size side information size
 * @return pointer to fresh allocated data or NULL otherwise
3913
 */
3914 3915
uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
                                 int size);
Fabrice Bellard's avatar
Fabrice Bellard committed
3916

3917
/**
3918
 * Shrink the already allocated side data buffer
3919
 *
3920 3921 3922 3923
 * @param pkt packet
 * @param type side information type
 * @param size new side information size
 * @return 0 on success, < 0 on failure
3924
 */
3925 3926
int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
                               int size);
3927

3928
/**
3929
 * Get side information from packet.
3930
 *
3931 3932 3933 3934
 * @param pkt packet
 * @param type desired side information type
 * @param size pointer for side information size to store (optional)
 * @return pointer to data if present or NULL otherwise
3935
 */
3936 3937
uint8_t* av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
                                 int *size);
3938

3939
int av_packet_merge_side_data(AVPacket *pkt);
3940

3941
int av_packet_split_side_data(AVPacket *pkt);
3942

3943 3944
const char *av_packet_side_data_name(enum AVPacketSideDataType type);

3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962
/**
 * Pack a dictionary for use in side_data.
 *
 * @param dict The dictionary to pack.
 * @param size pointer to store the size of the returned data
 * @return pointer to data if successful, NULL otherwise
 */
uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size);
/**
 * Unpack a dictionary from side_data.
 *
 * @param data data from side_data
 * @param size size of the data
 * @param dict the metadata storage dictionary
 * @return 0 on success, < 0 on failure
 */
int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict);

3963

3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987
/**
 * Convenience function to free all the side data stored.
 * All the other fields stay untouched.
 *
 * @param pkt packet
 */
void av_packet_free_side_data(AVPacket *pkt);

/**
 * Setup a new reference to the data described by a given packet
 *
 * If src is reference-counted, setup dst as a new reference to the
 * buffer in src. Otherwise allocate a new buffer in dst and copy the
 * data from src into it.
 *
 * All the other fields are copied from src.
 *
 * @see av_packet_unref
 *
 * @param dst Destination packet
 * @param src Source packet
 *
 * @return 0 on success, a negative AVERROR on error.
 */
3988
int av_packet_ref(AVPacket *dst, const AVPacket *src);
3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023

/**
 * Wipe the packet.
 *
 * Unreference the buffer referenced by the packet and reset the
 * remaining packet fields to their default values.
 *
 * @param pkt The packet to be unreferenced.
 */
void av_packet_unref(AVPacket *pkt);

/**
 * Move every field in src to dst and reset src.
 *
 * @see av_packet_unref
 *
 * @param src Source packet, will be reset
 * @param dst Destination packet
 */
void av_packet_move_ref(AVPacket *dst, AVPacket *src);

/**
 * Copy only "properties" fields from src to dst.
 *
 * Properties for the purpose of this function are all the fields
 * beside those related to the packet data (buf, data, size)
 *
 * @param dst Destination packet
 * @param src Source packet
 *
 * @return 0 on success AVERROR on failure.
 *
 */
int av_packet_copy_props(AVPacket *dst, const AVPacket *src);

4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036
/**
 * Convert valid timing fields (timestamps / durations) in a packet from one
 * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be
 * ignored.
 *
 * @param pkt packet on which the conversion will be performed
 * @param tb_src source timebase, in which the timing fields in pkt are
 *               expressed
 * @param tb_dst destination timebase, to which the timing fields will be
 *               converted
 */
void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst);

4037
/**
4038
 * @}
4039
 */
4040

4041
/**
4042 4043
 * @addtogroup lavc_decoding
 * @{
4044 4045
 */

4046
/**
4047
 * Find a registered decoder with a matching codec ID.
4048
 *
4049
 * @param id AVCodecID of the requested decoder
4050
 * @return A decoder if one was found, NULL otherwise.
4051
 */
4052
AVCodec *avcodec_find_decoder(enum AVCodecID id);
4053 4054

/**
4055
 * Find a registered decoder with the specified name.
4056
 *
4057 4058
 * @param name name of the requested decoder
 * @return A decoder if one was found, NULL otherwise.
4059
 */
4060
AVCodec *avcodec_find_decoder_by_name(const char *name);
Michael Niedermayer's avatar
Michael Niedermayer committed
4061

4062 4063 4064
/**
 * The default callback for AVCodecContext.get_buffer2(). It is made public so
 * it can be called by custom get_buffer2() implementations for decoders without
4065
 * AV_CODEC_CAP_DR1 set.
4066 4067
 */
int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags);
4068

4069
#if FF_API_EMU_EDGE
4070
/**
4071
 * Return the amount of padding in pixels which the get_buffer callback must
4072 4073 4074 4075
 * provide around the edge of the image for codecs which do not have the
 * CODEC_FLAG_EMU_EDGE flag.
 *
 * @return Required padding in pixels.
4076 4077 4078
 *
 * @deprecated CODEC_FLAG_EMU_EDGE is deprecated, so this function is no longer
 * needed
4079
 */
4080
attribute_deprecated
4081
unsigned avcodec_get_edge_width(void);
4082
#endif
4083

4084
/**
4085
 * Modify width and height values so that they will result in a memory
4086 4087
 * buffer that is acceptable for the codec if you do not use any horizontal
 * padding.
4088
 *
4089
 * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened.
4090
 */
4091
void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height);
Drew Hess's avatar
Drew Hess committed
4092

4093
/**
4094
 * Modify width and height values so that they will result in a memory
4095 4096
 * buffer that is acceptable for the codec if you also ensure that all
 * line sizes are a multiple of the respective linesize_align[i].
4097
 *
4098
 * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened.
4099 4100
 */
void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
4101
                               int linesize_align[AV_NUM_DATA_POINTERS]);
4102

4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113
/**
 * Converts AVChromaLocation to swscale x/y chroma position.
 *
 * The positions represent the chroma (0,0) position in a coordinates system
 * with luma (0,0) representing the origin and luma(1,1) representing 256,256
 *
 * @param xpos  horizontal chroma sample position
 * @param ypos  vertical   chroma sample position
 */
int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos);

4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124
/**
 * Converts swscale x/y chroma position to AVChromaLocation.
 *
 * The positions represent the chroma (0,0) position in a coordinates system
 * with luma (0,0) representing the origin and luma(1,1) representing 256,256
 *
 * @param xpos  horizontal chroma sample position
 * @param ypos  vertical   chroma sample position
 */
enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos);

4125 4126 4127 4128
/**
 * Decode the audio frame of size avpkt->size from avpkt->data into frame.
 *
 * Some decoders may support multiple frames in a single AVPacket. Such
4129 4130 4131 4132 4133 4134 4135
 * decoders would then just decode the first frame and the return value would be
 * less than the packet size. In this case, avcodec_decode_audio4 has to be
 * called again with an AVPacket containing the remaining data in order to
 * decode the second frame, etc...  Even if no frames are returned, the packet
 * needs to be fed to the decoder with remaining data until it is completely
 * consumed or an error occurs.
 *
4136
 * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input
4137 4138 4139 4140 4141
 * and output. This means that for some packets they will not immediately
 * produce decoded output and need to be flushed at the end of decoding to get
 * all the decoded data. Flushing is done by calling this function with packets
 * with avpkt->data set to NULL and avpkt->size set to 0 until it stops
 * returning samples. It is safe to flush even those decoders that are not
4142
 * marked with AV_CODEC_CAP_DELAY, then no samples will be returned.
4143
 *
4144
 * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE
4145 4146 4147
 *          larger than the actual read bytes because some optimized bitstream
 *          readers read 32 or 64 bits at once and could read over the end.
 *
4148 4149 4150
 * @note The AVCodecContext MUST have been opened with @ref avcodec_open2()
 * before packets may be fed to the decoder.
 *
4151 4152
 * @param      avctx the codec context
 * @param[out] frame The AVFrame in which to store decoded audio samples.
4153 4154 4155 4156 4157 4158 4159 4160 4161
 *                   The decoder will allocate a buffer for the decoded frame by
 *                   calling the AVCodecContext.get_buffer2() callback.
 *                   When AVCodecContext.refcounted_frames is set to 1, the frame is
 *                   reference counted and the returned reference belongs to the
 *                   caller. The caller must release the frame using av_frame_unref()
 *                   when the frame is no longer needed. The caller may safely write
 *                   to the frame if av_frame_is_writable() returns 1.
 *                   When AVCodecContext.refcounted_frames is set to 0, the returned
 *                   reference belongs to the decoder and is valid only until the
4162 4163
 *                   next call to this function or until closing or flushing the
 *                   decoder. The caller may not write to it.
4164
 * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is
4165 4166
 *                           non-zero. Note that this field being set to zero
 *                           does not mean that an error has occurred. For
4167
 *                           decoders with AV_CODEC_CAP_DELAY set, no given decode
4168
 *                           call is guaranteed to produce a frame.
4169 4170 4171 4172 4173 4174 4175 4176
 * @param[in]  avpkt The input AVPacket containing the input buffer.
 *                   At least avpkt->data and avpkt->size should be set. Some
 *                   decoders might also require additional fields to be set.
 * @return A negative error code is returned if an error occurred during
 *         decoding, otherwise the number of bytes consumed from the input
 *         AVPacket is returned.
 */
int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame,
4177
                          int *got_frame_ptr, const AVPacket *avpkt);
4178

4179
/**
4180
 * Decode the video frame of size avpkt->size from avpkt->data into picture.
4181 4182
 * Some decoders may support multiple frames in a single AVPacket, such
 * decoders would then just decode the first frame.
4183
 *
4184
 * @warning The input buffer must be AV_INPUT_BUFFER_PADDING_SIZE larger than
4185 4186 4187
 * the actual read bytes because some optimized bitstream readers read 32 or 64
 * bits at once and could read over the end.
 *
4188
 * @warning The end of the input buffer buf should be set to 0 to ensure that
4189 4190
 * no overreading happens for damaged MPEG streams.
 *
4191
 * @note Codecs which have the AV_CODEC_CAP_DELAY capability set have a delay
4192 4193
 * between input and output, these need to be fed with avpkt->data=NULL,
 * avpkt->size=0 at the end to return the remaining frames.
4194
 *
4195 4196 4197
 * @note The AVCodecContext MUST have been opened with @ref avcodec_open2()
 * before packets may be fed to the decoder.
 *
Diego Biurrun's avatar
Diego Biurrun committed
4198
 * @param avctx the codec context
4199
 * @param[out] picture The AVFrame in which the decoded video frame will be stored.
4200 4201 4202 4203 4204 4205 4206 4207 4208 4209
 *             Use av_frame_alloc() to get an AVFrame. The codec will
 *             allocate memory for the actual bitmap by calling the
 *             AVCodecContext.get_buffer2() callback.
 *             When AVCodecContext.refcounted_frames is set to 1, the frame is
 *             reference counted and the returned reference belongs to the
 *             caller. The caller must release the frame using av_frame_unref()
 *             when the frame is no longer needed. The caller may safely write
 *             to the frame if av_frame_is_writable() returns 1.
 *             When AVCodecContext.refcounted_frames is set to 0, the returned
 *             reference belongs to the decoder and is valid only until the
4210 4211
 *             next call to this function or until closing or flushing the
 *             decoder. The caller may not write to it.
4212
 *
4213
 * @param[in] avpkt The input AVPacket containing the input buffer.
4214 4215
 *            You can create such packet with av_init_packet() and by then setting
 *            data and size, some decoders might in addition need other fields like
4216
 *            flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least
4217
 *            fields possible.
Diego Biurrun's avatar
Diego Biurrun committed
4218
 * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero.
4219 4220 4221
 * @return On error a negative value is returned, otherwise the number of bytes
 * used or zero if no frame could be decompressed.
 */
4222
int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
Fabrice Bellard's avatar
Fabrice Bellard committed
4223
                         int *got_picture_ptr,
4224
                         const AVPacket *avpkt);
4225

4226
/**
4227
 * Decode a subtitle message.
Måns Rullgård's avatar
Måns Rullgård committed
4228
 * Return a negative value on error, otherwise return the number of bytes used.
4229 4230
 * If no subtitle could be decompressed, got_sub_ptr is zero.
 * Otherwise, the subtitle is stored in *sub.
4231
 * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for
4232 4233 4234
 * simplicity, because the performance difference is expect to be negligible
 * and reusing a get_buffer written for video codecs would probably perform badly
 * due to a potentially very different allocation pattern.
4235
 *
4236 4237 4238 4239 4240 4241 4242 4243
 * Some decoders (those marked with CODEC_CAP_DELAY) have a delay between input
 * and output. This means that for some packets they will not immediately
 * produce decoded output and need to be flushed at the end of decoding to get
 * all the decoded data. Flushing is done by calling this function with packets
 * with avpkt->data set to NULL and avpkt->size set to 0 until it stops
 * returning subtitles. It is safe to flush even those decoders that are not
 * marked with CODEC_CAP_DELAY, then no subtitles will be returned.
 *
4244 4245 4246
 * @note The AVCodecContext MUST have been opened with @ref avcodec_open2()
 * before packets may be fed to the decoder.
 *
4247
 * @param avctx the codec context
4248 4249
 * @param[out] sub The Preallocated AVSubtitle in which the decoded subtitle will be stored,
 *                 must be freed with avsubtitle_free if *got_sub_ptr is set.
4250 4251 4252 4253 4254 4255
 * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero.
 * @param[in] avpkt The input AVPacket containing the input buffer.
 */
int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
                            int *got_sub_ptr,
                            AVPacket *avpkt);
4256 4257

/**
4258 4259
 * @defgroup lavc_parsing Frame parsing
 * @{
4260 4261
 */

4262 4263 4264 4265 4266 4267 4268
enum AVPictureStructure {
    AV_PICTURE_STRUCTURE_UNKNOWN,      //< unknown
    AV_PICTURE_STRUCTURE_TOP_FIELD,    //< coded as top field
    AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field
    AV_PICTURE_STRUCTURE_FRAME,        //< coded as frame
};

4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306
typedef struct AVCodecParserContext {
    void *priv_data;
    struct AVCodecParser *parser;
    int64_t frame_offset; /* offset of the current frame */
    int64_t cur_offset; /* current offset
                           (incremented by each av_parser_parse()) */
    int64_t next_frame_offset; /* offset of the next frame */
    /* video info */
    int pict_type; /* XXX: Put it back in AVCodecContext. */
    /**
     * This field is used for proper frame duration computation in lavf.
     * It signals, how much longer the frame duration of the current frame
     * is compared to normal frame duration.
     *
     * frame_duration = (1 + repeat_pict) * time_base
     *
     * It is used by codecs like H.264 to display telecined material.
     */
    int repeat_pict; /* XXX: Put it back in AVCodecContext. */
    int64_t pts;     /* pts of the current frame */
    int64_t dts;     /* dts of the current frame */

    /* private data */
    int64_t last_pts;
    int64_t last_dts;
    int fetch_timestamp;

#define AV_PARSER_PTS_NB 4
    int cur_frame_start_index;
    int64_t cur_frame_offset[AV_PARSER_PTS_NB];
    int64_t cur_frame_pts[AV_PARSER_PTS_NB];
    int64_t cur_frame_dts[AV_PARSER_PTS_NB];

    int flags;
#define PARSER_FLAG_COMPLETE_FRAMES           0x0001
#define PARSER_FLAG_ONCE                      0x0002
/// Set if the parser has a valid file offset
#define PARSER_FLAG_FETCHED_OFFSET            0x0004
4307
#define PARSER_FLAG_USE_CODEC_TS              0x1000
4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319

    int64_t offset;      ///< byte offset from starting packet start
    int64_t cur_frame_end[AV_PARSER_PTS_NB];

    /**
     * Set by parser to 1 for key frames and 0 for non-key frames.
     * It is initialized to -1, so if the parser doesn't set this flag,
     * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames
     * will be used.
     */
    int key_frame;

4320
#if FF_API_CONVERGENCE_DURATION
4321
    /**
4322
     * @deprecated unused
4323
     */
4324
    attribute_deprecated
4325
    int64_t convergence_duration;
4326
#endif
4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391

    // Timestamp generation support:
    /**
     * Synchronization point for start of timestamp generation.
     *
     * Set to >0 for sync point, 0 for no sync point and <0 for undefined
     * (default).
     *
     * For example, this corresponds to presence of H.264 buffering period
     * SEI message.
     */
    int dts_sync_point;

    /**
     * Offset of the current timestamp against last timestamp sync point in
     * units of AVCodecContext.time_base.
     *
     * Set to INT_MIN when dts_sync_point unused. Otherwise, it must
     * contain a valid timestamp offset.
     *
     * Note that the timestamp of sync point has usually a nonzero
     * dts_ref_dts_delta, which refers to the previous sync point. Offset of
     * the next frame after timestamp sync point will be usually 1.
     *
     * For example, this corresponds to H.264 cpb_removal_delay.
     */
    int dts_ref_dts_delta;

    /**
     * Presentation delay of current frame in units of AVCodecContext.time_base.
     *
     * Set to INT_MIN when dts_sync_point unused. Otherwise, it must
     * contain valid non-negative timestamp delta (presentation time of a frame
     * must not lie in the past).
     *
     * This delay represents the difference between decoding and presentation
     * time of the frame.
     *
     * For example, this corresponds to H.264 dpb_output_delay.
     */
    int pts_dts_delta;

    /**
     * Position of the packet in file.
     *
     * Analogous to cur_frame_pts/dts
     */
    int64_t cur_frame_pos[AV_PARSER_PTS_NB];

    /**
     * Byte position of currently parsed frame in stream.
     */
    int64_t pos;

    /**
     * Previous frame byte position.
     */
    int64_t last_pos;

    /**
     * Duration of the current frame.
     * For audio, this is in units of 1 / AVCodecContext.sample_rate.
     * For all other types, this is in units of AVCodecContext.time_base.
     */
    int duration;
4392 4393

    enum AVFieldOrder field_order;
4394 4395 4396 4397 4398 4399 4400 4401 4402 4403

    /**
     * Indicate whether a picture is coded as a frame, top field or bottom field.
     *
     * For example, H.264 field_pic_flag equal to 0 corresponds to
     * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag
     * equal to 1 and bottom_field_flag equal to 0 corresponds to
     * AV_PICTURE_STRUCTURE_TOP_FIELD.
     */
    enum AVPictureStructure picture_structure;
4404 4405 4406 4407 4408 4409 4410 4411

    /**
     * Picture number incremented in presentation or output order.
     * This field may be reinitialized at the first picture of a new sequence.
     *
     * For example, this corresponds to H.264 PicOrderCnt.
     */
    int output_picture_number;
4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433

    /**
     * Dimensions of the decoded video intended for presentation.
     */
    int width;
    int height;

    /**
     * Dimensions of the coded video.
     */
    int coded_width;
    int coded_height;

    /**
     * The format of the coded data, corresponds to enum AVPixelFormat for video
     * and for enum AVSampleFormat for audio.
     *
     * Note that a decoder can have considerable freedom in how exactly it
     * decodes the data, so the format reported here might be different from the
     * one returned by a decoder.
     */
    int format;
4434 4435 4436 4437 4438 4439
} AVCodecParserContext;

typedef struct AVCodecParser {
    int codec_ids[5]; /* several codec IDs are permitted */
    int priv_data_size;
    int (*parser_init)(AVCodecParserContext *s);
4440 4441
    /* This callback never returns an error, a negative value means that
     * the frame start was in a previous packet. */
4442 4443 4444 4445 4446 4447 4448 4449 4450
    int (*parser_parse)(AVCodecParserContext *s,
                        AVCodecContext *avctx,
                        const uint8_t **poutbuf, int *poutbuf_size,
                        const uint8_t *buf, int buf_size);
    void (*parser_close)(AVCodecParserContext *s);
    int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size);
    struct AVCodecParser *next;
} AVCodecParser;

4451
AVCodecParser *av_parser_next(const AVCodecParser *c);
4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490

void av_register_codec_parser(AVCodecParser *parser);
AVCodecParserContext *av_parser_init(int codec_id);

/**
 * Parse a packet.
 *
 * @param s             parser context.
 * @param avctx         codec context.
 * @param poutbuf       set to pointer to parsed buffer or NULL if not yet finished.
 * @param poutbuf_size  set to size of parsed buffer or zero if not yet finished.
 * @param buf           input buffer.
 * @param buf_size      input length, to signal EOF, this should be 0 (so that the last frame can be output).
 * @param pts           input presentation timestamp.
 * @param dts           input decoding timestamp.
 * @param pos           input byte position in stream.
 * @return the number of bytes of the input bitstream used.
 *
 * Example:
 * @code
 *   while(in_len){
 *       len = av_parser_parse2(myparser, AVCodecContext, &data, &size,
 *                                        in_data, in_len,
 *                                        pts, dts, pos);
 *       in_data += len;
 *       in_len  -= len;
 *
 *       if(size)
 *          decode_frame(data, size);
 *   }
 * @endcode
 */
int av_parser_parse2(AVCodecParserContext *s,
                     AVCodecContext *avctx,
                     uint8_t **poutbuf, int *poutbuf_size,
                     const uint8_t *buf, int buf_size,
                     int64_t pts, int64_t dts,
                     int64_t pos);

4491 4492
/**
 * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed
Paul B Mahol's avatar
Paul B Mahol committed
4493
 * @deprecated use AVBitStreamFilter
4494
 */
4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505
int av_parser_change(AVCodecParserContext *s,
                     AVCodecContext *avctx,
                     uint8_t **poutbuf, int *poutbuf_size,
                     const uint8_t *buf, int buf_size, int keyframe);
void av_parser_close(AVCodecParserContext *s);

/**
 * @}
 * @}
 */

4506 4507 4508 4509 4510 4511 4512 4513
/**
 * @addtogroup lavc_encoding
 * @{
 */

/**
 * Find a registered encoder with a matching codec ID.
 *
4514
 * @param id AVCodecID of the requested encoder
4515 4516
 * @return An encoder if one was found, NULL otherwise.
 */
4517
AVCodec *avcodec_find_encoder(enum AVCodecID id);
4518 4519 4520 4521 4522 4523 4524 4525 4526

/**
 * Find a registered encoder with the specified name.
 *
 * @param name name of the requested encoder
 * @return An encoder if one was found, NULL otherwise.
 */
AVCodec *avcodec_find_encoder_by_name(const char *name);

4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539
/**
 * Encode a frame of audio.
 *
 * Takes input samples from frame and writes the next output packet, if
 * available, to avpkt. The output packet does not necessarily contain data for
 * the most recent frame, as encoders can delay, split, and combine input frames
 * internally as needed.
 *
 * @param avctx     codec context
 * @param avpkt     output AVPacket.
 *                  The user can supply an output buffer by setting
 *                  avpkt->data and avpkt->size prior to calling the
 *                  function, but if the size of the user-provided data is not
4540 4541 4542 4543 4544 4545
 *                  large enough, encoding will fail. If avpkt->data and
 *                  avpkt->size are set, avpkt->destruct must also be set. All
 *                  other AVPacket fields will be reset by the encoder using
 *                  av_init_packet(). If avpkt->data is NULL, the encoder will
 *                  allocate it. The encoder will set avpkt->size to the size
 *                  of the output packet.
4546 4547 4548 4549
 *
 *                  If this function fails or produces no output, avpkt will be
 *                  freed using av_free_packet() (i.e. avpkt->destruct will be
 *                  called to free the user supplied buffer).
4550 4551
 * @param[in] frame AVFrame containing the raw audio data to be encoded.
 *                  May be NULL when flushing an encoder that has the
4552 4553
 *                  AV_CODEC_CAP_DELAY capability set.
 *                  If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame
4554
 *                  can have any number of samples.
4555 4556 4557
 *                  If it is not set, frame->nb_samples must be equal to
 *                  avctx->frame_size for all frames except the last.
 *                  The final frame may be smaller than avctx->frame_size.
4558 4559 4560 4561 4562 4563 4564 4565 4566 4567
 * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the
 *                            output packet is non-empty, and to 0 if it is
 *                            empty. If the function returns an error, the
 *                            packet can be assumed to be invalid, and the
 *                            value of got_packet_ptr is undefined and should
 *                            not be used.
 * @return          0 on success, negative error code on failure
 */
int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt,
                          const AVFrame *frame, int *got_packet_ptr);
4568

4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587
/**
 * Encode a frame of video.
 *
 * Takes input raw video data from frame and writes the next output packet, if
 * available, to avpkt. The output packet does not necessarily contain data for
 * the most recent frame, as encoders can delay and reorder input frames
 * internally as needed.
 *
 * @param avctx     codec context
 * @param avpkt     output AVPacket.
 *                  The user can supply an output buffer by setting
 *                  avpkt->data and avpkt->size prior to calling the
 *                  function, but if the size of the user-provided data is not
 *                  large enough, encoding will fail. All other AVPacket fields
 *                  will be reset by the encoder using av_init_packet(). If
 *                  avpkt->data is NULL, the encoder will allocate it.
 *                  The encoder will set avpkt->size to the size of the
 *                  output packet. The returned data (if any) belongs to the
 *                  caller, he is responsible for freeing it.
4588 4589 4590 4591
 *
 *                  If this function fails or produces no output, avpkt will be
 *                  freed using av_free_packet() (i.e. avpkt->destruct will be
 *                  called to free the user supplied buffer).
4592 4593
 * @param[in] frame AVFrame containing the raw video data to be encoded.
 *                  May be NULL when flushing an encoder that has the
4594
 *                  AV_CODEC_CAP_DELAY capability set.
4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605
 * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the
 *                            output packet is non-empty, and to 0 if it is
 *                            empty. If the function returns an error, the
 *                            packet can be assumed to be invalid, and the
 *                            value of got_packet_ptr is undefined and should
 *                            not be used.
 * @return          0 on success, negative error code on failure
 */
int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt,
                          const AVFrame *frame, int *got_packet_ptr);

4606
int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
4607
                            const AVSubtitle *sub);
Fabrice Bellard's avatar
Fabrice Bellard committed
4608

4609

4610
/**
4611 4612 4613
 * @}
 */

4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710
#if FF_API_AVCODEC_RESAMPLE
/**
 * @defgroup lavc_resample Audio resampling
 * @ingroup libavc
 * @deprecated use libswresample instead
 *
 * @{
 */
struct ReSampleContext;
struct AVResampleContext;

typedef struct ReSampleContext ReSampleContext;

/**
 *  Initialize audio resampling context.
 *
 * @param output_channels  number of output channels
 * @param input_channels   number of input channels
 * @param output_rate      output sample rate
 * @param input_rate       input sample rate
 * @param sample_fmt_out   requested output sample format
 * @param sample_fmt_in    input sample format
 * @param filter_length    length of each FIR filter in the filterbank relative to the cutoff frequency
 * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
 * @param linear           if 1 then the used FIR filter will be linearly interpolated
                           between the 2 closest, if 0 the closest will be used
 * @param cutoff           cutoff frequency, 1.0 corresponds to half the output sampling rate
 * @return allocated ReSampleContext, NULL if error occurred
 */
attribute_deprecated
ReSampleContext *av_audio_resample_init(int output_channels, int input_channels,
                                        int output_rate, int input_rate,
                                        enum AVSampleFormat sample_fmt_out,
                                        enum AVSampleFormat sample_fmt_in,
                                        int filter_length, int log2_phase_count,
                                        int linear, double cutoff);

attribute_deprecated
int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);

/**
 * Free resample context.
 *
 * @param s a non-NULL pointer to a resample context previously
 *          created with av_audio_resample_init()
 */
attribute_deprecated
void audio_resample_close(ReSampleContext *s);


/**
 * Initialize an audio resampler.
 * Note, if either rate is not an integer then simply scale both rates up so they are.
 * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq
 * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
 * @param linear If 1 then the used FIR filter will be linearly interpolated
                 between the 2 closest, if 0 the closest will be used
 * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate
 */
attribute_deprecated
struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff);

/**
 * Resample an array of samples using a previously configured context.
 * @param src an array of unconsumed samples
 * @param consumed the number of samples of src which have been consumed are returned here
 * @param src_size the number of unconsumed samples available
 * @param dst_size the amount of space in samples available in dst
 * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context.
 * @return the number of samples written in dst or -1 if an error occurred
 */
attribute_deprecated
int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx);


/**
 * Compensate samplerate/timestamp drift. The compensation is done by changing
 * the resampler parameters, so no audible clicks or similar distortions occur
 * @param compensation_distance distance in output samples over which the compensation should be performed
 * @param sample_delta number of output samples which should be output less
 *
 * example: av_resample_compensate(c, 10, 500)
 * here instead of 510 samples only 500 samples would be output
 *
 * note, due to rounding the actual compensation might be slightly different,
 * especially if the compensation_distance is large and the in_rate used during init is small
 */
attribute_deprecated
void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance);
attribute_deprecated
void av_resample_close(struct AVResampleContext *c);

/**
 * @}
 */
#endif

4711 4712 4713 4714 4715
/**
 * @addtogroup lavc_picture
 * @{
 */

4716
/**
4717 4718 4719 4720
 * Allocate memory for the pixels of a picture and setup the AVPicture
 * fields for it.
 *
 * Call avpicture_free() to free it.
4721
 *
4722 4723 4724 4725 4726
 * @param picture            the picture structure to be filled in
 * @param pix_fmt            the pixel format of the picture
 * @param width              the width of the picture
 * @param height             the height of the picture
 * @return zero if successful, a negative error code otherwise
4727
 *
4728
 * @see av_image_alloc(), avpicture_fill()
4729
 */
4730
int avpicture_alloc(AVPicture *picture, enum AVPixelFormat pix_fmt, int width, int height);
4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741

/**
 * Free a picture previously allocated by avpicture_alloc().
 * The data buffer used by the AVPicture is freed, but the AVPicture structure
 * itself is not.
 *
 * @param picture the AVPicture to be freed
 */
void avpicture_free(AVPicture *picture);

/**
4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760
 * Setup the picture fields based on the specified image parameters
 * and the provided image data buffer.
 *
 * The picture fields are filled in by using the image data buffer
 * pointed to by ptr.
 *
 * If ptr is NULL, the function will fill only the picture linesize
 * array and return the required size for the image buffer.
 *
 * To allocate an image buffer and fill the picture data in one call,
 * use avpicture_alloc().
 *
 * @param picture       the picture to be filled in
 * @param ptr           buffer where the image data is stored, or NULL
 * @param pix_fmt       the pixel format of the image
 * @param width         the width of the image in pixels
 * @param height        the height of the image in pixels
 * @return the size in bytes required for src, a negative error code
 * in case of failure
4761
 *
4762
 * @see av_image_fill_arrays()
4763
 */
4764
int avpicture_fill(AVPicture *picture, const uint8_t *ptr,
4765
                   enum AVPixelFormat pix_fmt, int width, int height);
4766 4767

/**
4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781
 * Copy pixel data from an AVPicture into a buffer.
 *
 * avpicture_get_size() can be used to compute the required size for
 * the buffer to fill.
 *
 * @param src        source picture with filled data
 * @param pix_fmt    picture pixel format
 * @param width      picture width
 * @param height     picture height
 * @param dest       destination buffer
 * @param dest_size  destination buffer size in bytes
 * @return the number of bytes written to dest, or a negative value
 * (error code) on error, for example if the destination buffer is not
 * big enough
4782
 *
4783
 * @see av_image_copy_to_buffer()
4784
 */
4785
int avpicture_layout(const AVPicture *src, enum AVPixelFormat pix_fmt,
4786
                     int width, int height,
4787 4788 4789 4790 4791
                     unsigned char *dest, int dest_size);

/**
 * Calculate the size in bytes that a picture of the given width and height
 * would occupy if stored in the given picture format.
4792 4793 4794 4795 4796 4797
 *
 * @param pix_fmt    picture pixel format
 * @param width      picture width
 * @param height     picture height
 * @return the computed picture buffer size or a negative error code
 * in case of error
4798
 *
4799
 * @see av_image_get_buffer_size().
4800
 */
4801
int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);
4802 4803

/**
4804
 * Copy image src to dst. Wraps av_image_copy().
4805 4806
 */
void av_picture_copy(AVPicture *dst, const AVPicture *src,
4807
                     enum AVPixelFormat pix_fmt, int width, int height);
4808 4809 4810 4811 4812

/**
 * Crop image top and left side.
 */
int av_picture_crop(AVPicture *dst, const AVPicture *src,
4813
                    enum AVPixelFormat pix_fmt, int top_band, int left_band);
4814 4815 4816 4817

/**
 * Pad image.
 */
4818
int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt,
4819 4820 4821 4822 4823 4824
            int padtop, int padbottom, int padleft, int padright, int *color);

/**
 * @}
 */

4825 4826 4827 4828 4829 4830 4831 4832
/**
 * @defgroup lavc_misc Utility functions
 * @ingroup libavc
 *
 * Miscellaneous utility functions related to both encoding and decoding
 * (or neither).
 * @{
 */
4833

4834 4835 4836 4837 4838 4839 4840
/**
 * @defgroup lavc_misc_pixfmt Pixel formats
 *
 * Functions for working with pixel formats.
 * @{
 */

4841
/**
4842 4843 4844 4845 4846 4847 4848 4849
 * Utility function to access log2_chroma_w log2_chroma_h from
 * the pixel format AVPixFmtDescriptor.
 *
 * This function asserts that pix_fmt is valid. See av_pix_fmt_get_chroma_sub_sample
 * for one that returns a failure code and continues in case of invalid
 * pix_fmts.
 *
 * @param[in]  pix_fmt the pixel format
4850 4851
 * @param[out] h_shift store log2_chroma_w
 * @param[out] v_shift store log2_chroma_h
4852 4853
 *
 * @see av_pix_fmt_get_chroma_sub_sample
4854 4855
 */

4856
void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift);
4857 4858 4859 4860 4861 4862

/**
 * Return a value representing the fourCC code associated to the
 * pixel format pix_fmt, or 0 if no associated fourCC code can be
 * found.
 */
4863
unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt);
4864

4865 4866
/**
 * @deprecated see av_get_pix_fmt_loss()
4867
 */
4868
int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt,
4869
                             int has_alpha);
4870

4871 4872 4873 4874 4875
/**
 * Find the best pixel format to convert to given a certain source pixel
 * format.  When converting from one pixel format to another, information loss
 * may occur.  For example, when converting from RGB24 to GRAY, the color
 * information will be lost. Similarly, other losses occur when converting from
4876
 * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of
4877 4878 4879 4880 4881
 * the given pixel formats should be used to suffer the least amount of loss.
 * The pixel formats from which it chooses one, are determined by the
 * pix_fmt_list parameter.
 *
 *
4882
 * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from
4883 4884 4885 4886 4887
 * @param[in] src_pix_fmt source pixel format
 * @param[in] has_alpha Whether the source pixel format alpha channel is used.
 * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur.
 * @return The best pixel format to convert to or -1 if none was found.
 */
4888
enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list,
4889
                                            enum AVPixelFormat src_pix_fmt,
4890
                                            int has_alpha, int *loss_ptr);
4891

4892
/**
4893
 * @deprecated see av_find_best_pix_fmt_of_2()
4894
 */
4895 4896
enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
                                            enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);
4897 4898

attribute_deprecated
4899
#if AV_HAVE_INCOMPATIBLE_LIBAV_ABI
4900
enum AVPixelFormat avcodec_find_best_pix_fmt2(const enum AVPixelFormat *pix_fmt_list,
4901 4902
                                              enum AVPixelFormat src_pix_fmt,
                                              int has_alpha, int *loss_ptr);
4903
#else
4904 4905
enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
                                            enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);
4906 4907
#endif

4908

4909
enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt);
4910 4911 4912 4913 4914

/**
 * @}
 */

4915 4916 4917 4918 4919
#if FF_API_SET_DIMENSIONS
/**
 * @deprecated this function is not supposed to be used from outside of lavc
 */
attribute_deprecated
4920
void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
4921
#endif
4922 4923 4924 4925

/**
 * Put a string representing the codec tag codec_tag in buf.
 *
4926
 * @param buf       buffer to place codec tag in
4927
 * @param buf_size size in bytes of buf
4928
 * @param codec_tag codec tag to assign
4929 4930 4931 4932
 * @return the length of the string that would have been generated if
 * enough space had been available, excluding the trailing null
 */
size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag);
4933 4934

void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
4935

4936
/**
4937
 * Return a name for the specified profile, if available.
4938
 *
4939 4940 4941
 * @param codec the codec that is searched for the given profile
 * @param profile the profile value for which a name is requested
 * @return A name for the profile if found, NULL otherwise.
4942
 */
4943 4944 4945 4946 4947
const char *av_get_profile_name(const AVCodec *codec, int profile);

int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count);
//FIXME func typedef
4948

4949
/**
4950 4951 4952 4953 4954 4955
 * Fill AVFrame audio data and linesize pointers.
 *
 * The buffer buf must be a preallocated buffer with a size big enough
 * to contain the specified samples amount. The filled AVFrame data
 * pointers will point to this buffer.
 *
4956 4957
 * AVFrame extended_data channel pointers are allocated if necessary for
 * planar audio.
4958
 *
4959 4960 4961 4962 4963 4964 4965 4966
 * @param frame       the AVFrame
 *                    frame->nb_samples must be set prior to calling the
 *                    function. This function fills in frame->data,
 *                    frame->extended_data, frame->linesize[0].
 * @param nb_channels channel count
 * @param sample_fmt  sample format
 * @param buf         buffer to use for frame data
 * @param buf_size    size of buffer
4967
 * @param align       plane size sample alignment (0 = default)
4968
 * @return            >=0 on success, negative error code on failure
4969 4970
 * @todo return the size in bytes required to store the samples in
 * case of success, at the next libavutil bump
4971
 */
4972 4973 4974
int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels,
                             enum AVSampleFormat sample_fmt, const uint8_t *buf,
                             int buf_size, int align);
Fabrice Bellard's avatar
Fabrice Bellard committed
4975

4976
/**
4977 4978 4979 4980 4981 4982 4983
 * Reset the internal decoder state / flush internal buffers. Should be called
 * e.g. when seeking or when switching to a different stream.
 *
 * @note when refcounted frames are not used (i.e. avctx->refcounted_frames is 0),
 * this invalidates the frames previously returned from the decoder. When
 * refcounted frames are used, the decoder just releases any references it might
 * keep internally, but the caller's reference remains valid.
4984
 */
4985 4986
void avcodec_flush_buffers(AVCodecContext *avctx);

4987
/**
4988
 * Return codec bits per sample.
4989
 *
Diego Biurrun's avatar
Diego Biurrun committed
4990
 * @param[in] codec_id the codec
4991
 * @return Number of bits per sample or zero if unknown for the given codec.
4992
 */
4993
int av_get_bits_per_sample(enum AVCodecID codec_id);
4994

4995 4996 4997 4998
/**
 * Return the PCM codec associated with a sample format.
 * @param be  endianness, 0 for little, 1 for big,
 *            -1 (or anything else) for native
4999
 * @return  AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE
5000
 */
5001
enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be);
5002

5003 5004 5005 5006 5007 5008 5009 5010
/**
 * Return codec bits per sample.
 * Only return non-zero if the bits per sample is exactly correct, not an
 * approximation.
 *
 * @param[in] codec_id the codec
 * @return Number of bits per sample or zero if unknown for the given codec.
 */
5011
int av_get_exact_bits_per_sample(enum AVCodecID codec_id);
5012

5013 5014 5015 5016 5017 5018 5019 5020 5021 5022
/**
 * Return audio frame duration.
 *
 * @param avctx        codec context
 * @param frame_bytes  size of the frame, or 0 if unknown
 * @return             frame duration, in samples, if known. 0 if not able to
 *                     determine.
 */
int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes);

5023 5024

typedef struct AVBitStreamFilterContext {
5025
    void *priv_data;
5026 5027 5028 5029 5030 5031 5032 5033
    struct AVBitStreamFilter *filter;
    AVCodecParserContext *parser;
    struct AVBitStreamFilterContext *next;
} AVBitStreamFilterContext;


typedef struct AVBitStreamFilter {
    const char *name;
5034
    int priv_data_size;
5035 5036 5037 5038
    int (*filter)(AVBitStreamFilterContext *bsfc,
                  AVCodecContext *avctx, const char *args,
                  uint8_t **poutbuf, int *poutbuf_size,
                  const uint8_t *buf, int buf_size, int keyframe);
5039
    void (*close)(AVBitStreamFilterContext *bsfc);
5040 5041 5042
    struct AVBitStreamFilter *next;
} AVBitStreamFilter;

5043 5044 5045 5046 5047 5048 5049 5050 5051
/**
 * Register a bitstream filter.
 *
 * The filter will be accessible to the application code through
 * av_bitstream_filter_next() or can be directly initialized with
 * av_bitstream_filter_init().
 *
 * @see avcodec_register_all()
 */
5052
void av_register_bitstream_filter(AVBitStreamFilter *bsf);
5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063

/**
 * Create and initialize a bitstream filter context given a bitstream
 * filter name.
 *
 * The returned context must be freed with av_bitstream_filter_close().
 *
 * @param name    the name of the bitstream filter
 * @return a bitstream filter context if a matching filter was found
 * and successfully initialized, NULL otherwise
 */
5064
AVBitStreamFilterContext *av_bitstream_filter_init(const char *name);
5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086

/**
 * Filter bitstream.
 *
 * This function filters the buffer buf with size buf_size, and places the
 * filtered buffer in the buffer pointed to by poutbuf.
 *
 * The output buffer must be freed by the caller.
 *
 * @param bsfc            bitstream filter context created by av_bitstream_filter_init()
 * @param avctx           AVCodecContext accessed by the filter, may be NULL.
 *                        If specified, this must point to the encoder context of the
 *                        output stream the packet is sent to.
 * @param args            arguments which specify the filter configuration, may be NULL
 * @param poutbuf         pointer which is updated to point to the filtered buffer
 * @param poutbuf_size    pointer which is updated to the filtered buffer size in bytes
 * @param buf             buffer containing the data to filter
 * @param buf_size        size in bytes of buf
 * @param keyframe        set to non-zero if the buffer to filter corresponds to a key-frame packet data
 * @return >= 0 in case of success, or a negative error code in case of failure
 *
 * If the return value is positive, an output buffer is allocated and
Lou Logan's avatar
Lou Logan committed
5087
 * is available in *poutbuf, and is distinct from the input buffer.
5088
 *
5089 5090 5091 5092
 * If the return value is 0, the output buffer is not allocated and
 * should be considered identical to the input buffer, or in case
 * *poutbuf was set it points to the input buffer (not necessarily to
 * its starting address).
5093
 */
5094 5095 5096 5097
int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,
                               AVCodecContext *avctx, const char *args,
                               uint8_t **poutbuf, int *poutbuf_size,
                               const uint8_t *buf, int buf_size, int keyframe);
5098 5099 5100 5101 5102 5103 5104

/**
 * Release bitstream filter context.
 *
 * @param bsf the bitstream filter context created with
 * av_bitstream_filter_init(), can be NULL
 */
5105 5106
void av_bitstream_filter_close(AVBitStreamFilterContext *bsf);

5107 5108 5109 5110 5111 5112 5113 5114
/**
 * If f is NULL, return the first registered bitstream filter,
 * if f is non-NULL, return the next registered bitstream filter
 * after f, or NULL if f is the last one.
 *
 * This function can be used to iterate over all registered bitstream
 * filters.
 */
5115
AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f);
5116

5117
/* memory */
5118

5119 5120
/**
 * Same behaviour av_fast_malloc but the buffer has additional
5121
 * AV_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0.
5122 5123 5124 5125 5126 5127
 *
 * In addition the whole buffer will initially and after resizes
 * be 0-initialized so that no uninitialized data will ever appear.
 */
void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size);

5128 5129 5130 5131 5132 5133
/**
 * Same behaviour av_fast_padded_malloc except that buffer will always
 * be 0-initialized after call.
 */
void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size);

5134
/**
5135
 * Encode extradata length to a buffer. Used by xiph codecs.
5136 5137 5138 5139 5140
 *
 * @param s buffer to write to; must be at least (v/255+1) bytes long
 * @param v size of extradata in bytes
 * @return number of bytes written to the buffer.
 */
5141
unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
5142

5143
#if FF_API_MISSING_SAMPLE
5144
/**
5145
 * Log a generic warning message about a missing feature. This function is
5146
 * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.)
5147
 * only, and would normally not be used by applications.
5148 5149 5150 5151 5152 5153 5154
 * @param[in] avc a pointer to an arbitrary struct of which the first field is
 * a pointer to an AVClass struct
 * @param[in] feature string containing the name of the missing feature
 * @param[in] want_sample indicates if samples are wanted which exhibit this feature.
 * If want_sample is non-zero, additional verbage will be added to the log
 * message which tells the user how to report samples to the development
 * mailing list.
5155
 * @deprecated Use avpriv_report_missing_feature() instead.
5156
 */
5157
attribute_deprecated
5158 5159 5160
void av_log_missing_feature(void *avc, const char *feature, int want_sample);

/**
5161
 * Log a generic warning message asking for a sample. This function is
5162 5163
 * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.)
 * only, and would normally not be used by applications.
5164 5165 5166
 * @param[in] avc a pointer to an arbitrary struct of which the first field is
 * a pointer to an AVClass struct
 * @param[in] msg string containing an optional message, or NULL if no message
5167
 * @deprecated Use avpriv_request_sample() instead.
5168
 */
5169
attribute_deprecated
5170
void av_log_ask_for_sample(void *avc, const char *msg, ...) av_printf_format(2, 3);
5171
#endif /* FF_API_MISSING_SAMPLE */
5172

5173
/**
5174
 * Register the hardware accelerator hwaccel.
5175 5176 5177 5178 5179 5180 5181 5182
 */
void av_register_hwaccel(AVHWAccel *hwaccel);

/**
 * If hwaccel is NULL, returns the first registered hardware accelerator,
 * if hwaccel is non-NULL, returns the next registered hardware accelerator
 * after hwaccel, or NULL if hwaccel is the last one.
 */
5183
AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel);
5184

5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197

/**
 * Lock operation used by lockmgr
 */
enum AVLockOp {
  AV_LOCK_CREATE,  ///< Create a mutex
  AV_LOCK_OBTAIN,  ///< Lock the mutex
  AV_LOCK_RELEASE, ///< Unlock the mutex
  AV_LOCK_DESTROY, ///< Free mutex resources
};

/**
 * Register a user provided lock manager supporting the operations
5198
 * specified by AVLockOp. The "mutex" argument to the function points
5199
 * to a (void *) where the lockmgr should store/get a pointer to a user
5200 5201
 * allocated mutex. It is NULL upon AV_LOCK_CREATE and equal to the
 * value left by the last call for all other ops. If the lock manager is
5202
 * unable to perform the op then it should leave the mutex in the same
5203
 * state as when it was called and return a non-zero value. However,
5204
 * when called with AV_LOCK_DESTROY the mutex will always be assumed to
5205
 * have been successfully destroyed. If av_lockmgr_register succeeds
5206 5207 5208 5209 5210
 * it will return a non-negative value, if it fails it will return a
 * negative value and destroy all mutex and unregister all callbacks.
 * av_lockmgr_register is not thread-safe, it must be called from a
 * single thread before any calls which make use of locking are used.
 *
5211
 * @param cb User defined callback. av_lockmgr_register invokes calls
5212 5213 5214 5215
 *           to this callback and the previously registered callback.
 *           The callback will be used to create more than one mutex
 *           each of which must be backed by its own underlying locking
 *           mechanism (i.e. do not use a single static object to
5216
 *           implement your lock manager). If cb is set to NULL the
5217
 *           lockmgr will be unregistered.
5218 5219 5220
 */
int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op));

5221 5222 5223
/**
 * Get the type of the given codec.
 */
5224
enum AVMediaType avcodec_get_type(enum AVCodecID codec_id);
5225

5226
/**
5227 5228
 * Get the name of a codec.
 * @return  a static string identifying the codec; never NULL
5229
 */
5230
const char *avcodec_get_name(enum AVCodecID id);
5231

5232 5233 5234 5235 5236 5237
/**
 * @return a positive value if s is open (i.e. avcodec_open2() was called on it
 * with no corresponding avcodec_close()), 0 otherwise.
 */
int avcodec_is_open(AVCodecContext *s);

5238 5239 5240
/**
 * @return a non-zero number if codec is an encoder, zero otherwise
 */
5241
int av_codec_is_encoder(const AVCodec *codec);
5242 5243 5244 5245

/**
 * @return a non-zero number if codec is a decoder, zero otherwise
 */
5246
int av_codec_is_decoder(const AVCodec *codec);
5247

5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261
/**
 * @return descriptor for given codec ID or NULL if no descriptor exists.
 */
const AVCodecDescriptor *avcodec_descriptor_get(enum AVCodecID id);

/**
 * Iterate over all codec descriptors known to libavcodec.
 *
 * @param prev previous descriptor. NULL to get the first descriptor.
 *
 * @return next descriptor or NULL after the last descriptor
 */
const AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev);

5262 5263 5264 5265 5266 5267
/**
 * @return codec descriptor with the given name or NULL if no such descriptor
 *         exists.
 */
const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name);

5268 5269 5270 5271
/**
 * @}
 */

5272
#endif /* AVCODEC_AVCODEC_H */