diff options
author | lotanrm <lotanrm@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2012-05-17 17:32:26 +0000 |
---|---|---|
committer | lotanrm <lotanrm@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2012-05-17 17:32:26 +0000 |
commit | c03bb84ce50794bab234b1c5cbfa74f6e8e3c6f2 (patch) | |
tree | 68fb6fbb36529b0d93959072afc0adc358539b30 /src/lib/ffmpeg-0.10/avcodec.pas | |
parent | a537d34f9306bf50391d295f87bde4fdaeccc3e6 (diff) | |
download | usdx-c03bb84ce50794bab234b1c5cbfa74f6e8e3c6f2.tar.gz usdx-c03bb84ce50794bab234b1c5cbfa74f6e8e3c6f2.tar.xz usdx-c03bb84ce50794bab234b1c5cbfa74f6e8e3c6f2.zip |
Added support for ffmpeg-0.10.
git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2883 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to '')
-rw-r--r-- | src/lib/ffmpeg-0.10/avcodec.pas | 1277 |
1 files changed, 853 insertions, 424 deletions
diff --git a/src/lib/ffmpeg-0.10/avcodec.pas b/src/lib/ffmpeg-0.10/avcodec.pas index b2ed9fd2..6e4a9a32 100644 --- a/src/lib/ffmpeg-0.10/avcodec.pas +++ b/src/lib/ffmpeg-0.10/avcodec.pas @@ -78,10 +78,11 @@ const * you start working on it). Simply adjusting the max. versions is NOT a valid * fix. *) + (* Supported version by this header *) - LIBAVCODEC_MAX_VERSION_MAJOR = 52; - LIBAVCODEC_MAX_VERSION_MINOR = 122; - LIBAVCODEC_MAX_VERSION_RELEASE = 0; + LIBAVCODEC_MAX_VERSION_MAJOR = 53; + LIBAVCODEC_MAX_VERSION_MINOR = 61; + LIBAVCODEC_MAX_VERSION_RELEASE = 100; LIBAVCODEC_MAX_VERSION = (LIBAVCODEC_MAX_VERSION_MAJOR * VERSION_MAJOR) + (LIBAVCODEC_MAX_VERSION_MINOR * VERSION_MINOR) + (LIBAVCODEC_MAX_VERSION_RELEASE * VERSION_RELEASE); @@ -108,69 +109,94 @@ const * Those FF_API_* defines are not part of public API. * They may change, break or disappear at any time. *) -const +{$macro on} {$ifndef FF_API_PALETTE_CONTROL} - FF_API_PALETTE_CONTROL = LIBAVCODEC_VERSION_MAJOR < 54; +{$define FF_API_PALETTE_CONTROL := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_MM_FLAGS} - FF_API_MM_FLAGS = LIBAVCODEC_VERSION_MAJOR < 53; +{$ifndef FF_API_OLD_SAMPLE_FMT} +{$define FF_API_OLD_SAMPLE_FMT := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_OPT_SHOW} - FF_API_OPT_SHOW = LIBAVCODEC_VERSION_MAJOR < 53; +{$ifndef FF_API_OLD_AUDIOCONVERT} +{$define FF_API_OLD_AUDIOCONVERT := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_AUDIO_OLD} - FF_API_AUDIO_OLD = LIBAVCODEC_VERSION_MAJOR < 53; +{$ifndef FF_API_ANTIALIAS_ALGO} +{$define FF_API_ANTIALIAS_ALGO := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_VIDEO_OLD} - FF_API_VIDEO_OLD = LIBAVCODEC_VERSION_MAJOR < 53; +{$ifndef FF_API_REQUEST_CHANNELS} +{$define FF_API_REQUEST_CHANNELS := (LIBAVCODEC_VERSION_MAJOR < 55)} {$endif} -{$ifndef FF_API_SUBTITLE_OLD} - FF_API_SUBTITLE_OLD = LIBAVCODEC_VERSION_MAJOR < 53; +{$ifndef FF_API_OPT_H} +{$define FF_API_OPT_H := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_USE_LPC} - FF_API_USE_LPC = LIBAVCODEC_VERSION_MAJOR < 53; +{$ifndef FF_API_THREAD_INIT} +{$define FF_API_THREAD_INIT := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_SET_STRING_OLD} - FF_API_SET_STRING_OLD = LIBAVCODEC_VERSION_MAJOR < 53; +{$ifndef FF_API_OLD_FF_PICT_TYPES} +{$define FF_API_OLD_FF_PICT_TYPES := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_INOFFICIAL} - FF_API_INOFFICIAL = LIBAVCODEC_VERSION_MAJOR < 53; +{$ifndef FF_API_FLAC_GLOBAL_OPTS} +{$define FF_API_FLAC_GLOBAL_OPTS := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_OLD_SAMPLE_FMT} - FF_API_OLD_SAMPLE_FMT = LIBAVCODEC_VERSION_MAJOR < 54; +{$ifndef FF_API_GET_PIX_FMT_NAME} +{$define FF_API_GET_PIX_FMT_NAME := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_OLD_AUDIOCONVERT} - FF_API_OLD_AUDIOCONVERT = LIBAVCODEC_VERSION_MAJOR < 54; +{$ifndef FF_API_ALLOC_CONTEXT} +{$define FF_API_ALLOC_CONTEXT := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_HURRY_UP} - FF_API_HURRY_UP = LIBAVCODEC_VERSION_MAJOR < 53; +{$ifndef FF_API_AVCODEC_OPEN} +{$define FF_API_AVCODEC_OPEN := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_RATE_EMU} - FF_API_RATE_EMU = LIBAVCODEC_VERSION_MAJOR < 53; +{$ifndef FF_API_DRC_SCALE} +{$define FF_API_DRC_SCALE := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_MB_Q} - FF_API_MB_Q = LIBAVCODEC_VERSION_MAJOR < 53; +{$ifndef FF_API_ER} +{$define FF_API_ER := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_ANTIALIAS_ALGO} - FF_API_ANTIALIAS_ALGO = LIBAVCODEC_VERSION_MAJOR < 54; +{$ifndef FF_API_AVCODEC_INIT} +{$define FF_API_AVCODEC_INIT := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_REQUEST_CHANNELS} - FF_API_REQUEST_CHANNELS = LIBAVCODEC_VERSION_MAJOR < 54; +{$ifndef FF_API_X264_GLOBAL_OPTS} +{$define FF_API_X264_GLOBAL_OPTS := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_OPT_H} - FF_API_OPT_H = LIBAVCODEC_VERSION_MAJOR < 54; +{$ifndef FF_API_MPEGVIDEO_GLOBAL_OPTS} +//{$define FF_API_MPEGVIDEO_GLOBAL_OPTS := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_THREAD_INIT} - FF_API_THREAD_INIT = LIBAVCODEC_VERSION_MAJOR < 54; +{$ifndef FF_API_LAME_GLOBAL_OPTS} +//{$define FF_API_LAME_GLOBAL_OPTS := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_OLD_FF_PICT_TYPES} - FF_API_OLD_FF_PICT_TYPES = LIBAVCODEC_VERSION_MAJOR < 54; +{$ifndef FF_API_SNOW_GLOBAL_OPTS} +//{$define FF_API_SNOW_GLOBAL_OPTS := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_FLAC_GLOBAL_OPTS} - FF_API_FLAC_GLOBAL_OPTS = LIBAVCODEC_VERSION_MAJOR < 54; +{$ifndef FF_API_MJPEG_GLOBAL_OPTS} +//{$define FF_API_MJPEG_GLOBAL_OPTS := (LIBAVCODEC_VERSION_MAJOR < 54)} {$endif} -{$ifndef FF_API_GET_PIX_FMT_NAME} - FF_API_GET_PIX_FMT_NAME = LIBAVCODEC_VERSION_MAJOR < 54; +{$ifndef FF_API_GET_ALPHA_INFO} +{$define FF_API_GET_ALPHA_INFO := (LIBAVCODEC_VERSION_MAJOR < 54)} +{$endif} +{$ifndef FF_API_PARSE_FRAME} +{$define FF_API_PARSE_FRAME := (LIBAVCODEC_VERSION_MAJOR < 54)} +{$endif} +{$ifndef FF_API_INTERNAL_CONTEXT} +{$define FF_API_INTERNAL_CONTEXT := (LIBAVCODEC_VERSION_MAJOR < 54)} +{$endif} +{$ifndef FF_API_TIFFENC_COMPLEVEL} +{$define FF_API_TIFFENC_COMPLEVEL := (LIBAVCODEC_VERSION_MAJOR < 54)} +{$endif} +{$ifndef FF_API_DATA_POINTERS} +{$define FF_API_DATA_POINTERS := (LIBAVCODEC_VERSION_MAJOR < 54)} +{$endif} +{$ifndef FF_API_OLD_DECODE_AUDIO} +{$define FF_API_OLD_DECODE_AUDIO := (LIBAVCODEC_VERSION_MAJOR < 55)} +{$endif} +{$ifndef FF_API_OLD_TIMECODE} +{$define FF_API_OLD_TIMECODE := (LIBAVCODEC_VERSION_MAJOR < 54)} +{$endif} + +{$ifndef FF_API_AVFRAME_AGE} +{$define FF_API_AVFRAME_AGE := (LIBAVCODEC_VERSION_MAJOR < 54)} +{$endif} +{$ifndef FF_API_OLD_ENCODE_AUDIO} +{$define FF_API_OLD_ENCODE_AUDIO := (LIBAVCODEC_VERSION_MAJOR < 55)} {$endif} type @@ -260,9 +286,6 @@ type CODEC_ID_QDRAW, CODEC_ID_VIXL, CODEC_ID_QPEG, -{$IF LIBAVCODEC_VERSION_MAJOR < 53} - CODEC_ID_XVID, -{$IFEND} CODEC_ID_PNG, CODEC_ID_PPM, CODEC_ID_PBM, @@ -300,7 +323,9 @@ type CODEC_ID_TIERTEXSEQVIDEO, CODEC_ID_TIFF, CODEC_ID_GIF, +{$IFDEF LIBAVCODEC_VERSION_MAJOR == 53} CODEC_ID_FFH264, +{$ENDIF} CODEC_ID_DXA, CODEC_ID_DNXHD, CODEC_ID_THP, @@ -318,8 +343,10 @@ type CODEC_ID_INDEO5, CODEC_ID_MIMIC, CODEC_ID_RL2, +{$IF LIBAVCODEC_VERSION_MAJOR = 53} CODEC_ID_8SVX_EXP, CODEC_ID_8SVX_FIB, +{$ENDIF} CODEC_ID_ESCAPE124, CODEC_ID_DIRAC, CODEC_ID_BFI, @@ -356,10 +383,22 @@ type CODEC_ID_PRORES, CODEC_ID_JV, CODEC_ID_DFA, - CODEC_ID_8SVX_RAW, - + CODEC_ID_WMV3IMAGE, + CODEC_ID_VC1IMAGE, +{$IF LIBAVCODEC_VERSION_MAJOR = 53} + CODEC_ID_G723_1_DEPRECATED, + CODEC_ID_G729_DEPRECATED, +{$ENDIF} + CODEC_ID_UTVIDEO_DEPRECATED, + CODEC_ID_BMV_VIDEO, + CODEC_ID_VBLE, + CODEC_ID_DXTORY, + CODEC_ID_V410, + CODEC_ID_XWD, + CODEC_ID_UTVIDEO = $0800, + //* various PCM "codecs" */ - CODEC_ID_PCM_S16LE= $10000, + CODEC_ID_PCM_S16LE = $10000, CODEC_ID_PCM_S16BE, CODEC_ID_PCM_U16LE, CODEC_ID_PCM_U16BE, @@ -386,9 +425,10 @@ type CODEC_ID_PCM_BLURAY, CODEC_ID_PCM_LXF, CODEC_ID_S302M, + CODEC_ID_PCM_S8_PLANAR, //* various ADPCM codecs */ - CODEC_ID_ADPCM_IMA_QT= $11000, + CODEC_ID_ADPCM_IMA_QT = $11000, CODEC_ID_ADPCM_IMA_WAV, CODEC_ID_ADPCM_IMA_DK3, CODEC_ID_ADPCM_IMA_DK4, @@ -417,23 +457,24 @@ type CODEC_ID_ADPCM_EA_MAXIS_XA, CODEC_ID_ADPCM_IMA_ISS, CODEC_ID_ADPCM_G722, + CODEC_ID_ADPCM_IMA_APC, //* AMR */ - CODEC_ID_AMR_NB= $12000, + CODEC_ID_AMR_NB = $12000, CODEC_ID_AMR_WB, //* RealAudio codecs*/ - CODEC_ID_RA_144= $13000, + CODEC_ID_RA_144 = $13000, CODEC_ID_RA_288, //* various DPCM codecs */ - CODEC_ID_ROQ_DPCM= $14000, + CODEC_ID_ROQ_DPCM = $14000, CODEC_ID_INTERPLAY_DPCM, CODEC_ID_XAN_DPCM, CODEC_ID_SOL_DPCM, //* audio codecs */ - CODEC_ID_MP2= $15000, + CODEC_ID_MP2 = $15000, CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 CODEC_ID_AAC, CODEC_ID_AC3, @@ -445,8 +486,10 @@ type CODEC_ID_MACE3, CODEC_ID_MACE6, CODEC_ID_VMDAUDIO, +{$IF LIBAVCODEC_VERSION_MAJOR = 53} CODEC_ID_SONIC, CODEC_ID_SONIC_LS, +{$ENDIF} CODEC_ID_FLAC, CODEC_ID_MP3ADU, CODEC_ID_MP3ON4, @@ -488,9 +531,18 @@ type CODEC_ID_AAC_LATM, CODEC_ID_QDMC, CODEC_ID_CELT, - +//{$IF LIBAVCODEC_VERSION_MAJOR = 53} +// CODEC_ID_G723_1_DEPRECATED, +// CODEC_ID_G729_DEPRECATED, +// CODEC_ID_8SVX_EXP, +// CODEC_ID_8SVX_FIB, +//{$ENDIF} + CODEC_ID_BMV_AUDIO, + CODEC_ID_G729 = $15800, + CODEC_ID_G723_1= $15801, + //* subtitle codecs */ - CODEC_ID_DVD_SUBTITLE= $17000, + CODEC_ID_DVD_SUBTITLE = $17000, CODEC_ID_DVB_SUBTITLE, CODEC_ID_TEXT, ///< raw UTF-8 text CODEC_ID_XSUB, @@ -499,16 +551,30 @@ type CODEC_ID_HDMV_PGS_SUBTITLE, CODEC_ID_DVB_TELETEXT, CODEC_ID_SRT, - CODEC_ID_MICRODVD, //* other specific kind of codecs (generally used for attachments) */ - CODEC_ID_TTF= $18000, - - CODEC_ID_PROBE= $19000, ///< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it + CODEC_ID_TTF = $18000, + + CODEC_ID_PROBE = $19000, ///< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it - CODEC_ID_MPEG2TS= $20000, (**< _FAKE_ codec to indicate a raw MPEG-2 TS + CODEC_ID_MPEG2TS = $20000, (**< _FAKE_ codec to indicate a raw MPEG-2 TS * stream (only used by libavformat) *) - CODEC_ID_FFMETADATA= $21000 ///< Dummy codec for streams containing only metadata information. + CODEC_ID_MPEG4SYSTEMS = $20001, (**< _FAKE_ codec to indicate a MPEG-4 Systems + * stream (only used by libavformat) *) + CODEC_ID_FFMETADATA = $21000, ///< Dummy codec for streams containing only metadata information. + + CODEC_ID_G2M = $0047324D, + CODEC_ID_IDF = $00494446, + CODEC_ID_8SVX_RAW = $38535658, + CODEC_ID_AVRP = $41565250, + CODEC_ID_BINTEXT = $42545854, + CODEC_ID_ESCAPE130 = $45313330, + CODEC_ID_FFWAVESYNTH = $46465753, + CODEC_ID_V308 = $56333038, + CODEC_ID_XBIN = $5842494E, + CODEC_ID_Y41P = $59343150, + CODEC_ID_YUV4 = $59555634, + CODEC_ID_MICRODVD = $6D445644 ); type @@ -523,7 +589,7 @@ const CODEC_TYPE_ATTACHMENT = AVMEDIA_TYPE_ATTACHMENT; CODEC_TYPE_NB = AVMEDIA_TYPE_NB; -{$IF FF_API_OLD_AUDIOCONVERT} +{$IFDEF FF_API_OLD_AUDIOCONVERT} {$I libavcodec/audioconvert.pas} @@ -574,8 +640,10 @@ const CH_LAYOUT_STEREO_DOWNMIX = AV_CH_LAYOUT_STEREO_DOWNMIX; {$IFEND} +{$IFDEF FF_API_OLD_DECODE_AUDIO} {* in bytes *} AVCODEC_MAX_AUDIO_FRAME_SIZE = 192000; // 1 second of 48khz 32bit audio +{$ENDIF} {** * Required number of additionally allocated bytes at the end of the input bitstream for decoding. @@ -584,7 +652,7 @@ const * Note: If the first 23 bits of the additional bytes are not 0, then damaged * MPEG bitstreams could cause overread and segfault. *} - FF_INPUT_BUFFER_PADDING_SIZE = 8; + FF_INPUT_BUFFER_PADDING_SIZE = 16; {** * minimum encoding buffer size. @@ -637,6 +705,7 @@ type AVCOL_TRC_UNSPECIFIED = 2, AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG + AVCOL_SPC_SMPTE240M = 7, AVCOL_TRC_NB ///< Not part of ABI ); @@ -647,7 +716,8 @@ type AVCOL_SPC_FCC = 4, AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above - AVCOL_SPC_SMPTE240M = 7, + AVCOL_SPC_SMPTE240M_ = 7, + AVCOL_SPC_YCGCO = 8, AVCOL_SPC_NB ///< Not part of ABI ); @@ -674,7 +744,7 @@ type AVCHROMA_LOC_NB ///< Not part of ABI ); -{$IF FF_API_FLAC_GLOBAL_OPTS} +{$IFDEF FF_API_FLAC_GLOBAL_OPTS} (** * LPC analysis type *) @@ -759,6 +829,30 @@ const CODEC_FLAG2_STRICT_GOP = $00000002; ///< strictly enforce GOP size CODEC_FLAG2_NO_OUTPUT = $00000004; ///< skip bitstream encoding CODEC_FLAG2_LOCAL_HEADER = $00000008; ///< place global headers at every keyframe instead of in extradata + CODEC_FLAG2_SKIP_RD = $00004000; ///< RD optimal MB level residual skipping + CODEC_FLAG2_CHUNKS = $00008000; ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries. + CODEC_FLAG2_SHOW_ALL = $00400000; ///< Show all frames before the first keyframe +(** + * @defgroup deprecated_flags Deprecated codec flags + * Use corresponding private codec options instead. + * @{ + *) +{$IFDEF FF_API_MPEGVIDEO_GLOBAL_OPTS} + CODEC_FLAG_OBMC = $00000001; ///< OBMC + CODEC_FLAG_H263P_AIV = $00000008; ///< H.263 alternative inter VLC + CODEC_FLAG_PART 0x0080 ///< Use data partitioning. + CODEC_FLAG_ALT_SCAN = $00100000; ///< Use alternate scan. + CODEC_FLAG_H263P_UMV = $02000000; ///< unlimited motion vector + CODEC_FLAG_H263P_SLICE_STRUCT = $10000000; + CODEC_FLAG_SVCD_SCAN_OFFSET = $40000000; ///< Will reserve space for SVCD scan offset user data. + CODEC_FLAG2_INTRA_VLC = $00000800; ///< Use MPEG-2 intra VLC table. + CODEC_FLAG2_DROP_FRAME_TIMECODE = $00002000; ///< timecode is in drop frame format. + CODEC_FLAG2_NON_LINEAR_QUANT = $00010000; ///< Use MPEG-2 nonlinear quantizer. +{$ENDIF} +{$IFDEF FF_API_MJPEG_GLOBAL_OPTS} + CODEC_FLAG_EXTERN_HUFF = $1000; ///< Use external Huffman table (for MJPEG). +{$ENDIF} +{$IFDEF FF_API_X264_GLOBAL_OPTS} CODEC_FLAG2_BPYRAMID = $00000010; ///< H.264 allow b-frames to be used as references CODEC_FLAG2_WPRED = $00000020; ///< H.264 weighted biprediction for b-frames CODEC_FLAG2_MIXED_REFS = $00000040; ///< H.264 multiple references per partition @@ -766,18 +860,21 @@ const CODEC_FLAG2_FASTPSKIP = $00000100; ///< H.264 fast pskip CODEC_FLAG2_AUD = $00000200; ///< H.264 access unit delimiters CODEC_FLAG2_BRDO = $00000400; ///< b-frame rate-distortion optimization - CODEC_FLAG2_INTRA_VLC = $00000800; ///< use MPEG-2 intra VLC table - CODEC_FLAG2_MEMC_ONLY = $00001000; ///< only do ME/MC (I frames -> ref, P frame -> ME+MC) - CODEC_FLAG2_DROP_FRAME_TIMECODE = $00002000; ///< timecode is in drop frame format. - CODEC_FLAG2_SKIP_RD = $00004000; ///< RD optimal MB level residual skipping - CODEC_FLAG2_CHUNKS = $00008000; ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries. - CODEC_FLAG2_NON_LINEAR_QUANT = $00010000; ///< Use MPEG-2 nonlinear quantizer. - CODEC_FLAG2_BIT_RESERVOIR = $00020000; ///< Use a bit reservoir when encoding if possible CODEC_FLAG2_MBTREE = $00040000; ///< Use macroblock tree ratecontrol (x264 only) CODEC_FLAG2_PSY = $00080000; ///< Use psycho visual optimizations. CODEC_FLAG2_SSIM = $00100000; ///< Compute SSIM during encoding, error[] values are undefined. CODEC_FLAG2_INTRA_REFRESH = $00200000; ///< Use periodic insertion of intra blocks instead of keyframes. - +{$ENDIF} +{$IFDEF FF_API_SNOW_GLOBAL_OPTS} + CODEC_FLAG2_MEMC_ONLY = $00001000 ///< Only do ME/MC (I frames -> ref, P frame -> ME+MC). +{$ENDIF} +{$IFDEF FF_API_LAME_GLOBAL_OPTS} + CODEC_FLAG2_BIT_RESERVOIR = $00020000 ///< Use a bit reservoir when encoding if possible +{$ENDIF} +(** + * @} + *) + (* Unsupported options : * Syntax Arithmetic coding (SAC) * Reference Picture Selection @@ -793,17 +890,38 @@ const * assume the buffer was allocated by avcodec_default_get_buffer. *) CODEC_CAP_DR1 = $0002; +{$IFDEF FF_API_PARSE_FRAME} (* if 'parse_only' field is true, then avcodec_parse_frame() can be used *) CODEC_CAP_PARSE_ONLY = $0004; +{$ENDIF} CODEC_CAP_TRUNCATED = $0008; (* codec can export data for HW decoding (XvMC) *) CODEC_CAP_HWACCEL = $0010; - (** - * codec has a non zero delay and needs to be feeded with NULL at the end to get the delayed data. - * if this is not set, the codec is guranteed to never be feeded with NULL data - *) +(** + * 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. + *) CODEC_CAP_DELAY = $0020; (** @@ -857,6 +975,18 @@ const CODEC_CAP_SLICE_THREADS = $2000; (** + * Codec supports changed parameters at any point. + *) + CODEC_CAP_PARAM_CHANGE = $4000; + (** + * Codec supports avctx->thread_count == 0 (auto). + *) + CODEC_CAP_AUTO_THREADS = $8000; + (** + * Audio encoder supports receiving a different number of samples in each call. + *) + CODEC_CAP_VARIABLE_FRAME_SIZE = $10000; + (** * Codec is lossless. *) CODEC_CAP_LOSSLESS = $80000000; @@ -921,7 +1051,7 @@ const FF_BUFFER_TYPE_SHARED = 4; ///< buffer from somewhere else, don't dealloc image (data/base), all other tables are not shared FF_BUFFER_TYPE_COPY = 8; ///< just a (modified) copy of some other buffer, don't dealloc anything. -{$IF FF_API_OLD_FF_PICT_TYPES} +{$IFDEF FF_API_OLD_FF_PICT_TYPES} (* DEPRECATED, directly use the AV_PICTURE_TYPE_* enum values *) FF_I_TYPE = 1; ///< Intra FF_P_TYPE = 2; ///< Predicted @@ -962,9 +1092,6 @@ const FF_COMPLIANCE_VERY_STRICT = 2; ///< strictly conform to an older more strict version of the spec or reference software FF_COMPLIANCE_STRICT = 1; ///< strictly conform to all the things in the spec no matter what consequences FF_COMPLIANCE_NORMAL = 0; -{$IF FF_API_INOFFICIAL} - FF_COMPLIANCE_INOFFICIAL = -1; ///< Allow inofficial extensions -{$IFEND} FF_COMPLIANCE_UNOFFICIAL = -1; ///< Allow unofficial extensions FF_COMPLIANCE_EXPERIMENTAL = -2; ///< Allow nonstandardized experimental things. @@ -972,6 +1099,7 @@ const FF_ER_COMPLIANT = 2; FF_ER_AGGRESSIVE = 3; FF_ER_VERY_AGGRESSIVE = 4; + FF_ER_EXPLODE = 5; FF_DCT_AUTO = 0; FF_DCT_FASTINT = 1; @@ -1010,25 +1138,6 @@ const FF_EC_GUESS_MVS = 1; FF_EC_DEBLOCK = 2; -{$IF FF_API_MM_FLAGS} - FF_MM_FORCE = AV_CPU_FLAG_FORCE; - FF_MM_MMX = AV_CPU_FLAG_MMX; - FF_MM_3DNOW = AV_CPU_FLAG_3DNOW; - FF_MM_MMXEXT = AV_CPU_FLAG_MMX2; - FF_MM_MMX2 = AV_CPU_FLAG_MMX2; - FF_MM_SSE = AV_CPU_FLAG_SSE; - FF_MM_SSE2 = AV_CPU_FLAG_SSE2; - FF_MM_SSE2SLOW = AV_CPU_FLAG_SSE2SLOW; - FF_MM_3DNOWEXT = AV_CPU_FLAG_3DNOWEXT; - FF_MM_SSE3 = AV_CPU_FLAG_SSE3; - FF_MM_SSE3SLOW = AV_CPU_FLAG_SSE3SLOW; - FF_MM_SSSE3 = AV_CPU_FLAG_SSSE3; - FF_MM_SSE4 = AV_CPU_FLAG_SSE4; - FF_MM_SSE42 = AV_CPU_FLAG_SSE42; - FF_MM_IWMMXT = AV_CPU_FLAG_IWMMXT; - FF_MM_ALTIVEC = AV_CPU_FLAG_ALTIVEC; -{$IFEND} - FF_PRED_LEFT = 0; FF_PRED_PLANE = 1; FF_PRED_MEDIAN = 2; @@ -1095,7 +1204,7 @@ const FF_MB_DECISION_BITS = 1; ///< chooses the one which needs the fewest bits FF_MB_DECISION_RD = 2; ///< rate distortion -{$IF FF_API_ANTIALIAS_ALGO} +{$IFDEF FF_API_ANTIALIAS_ALGO} FF_AA_AUTO = 0; FF_AA_FASTINT = 1; //not implemented yet FF_AA_INT = 2; @@ -1141,6 +1250,23 @@ const FF_PROFILE_VC1_COMPLEX = 2; FF_PROFILE_VC1_ADVANCED = 3; + FF_PROFILE_MPEG4_SIMPLE = 0; + FF_PROFILE_MPEG4_SIMPLE_SCALABLE = 1; + FF_PROFILE_MPEG4_CORE = 2; + FF_PROFILE_MPEG4_MAIN = 3; + FF_PROFILE_MPEG4_N_BIT = 4; + FF_PROFILE_MPEG4_SCALABLE_TEXTURE = 5; + FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION = 6; + FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE = 7; + FF_PROFILE_MPEG4_HYBRID = 8; + FF_PROFILE_MPEG4_ADVANCED_REAL_TIME = 9; + FF_PROFILE_MPEG4_CORE_SCALABLE = 10; + FF_PROFILE_MPEG4_ADVANCED_CODING = 11; + FF_PROFILE_MPEG4_ADVANCED_CORE = 12; + FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE = 13; + FF_PROFILE_MPEG4_SIMPLE_STUDIO = 14; + FF_PROFILE_MPEG4_ADVANCED_SIMPLE = 15; + FF_LEVEL_UNKNOWN = -99; X264_PART_I4X4 = $001; (* Analyse i4x4 *) @@ -1151,13 +1277,35 @@ const FF_COMPRESSION_DEFAULT = -1; - FF_THREAD_FRAME = 1; //< Decode more than one frame at once - FF_THREAD_SLICE = 2; //< Decode more than one part of a single frame at once + FF_THREAD_FRAME = 1; ///< Decode more than one frame at once + FF_THREAD_SLICE = 2; ///< Decode more than one part of a single frame at once + + AV_EF_CRCCHECK = 1; + AV_EF_BITSTREAM = 2; + AV_EF_BUFFER = 4; + AV_EF_EXPLODE = 8; + + AV_EF_CAREFUL = 65536; + AV_EF_COMPLIANT = 131072; + AV_EF_AGGRESSIVE = 262144; AVPALETTE_SIZE = 1024; AVPALETTE_COUNT = 256; type + AVPacketSideDataType = ( + AV_PKT_DATA_PALETTE, + AV_PKT_DATA_NEW_EXTRADATA, + AV_PKT_DATA_PARAM_CHANGE + ); + + TAVPacketSideDataType = record + data: PByte; + size: cint; + type_: AVPacketSideDataType; + end; + PAVPacketSideDataType = ^TAVPacketSideDataType; + PAVPacket = ^TAVPacket; TAVPacket = record (* @@ -1179,7 +1327,16 @@ type data: PByteArray; size: cint; stream_index: cint; + (** + * A combination of AV_PKT_FLAG values + *) flags: cint; + (** + * Additional packet data that can be provided by the container. + * Packet can contain several types of side information. + *) + side_data: PAVPacketSideDataType; + side_data_elems: cint; (* * Duration of this packet in AVStream->time_base units, 0 if unknown. * Equals next_pts - this_pts in presentation order. @@ -1209,40 +1366,67 @@ type end; {TAVPacket} const - AV_PKT_FLAG_KEY = $0001; -{$IF LIBAVCODEC_VERSION_MAJOR < 53} - PKT_FLAG_KEY = AV_PKT_FLAG_KEY; -{$IFEND} - + AV_PKT_FLAG_KEY = $0001; ///< The packet contains a keyframe + AV_PKT_FLAG_CORRUPT = $0002; ///< The packet content is corrupted + +{$IFDEF FF_API_DATA_POINTERS} + AV_NUM_DATA_POINTERS = 4; +{$ELSE} + AV_NUM_DATA_POINTERS = 8; +{$ENDIF} + +(** + * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: + * 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 + *) + +type + AVSideDataParamChangeFlags = ( + AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = $0001, + AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = $0002, + AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = $0004, + AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = $0008 + ); + type PAVCodecContext = ^TAVCodecContext; (** * Audio Video Frame. - * New fields can be added to the end of FF_COMMON_FRAME with minor version - * bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. No fields should be added into AVFrame before or after - * FF_COMMON_FRAME! - * sizeof(AVFrame) must not be used outside libav*. - *) + * New fields can be added to the end of AVFRAME with minor version + * bumps. Similarly fields that are marked as to be only accessed by + * av_opt_ptr() can be reordered. This allows 2 forks to add fields + * without breaking compatibility with each other. + * Removal, reordering and changes in the remaining cases require + * a major version bump. + * sizeof(AVFrame) must not be used outside libavcodec. + x *) PAVFrame = ^TAVFrame; TAVFrame = record (** - * pointer to the picture planes. + * pointer to the picture/channel planes. * This might be different from the first allocated byte - * - encoding: - * - decoding: + * - encoding: Set by user + * - decoding: set by AVCodecContext.get_buffer() *) - data: array [0..3] of pbyte; - linesize: array [0..3] of cint; + data: array [0..AV_NUM_DATA_POINTERS - 1] of pbyte; + linesize: array [0..AV_NUM_DATA_POINTERS - 1] of cint; (** * pointer to the first allocated byte of the picture. Can be used in get_buffer/release_buffer. * This isn't used by libavcodec unless the default get/release_buffer() is used. * - encoding: * - decoding: *) - base: array [0..3] of pbyte; + base: array [0..AV_NUM_DATA_POINTERS - 1] of pbyte; (** * 1 -> keyframe, 0-> not * - encoding: Set by libavcodec. @@ -1282,13 +1466,12 @@ type *) quality: cint; +{$IFDEF FF_API_AVFRAME_AGE} (** - * buffer age (1->was last buffer and dint change, 2->..., ...). - * Set to INT_MAX if the buffer has not been used yet. - * - encoding: unused - * - decoding: MUST be set by get_buffer(). + * @deprecated unused *) age: cint; +{$ENDIF} (** * is this picture used as reference @@ -1365,7 +1548,7 @@ type * - encoding: Set by libavcodec. if flags&CODEC_FLAG_PSNR. * - decoding: unused *) - error: array [0..3] of cuint64; + error: array [0..AV_NUM_DATA_POINTERS - 1] of cuint64; (** * type of the buffer (to keep track of who has to deallocate data[*]) @@ -1463,56 +1646,69 @@ type * - encoding: unused * - decoding: Read by user. *) - pkt_pts: cint64; + pkt_pts: cint64; (** * dts from the last AVPacket that has been input into the decoder * - encoding: unused * - decoding: Read by user. *) - pkt_dts: cint64; + pkt_dts: cint64; (** * the AVCodecContext which ff_thread_get_buffer() was last called on * - encoding: Set by libavcodec. * - decoding: Set by libavcodec. *) - owner: PAVCodecContext; + owner: PAVCodecContext; (** * used by multithreading to store frame-specific info * - encoding: Set by libavcodec. * - decoding: Set by libavcodec. *) - thread_opaque: pointer; + thread_opaque: pointer; (** - * frame timestamp estimated using various heuristics, in stream time base + * number of audio samples (per channel) described by this frame * - encoding: unused - * - decoding: set by libavcodec, read by user. + * - decoding: Set by libavcodec *) - best_effort_timestamp: cint64; + nb_samples: cint; (** - * reordered pos from the last AVPacket that has been input into the decoder - * - encoding: unused - * - decoding: Read by user. + * pointers to the data planes/channels. + * + * For video, this should simply point to data[]. + * + * For planar audio, each channel has a separate data pointer, and + * linesize[0] contains the size of each channel buffer. + * For packed audio, there is just one data pointer, and linesize[0] + * contains the total size of the buffer for all channels. + * + * Note: Both data and extended_data will always be set by get_buffer(), + * but for planar audio with more channels that can fit in data, + * extended_data must be used by the decoder in order to access all + * channels. + * + * encoding: unused + * decoding: set by AVCodecContext.get_buffer() *) - pkt_pos: cint64; + extended_data: PPointer; (** * reordered sample aspect ratio for the video frame, 0/1 if unknown\unspecified * - encoding: unused * - decoding: Read by user. *) - sample_aspect_ratio: TAVRational; + sample_aspect_ratio: TAVRational; (** * width and height of the video frame * - encoding: unused * - decoding: Read by user. *) - width, height: cint; + width, height: cint; (** * format of the frame, -1 if unknown or unset @@ -1521,7 +1717,21 @@ type * - encoding: unused * - decoding: Read by user. *) - format: cint; + format: cint; + + (** + * frame timestamp estimated using various heuristics, in stream time base + * - encoding: unused + * - decoding: set by libavcodec, read by user. + *) + best_effort_timestamp: cint64; + + (** + * reordered pos from the last AVPacket that has been input into the decoder + * - encoding: unused + * - decoding: Read by user. + *) + pkt_pos: cint64; end; {TAVFrame} PAVClass = ^TAVClass; @@ -1531,14 +1741,14 @@ type PAVHWAccel = ^TAVHWAccel; // int[4] - PQuadIntArray = ^TQuadIntArray; - TQuadIntArray = array [0..3] of cint; + PAVNDPArray = ^TAVNDPArray; + TAVNDPArray = array [0..AV_NUM_DATA_POINTERS - 1] of cint; // int (*func)(struct AVCodecContext *c2, void *arg) TExecuteFunc = function(c2: PAVCodecContext; arg: Pointer): cint; cdecl; // int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr) TExecute2Func = function(c2: PAVCodecContext; arg: Pointer; jobnr: cint; threadnr: cint): cint; cdecl; -{$IF FF_API_PALETTE_CONTROL} +{$IFDEF FF_API_PALETTE_CONTROL} (** * AVPaletteControl * This structure defines a method for communicating palette changes @@ -1561,17 +1771,28 @@ type end; {deprecated;} {$IFEND} + 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 + ); + (** * main external API structure. * New fields can be added to the end with minor version bumps. * Removal, reordering and changes to existing fields require a major * version bump. + * Please use AVOptions (av_opt* / av_set/get*()) to access these fields from user + * applications. * sizeof(AVCodecContext) must not be used outside libav*. *) TAVCodecContext = record {720} (** * information on struct for av_log - * - set by avcodec_alloc_context + * - set by avcodec_alloc_context3 *) av_class: PAVClass; (** @@ -1600,7 +1821,7 @@ type * Some codecs need additional format info. It is stored here. * If any muxer uses this then ALL demuxers/parsers AND encoders for the * specific codec MUST set it correctly otherwise stream copy breaks. - * In general use of this field by muxers is not recommanded. + * In general use of this field by muxers is not recommended. * - encoding: Set by libavcodec. * - decoding: Set by libavcodec. (FIXME: Is this OK?) *) @@ -1665,16 +1886,6 @@ type *) pix_fmt: TAVPixelFormat; -{$IF FF_API_RATE_EMU} - (** - * Frame rate emulation. If not zero, the lower layer (i.e. format handler) - * has to read frames at native frame rate. - * - encoding: Set by user. - * - decoding: unused - *) - rate_emu: cint; -{$IFEND} - (** * If non NULL, 'draw_horiz_band' is called by the libavcodec * decoder to draw a horizontal band. It improves cache usage. Not @@ -1695,7 +1906,7 @@ type * @param offset offset into the AVFrame.data from which the slice should be read *) draw_horiz_band: procedure (s: PAVCodecContext; - src: {const} PAVFrame; offset: PQuadIntArray; + src: {const} PAVFrame; offset: PAVNDPArray; y: cint; type_: cint; height: cint); cdecl; (* audio only *) @@ -1715,15 +1926,12 @@ type *) frame_size: cint; frame_number: cint; ///< audio or video frame number -{$IF LIBAVCODEC_MAX_VERSION_MAJOR < 53} - real_pict_num: cint; ///< returns the real picture number of previous encoded frame -{$IFEND} (** * Number of frames the decoded output will be delayed relative to * the encoded input. * - encoding: Set by libavcodec. - * - decoding: unused + * - decoding: Set by libavcodec. *) delay: cint; @@ -1774,16 +1982,6 @@ type b_frame_strategy: cint; -{$IF FF_API_HURRY_UP} - (** - * hurry up amount - * - encoding: unused - * - decoding: Set by user. 1-> Skip B-frames, 2-> Skip IDCT/dequant too, 5-> Skip everything except header - * @deprecated Deprecated in favor of skip_idct and skip_frame. - *) - hurry_up: cint; -{$IFEND} - codec: PAVCodec; priv_data: pointer; @@ -1839,7 +2037,7 @@ type * 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 then 32 bits then the demuxer should + * 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. @@ -1890,6 +2088,7 @@ type *) b_quant_offset: cfloat; +{$IFDEF FF_API_ER} (** * Error recognization; higher values will detect more errors but may * misdetect some more or less valid parts as errors. @@ -1897,15 +2096,59 @@ type * - decoding: Set by user. *) error_recognition: cint; +{$ENDIF} (** * Called at the beginning of each frame to get a buffer for it. - * If pic.reference is set then the frame will be read 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. + * + * The function will set AVFrame.data[], AVFrame.linesize[]. + * AVFrame.extended_data[] must also be set, but it should be the same as + * AVFrame.data[] except for planar audio with more channels than can fit + * in AVFrame.data[]. In that case, AVFrame.data[] shall still contain as + * many data pointers as it can hold. + * * if CODEC_CAP_DR1 is not set then get_buffer() must call * avcodec_default_get_buffer() instead of providing buffers allocated by * some other means. + * + * AVFrame.data[] should be 32- or 16-byte-aligned unless the CPU doesn't + * need it. avcodec_default_get_buffer() aligns the output buffer properly, + * but if get_buffer() is overridden then alignment considerations should + * be taken into account. + * + * @see avcodec_default_get_buffer() + * + * Video: + * + * If pic.reference is set then the frame will be read 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. + * + * it may be called from a different thread, but not from more than one at + * once. Does not need to be reentrant. + * + * @see release_buffer(), reget_buffer() + * @see avcodec_align_dimensions2() + * + * Audio: + * + * Decoders request a buffer of a particular size by setting + * AVFrame.nb_samples prior to calling get_buffer(). The decoder may, + * however, utilize only part of the buffer by setting AVFrame.nb_samples + * to a smaller value in the output frame. + * + * Decoders cannot use the buffer after returning from + * avcodec_decode_audio4(), so they will not call release_buffer(), as it + * is assumed to be released immediately upon return. + * + * As a convenience, av_samples_get_buffer_size() and + * av_samples_fill_arrays() in libavutil may be used by custom get_buffer() + * 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. *) @@ -1934,9 +2177,15 @@ type *) block_align: cint; - parse_only: cint; (* - decoding only: if true, only parsing is done - (function avcodec_parse_frame()). The frame - data is returned. Only MPEG codecs support this now. *) +{$IFDEF FF_API_PARSE_FRAME} + (** + * If true, only parsing is done. The frame data is returned. + * Only MPEG audio decoders support this now. + * - encoding: unused + * - decoding: Set by user + *) + parse_only: cint; {deprecated} +{$ENDIF} (** * 0-> h263 quant 1-> mpeg quant @@ -2116,7 +2365,7 @@ type * - encoding: Set by libavcodec. * - decoding: Set by user. *) - bits_per_coded_sample: cint; + bits_per_coded_sample: cint; (** * prediction method (needed for huffyuv) @@ -2160,23 +2409,7 @@ type * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR. * - decoding: unused *) - error: array [0..3] of cuint64; - -{$IF FF_API_MB_Q} - (** - * minimum MB quantizer - * - encoding: unused - * - decoding: unused - *) - mb_qmin: cint; {deprecated} - - (** - * maximum MB quantizer - * - encoding: unused - * - decoding: unused - *) - mb_qmax: cint; {deprecated} -{$IFEND} + error: array [0..AV_NUM_DATA_POINTERS - 1] of cuint64; (** * motion estimation comparison function @@ -2298,17 +2531,21 @@ type *) color_table_id: cint; +{$IFDEF FF_API_INTERNAL_CONTEXT} (** * internal_buffer count * Don't touch, used by libavcodec default_get_buffer(). + * @deprecated this field was moved to an internal context *) internal_buffer_count: cint; (** * internal_buffers * Don't touch, used by libavcodec default_get_buffer(). + * @deprecated this field was moved to an internal context *) internal_buffer: pointer; +{$ENDIF} (** * Global quality for codecs which cannot change it per frame. @@ -2332,14 +2569,12 @@ type *) context_model: cint; - { (** * * - encoding: unused * - decoding: Set by user. *) - realloc: function (s: PAVCodecContext; buf: Pbyte; buf_size: cint): Pbyte; cdecl; - } +// realloc: function (s: PAVCodecContext; buf: Pbyte; buf_size: cint): Pbyte; cdecl; (** * slice flags @@ -2382,7 +2617,7 @@ type * - encoding: unused * - decoding: Set by user, will be converted to uppercase by libavcodec during init. *) - stream_codec_tag: array [0..3] of AnsiChar; //cuint; + stream_codec_tag: cuint; (** * scene change detection threshold @@ -2406,7 +2641,7 @@ type *) lmax: cint; -{$IF FF_API_PALETTE_CONTROL} +{$IFDEF FF_API_PALETTE_CONTROL} (** * palette control structure * - encoding: ??? (no palette-enabled encoder yet) @@ -2464,7 +2699,7 @@ type *) error_rate: cint; -{$IF FF_API_ANTIALIAS_ALGO} +{$IFDEF FF_API_ANTIALIAS_ALGO} (** * MP3 antialias algorithm, see FF_AA_* below. * - encoding: unused @@ -2528,53 +2763,52 @@ type * - encoding: Set by user. * - decoding: unused *) - intra_dc_precision: cint; + intra_dc_precision: cint; (** * noise vs. sse weight for the nsse comparsion function * - encoding: Set by user. * - decoding: unused *) - nsse_weight: cint; + nsse_weight: cint; (** * Number of macroblock rows at the top which are skipped. * - encoding: unused * - decoding: Set by user. *) - skip_top: cint; + skip_top: cint; (** * Number of macroblock rows at the bottom which are skipped. * - encoding: unused * - decoding: Set by user. *) - skip_bottom: cint; + skip_bottom: cint; (** * profile * - encoding: Set by user. * - decoding: Set by libavcodec. *) - profile: cint; + profile: cint; (** * level * - encoding: Set by user. * - decoding: Set by libavcodec. *) - level: cint; + level: cint; (** * low resolution decoding, 1-> 1/2 size, 2->1/4 size * - encoding: unused * - decoding: Set by user. *) - lowres: cint; + lowres: cint; (** - * Bitstream width / height, may be different from width/height if lowres - * or other things are used. + * Bitstream width / height, may be different from width/height if lowres enabled. * - encoding: unused * - decoding: Set by user before init if known. Codec should override / dynamically change if needed. *) @@ -2672,10 +2906,12 @@ type *) brd_scale: cint; +{$IFDEF FF_API_X264_GLOBAL_OPTS} (** * constant rate factor - quality-based VBR - values ~correspond to qps * - encoding: Set by user. * - decoding: unused + * @deprecated use 'crf' libx264 private option *) crf: cfloat; @@ -2683,8 +2919,10 @@ type * constant quantization parameter rate control method * - encoding: Set by user. * - decoding: unused + * @deprecated use 'cqp' libx264 private option *) cqp: cint; +{$ENDIF} (** * minimum GOP size @@ -2707,12 +2945,14 @@ type *) chromaoffset: cint; +{$IFDEF FF_API_X264_GLOBAL_OPTS} (** * Influences how often B-frames are used. * - encoding: Set by user. * - decoding: unused *) bframebias: cint; +{$ENDIF} (** * trellis RD quantization @@ -2721,6 +2961,7 @@ type *) trellis: cint; +{$IFDEF FF_API_X264_GLOBAL_OPTS} (** * Reduce fluctuations in qp (before curve compression). * - encoding: Set by user. @@ -2757,6 +2998,7 @@ type * - decoding: unused *) directpred: cint; +{$ENDIF} (** * Audio cutoff bandwidth (0 means "automatic") @@ -2781,7 +3023,7 @@ type mv0_threshold: cint; (** - * Adjusts sensitivity of b_frame_strategy 1. + * Adjust sensitivity of b_frame_strategy 1. * - encoding: Set by user. * - decoding: unused *) @@ -2793,36 +3035,32 @@ type *) compression_level: cint; -{$IF FF_API_USE_LPC} (** - * Sets whether to use LPC mode - used by FLAC encoder. * - encoding: Set by user. * - decoding: unused - * @deprecated Deprecated in favor of lpc_type and lpc_passes. *) - use_lpc: cint; + min_prediction_order: cint; (** - * LPC coefficient precision - used by FLAC encoder * - encoding: Set by user. * - decoding: unused *) - lpc_coeff_precision: cint; -{$IFEND} + max_prediction_order: cint; +{$IFDEF FF_API_FLAC_GLOBAL_OPTS} (** - * - encoding: Set by user. - * - decoding: unused + * @name FLAC options + * @deprecated Use FLAC encoder private options instead. + * @{ *) - min_prediction_order: cint; (** + * LPC coefficient precision - used by FLAC encoder * - encoding: Set by user. * - decoding: unused *) - max_prediction_order: cint; + lpc_coeff_precision: cint; {deprecated} -{$IF FF_API_FLAC_GLOBAL_OPTS} (** * search method for selecting prediction order * - encoding: Set by user. @@ -2850,7 +3088,7 @@ type *) timecode_frame_start: cint64; -{$IF FF_API_REQUEST_CHANNELS} +{$IFDEF FF_API_REQUEST_CHANNELS} (** * Decoder should decode to this many channels if it can (0 for default) * - encoding: unused @@ -2860,13 +3098,15 @@ type request_channels: cint; {$IFEND} +{$IFDEF FF_API_DRC_SCALE} (** * Percentage of dynamic range compression to be applied by the decoder. * The default value is 1.0, corresponding to full compression. * - encoding: unused * - decoding: Set by user. *) - drc_scale: cfloat; + drc_scale: cfloat; {deprecated} +{$ENDIF} (** * opaque 64bit number (generally a PTS) that will be reordered and @@ -2878,7 +3118,6 @@ type (** * Bits per sample/pixel of internal libavcodec pixel/sample format. - * This field is applicable only when sample_fmt is SAMPLE_FMT_S32. * - encoding: set by user. * - decoding: set by libavcodec. *) @@ -2889,14 +3128,14 @@ type * - encoding: set by user. * - decoding: set by libavcodec. *) - channel_layout: cint64; + channel_layout: cuint64; (** * Request decoder to use this channel layout if it can (0 for default) * - encoding: unused * - decoding: Set by user. *) - request_channel_layout: cint64; + request_channel_layout: cuint64; (** * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow. @@ -2995,6 +3234,7 @@ type *) execute2: function (c: PAVCodecContext; func: TExecute2Func; arg2: Pointer; ret: Pcint; count: cint): cint; cdecl; +{$IFDEF FF_API_X264_GLOBAL_OPTS} (** * explicit P-frame weighted prediction analysis method * 0: off @@ -3003,7 +3243,7 @@ type * - encoding: Set by user. * - decoding: unused *) - weighted_p_pred: cint; + weighted_p_pred: cint; {deprecated} (** * AQ mode @@ -3013,7 +3253,7 @@ type * - encoding: Set by user * - decoding: unused *) - aq_mode: cint; + aq_mode: cint; {deprecated} (** * AQ strength @@ -3021,7 +3261,7 @@ type * - encoding: Set by user * - decoding: unused *) - aq_strength: cfloat; + aq_strength: cfloat; {deprecated} (** * PSY RD @@ -3029,7 +3269,7 @@ type * - encoding: Set by user * - decoding: unused *) - psy_rd: cfloat; + psy_rd: cfloat; {deprecated} (** * PSY trellis @@ -3037,7 +3277,7 @@ type * - encoding: Set by user * - decoding: unused *) - psy_trellis: cfloat; + psy_trellis: cfloat; {deprecated} (** * RC lookahead @@ -3045,7 +3285,7 @@ type * - encoding: Set by user * - decoding: unused *) - rc_lookahead: cint; + rc_lookahead: cint; {deprecated} (** * Constant rate factor maximum @@ -3054,13 +3294,14 @@ type * - encoding: Set by user. * - decoding: unused *) - crf_max: cfloat; + crf_max: cfloat; {deprecated} +{$ENDIF} log_level_offset: cint; -{$IF FF_API_FLAC_GLOBAL_OPTS} +{$IFDEF FF_API_FLAC_GLOBAL_OPTS} (** - * Determines which LPC analysis algorithm to use. + * Determine which LPC analysis algorithm to use. * - encoding: Set by user * - decoding: unused *) @@ -3088,8 +3329,8 @@ type * 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_open()) - * - decoding: Set/allocated/freed by libavcodec (by avcodec_open()) + * - encoding: Set/allocated/freed by user (before avcodec_open2()) + * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2()) *) subtitle_header: Pcuint8; subtitle_header_size: cint; @@ -3103,6 +3344,7 @@ type *) pkt: PAVPacket; +{$IFDEF FF_API_INTERNAL_CONTEXT} (** * Whether this is a copy of the context which had init() called on it. * This is used by multithreading - shared tables and picture pointers @@ -3110,7 +3352,8 @@ type * - encoding: Set by libavcodec. * - decoding: Set by libavcodec. *) - is_copy: cint; + is_copy: cint; {deprecated} +{$ENDIF} (** * Which multithreading methods to use. @@ -3163,6 +3406,27 @@ type request_sample_fmt: TAVSampleFormat; (** + * Error recognition; may misdetect some more or less valid parts as errors. + * - encoding: unused + * - decoding: Set by user. + *) + err_recognition: cint; + + (** + * Private context used for internal data. + * + * Unlike priv_data, this is not codec-specific. It is used in general + * libavcodec functions. + *) + internal: pointer; + + (** Field order + * - encoding: set by libavcodec + * - decoding: Set by libavcodec + *) + field_order: AVFieldOrder; + + (** * Current statistics for PTS correction. * - decoding: maintained and used by libavcodec, not intended to be used by user apps * - encoding: unused @@ -3215,13 +3479,13 @@ type long_name: {const} PAnsiChar; supported_samplerates: {const} PCint; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 sample_fmts: {const} PAVSampleFormatArray; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 - channel_layouts: {const} PCint64; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 + channel_layouts: {const} PCuint64; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 max_lowres: byte; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 priv_class: {const} PAVClass; ///< AVClass for the private context profiles: {const} PAVProfile; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} (** - * @defgroup framethreading Frame-level threading support functions. + * @name Frame-level threading support functions * @{ *) (** @@ -3239,6 +3503,29 @@ type *) update_thread_context: function (dst: PAVCodecContext; src: {const} PAVCodecContext): cint; cdecl; (** @} *) + + (** + * Private codec-specific defaults. + *) + defaults: {const} pointer; + + (** + * Initialize codec static data, called from avcodec_register(). + *) + init_static_data: procedure (codec: PAVCodec); cdecl; + + (** + * 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 + *) + encode2: function (avctx: PAVCodecContext; avpkt: PAVPacket; frame: {const} PAVFrame; + got_packet_ptr: Pcint): cint; cdecl; end; {TAVCodec} (** @@ -3341,8 +3628,8 @@ type *) PAVPicture = ^TAVPicture; TAVPicture = record - data: array [0..3] of PByteArray; - linesize: array [0..3] of cint; ///< number of bytes per line + data: array [0..AV_NUM_DATA_POINTERS] of PByteArray; + linesize: array [0..AV_NUM_DATA_POINTERS] of cint; ///< number of bytes per line end; {TAVPicture} TAVSubtitleType = ( @@ -3457,21 +3744,42 @@ function av_dup_packet(pkt: PAVPacket): cint; procedure av_free_packet(pkt: PAVPacket); cdecl; external av__codec; +(** + * Allocate new information of a packet. + * + * @param pkt packet + * @param type side information type + * @param size side information size + * @return pointer to fresh allocated data or NULL otherwise + *) +function av_packet_new_side_data(pkt: PAVPacket; type_: AVPacketSideDataType; + size: cint): PByte; + cdecl; external av__codec; + +(** + * Get side information from packet. + * + * @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 + *) +function av_packet_get_side_data(pkt: PAVPacket; type_: AVPacketSideDataType; + size: Pcint): PByte; + cdecl; external av__codec; + +function av_packet_merge_side_data(pkt: PAVPacket): cint; + cdecl; external av__codec; + +function av_packet_split_side_data(pkt: PAVPacket): cint; + cdecl; external av__codec; + (* resample.c *) type PReSampleContext = pointer; PAVResampleContext = pointer; PImgReSampleContext = pointer; -{$IF FF_API_AUDIO_OLD} -(** - * @deprecated Use av_audio_resample_init() instead. - *) -function audio_resample_init (output_channels: cint; input_channels: cint; - output_rate: cint; input_rate: cint): PReSampleContext; - cdecl; external av__codec; deprecated; -{$IFEND} - (** * Initialize audio resampling context. * @@ -3486,7 +3794,7 @@ function audio_resample_init (output_channels: cint; input_channels: cint; * @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 occured + * @return allocated ReSampleContext, NULL if error occurred *) function av_audio_resample_init(output_channels: cint; input_channels: cint; output_rate: cint; input_rate: cint; @@ -3600,7 +3908,7 @@ function avpicture_fill (picture: PAVPicture; ptr: pcuint8; * The data is stored compactly, without any gaps for alignment or padding * which may be applied by avpicture_fill(). * - * \see avpicture_get_size() + * @see avpicture_get_size() * * @param[in] src AVPicture containing image data * @param[in] pix_fmt The format in which the picture data is stored. @@ -3633,7 +3941,14 @@ function avpicture_get_size (pix_fmt: TAVPixelFormat; width: cint; height: cint) procedure avcodec_get_chroma_sub_sample (pix_fmt: TAVPixelFormat; var h_shift: cint; var v_shift: cint); cdecl; external av__codec; -{$IF FF_API_GET_PIX_FMT_NAME} +(** + * Get the name of a codec. + * @return a static string identifying the codec; never NULL + *) +function avcodec_get_name(id: TCodecID): PAnsiChar; + cdecl; external av__codec; + +{$IFDEF FF_API_GET_PIX_FMT_NAME} (** * Return the short name for a pixel format. * @@ -3647,23 +3962,6 @@ function avcodec_get_pix_fmt_name(pix_fmt: TAVPixelFormat): PAnsiChar; procedure avcodec_set_dimensions(s: PAVCodecContext; width: cint; height: cint); cdecl; external av__codec; -{$IF LIBAVCODEC_MAX_VERSION_MAJOR < 53} -(** - * Return the pixel format corresponding to the name name. - * - * If there is no pixel format with name name, then looks for a - * pixel format with the name corresponding to the native endian - * format of name. - * For example in a little-endian system, first looks for "gray16", - * then for "gray16le". - * - * Finally if no pixel format has been found, returns PIX_FMT_NONE.* - * @deprecated Deprecated in favor of av_get_pix_fmt(). - *) -function avcodec_get_pix_fmt(name: {const} PAnsiChar): TAVPixelFormat; - cdecl; external av__codec; deprecated; -{$IFEND} - (** * Return a value representing the fourCC code associated to the * pixel format pix_fmt, or 0 if no associated fourCC code can be @@ -3705,7 +4003,8 @@ const * @param[in] dst_pix_fmt destination pixel format * @param[in] src_pix_fmt source pixel format * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @return Combination of flags informing you what kind of losses will occur. + * @return Combination of flags informing you what kind of losses will occur + * (maximum loss for an invalid dst_pix_fmt). *) function avcodec_get_pix_fmt_loss (dst_pix_fmt: TAVPixelFormat; src_pix_fmt: TAVPixelFormat; has_alpha: cint): cint; @@ -3721,9 +4020,11 @@ function avcodec_get_pix_fmt_loss (dst_pix_fmt: TAVPixelFormat; src_pix_fmt: TAV * The pixel formats from which it chooses one, are determined by the * pix_fmt_mask parameter. * + * Note, only the first 64 pixel formats will fit in pix_fmt_mask. + * * @code * src_pix_fmt = PIX_FMT_YUV420P; - * pix_fmt_mask = (1 << PIX_FMT_YUV422P) || (1 << PIX_FMT_RGB24); + * pix_fmt_mask = (1 << PIX_FMT_YUV422P) | (1 << PIX_FMT_RGB24); * dst_pix_fmt = avcodec_find_best_pix_fmt(pix_fmt_mask, src_pix_fmt, alpha, &loss); * @endcode * @@ -3745,6 +4046,7 @@ procedure avcodec_pix_fmt_string (buf: PAnsiChar; buf_size: cint; pix_fmt: TAVPi cdecl; external av__codec; deprecated; {$IFEND} +{$IFDEF FF_API_GET_ALPHA_INFO} const FF_ALPHA_TRANSP = $0001; {* image has some totally transparent pixels *} FF_ALPHA_SEMI_TRANSP = $0002; {* image has some transparent pixels *} @@ -3756,8 +4058,9 @@ const function img_get_alpha_info (src: {const} PAVPicture; pix_fmt: TAVPixelFormat; width: cint; - height: cint): cint; + height: cint): cint; {deprecated} cdecl; external av__codec; +{$ENDIF} (* deinterlace a picture *) (* deinterlace - if not supported return -1 *) @@ -3796,29 +4099,22 @@ function avcodec_configuration(): PAnsiChar; function avcodec_license(): PAnsiChar; cdecl; external av__codec; +{$IFDEF FF_API_AVCODEC_INIT} (** - * Initialize libavcodec. - * - * @warning This function must be called before any other libavcodec - * function. - * - * @warning This function is not thread-safe. + * @deprecated this function is called automatically from avcodec_register() + * and avcodec_register_all(), there is no need to call it manually *) procedure avcodec_init(); cdecl; external av__codec; - -{$IF LIBAVCODEC_VERSION_MAJOR < 53} -(** - * @deprecated Deprecated in favor of avcodec_register(). - *) -procedure register_avcodec(codec: PAVCodec); - cdecl; external av__codec; deprecated; {$IFEND} (** * Register the codec codec and initialize libavcodec. * - * @see avcodec_init(), avcodec_register_all() + * @warning either this function or avcodec_register_all() must be called + * before any other libavcodec functions. + * + * @see avcodec_register_all() *) procedure avcodec_register(codec: PAVCodec); cdecl; external av__codec; @@ -3871,24 +4167,35 @@ procedure avcodec_string(buf: PAnsiChar; buf_size: cint; enc: PAVCodecContext; e function av_get_profile_name(codec: {const} PAVCodec; profile: cint): {const} PAnsiChar; cdecl; external av__codec; +{$IFDEF FF_API_ALLOC_CONTEXT} (** * Set the fields of the given AVCodecContext to default values. * * @param s The AVCodecContext of which the fields should be set to default values. + * @deprecated use avcodec_get_context_defaults3 *) -procedure avcodec_get_context_defaults(s: PAVCodecContext); +procedure avcodec_get_context_defaults(s: PAVCodecContext); {deprecated} cdecl; external av__codec; (** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API! * we WILL change its arguments and name a few times! *) -procedure avcodec_get_context_defaults2(s: PAVCodecContext; ctype: TAVMediaType); +procedure avcodec_get_context_defaults2(s: PAVCodecContext; ctype: TAVMediaType); {deprecated} cdecl; external av__codec; +{$ENDIF} -(** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API! - * we WILL change its arguments and name a few times! *) +(** + * Set the fields of the given AVCodecContext to default values corresponding + * to the given codec (defaults may be codec-dependent). + * + * 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. + *) procedure avcodec_get_context_defaults3(s: PAVCodecContext; codec: PAVCodec); cdecl; external av__codec; +{$IFDEF FF_API_ALLOC_CONTEXT} (** * Allocate an AVCodecContext and sets it fields to default values. The * resulting struct can be deallocated by simply calling av_free(). @@ -3897,26 +4204,37 @@ procedure avcodec_get_context_defaults3(s: PAVCodecContext; codec: PAVCodec); * @see avcodec_get_context_defaults *) function avcodec_alloc_context(): PAVCodecContext; - cdecl; external av__codec; + cdecl; external av__codec; deprecated; (** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API! * we WILL change its arguments and name a few times! *) -function avcodec_alloc_context2(ctype: TAVMediaType): PAVCodecContext; +function avcodec_alloc_context2(ctype: TAVMediaType): PAVCodecContext; {deprecated} cdecl; external av__codec; +{$ENDIF} -(** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API! - * we WILL change its arguments and name a few times! *) +(** + * Allocate an AVCodecContext and set its fields to default values. The + * resulting struct can be deallocated by calling avcodec_close() on it followed + * by av_free(). + * + * @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. + * + * @return An AVCodecContext filled with default values or NULL on failure. + * @see avcodec_get_context_defaults + *) function avcodec_alloc_context3(codec: PAVCodec): PAVCodecContext; cdecl; external av__codec; (** * 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_open() before you + * 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 - * avcodec_alloc_context(), but otherwise uninitialized + * avcodec_alloc_context3(), but otherwise uninitialized * @param src source codec context * @return AVERROR() on error (e.g. memory allocation error), 0 on success *) @@ -3980,28 +4298,18 @@ procedure avcodec_align_dimensions(s: PAVCodecContext; width: PCint; height: PCi * according to avcodec_get_edge_width() before. *) procedure avcodec_align_dimensions2(s: PAVCodecContext; width: PCint; height: PCint; - linesize_align: PQuadIntArray); + linesize_align: PAVNDPArray); cdecl; external av__codec; -{$IF LIBAVCODEC_VERSION_MAJOR < 53} -(** - * @deprecated Deprecated in favor of av_check_image_size(). - *) -function avcodec_check_dimensions(av_log_ctx: pointer; w: cuint; h: cuint): cint; - cdecl; external av__codec; deprecated; -{$IFEND} - function avcodec_default_get_format(s: PAVCodecContext; fmt: {const} PAVPixelFormat): TAVPixelFormat; cdecl; external av__codec; -{$IF FF_API_THREAD_INIT} +{$IFDEF FF_API_THREAD_INIT} (** - * @deprecated Set s->thread_count before calling avcodec_open() instead of calling this. + * @deprecated Set s->thread_count before calling avcodec_open2() instead of calling this. *) function avcodec_thread_init(s: PAVCodecContext; thread_count: cint): cint; cdecl; external av__codec; deprecated; -procedure avcodec_thread_free(s: PAVCodecContext); - cdecl; external av__codec; deprecated; {$IFEND} function avcodec_default_execute(s: PAVCodecContext; func: TExecuteFunc; arg: Pointer; var ret: cint; count: cint; size: cint): cint; @@ -4011,6 +4319,7 @@ function avcodec_default_execute2(s: PAVCodecContext; func: TExecuteFunc; arg: P cdecl; external av__codec; //FIXME func typedef +{$IFDEF FF_API_AVCODEC_OPEN} (** * Initialize the AVCodecContext to use the given AVCodec. Prior to using this * function the context has to be allocated. @@ -4027,7 +4336,7 @@ function avcodec_default_execute2(s: PAVCodecContext; func: TExecuteFunc; arg: P * if (!codec) * exit(1); * - * context = avcodec_alloc_context(); + * context = avcodec_alloc_context3(codec); * * if (avcodec_open(context, codec) < 0) * exit(1); @@ -4036,33 +4345,59 @@ function avcodec_default_execute2(s: PAVCodecContext; func: TExecuteFunc; arg: P * @param avctx The context which will be set up to use the given codec. * @param codec The codec to use within the context. * @return zero on success, a negative value on error - * @see avcodec_alloc_context, avcodec_find_decoder, avcodec_find_encoder + * @see avcodec_alloc_context3, avcodec_find_decoder, avcodec_find_encoder, avcodec_close + * + * @deprecated use avcodec_open2 *) function avcodec_open(avctx: PAVCodecContext; codec: PAVCodec): cint; - cdecl; external av__codec; - + cdecl; external av__codec; deprecated; +{$ENDIF} -{$IF FF_API_AUDIO_OLD} (** - * Decode an audio frame from buf into samples. - * Wrapper function which calls avcodec_decode_audio3. + * Initialize the AVCodecContext to use the given AVCodec. Prior to using this + * function the context has to be allocated with avcodec_alloc_context3(). * - * @deprecated Use avcodec_decode_audio3 instead. - * @param avctx the codec context - * @param[out] samples the output buffer, sample type in avctx->sample_fmt - * @param[in,out] frame_size_ptr the output buffer size in bytes - * @param[in] buf the input buffer - * @param[in] buf_size the input buffer size in bytes - * @return On error a negative value is returned, otherwise the number of bytes - * used or zero if no frame could be decompressed. + * 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. + * + * @warning This function is not thread safe! + * + * @code + * avcodec_register_all(); + * av_dict_set(&opts, "b", "2.5M", 0); + * codec = avcodec_find_decoder(CODEC_ID_H264); + * 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(). *) -function avcodec_decode_audio2(avctx: PAVCodecContext; samples: PSmallint; - var frame_size_ptr: cint; - buf: {const} PByteArray; buf_size: cint): cint; - cdecl; external av__codec; deprecated; -{$IFEND} +function avcodec_open2(avctx: PAVCodecContext; codec: PAVCodec; options: pointer): cint; + cdecl; external av__codec; +{$IFDEF FF_API_OLD_DECODE_AUDIO} (** + * Wrapper function which calls avcodec_decode_audio4. + * + * @deprecated Use avcodec_decode_audio4 instead. + * * Decode the audio frame of size avpkt->size from avpkt->data into samples. * Some decoders may support multiple frames in a single AVPacket, such * decoders would then just decode the first frame. In this case, @@ -4082,6 +4417,11 @@ function avcodec_decode_audio2(avctx: PAVCodecContext; samples: PSmallint; * @warning The end of the input buffer avpkt->data should be set to 0 to ensure that * no overreading happens for damaged MPEG streams. * + * @warning You must not provide a custom get_buffer() when using + * avcodec_decode_audio3(). Doing so will override it with + * avcodec_default_get_buffer. Use avcodec_decode_audio4() instead, + * which does allow the application to provide a custom get_buffer(). + * * @note You might have to align the input buffer avpkt->data and output buffer * samples. The alignment requirements depend on the CPU: On some CPUs it isn't * necessary at all, on others it won't work at all if not aligned and on others @@ -4091,11 +4431,14 @@ function avcodec_decode_audio2(avctx: PAVCodecContext; samples: PSmallint; * samples should be 16 byte aligned unless the CPU doesn't need it * (AltiVec and SSE do). * - * @note Some codecs have a delay between input and output, these need to be - * fed with avpkt->data=NULL, avpkt->size=0 at the end to return the remaining frames. + * @note Codecs which have the CODEC_CAP_DELAY capability set have a delay + * between input and output, these need to be fed with avpkt->data=NULL, + * avpkt->size=0 at the end to return the remaining frames. * * @param avctx the codec context - * @param[out] samples the output buffer + * @param[out] samples the output buffer, sample type in avctx->sample_fmt + * If the sample format is planar, each channel plane will + * be the same size, with no padding between channels. * @param[in,out] frame_size_ptr the output buffer size in bytes * @param[in] avpkt The input AVPacket containing the input buffer. * You can create such packet with av_init_packet() and by then setting @@ -4106,35 +4449,46 @@ function avcodec_decode_audio2(avctx: PAVCodecContext; samples: PSmallint; *) function avcodec_decode_audio3(avctx: PAVCodecContext; samples: PSmallint; var frame_size_ptr: cint; - avpkt: PAVPacket): cint; + avpkt: PAVPacket): cint; {deprecated} cdecl; external av__codec; +{$ENDIF} -{$IF FF_API_VIDEO_OLD} (** - * Decode a video frame from buf into picture. - * Wrapper function which calls avcodec_decode_video2. + * Decode the audio frame of size avpkt->size from avpkt->data into frame. * - * @deprecated Use avcodec_decode_video2 instead. - * @param avctx the codec context - * @param[out] picture The AVFrame in which the decoded video frame will be stored. - * Use avcodec_alloc_frame to get an AVFrame, the codec will - * allocate memory for the actual bitmap. - * with default get/release_buffer(), the decoder frees/reuses the bitmap as it sees fit. - * with overridden get/release_buffer() (needs CODEC_CAP_DR1) the user decides into what buffer the decoder - * decodes and the decoder tells the user once it does not need the data anymore, - * the user app can at this point free/reuse/keep the memory as it sees fit. + * Some decoders may support multiple frames in a single AVPacket. Such + * decoders would then just decode the first frame. 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. * - * @param[in] buf the input buffer - * @param[in] buf_size the size of the input buffer in bytes - * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero. - * @return On error a negative value is returned, otherwise the number of bytes - * used or zero if no frame could be decompressed. + * @warning The input buffer, avpkt->data must be FF_INPUT_BUFFER_PADDING_SIZE + * larger than the actual read bytes because some optimized bitstream + * readers read 32 or 64 bits at once and could read over the end. + * + * @note You might have to align the input buffer. The alignment requirements + * depend on the CPU and the decoder. + * + * @param avctx the codec context + * @param[out] frame The AVFrame in which to store decoded audio samples. + * Decoders request a buffer of a particular size by setting + * AVFrame.nb_samples prior to calling get_buffer(). The + * decoder may, however, only utilize part of the buffer by + * setting AVFrame.nb_samples to a smaller value in the + * output frame. + * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is + * non-zero. + * @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. *) -function avcodec_decode_video(avctx: PAVCodecContext; picture: PAVFrame; - var got_picture_ptr: cint; - buf: {const} PByteArray; buf_size: cint): cint; - cdecl; external av__codec; deprecated; -{$IFEND} +function avcodec_decode_audio4(avctx: PAVCodecContext; frame: PAVFrame; + got_frame_ptr: Pcint; avpkt: PAVPacket): cint; + cdecl; external av__codec; (** * Decode the video frame of size avpkt->size from avpkt->data into picture. @@ -4155,6 +4509,10 @@ function avcodec_decode_video(avctx: PAVCodecContext; picture: PAVFrame; * * In practice, avpkt->data should have 4 byte alignment at minimum. * + * @note Codecs which have the CODEC_CAP_DELAY capability set have a delay + * between input and output, these need to be fed with avpkt->data=NULL, + * avpkt->size=0 at the end to return the remaining frames. + * * @param avctx the codec context * @param[out] picture The AVFrame in which the decoded video frame will be stored. * @param[in] avpkt The input AVpacket containing the input buffer. @@ -4168,10 +4526,10 @@ function avcodec_decode_video(avctx: PAVCodecContext; picture: PAVFrame; *) function avcodec_decode_video2(avctx: PAVCodecContext; picture: PAVFrame; var got_picture_ptr: cint; - avpkt: PAVPacket): cint; + avpkt: {const} PAVPacket): cint; cdecl; external av__codec; -{$IF FF_API_SUBTITLE_OLD} +{$IFDEF FF_API_SUBTITLE_OLD} (* Decode a subtitle message. Return -1 if error, otherwise return the * number of bytes used. If no subtitle could be decompressed, * got_sub_ptr is zero. Otherwise, the subtitle is stored in*sub. @@ -4203,25 +4561,23 @@ function avcodec_decode_subtitle2(avctx: PAVCodecContext; sub: PAVSubtitle; cdecl; external av__codec; (** - * Frees all allocated data in the given subtitle struct. + * Free all allocated data in the given subtitle struct. * * @param sub AVSubtitle to free. *) procedure avsubtitle_free(sub: PAVSubtitle); cdecl; external av__codec; -function avcodec_parse_frame(avctx: PAVCodecContext; pdata: PPointer; - data_size_ptr: PCint; - buf: PByteArray; buf_size: cint): cint; - cdecl; external av__codec; - +{$IFDEF FF_API_OLD_ENCODE_AUDIO} (** * Encode an audio frame from samples into buf. * + * @deprecated Use avcodec_encode_audio2 instead. + * * @note The output buffer should be at least FF_MIN_BUFFER_SIZE bytes large. - * However, for PCM audio the user will know how much space is needed - * because it depends on the value passed in buf_size as described - * below. In that case a lower value can be used. + * However, for codecs with avctx->frame_size equal to 0 (e.g. PCM) the user + * will know how much space is needed because it depends on the value passed + * in buf_size as described below. In that case a lower value can be used. * * @param avctx the codec context * @param[out] buf the output buffer @@ -4229,13 +4585,80 @@ function avcodec_parse_frame(avctx: PAVCodecContext; pdata: PPointer; * @param[in] samples the input buffer containing the samples * The number of samples read from this buffer is frame_size*channels, * both of which are defined in avctx. - * For PCM audio the number of samples read from samples is equal to - * buf_size * input_sample_size / output_sample_size. + * For codecs which have avctx->frame_size equal to 0 (e.g. PCM) the number of + * samples read from samples is equal to: + * buf_size * 8 / (avctx->channels * av_get_bits_per_sample(avctx->codec_id)) + * This also implies that av_get_bits_per_sample() must not return 0 for these + * codecs. * @return On error a negative value is returned, on success zero or the number * of bytes used to encode the data read from the input buffer. *) function avcodec_encode_audio(avctx: PAVCodecContext; buf: PByte; - buf_size: cint; samples: {const} PSmallint): cint; + buf_size: cint; samples: {const} PSmallint): cint; {deprecated} + cdecl; external av__codec; +{$ENDIF} + +(** + * 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 + * 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. + * @param[in] frame AVFrame containing the raw audio data to be encoded. + * May be NULL when flushing an encoder that has the + * CODEC_CAP_DELAY capability set. + * There are 2 codec capabilities that affect the allowed + * values of frame->nb_samples. + * If CODEC_CAP_SMALL_LAST_FRAME is set, then only the final + * frame may be smaller than avctx->frame_size, and all other + * frames must be equal to avctx->frame_size. + * If CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame + * can have any number of samples. + * If neither is set, frame->nb_samples must be equal to + * avctx->frame_size for all frames. + * @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 + *) +function avcodec_encode_audio2(avctx: PAVCodecContext; avpkt: PAVPacket; + frame: {const} PAVFrame; got_packet_ptr: Pcint): cint; + cdecl; external av__codec; + +(** + * Fill audio frame data and linesize. + * AVFrame extended_data channel pointers are allocated if necessary for + * planar audio. + * + * @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 + * @param align plane size sample alignment + * @return 0 on success, negative error code on failure + *) +function avcodec_fill_audio_frame(frame: PAVFrame; nb_channels: cint; + sample_fmt: TAVSampleFormat; buf: {const} PByte; + buf_size: cint; align: cint): cint; cdecl; external av__codec; (** @@ -4257,6 +4680,15 @@ function avcodec_encode_subtitle(avctx: PAVCodecContext; buf: PByteArray; buf_size: cint; sub: {const} PAVSubtitle): cint; cdecl; external av__codec; +(** + * Close a given AVCodecContext and free all the data associated with it + * (but not the AVCodecContext itself). + * + * 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. + *) function avcodec_close(avctx: PAVCodecContext): cint; cdecl; external av__codec; @@ -4285,7 +4717,7 @@ procedure avcodec_default_free_buffers(s: PAVCodecContext); (* misc useful functions *) -{$IF FF_API_OLD_FF_PICT_TYPES} +{$IFDEF FF_API_OLD_FF_PICT_TYPES} (** * Return a single letter to describe the given picture type pict_type. * @@ -4306,9 +4738,9 @@ function av_get_pict_type_char(pict_type: cint): AnsiChar; function av_get_bits_per_sample(codec_id: TCodecID): cint; cdecl; external av__codec; -{$IF FF_API_OLD_SAMPLE_FMT} +{$IFDEF FF_API_OLD_SAMPLE_FMT} (** - * @deprecated Use av_get_bits_per_sample_fmt() instead. + * @deprecated Use av_get_bytes_per_sample() instead. *) function av_get_bits_per_sample_format(sample_fmt: TAVSampleFormat): cint; cdecl; external av__codec; deprecated; @@ -4362,7 +4794,7 @@ type offset: cint64; ///< byte offset from starting packet start cur_frame_end: array [0..AV_PARSER_PTS_NB - 1] of cint64; - (*! + (** * 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 FF_I_TYPE picture type as key frames @@ -4470,18 +4902,6 @@ procedure av_register_codec_parser(parser: PAVCodecParser); function av_parser_init(codec_id: cint): PAVCodecParserContext; cdecl; external av__codec; -{$IF LIBAVCODEC_MAX_VERSION_MAJOR < 53} -function av_parser_parse(s: PAVCodecParserContext; - avctx: PAVCodecContext; - poutbuf: PPointer; - poutbuf_size: PCint; - buf: {const} PByteArray; - buf_size: cint; - pts: cint64; - dts: cint64): cint; - cdecl; external av__codec; deprecated; -{$IFEND} - (** * Parse a packet. * @@ -4578,7 +4998,7 @@ function av_bitstream_filter_next(f: PAVBitStreamFilter): PAVBitStreamFilter; * * @see av_realloc *) -procedure av_fast_realloc(ptr: pointer; size: PCuint; min_size: FF_INTERNALC_MEM_TYPE); +procedure av_fast_realloc(ptr: pointer; size: PCuint; min_size: size_t); cdecl; external av__codec; (** @@ -4593,22 +5013,18 @@ procedure av_fast_realloc(ptr: pointer; size: PCuint; min_size: FF_INTERNALC_MEM * @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and * *size 0 if an error occurred. *) -procedure av_fast_malloc(ptr: pointer; size: PCuint; min_size: FF_INTERNALC_MEM_TYPE); +procedure av_fast_malloc(ptr: pointer; size: PCuint; min_size: size_t); cdecl; external av__codec; -{$IF LIBAVCODEC_MAX_VERSION_MAJOR < 53} (** - * @deprecated Deprecated in favor of av_image_copy(). + * Same behaviour av_fast_malloc but the buffer has additional + * FF_INPUT_PADDING_SIZE at the end which will will always be 0. + * + * In addition the whole buffer will initially and after resizes + * be 0-initialized so that no uninitialized data will ever appear. *) -type - PQuaduint8Array = ^TQuaduint8Array; - TQuaduint8Array = array [0..3] of cuint8; - -procedure av_picture_data_copy(dst_data: PQuaduint8Array; dst_linesize: TQuadIntArray; - src_data: PQuaduint8Array; src_linesize: TQuadIntArray; - pix_fmt: TAVPixelFormat; width: cint; height: cint); - cdecl; external av__codec; deprecated; -{$IFEND} +procedure av_fast_padded_malloc(ptr: pointer; size: Pcuint; min_size: size_t); + cdecl; external av__codec; (** * Copy image src to dst. Wraps av_picture_data_copy() above. @@ -4656,24 +5072,6 @@ function av_picture_pad(dst: PAVPicture; function av_xiphlacing(s: PByte; v: cuint): cuint; cdecl; external av__codec; -{$IF LIBAVCODEC_VERSION_MAJOR < 53} -(** - * Parse str and put in width_ptr and height_ptr the detected values. - * - * @deprecated Deprecated in favor of av_parse_video_size(). - *) -function av_parse_video_frame_size(width_ptr: PCint; height_ptr: PCint; str: {const} PAnsiChar): cint; - cdecl; external av__codec; deprecated; - -(** - * Parse str and store the detected values in *frame_rate. - * - * @deprecated Deprecated in favor of av_parse_video_rate(). - *) -function av_parse_video_frame_rate(frame_rate: PAVRational; str: {const} PAnsiChar): cint; - cdecl; external av__codec; deprecated; -{$IFEND} - (** * Log a generic warning message about a missing feature. This function is * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.) @@ -4697,7 +5095,7 @@ procedure av_log_missing_feature(avc: Pointer; feature: {const} PAnsiChar; want_ * a pointer to an AVClass struct * @param[in] msg string containing an optional message, or NULL if no message *) -procedure av_log_ask_for_sample(avc: Pointer; msg: {const} PAnsiChar); +procedure av_log_ask_for_sample(avc: Pointer; msg: {const} PAnsiChar); {todo: av_printf_format(2, 3);} cdecl; external av__codec; (** @@ -4742,6 +5140,37 @@ type //function av_lockmgr_register(cb: function (mutex: Ppointer; op: TAVLockOp)): cint; // cdecl; external av__codec; +(** + * Get the type of the given codec. + *) +function avcodec_get_type(codec_id: TCodecID): TAVMediaType; + cdecl; external av__codec; + +(** + * Get the AVClass for AVCodecContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function avcodec_get_class(): {const} PAVClass; + cdecl; external av__codec; + +(** + * Get the AVClass for AVFrame. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function avcodec_get_frame_class(): {const} PAVClass; + cdecl; external av__codec; + +(** + * @return a positive value if s is open (i.e. avcodec_open2() was called on it + * with no corresponding avcodec_close()), 0 otherwise. + *) +function avcodec_is_open(s: PAVCodecContext): cint; + cdecl; external av__codec; + implementation end. |