From eaca529cd5bcea6af4b8cdf9a878bec49cba231c Mon Sep 17 00:00:00 2001 From: k-m_schindler Date: Sat, 20 Oct 2012 00:32:35 +0000 Subject: first try of version 0.11.* git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2926 b956fd51-792f-4845-bead-9b4dfca2ff2c --- src/lib/ffmpeg-0.11/avcodec.pas | 4830 +++++++++++------------ src/lib/ffmpeg-0.11/avformat.pas | 837 ++-- src/lib/ffmpeg-0.11/avio.pas | 378 +- src/lib/ffmpeg-0.11/avutil.pas | 8 +- src/lib/ffmpeg-0.11/libavcodec/audioconvert.pas | 10 +- src/lib/ffmpeg-0.11/libavutil/cpu.pas | 40 +- src/lib/ffmpeg-0.11/libavutil/dict.pas | 4 +- src/lib/ffmpeg-0.11/libavutil/error.pas | 5 +- src/lib/ffmpeg-0.11/libavutil/log.pas | 4 +- src/lib/ffmpeg-0.11/libavutil/mathematics.pas | 9 +- src/lib/ffmpeg-0.11/libavutil/mem.pas | 2 +- src/lib/ffmpeg-0.11/libavutil/opt.pas | 205 +- src/lib/ffmpeg-0.11/libavutil/pixfmt.pas | 8 +- src/lib/ffmpeg-0.11/libavutil/samplefmt.pas | 96 +- 14 files changed, 3014 insertions(+), 3422 deletions(-) (limited to 'src/lib') diff --git a/src/lib/ffmpeg-0.11/avcodec.pas b/src/lib/ffmpeg-0.11/avcodec.pas index bfc2c3ba..7c6d1a19 100644 --- a/src/lib/ffmpeg-0.11/avcodec.pas +++ b/src/lib/ffmpeg-0.11/avcodec.pas @@ -22,7 +22,7 @@ * - Changes and updates by the UltraStar Deluxe Team * * Conversion of libavcodec/avcodec.h - * version: 52.122.0 + * version: 54.23.100 * *) @@ -76,20 +76,20 @@ const * You can accelerate this process by posting a patch with the git changes * translated to Pascal to our bug tracker (please join our IRC chat before * you start working on it). Simply adjusting the max. versions is NOT a valid - * fix. + * fix. *) (* Supported version by this header *) - LIBAVCODEC_MAX_VERSION_MAJOR = 53; - LIBAVCODEC_MAX_VERSION_MINOR = 61; + LIBAVCODEC_MAX_VERSION_MAJOR = 54; + LIBAVCODEC_MAX_VERSION_MINOR = 23; 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); (* Min. supported version by this header *) - LIBAVCODEC_MIN_VERSION_MAJOR = 52; - LIBAVCODEC_MIN_VERSION_MINOR = 122; + LIBAVCODEC_MIN_VERSION_MAJOR = 54; + LIBAVCODEC_MIN_VERSION_MINOR = 23; LIBAVCODEC_MIN_VERSION_RELEASE = 0; LIBAVCODEC_MIN_VERSION = (LIBAVCODEC_MIN_VERSION_MAJOR * VERSION_MAJOR) + (LIBAVCODEC_MIN_VERSION_MINOR * VERSION_MINOR) + @@ -207,12 +207,21 @@ type type FF_INTERNALC_MEM_TYPE = cuint; - + const AV_NOPTS_VALUE: cint64 = $8000000000000000; AV_TIME_BASE = 1000000; AV_TIME_BASE_Q: TAVRational = (num: 1; den: AV_TIME_BASE); +(** + * @defgroup lavc_core Core functions/structures. + * @ingroup libavc + * + * Basic definitions, functions for querying libavcodec capabilities, + * allocating core structures, etc. + * @{ + *) + (** * Identify the syntax and semantics of the bitstream. * The principle is roughly: @@ -223,12 +232,13 @@ const * * 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), - * 2. it is as close as possible to similar codecs. + * 2. Give it a value which when taken as ASCII is recognized uniquely by a human as this specific codec. + * This ensures that 2 forks can independently add CodecIDs without producing conflicts. *) type TCodecID = ( CODEC_ID_NONE, - + //* video codecs */ CODEC_ID_MPEG1VIDEO, CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding @@ -329,9 +339,6 @@ type CODEC_ID_TIERTEXSEQVIDEO, CODEC_ID_TIFF, CODEC_ID_GIF, -{$IF LIBAVCODEC_VERSION_MAJOR = 53} - CODEC_ID_FFH264, -{$IFEND} CODEC_ID_DXA, CODEC_ID_DNXHD, CODEC_ID_THP, @@ -349,10 +356,6 @@ type CODEC_ID_INDEO5, CODEC_ID_MIMIC, CODEC_ID_RL2, -{$IF LIBAVCODEC_VERSION_MAJOR = 53} - CODEC_ID_8SVX_EXP, - CODEC_ID_8SVX_FIB, -{$IFEND} CODEC_ID_ESCAPE124, CODEC_ID_DIRAC, CODEC_ID_BFI, @@ -391,18 +394,28 @@ type CODEC_ID_DFA, CODEC_ID_WMV3IMAGE, CODEC_ID_VC1IMAGE, -{$IF LIBAVCODEC_VERSION_MAJOR = 53} - CODEC_ID_G723_1_DEPRECATED, - CODEC_ID_G729_DEPRECATED, -{$IFEND} - CODEC_ID_UTVIDEO_DEPRECATED, + CODEC_ID_UTVIDEO, CODEC_ID_BMV_VIDEO, CODEC_ID_VBLE, CODEC_ID_DXTORY, CODEC_ID_V410, CODEC_ID_XWD, - CODEC_ID_UTVIDEO = $0800, - + CODEC_ID_CDXL, + CODEC_ID_XBM, + CODEC_ID_ZEROCODEC, +(** see below. they need to be hard coded. + CODEC_ID_Y41P = MKBETAG('Y','4','1','P'), + CODEC_ID_ESCAPE130 = MKBETAG('E','1','3','0'), + CODEC_ID_EXR = MKBETAG('0','E','X','R'), + CODEC_ID_AVRP = MKBETAG('A','V','R','P'), + + CODEC_ID_G2M = MKBETAG( 0 ,'G','2','M'), + CODEC_ID_AVUI = MKBETAG('A','V','U','I'), + CODEC_ID_AYUV = MKBETAG('A','Y','U','V'), + CODEC_ID_V308 = MKBETAG('V','3','0','8'), + CODEC_ID_V408 = MKBETAG('V','4','0','8'), + CODEC_ID_YUV4 = MKBETAG('Y','U','V','4'), + *) //* various PCM "codecs" */ CODEC_ID_PCM_S16LE = $10000, CODEC_ID_PCM_S16BE, @@ -492,10 +505,6 @@ type CODEC_ID_MACE3, CODEC_ID_MACE6, CODEC_ID_VMDAUDIO, -{$IF LIBAVCODEC_VERSION_MAJOR = 53} - CODEC_ID_SONIC, - CODEC_ID_SONIC_LS, -{$IFEND} CODEC_ID_FLAC, CODEC_ID_MP3ADU, CODEC_ID_MP3ON4, @@ -537,16 +546,19 @@ 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, -//{$IFEND} + CODEC_ID_G723_1, + CODEC_ID_G729, + CODEC_ID_8SVX_EXP, + CODEC_ID_8SVX_FIB, CODEC_ID_BMV_AUDIO, - CODEC_ID_G729 = $15800, - CODEC_ID_G723_1= $15801, - + CODEC_ID_RALF, +(** see below. they need to be hard coded. + CODEC_ID_FFWAVESYNTH = MKBETAG('F','F','W','S'), + CODEC_ID_8SVX_RAW = MKBETAG('8','S','V','X'), + CODEC_ID_SONIC = MKBETAG('S','O','N','C'), + CODEC_ID_SONIC_LS = MKBETAG('S','O','N','L'), + *) + //* subtitle codecs */ CODEC_ID_DVD_SUBTITLE = $17000, CODEC_ID_DVB_SUBTITLE, @@ -557,10 +569,20 @@ type CODEC_ID_HDMV_PGS_SUBTITLE, CODEC_ID_DVB_TELETEXT, CODEC_ID_SRT, +(** see below. they need to be hard coded. + CODEC_ID_MICRODVD = MKBETAG('m','D','V','D'), + CODEC_ID_EIA_608 = MKBETAG('c','6','0','8'), + CODEC_ID_JACOSUB = MKBETAG('J','S','U','B'), + *) //* other specific kind of codecs (generally used for attachments) */ CODEC_ID_TTF = $18000, - +(** see below. they need to be hard coded. + CODEC_ID_BINTEXT = MKBETAG('B','T','X','T'), + CODEC_ID_XBIN = MKBETAG('X','B','I','N'), + CODEC_ID_IDF = MKBETAG( 0 ,'I','D','F'), + *) + 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 @@ -569,18 +591,27 @@ type * 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 +(** hardcoded codecs from above. pascal needs them to be ordered **) + CODEC_ID_G2M = $0047324D, // MKBETAG( 0 ,'G','2','M') + CODEC_ID_IDF = $00494446, // MKBETAG( 0 ,'I','D','F') + CODEC_ID_EXR = $30455852, // MKBETAG('0','E','X','R') + CODEC_ID_8SVX_RAW = $38535658, // MKBETAG('8','S','V','X') + CODEC_ID_AVRP = $41565250, // MKBETAG('A','V','R','P') + CODEC_ID_AVUI = $41565549, // MKBETAG('A','V','U','I') + CODEC_ID_AYUV = $41595556, // MKBETAG('A','Y','U','V'), + CODEC_ID_BINTEXT = $42545854, // MKBETAG('B','T','X','T') + CODEC_ID_ESCAPE130 = $45313330, // MKBETAG('E','1','3','0') + CODEC_ID_FFWAVESYNTH = $46465753, // MKBETAG('F','F','W','S') + CODEC_ID_JACOSUB = $4A535542, // MKBETAG('J','S','U','B'), + CODEC_ID_SONIC = $534F4E43, // MKBETAG('S','O','N','C'), + CODEC_ID_SONIC_LS = $534F4E4C, // MKBETAG('S','O','N','L'), + CODEC_ID_V308 = $56333038, // MKBETAG('V','3','0','8') + CODEC_ID_V408 = $56413038, // MKBETAG('V','4','0','8'), + CODEC_ID_XBIN = $5842494E, // MKBETAG('X','B','I','N') + CODEC_ID_Y41P = $59343150, // MKBETAG('Y','4','1','P') + CODEC_ID_YUV4 = $59555634, // MKBETAG('Y','U','V','4') + CODEC_ID_EIA_608 = $63363038, // MKBETAG('c','6','0','8'), + CODEC_ID_MICRODVD = $6D445644 // MKBETAG('m','D','V','D') ); type @@ -595,81 +626,33 @@ const CODEC_TYPE_ATTACHMENT = AVMEDIA_TYPE_ATTACHMENT; CODEC_TYPE_NB = AVMEDIA_TYPE_NB; -{$IF FF_API_OLD_AUDIOCONVERT} - -{$I libavcodec/audioconvert.pas} - -const - {* Audio channel masks *} - CH_FRONT_LEFT = AV_CH_FRONT_LEFT; - CH_FRONT_RIGHT = AV_CH_FRONT_RIGHT; - CH_FRONT_CENTER = AV_CH_FRONT_CENTER; - CH_LOW_FREQUENCY = AV_CH_LOW_FREQUENCY; - CH_BACK_LEFT = AV_CH_BACK_LEFT; - CH_BACK_RIGHT = AV_CH_BACK_RIGHT; - CH_FRONT_LEFT_OF_CENTER = AV_CH_FRONT_LEFT_OF_CENTER; - CH_FRONT_RIGHT_OF_CENTER = AV_CH_FRONT_RIGHT_OF_CENTER; - CH_BACK_CENTER = AV_CH_BACK_CENTER; - CH_SIDE_LEFT = AV_CH_SIDE_LEFT; - CH_SIDE_RIGHT = AV_CH_SIDE_RIGHT; - CH_TOP_CENTER = AV_CH_TOP_CENTER; - CH_TOP_FRONT_LEFT = AV_CH_TOP_FRONT_LEFT; - CH_TOP_FRONT_CENTER = AV_CH_TOP_FRONT_CENTER; - CH_TOP_FRONT_RIGHT = AV_CH_TOP_FRONT_RIGHT; - CH_TOP_BACK_LEFT = AV_CH_TOP_BACK_LEFT; - CH_TOP_BACK_CENTER = AV_CH_TOP_BACK_CENTER; - CH_TOP_BACK_RIGHT = AV_CH_TOP_BACK_RIGHT; - CH_STEREO_LEFT = AV_CH_STEREO_LEFT; - CH_STEREO_RIGHT = AV_CH_STEREO_RIGHT; - -{** Channel mask value used for AVCodecContext.request_channel_layout - * to indicate that the user requests the channel order of the decoder output - * to be the native codec channel order. - *} - CH_LAYOUT_NATIVE = AV_CH_LAYOUT_NATIVE; - - {* Audio channel convenience macros *} - CH_LAYOUT_MONO = AV_CH_LAYOUT_MONO; - CH_LAYOUT_STEREO = AV_CH_LAYOUT_STEREO; - CH_LAYOUT_2_1 = AV_CH_LAYOUT_2_1; - CH_LAYOUT_SURROUND = AV_CH_LAYOUT_SURROUND; - CH_LAYOUT_4POINT0 = AV_CH_LAYOUT_4POINT0; - CH_LAYOUT_2_2 = AV_CH_LAYOUT_2_2; - CH_LAYOUT_QUAD = AV_CH_LAYOUT_QUAD; - CH_LAYOUT_5POINT0 = AV_CH_LAYOUT_5POINT0; - CH_LAYOUT_5POINT1 = AV_CH_LAYOUT_5POINT1; - CH_LAYOUT_5POINT0_BACK = AV_CH_LAYOUT_5POINT0_BACK; - CH_LAYOUT_5POINT1_BACK = AV_CH_LAYOUT_5POINT1_BACK; - CH_LAYOUT_7POINT0 = AV_CH_LAYOUT_7POINT0; - CH_LAYOUT_7POINT1 = AV_CH_LAYOUT_7POINT1; - CH_LAYOUT_7POINT1_WIDE = AV_CH_LAYOUT_7POINT1_WIDE; - CH_LAYOUT_STEREO_DOWNMIX = AV_CH_LAYOUT_STEREO_DOWNMIX; -{$IFEND} - {$IF FF_API_OLD_DECODE_AUDIO} -{* in bytes *} +(* in bytes *) AVCODEC_MAX_AUDIO_FRAME_SIZE = 192000; // 1 second of 48khz 32bit audio {$IFEND} -{** +(** + * @ingroup lavc_decoding * Required number of additionally allocated bytes at the end of the input bitstream for decoding. * This is mainly needed because some optimized bitstream readers read * 32 or 64 bit at once and could read over the end.
* 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 = 16; -{** +(** + * @ingroup lavc_decoding * minimum encoding buffer size. * Used to avoid some checks during header writing. - *} + *) FF_MIN_BUFFER_SIZE = 16384; type -{* +(* + * @ingroup lavc_decoding * motion estimation type. - *} + *) TMotion_Est_ID = ( ME_ZERO = 1, ///< no search, that is use 0,0 vector whenever one is needed ME_FULL, @@ -683,10 +666,13 @@ type ME_TESA ///< transformed exhaustive search algorithm ); +(** + * @ingroup lavc_decoding + *) TAVDiscard = ( - {* We leave some space between them for extensions (drop some + (* We leave some space between them for extensions (drop some * keyframes for intra-only or drop just some bidir frames). - *} + *) AVDISCARD_NONE = -16, ///< discard nothing AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi AVDISCARD_NONREF = 8, ///< discard all non reference @@ -750,20 +736,6 @@ type AVCHROMA_LOC_NB ///< Not part of ABI ); -{$IF FF_API_FLAC_GLOBAL_OPTS} -(** - * LPC analysis type - *) - TAVLPCType = ( - AV_LPC_TYPE_DEFAULT = -1, ///< use the codec default LPC type - AV_LPC_TYPE_NONE = 0, ///< do not use LPC prediction or use all zero coefficients - AV_LPC_TYPE_FIXED = 1, ///< fixed LPC coefficients - AV_LPC_TYPE_LEVINSON = 2, ///< Levinson-Durbin recursion - AV_LPC_TYPE_CHOLESKY = 3, ///< Cholesky factorization - AV_LPC_TYPE_NB ///< Not part of ABI - ); -{$IFEND} - TAVAudioServiceType =( AV_AUDIO_SERVICE_TYPE_MAIN = 0, AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, @@ -777,6 +749,9 @@ type AV_AUDIO_SERVICE_TYPE_NB ///< Not part of ABI ); +(** + * @ingroup lavc_decoding + *) PRcOverride = ^TRcOverride; TRcOverride = record {16} start_frame: cint; @@ -788,21 +763,21 @@ type const FF_MAX_B_FRAMES = 16; -{* encoding support +(* encoding support These flags can be passed in AVCodecContext.flags before initialization. Note: Not everything is supported yet. -*} +*) CODEC_FLAG_QSCALE = $0002; ///< Use fixed qscale. CODEC_FLAG_4MV = $0004; ///< 4 MV per MB allowed / advanced prediction for H263. CODEC_FLAG_QPEL = $0010; ///< use qpel MC. CODEC_FLAG_GMC = $0020; ///< use GMC. CODEC_FLAG_MV0 = $0040; ///< always try a MB with MV=<0,0>. - {** + (** * The parent program guarantees that the input for B-frames containing * streams is not written to for at least s->max_b_frames+1 frames, if * this is not set the input will be copied. - *} + *) CODEC_FLAG_INPUT_PRESERVED = $0100; CODEC_FLAG_PASS1 = $0200; ///< use internal 2pass ratecontrol in first pass mode CODEC_FLAG_PASS2 = $0400; ///< use internal 2pass ratecontrol in second pass mode @@ -817,68 +792,24 @@ const CODEC_FLAG_ALT_SCAN = $00100000; ///< use alternate scan CODEC_FLAG_GLOBAL_HEADER = $00400000; ///< place global headers in extradata instead of every keyframe CODEC_FLAG_BITEXACT = $00800000; ///< use only bitexact stuff (except (i)dct) - {* Fx : Flag for h263+ extra options *} + (* Fx : Flag for h263+ extra options *) CODEC_FLAG_AC_PRED = $01000000; ///< H263 Advanced intra coding / MPEG4 AC prediction - CODEC_FLAG_H263P_UMV = $02000000; ///< Unlimited motion vector - CODEC_FLAG_CBP_RD = $04000000; ///< use rate distortion optimization for cbp - CODEC_FLAG_QP_RD = $08000000; ///< use rate distortion optimization for qp selectioon - CODEC_FLAG_H263P_AIV = $00000008; ///< H263 Alternative inter vlc - CODEC_FLAG_OBMC = $00000001; ///< OBMC CODEC_FLAG_LOOP_FILTER = $00000800; ///< loop filter - CODEC_FLAG_H263P_SLICE_STRUCT = $10000000; CODEC_FLAG_INTERLACED_ME = $20000000; ///< interlaced motion estimation - CODEC_FLAG_SVCD_SCAN_OFFSET = $40000000; ///< will reserve space for SVCD scan offset user data CODEC_FLAG_CLOSED_GOP = $80000000; CODEC_FLAG2_FAST = $00000001; ///< allow non spec compliant speedup tricks - 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_DROP_FRAME_TIMECODE = $00002000; ///< timecode is in drop frame format. DEPRECATED!!!! +{$IFDEF FF_API_MPV_GLOBAL_OPTS} + CODEC_FLAG_CBP_RD = $04000000; ///< use rate distortion optimization for cbp + CODEC_FLAG_QP_RD = $08000000; ///< use rate distortion optimization for qp selectioon + CODEC_FLAG2_STRICT_GOP = $00000002; ///< strictly enforce GOP size CODEC_FLAG2_SKIP_RD = $00004000; ///< RD optimal MB level residual skipping +{$ENDIF} 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 = $0080; ///< 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} -{$IF 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 - CODEC_FLAG2_8X8DCT = $00000080; ///< H.264 high profile 8x8 transform - 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_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. -{$IFEND} -{$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 @@ -888,19 +819,15 @@ const CODEC_CAP_DRAW_HORIZ_BAND = $0001; ///< decoder can use draw_horiz_band callback - (** - * 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. - *) +(** + * 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. + *) CODEC_CAP_DR1 = $0002; -{$IF FF_API_PARSE_FRAME} - (* if 'parse_only' field is true, then avcodec_parse_frame() can be used *) - CODEC_CAP_PARSE_ONLY = $0004; -{$IFEND} CODEC_CAP_TRUNCATED = $0008; - (* codec can export data for HW decoding (XvMC) *) +(* codec can export data for HW decoding (XvMC) *) CODEC_CAP_HWACCEL = $0010; (** @@ -928,71 +855,74 @@ const *) CODEC_CAP_DELAY = $0020; - (** - * Codec can be fed a final frame with a smaller size. - * This can be used to prevent truncation of the last audio samples. - *) +(** + * Codec can be fed a final frame with a smaller size. + * This can be used to prevent truncation of the last audio samples. + *) CODEC_CAP_SMALL_LAST_FRAME = $0040; - (** - * Codec can export data for HW decoding (VDPAU). - *) +(** + * Codec can export data for HW decoding (VDPAU). + *) CODEC_CAP_HWACCEL_VDPAU = $0080; - (** - * 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. - *) +(** + * 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. + *) CODEC_CAP_SUBFRAMES = $0100; - (** - * Codec is experimental and is thus avoided in favor of non experimental - * encoders - *) +(** + * Codec is experimental and is thus avoided in favor of non experimental + * encoders + *) CODEC_CAP_EXPERIMENTAL = $0200; - (** - * Codec should fill in channel configuration and samplerate instead of container - *) +(** + * Codec should fill in channel configuration and samplerate instead of container + *) CODEC_CAP_CHANNEL_CONF = $0400; - - (** - * Codec is able to deal with negative linesizes - *) + +(** + * Codec is able to deal with negative linesizes + *) CODEC_CAP_NEG_LINESIZES = $0800; - - (** - * Codec supports frame-level multithreading. - *) + +(** + * Codec supports frame-level multithreading. + *) CODEC_CAP_FRAME_THREADS = $1000; - (** - * Codec supports slice-based (or partition-based) multithreading. - *) +(** + * Codec supports slice-based (or partition-based) multithreading. + *) CODEC_CAP_SLICE_THREADS = $2000; - (** - * Codec supports changed parameters at any point. - *) +(** + * Codec supports changed parameters at any point. + *) CODEC_CAP_PARAM_CHANGE = $4000; - (** - * Codec supports avctx->thread_count == 0 (auto). - *) + +(** + * Codec supports avctx->thread_count == 0 (auto). + *) CODEC_CAP_AUTO_THREADS = $8000; - (** - * Audio encoder supports receiving a different number of samples in each call. - *) + +(** + * Audio encoder supports receiving a different number of samples in each call. + *) CODEC_CAP_VARIABLE_FRAME_SIZE = $10000; - (** - * Codec is lossless. - *) + +(** + * Codec is lossless. + *) CODEC_CAP_LOSSLESS = $80000000; //the following defines may change, don't expect compatibility if you use them @@ -1055,26 +985,62 @@ 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} -(* DEPRECATED, directly use the AV_PICTURE_TYPE_* enum values *) - FF_I_TYPE = 1; ///< Intra - FF_P_TYPE = 2; ///< Predicted - FF_B_TYPE = 3; ///< Bi-dir predicted - FF_S_TYPE = 4; ///< S(GMC)-VOP MPEG4 - FF_SI_TYPE = 5; ///< Switching Intra - FF_SP_TYPE = 6; ///< Switching Predicted - FF_BI_TYPE = 7; -{$IFEND} - FF_BUFFER_HINTS_VALID = $01; // Buffer hints value is meaningful (if 0 ignore) FF_BUFFER_HINTS_READABLE = $02; // Codec will read from buffer FF_BUFFER_HINTS_PRESERVE = $04; // User must not alter buffer content FF_BUFFER_HINTS_REUSABLE = $08; // Codec will reuse the buffer (update) + FF_COMPRESSION_DEFAULT = -1; + FF_ASPECT_EXTENDED = 15; FF_RC_STRATEGY_XVID = 1; + FF_PRED_LEFT = 0; + FF_PRED_PLANE = 1; + FF_PRED_MEDIAN = 2; + + FF_CMP_SAD = 0; + FF_CMP_SSE = 1; + FF_CMP_SATD = 2; + FF_CMP_DCT = 3; + FF_CMP_PSNR = 4; + FF_CMP_BIT = 5; + FF_CMP_RD = 6; + FF_CMP_ZERO = 7; + FF_CMP_VSAD = 8; + FF_CMP_VSSE = 9; + FF_CMP_NSSE = 10; + FF_CMP_W53 = 11; + FF_CMP_W97 = 12; + FF_CMP_DCTMAX = 13; + FF_CMP_DCT264 = 14; + FF_CMP_CHROMA = 256; + + FF_DTG_AFD_SAME = 8; + FF_DTG_AFD_4_3 = 9; + FF_DTG_AFD_16_9 = 10; + FF_DTG_AFD_14_9 = 11; + FF_DTG_AFD_4_3_SP_14_9 = 13; + FF_DTG_AFD_16_9_SP_14_9 = 14; + FF_DTG_AFD_SP_4_3 = 15; + + FF_DEFAULT_QUANT_BIAS = 999999; + + SLICE_FLAG_CODED_ORDER = $0001; ///< draw_horiz_band() is called in coded order instead of display + SLICE_FLAG_ALLOW_FIELD = $0002; ///< allow draw_horiz_band() with field slices (MPEG2 field pics) + SLICE_FLAG_ALLOW_PLANE = $0004; ///< allow draw_horiz_band() with 1 component at a time (SVQ1) + + FF_MB_DECISION_SIMPLE = 0; ///< uses mb_cmp + FF_MB_DECISION_BITS = 1; ///< chooses the one which needs the fewest bits + FF_MB_DECISION_RD = 2; ///< rate distortion + + FF_CODER_TYPE_VLC = 0; + FF_CODER_TYPE_AC = 1; + FF_CODER_TYPE_RAW = 2; + FF_CODER_TYPE_RLE = 3; + FF_CODER_TYPE_DEFLATE = 4; + FF_BUG_AUTODETECT = 1; ///< autodetection FF_BUG_OLD_MSMPEG4 = 2; FF_BUG_XVID_ILACE = 4; @@ -1091,7 +1057,6 @@ const FF_BUG_DC_CLIP = 4096; FF_BUG_MS = 8192; ///< workaround various bugs in microsofts broken decoders FF_BUG_TRUNCATED = 16384; - //FF_BUG_FAKE_SCALABILITY = 16 //Autodetection should work 100%. 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 @@ -1099,11 +1064,38 @@ const FF_COMPLIANCE_UNOFFICIAL = -1; ///< Allow unofficial extensions FF_COMPLIANCE_EXPERIMENTAL = -2; ///< Allow nonstandardized experimental things. - FF_ER_CAREFUL = 1; - FF_ER_COMPLIANT = 2; - FF_ER_AGGRESSIVE = 3; - FF_ER_VERY_AGGRESSIVE = 4; - FF_ER_EXPLODE = 5; + FF_EC_GUESS_MVS = 1; + FF_EC_DEBLOCK = 2; + + FF_DEBUG_PICT_INFO = 1; + FF_DEBUG_RC = 2; + FF_DEBUG_BITSTREAM = 4; + FF_DEBUG_MB_TYPE = 8; + FF_DEBUG_QP = 16; + FF_DEBUG_MV = 32; + FF_DEBUG_DCT_COEFF = $00000040; + FF_DEBUG_SKIP = $00000080; + FF_DEBUG_STARTCODE = $00000100; + FF_DEBUG_PTS = $00000200; + FF_DEBUG_ER = $00000400; + FF_DEBUG_MMCO = $00000800; + FF_DEBUG_BUGS = $00001000; + FF_DEBUG_VIS_QP = $00002000; + FF_DEBUG_VIS_MB_TYPE = $00004000; + FF_DEBUG_BUFFERS = $00008000; + + FF_DEBUG_VIS_MV_P_FOR = $00000001; //visualize forward predicted MVs of P frames + FF_DEBUG_VIS_MV_B_FOR = $00000002; //visualize forward predicted MVs of B frames + FF_DEBUG_VIS_MV_B_BACK = $00000004; //visualize backward predicted MVs of B frames + + 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; FF_DCT_AUTO = 0; FF_DCT_FASTINT = 1; @@ -1139,89 +1131,16 @@ const FF_IDCT_SIMPLEALPHA = 23; FF_IDCT_BINK = 24; - FF_EC_GUESS_MVS = 1; - FF_EC_DEBLOCK = 2; - - FF_PRED_LEFT = 0; - FF_PRED_PLANE = 1; - FF_PRED_MEDIAN = 2; - - FF_DEBUG_PICT_INFO = 1; - FF_DEBUG_RC = 2; - FF_DEBUG_BITSTREAM = 4; - FF_DEBUG_MB_TYPE = 8; - FF_DEBUG_QP = 16; - FF_DEBUG_MV = 32; - FF_DEBUG_DCT_COEFF = $00000040; - FF_DEBUG_SKIP = $00000080; - FF_DEBUG_STARTCODE = $00000100; - FF_DEBUG_PTS = $00000200; - FF_DEBUG_ER = $00000400; - FF_DEBUG_MMCO = $00000800; - FF_DEBUG_BUGS = $00001000; - FF_DEBUG_VIS_QP = $00002000; - FF_DEBUG_VIS_MB_TYPE = $00004000; - FF_DEBUG_BUFFERS = $00008000; - - FF_DEBUG_VIS_MV_P_FOR = $00000001; //visualize forward predicted MVs of P frames - FF_DEBUG_VIS_MV_B_FOR = $00000002; //visualize forward predicted MVs of B frames - FF_DEBUG_VIS_MV_B_BACK = $00000004; //visualize backward predicted MVs of B frames + 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_CMP_SAD = 0; - FF_CMP_SSE = 1; - FF_CMP_SATD = 2; - FF_CMP_DCT = 3; - FF_CMP_PSNR = 4; - FF_CMP_BIT = 5; - FF_CMP_RD = 6; - FF_CMP_ZERO = 7; - FF_CMP_VSAD = 8; - FF_CMP_VSSE = 9; - FF_CMP_NSSE = 10; - FF_CMP_W53 = 11; - FF_CMP_W97 = 12; - FF_CMP_DCTMAX = 13; - FF_CMP_DCT264 = 14; - FF_CMP_CHROMA = 256; + FF_PROFILE_UNKNOWN = -99; + FF_PROFILE_RESERVED = -100; - FF_DTG_AFD_SAME = 8; - FF_DTG_AFD_4_3 = 9; - FF_DTG_AFD_16_9 = 10; - FF_DTG_AFD_14_9 = 11; - FF_DTG_AFD_4_3_SP_14_9 = 13; - FF_DTG_AFD_16_9_SP_14_9 = 14; - FF_DTG_AFD_SP_4_3 = 15; - - FF_DEFAULT_QUANT_BIAS = 999999; - - FF_CODER_TYPE_VLC = 0; - FF_CODER_TYPE_AC = 1; - FF_CODER_TYPE_RAW = 2; - FF_CODER_TYPE_RLE = 3; - FF_CODER_TYPE_DEFLATE = 4; - - SLICE_FLAG_CODED_ORDER = $0001; ///< draw_horiz_band() is called in coded order instead of display - SLICE_FLAG_ALLOW_FIELD = $0002; ///< allow draw_horiz_band() with field slices (MPEG2 field pics) - SLICE_FLAG_ALLOW_PLANE = $0004; ///< allow draw_horiz_band() with 1 component at a time (SVQ1) - - FF_MB_DECISION_SIMPLE = 0; ///< uses mb_cmp - 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} - FF_AA_AUTO = 0; - FF_AA_FASTINT = 1; //not implemented yet - FF_AA_INT = 2; - FF_AA_FLOAT = 3; -{$IFEND} - - FF_PROFILE_UNKNOWN = -99; - FF_PROFILE_RESERVED = -100; - - FF_PROFILE_AAC_MAIN = 0; - FF_PROFILE_AAC_LOW = 1; - FF_PROFILE_AAC_SSR = 2; - FF_PROFILE_AAC_LTP = 3; + FF_PROFILE_AAC_MAIN = 0; + FF_PROFILE_AAC_LOW = 1; + FF_PROFILE_AAC_SSR = 2; + FF_PROFILE_AAC_LTP = 3; FF_PROFILE_DTS = 20; FF_PROFILE_DTS_ES = 30; @@ -1273,34 +1192,48 @@ const FF_LEVEL_UNKNOWN = -99; - X264_PART_I4X4 = $001; (* Analyse i4x4 *) - X264_PART_I8X8 = $002; (* Analyse i8x8 (requires 8x8 transform) *) - X264_PART_P8X8 = $010; (* Analyse p16x8, p8x16 and p8x8 *) - X264_PART_P4X4 = $020; (* Analyse p8x4, p4x8, p4x4 *) - X264_PART_B8X8 = $100; (* Analyse b16x8, b8x16 and b8x8 *) - - 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 - - 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 + + (** + * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: + * @code + * 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 + * @endcode + *) + AV_PKT_DATA_PARAM_CHANGE, + + (** + * 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: + * @code + * 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 + * @endcode + *) + AV_PKT_DATA_H263_MB_INFO ); TAVPacketSideDataType = record @@ -1312,21 +1245,21 @@ type PAVPacket = ^TAVPacket; TAVPacket = record -(* - * Presentation timestamp in AVStream->time_base units; the time at which - * the decompressed packet will be presented to the user. - * 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. - *) + (* + * Presentation timestamp in AVStream->time_base units; the time at which + * the decompressed packet will be presented to the user. + * 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. + *) pts: cint64; -(* - * Decompression timestamp in AVStream->time_base units; the time at which - * the packet is decompressed. - * Can be AV_NOPTS_VALUE if it is not stored in the file. - *) + (* + * Decompression timestamp in AVStream->time_base units; the time at which + * the packet is decompressed. + * Can be AV_NOPTS_VALUE if it is not stored in the file. + *) dts: cint64; data: PByteArray; size: cint; @@ -1341,31 +1274,31 @@ type *) 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. - *) + (* + * Duration of this packet in AVStream->time_base units, 0 if unknown. + * Equals next_pts - this_pts in presentation order. + *) duration: cint; destruct: procedure (para1: PAVPacket); cdecl; priv: pointer; pos: cint64; // byte position in stream, -1 if unknown -(* - * Time difference in AVStream->time_base units from the pts of this - * packet to the point at which the output from the decoder has converged - * independent from the availability of previous frames. That is, the - * frames are virtually identical no matter if decoding started from - * the very first frame or from this keyframe. - * Is AV_NOPTS_VALUE if unknown. - * This field has no meaning if the packet does not have AV_PKT_FLAG_KEY - * set. - * - * The purpose of this field is to allow seeking in streams that have no - * keyframes in the conventional sense. It corresponds to the - * recovery point SEI in H.264 and match_time_delta in NUT. It is also - * essential for some types of subtitle streams to ensure that all - * subtitles are correctly displayed after seeking. - *) + (* + * Time difference in AVStream->time_base units from the pts of this + * packet to the point at which the output from the decoder has converged + * independent from the availability of previous frames. That is, the + * frames are virtually identical no matter if decoding started from + * the very first frame or from this keyframe. + * Is AV_NOPTS_VALUE if unknown. + * This field has no meaning if the packet does not have AV_PKT_FLAG_KEY + * set. + * + * The purpose of this field is to allow seeking in streams that have no + * keyframes in the conventional sense. It corresponds to the + * recovery point SEI in H.264 and match_time_delta in NUT. It is also + * essential for some types of subtitle streams to ensure that all + * subtitles are correctly displayed after seeking. + *) convergence_duration: cint64; end; {TAVPacket} @@ -1373,25 +1306,7 @@ const AV_PKT_FLAG_KEY = $0001; ///< The packet contains a keyframe AV_PKT_FLAG_CORRUPT = $0002; ///< The packet content is corrupted -{$IF FF_API_DATA_POINTERS} - AV_NUM_DATA_POINTERS = 4; -{$ELSE} AV_NUM_DATA_POINTERS = 8; -{$IFEND} - -(** - * 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 = ( @@ -1400,20 +1315,20 @@ type 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 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. - *) +(** + * Audio Video Frame. + * 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. + *) PAVFrame = ^TAVFrame; TAVFrame = record (** @@ -1430,18 +1345,54 @@ type * For audio, only linesize[0] may be set. For planar audio, each channel * plane must be the same size. * - * - encoding: Set by user (video only) + * - encoding: Set by user * - decoding: set by AVCodecContext.get_buffer() *) 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: + * 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() *) - base: array [0..AV_NUM_DATA_POINTERS - 1] of pbyte; + extended_data: pointer of pbyte; + + (** + * width and height of the video frame + * - encoding: unused + * - decoding: Read by user. + *) + width, height: cint; + + (** + * number of audio samples (per channel) described by this frame + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + nb_samples: cint; + + (** + * format of the frame, -1 if unknown or unset + * Values correspond to enum PixelFormat for video frames, + * enum AVSampleFormat for audio) + * - encoding: unused + * - decoding: Read by user. + *) + format: cint; + (** * 1 -> keyframe, 0-> not * - encoding: Set by libavcodec. @@ -1456,6 +1407,21 @@ type *) pict_type: TAVPictureType; + (** + * 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..AV_NUM_DATA_POINTERS - 1] of pbyte; + + (** + * sample aspect ratio for the video frame, 0/1 if unknown/unspecified + * - encoding: unused + * - decoding: Read by user. + *) + sample_aspect_ratio: TAVRational; + (** * presentation timestamp in time_base units (time when frame should be shown to user) * If AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed. @@ -1464,12 +1430,27 @@ type *) pts: cint64; + (** + * reordered pts from the last AVPacket that has been input into the decoder + * - encoding: unused + * - decoding: Read by user. + *) + pkt_pts: cint64; + + (** + * dts from the last AVPacket that has been input into the decoder + * - encoding: unused + * - decoding: Read by user. + *) + pkt_dts: cint64; + (** * picture number in bitstream order * - encoding: set by * - decoding: Set by libavcodec. *) coded_picture_number: cint; + (** * picture number in display order * - encoding: set by @@ -1484,13 +1465,6 @@ type *) quality: cint; -{$IF FF_API_AVFRAME_AGE} - (** - * @deprecated unused - *) - age: cint; -{$IFEND} - (** * is this picture used as reference * The values for this are the same as the MpegEncContext.picture_structure @@ -1515,6 +1489,11 @@ type *) qstride: cint; + (** + * + *) + qscale_type: cint; + (** * mbskip_table[mb]>=1 if MB didn't change * stride= mb_width = (width+15)>>4 @@ -1547,12 +1526,19 @@ type mb_type: PCuint; (** - * log2 of the size of the block which a single vector in motion_val represents: - * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2) + * DCT coefficients * - encoding: unused * - decoding: Set by libavcodec. *) - motion_subsample_log2: byte; + dct_coeff: PsmallInt; + + (** + * motion reference frame index + * the order in which these are stored can depend on the codec. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + ref_index: array [0..1] of PShortint; (** * for some private data of the user @@ -1584,11 +1570,6 @@ type *) repeat_pict: cint; - (** - * - *) - qscale_type: cint; - (** * The content of the picture is interlaced. * - encoding: Set by user. @@ -1603,13 +1584,6 @@ type *) top_field_first: cint; - (** - * Pan scan. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - *) - pan_scan: PAVPanScan; - (** * Tell user application that palette has changed from previous frame. * - encoding: ??? (no palette-enabled encoder yet) @@ -1625,33 +1599,25 @@ type buffer_hints: cint; (** - * DCT coefficients - * - encoding: unused - * - decoding: Set by libavcodec. - *) - dct_coeff: PsmallInt; - - (** - * motion reference frame index - * the order in which these are stored can depend on the codec. + * Pan scan. * - encoding: Set by user. * - decoding: Set by libavcodec. *) - ref_index: array [0..1] of PShortint; + pan_scan: PAVPanScan; (** * reordered opaque 64bit number (generally a PTS) from AVCodecContext.reordered_opaque - * PTS but can be anything). + * PTS but can be anything). * The user sets AVCodecContext.reordered_opaque to represent the input at * that time, * the decoder reorders values as needed and sets AVFrame.reordered_opaque - * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque + * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque * @deprecated in favor of pkt_pts * - encoding: unused * - decoding: Read by user. *) reordered_opaque: cint64; - + (** * hardware accelerator private data (FFmpeg allocated) * - encoding: unused @@ -1659,20 +1625,6 @@ type *) hwaccel_picture_private: pointer; - (** - * reordered pts from the last AVPacket that has been input into the decoder - * - encoding: unused - * - decoding: Read by user. - *) - pkt_pts: cint64; - - (** - * dts from the last AVPacket that has been input into the decoder - * - encoding: unused - * - decoding: Read by user. - *) - pkt_dts: cint64; - (** * the AVCodecContext which ff_thread_get_buffer() was last called on * - encoding: Set by libavcodec. @@ -1688,70 +1640,75 @@ type thread_opaque: pointer; (** - * number of audio samples (per channel) described by this frame + * log2 of the size of the block which a single vector in motion_val represents: + * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2) * - encoding: unused - * - decoding: Set by libavcodec + * - decoding: Set by libavcodec. *) - nb_samples: cint; + motion_subsample_log2: cuint8; (** - * 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. + * Sample rate of the audio data. * - * encoding: unused - * decoding: set by AVCodecContext.get_buffer() + * - encoding: unused + * - decoding: read by user *) - extended_data: PPointer; + sample_rate: cint; (** - * reordered sample aspect ratio for the video frame, 0/1 if unknown\unspecified + * Channel layout of the audio data. + * * - encoding: unused - * - decoding: Read by user. + * - decoding: read by user. *) - sample_aspect_ratio: TAVRational; + channel_layout: cuint64; (** - * width and height of the video frame + * frame timestamp estimated using various heuristics, in stream time base + * Code outside libavcodec should access this field using: + * av_frame_get_best_effort_timestamp(frame) * - encoding: unused - * - decoding: Read by user. + * - decoding: set by libavcodec, read by user. *) - width, height: cint; + best_effort_timestamp: cint64; (** - * format of the frame, -1 if unknown or unset - * It should be cast to the corresponding enum (enum PixelFormat - * for video, enum AVSampleFormat for audio) - * - encoding: unused - * - decoding: Read by user. - *) - 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 + * reordered pos from the last AVPacket that has been input into the decoder + * Code outside libavcodec should access this field using: + * av_frame_get_pkt_pos(frame) * - encoding: unused * - decoding: Read by user. *) pkt_pos: cint64; end; {TAVFrame} +(** + * Accessors for some AVFrame fields. + * The position of these field in the structure is not part of the ABI, + * they should not be accessed directly outside libavcodec. + *) +function av_frame_get_best_effort_timestamp(frame: {const} PAVFrame): cint64; + cdecl; external av__codec; +function av_frame_get_pkt_pos (frame: {const} PAVFrame): cint64; + cdecl; external av__codec; +function av_frame_get_channel_layout (frame: {const} PAVFrame): cint64; + cdecl; external av__codec; +function av_frame_get_sample_rate (frame: {const} PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_best_effort_timestamp(frame: PAVFrame; val: cint64); + cdecl; external av__codec; +procedure av_frame_set_pkt_pos (frame: PAVFrame; val: cint64); + cdecl; external av__codec; +procedure av_frame_set_channel_layout (frame: PAVFrame; val: cint64); + cdecl; external av__codec; +procedure av_frame_set_sample_rate (frame: PAVFrame; val: cint); + cdecl; external av__codec; + +type + TAVCodecInternal = record + end; + PAVCodecInternal = ^TAVCodecInternal; + PAVClass = ^TAVClass; PPAVCodec = ^PAVCodec; @@ -1766,29 +1723,6 @@ type 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} -(** - * AVPaletteControl - * This structure defines a method for communicating palette changes - * between and demuxer and a decoder. - * - * @deprecated Use AVPacket to send palette changes instead. - * This is totally broken. - *) - PAVPaletteControl = ^TAVPaletteControl; - TAVPaletteControl = record - (* demuxer sets this to 1 to indicate the palette has changed; - * decoder resets to 0 *) - palette_changed: cint; - - (* 4-byte ARGB palette entries, stored in native byte order; note that - * the individual palette components should be on a 8-bit scale; if - * the palette data comes from a IBM VGA native format, the component - * data is probably 6 bits in size and needs to be scaled *) - palette: array [0..AVPALETTE_COUNT - 1] of cuint; - end; {deprecated;} -{$IFEND} AVFieldOrder = ( AV_FIELD_UNKNOWN, @@ -1799,21 +1733,75 @@ type 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*. - *) +(** + * 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_context3 *) av_class: PAVClass; + log_level_offset: cint; + + codec_type: TAVMediaType; (* see AVMEDIA_TYPE_xxx *) + codec: PAVCodec; + codec_name: array [0..31] of AnsiChar; + codec_id: TCodecID; (* see CODEC_ID_xxx *) + + (** + * 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. + *) + codec_tag: cuint; + + (** + * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). + * This is used to work around some encoder bugs. + * - encoding: unused + * - decoding: Set by user, will be converted to uppercase by libavcodec during init. + *) + stream_codec_tag: cuint; + +{$IF FF_API_SUB_ID} + (** + * @deprecated this field is unused + *) + sub_id: cint; +{$IFEND} + + priv_data: pointer; + + (** + * Private context used for internal data. + * + * Unlike priv_data, this is not codec-specific. It is used in general + * libavcodec functions. + *) + internal: PAVCodecInternal; + + (** + * Private data of the user, can be used to carry app specific stuff. + * - encoding: Set by user. + * - decoding: Set by user. + *) + opaque: pointer; + (** * the average bitrate * - encoding: Set by user; unused for constant quantizer encoding. @@ -1830,30 +1818,32 @@ type bit_rate_tolerance: cint; (** - * CODEC_FLAG_*. + * Global quality for codecs which cannot change it per frame. + * This should be proportional to MPEG-1/2/4 qscale. * - encoding: Set by user. - * - decoding: Set by user. + * - decoding: unused *) - flags: cint; + global_quality: cint; (** - * 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 recommended. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. (FIXME: Is this OK?) + * - encoding: Set by user. + * - decoding: unused *) - sub_id: cint; + compression_level: cint; (** - * Motion estimation algorithm used for video coding. - * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex), - * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific] - * - encoding: MUST be set by user. - * - decoding: unused + * CODEC_FLAG_*. + * - encoding: Set by user. + * - decoding: Set by user. *) - me_method: cint; + flags: cint; + + (** + * CODEC_FLAG2_* + * - encoding: Set by user. + * - decoding: Set by user. + *) + flags2: cint; (** * some codecs need / can use extradata like Huffman tables. @@ -1879,6 +1869,38 @@ type *) time_base: TAVRational; + (** + * 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. + *) + ticks_per_frame: cint; + + (** + * 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. + * + * Video: + * Number of frames the decoded output will be delayed relative to the + * encoded input. + * + * Audio: + * Number of "priming" samples added to the beginning of the stream + * during encoding. The decoded output will be delayed by this many + * samples relative to the input to the encoder. Note that this field is + * purely informational and does not directly affect the pts output by + * the encoder, which should always be based on the actual presentation + * time, including any delay. + * + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + delay: cint; + (* video only *) (** * picture width / height. @@ -1889,6 +1911,13 @@ type *) width, height: cint; + (** + * 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. + *) + coded_width, coded_height: cint; + (** * the number of pictures in a group of pictures, or 0 for intra_only * - encoding: Set by user. @@ -1905,6 +1934,15 @@ type *) pix_fmt: TAVPixelFormat; + (** + * Motion estimation algorithm used for video coding. + * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex), + * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific] + * - encoding: MUST be set by user. + * - decoding: unused + *) + me_method: cint; + (** * If non NULL, 'draw_horiz_band' is called by the libavcodec * decoder to draw a horizontal band. It improves cache usage. Not @@ -1928,756 +1966,655 @@ type src: {const} PAVFrame; offset: PAVNDPArray; y: cint; type_: cint; height: cint); cdecl; - (* audio only *) - sample_rate: cint; ///< samples per second - channels: cint; ///< number of audio channels - (** - * audio sample format - * - encoding: Set by user. - * - decoding: Set by libavcodec. + * 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. + * @return the chosen format + * - encoding: unused + * - decoding: Set by user, if not set the native format will be chosen. *) - sample_fmt: TAVSampleFormat; ///< sample format + get_format: function (s: PAVCodecContext; fmt: {const} PAVPixelFormat): TAVPixelFormat; cdecl; - (* The following data should not be initialized. *) (** - * Samples per packet, initialized when calling 'init'. + * 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. + * - decoding: unused *) - frame_size: cint; - frame_number: cint; ///< audio or video frame number + max_b_frames: cint; (** - * 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. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. + * qscale factor between IP and B-frames + * 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). + * - encoding: Set by user. + * - decoding: unused *) - delay: cint; + b_quant_factor: cfloat; - (* - encoding parameters *) - qcompress: cfloat; ///< amount of qscale change between easy & hard scenes (0.0-1.0) - qblur: cfloat; ///< amount of qscale smoothing over time (0.0-1.0) + (** obsolete FIXME remove *) + rc_strategy: cint; + + b_frame_strategy: cint; +{$IFDEF FF_API_MPV_GLOBAL_OPTS} (** - * minimum quantizer + * luma single coefficient elimination threshold * - encoding: Set by user. * - decoding: unused *) - qmin: cint; + luma_elim_threshold: cint; {deprecated} - (** - * maximum quantizer + (** + * chroma single coeff elimination threshold * - encoding: Set by user. * - decoding: unused *) - qmax: cint; + chroma_elim_threshold: cint; {deprecated} +{$ENDIF} (** - * maximum quantizer difference between frames + * qscale offset between IP and B-frames * - encoding: Set by user. * - decoding: unused *) - max_qdiff: cint; + b_quant_offset: cfloat; (** - * maximum number of B-frames between non-B-frames - * Note: The output will be delayed by max_b_frames+1 relative to the input. + * Size of the frame reordering buffer in the decoder. + * For MPEG-2 it is 1 IPB or 0 low delay IP. + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + has_b_frames: cint; + + (** + * 0-> h263 quant 1-> mpeg quant * - encoding: Set by user. * - decoding: unused *) - max_b_frames: cint; + mpeg_quant: cint; (** - * qscale factor between IP and B-frames - * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset). + * qscale factor between P and I-frames + * 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). * - encoding: Set by user. * - decoding: unused *) - b_quant_factor: cfloat; + i_quant_factor: cfloat; - (** obsolete FIXME remove *) - rc_strategy: cint; + (** + * qscale offset between P and I-frames + * - encoding: Set by user. + * - decoding: unused + *) + i_quant_offset: cfloat; - b_frame_strategy: cint; + (** + * luminance masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + lumi_masking: cfloat; - codec: PAVCodec; + (** + * temporary complexity masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + temporal_cplx_masking: cfloat; - priv_data: pointer; - - rtp_payload_size: cint; (* The size of the RTP payload: the coder will *) - (* do it's 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 transmited RTP payload *) - - - (* The RTP callback: This function is called *) - (* every time the encoder has a packet to send *) - (* 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 *) - rtp_callback: procedure (avctx: PAVCodecContext; data: pointer; - size: cint; mb_nb: cint); cdecl; - - (* statistics, used for 2-pass encoding *) - mv_bits: cint; - header_bits: cint; - i_tex_bits: cint; - p_tex_bits: cint; - i_count: cint; - p_count: cint; - skip_count: cint; - misc_bits: cint; + (** + * spatial complexity masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + spatial_cplx_masking: cfloat; (** - * number of bits used for the previously encoded frame - * - encoding: Set by libavcodec. + * p block masking (0-> disabled) + * - encoding: Set by user. * - decoding: unused *) - frame_bits: cint; + p_masking: cfloat; (** - * Private data of the user, can be used to carry app specific stuff. + * darkness masking (0-> disabled) * - encoding: Set by user. - * - decoding: Set by user. - *) - opaque: pointer; - - codec_name: array [0..31] of AnsiChar; - codec_type: TAVMediaType; (* see AVMEDIA_TYPE_xxx *) - codec_id: TCodecID; (* see CODEC_ID_xxx *) - - (** - * 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. + * - decoding: unused *) - codec_tag: cuint; + dark_masking: cfloat; (** - * Work around bugs in encoders which sometimes cannot be detected automatically. - * - encoding: Set by user - * - decoding: Set by user + * slice count + * - encoding: Set by libavcodec. + * - decoding: Set by user (or 0). *) - workaround_bugs: cint; + slice_count: cint; (** - * luma single coefficient elimination threshold + * prediction method (needed for huffyuv) * - encoding: Set by user. * - decoding: unused *) - luma_elim_threshold: cint; + prediction_method: cint; (** - * chroma single coeff elimination threshold - * - encoding: Set by user. - * - decoding: unused + * slice offsets in the frame in bytes + * - encoding: Set/allocated by libavcodec. + * - decoding: Set/allocated by user (or NULL). *) - chroma_elim_threshold: cint; + slice_offset: PCint; (** - * strictly follow the standard (MPEG4, ...). + * 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. * - encoding: Set by user. - * - 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) + * - decoding: Set by libavcodec. *) - strict_std_compliance: cint; + sample_aspect_ratio: TAVRational; (** - * qscale offset between IP and B-frames + * motion estimation comparison function * - encoding: Set by user. * - decoding: unused *) - b_quant_offset: cfloat; - -{$IF FF_API_ER} - (** - * Error recognition; higher values will detect more errors but may - * misdetect some more or less valid parts as errors. - * - encoding: unused - * - decoding: Set by user. - *) - error_recognition: cint; {deprecated} -{$IFEND} - - (** - * Called at the beginning of each frame to get a buffer for it. - * - * 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. - * - * If frame multithreading is used and thread_safe_callbacks is set, - * 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. - *) - get_buffer: function (c: PAVCodecContext; pic: PAVFrame): cint; cdecl; - - (** - * Called to release buffers which were allocated with get_buffer. - * A released buffer can be reused in get_buffer(). - * pic.data[*] must be set to NULL. - * - encoding: unused - * - decoding: Set by libavcodec, user can override. - *) - release_buffer: procedure (c: PAVCodecContext; pic: PAVFrame); cdecl; + me_cmp: cint; (** - * Size of the frame reordering buffer in the decoder. - * For MPEG-2 it is 1 IPB or 0 low delay IP. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. + * subpixel motion estimation comparison function + * - encoding: Set by user. + * - decoding: unused *) - has_b_frames: cint; - + me_sub_cmp: cint; (** - * number of bytes per packet if constant and known or 0 - * Used by some WAV based audio codecs. + * macroblock comparison function (not supported yet) + * - encoding: Set by user. + * - decoding: unused *) - block_align: cint; - -{$IF FF_API_PARSE_FRAME} + mb_cmp: cint; (** - * If true, only parsing is done. The frame data is returned. - * Only MPEG audio decoders support this now. - * - encoding: unused - * - decoding: Set by user + * interlaced DCT comparison function + * - encoding: Set by user. + * - decoding: unused *) - parse_only: cint; {deprecated} -{$IFEND} + ildct_cmp: cint; (** - * 0-> h263 quant 1-> mpeg quant + * ME diamond size & shape * - encoding: Set by user. * - decoding: unused *) - mpeg_quant: cint; + dia_size: cint; (** - * pass1 encoding statistics output buffer - * - encoding: Set by libavcodec. + * amount of previous MV predictors (2a+1 x 2a+1 square) + * - encoding: Set by user. * - decoding: unused *) - stats_out: PAnsiChar; + last_predictor_count: cint; (** - * pass2 encoding statistics input buffer - * Concatenated stuff from stats_out of pass1 should be placed here. - * - encoding: Allocated/set/freed by user. + * prepass for motion estimation + * - encoding: Set by user. * - decoding: unused *) - stats_in: PAnsiChar; + pre_me: cint; (** - * ratecontrol qmin qmax limiting method - * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax. + * motion estimation prepass comparison function * - encoding: Set by user. * - decoding: unused *) - rc_qsquish: cfloat; - - rc_qmod_amp: cfloat; - rc_qmod_freq: cint; + me_pre_cmp: cint; (** - * ratecontrol override, see RcOverride - * - encoding: Allocated/set/freed by user. + * ME prepass diamond size & shape + * - encoding: Set by user. * - decoding: unused *) - rc_override: PRcOverride; - rc_override_count: cint; + pre_dia_size: cint; (** - * rate control equation - * - encoding: Set by user + * subpel ME quality + * - encoding: Set by user. * - decoding: unused *) - rc_eq: {const} PAnsiChar; + me_subpel_quality: cint; (** - * maximum bitrate - * - encoding: Set by user. - * - decoding: unused + * 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. *) - rc_max_rate: cint; + dtg_active_format: cint; (** - * minimum bitrate + * maximum motion estimation search range in subpel units + * If 0 then no limit. + * * - encoding: Set by user. * - decoding: unused *) - rc_min_rate: cint; + me_range: cint; (** - * decoder bitstream buffer size + * intra quantizer bias * - encoding: Set by user. * - decoding: unused *) - rc_buffer_size: cint; - rc_buffer_aggressivity: cfloat; + intra_quant_bias: cint; (** - * qscale factor between P and I-frames - * 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). + * inter quantizer bias * - encoding: Set by user. * - decoding: unused *) - i_quant_factor: cfloat; + inter_quant_bias: cint; +{$IFDEF FF_API_COLOR_TABLE_ID} (** - * qscale offset between P and I-frames - * - encoding: Set by user. - * - decoding: unused + * color table ID + * - encoding: unused + * - decoding: Which clrtable should be used for 8bit RGB images. + * Tables have to be stored somewhere. FIXME *) - i_quant_offset: cfloat; + color_table_id: cint; {deprecated} +{$ENDIF} (** - * initial complexity for pass1 ratecontrol - * - encoding: Set by user. - * - decoding: unused + * slice flags + * - encoding: unused + * - decoding: Set by user. *) - rc_initial_cplx: cfloat; + slice_flags: cint; (** - * DCT algorithm, see FF_DCT_* below - * - encoding: Set by user. - * - decoding: unused + * XVideo Motion Acceleration + * - encoding: forbidden + * - decoding: set by decoder *) - dct_algo: cint; + xvmc_acceleration: cint; (** - * luminance masking (0-> disabled) + * macroblock decision mode * - encoding: Set by user. * - decoding: unused *) - lumi_masking: cfloat; + mb_decision: cint; (** - * temporary complexity masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused + * custom intra quantization matrix + * - encoding: Set by user, can be NULL. + * - decoding: Set by libavcodec. *) - temporal_cplx_masking: cfloat; + intra_matrix: PWord; (** - * spatial complexity masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused + * custom inter quantization matrix + * - encoding: Set by user, can be NULL. + * - decoding: Set by libavcodec. *) - spatial_cplx_masking: cfloat; + inter_matrix: PWord; (** - * p block masking (0-> disabled) + * scene change detection threshold + * 0 is default, larger means fewer detected scene changes. * - encoding: Set by user. * - decoding: unused *) - p_masking: cfloat; + scenechange_threshold: cint; (** - * darkness masking (0-> disabled) + * noise reduction strength * - encoding: Set by user. * - decoding: unused *) - dark_masking: cfloat; + noise_reduction: cint; +{$IFDEF FF_API_INTER_THRESHOLD} (** - * IDCT algorithm, see FF_IDCT_* below. + * * - encoding: Set by user. - * - decoding: Set by user. - *) - idct_algo: cint; - - (** - * slice count - * - encoding: Set by libavcodec. - * - decoding: Set by user (or 0). - *) - slice_count: cint; - - (** - * slice offsets in the frame in bytes - * - encoding: Set/allocated by libavcodec. - * - decoding: Set/allocated by user (or NULL). + * - decoding: unused *) - slice_offset: PCint; + inter_threshold: cint; {deprecated} +{$ENDIF} +{$IFDEF FF_API_MPV_GLOBAL_OPTS} (** - * error concealment flags - * - encoding: unused - * - decoding: Set by user. + * quantizer noise shaping + * - encoding: Set by user. + * - decoding: unused *) - error_concealment: cint; + quantizer_noise_shaping: cint; {deprecated} +{$ENDIF} (** - * dsp_mask could be add used to disable unwanted CPU features - * CPU features (i.e. MMX, SSE. ...) + * Motion estimation threshold below which no motion estimation is + * performed, but instead the user specified motion vectors are used. * - * With the FORCE flag you may instead enable given CPU features. - * (Dangerous: Usable in case of misdetection, improper usage however will - * result into program crash.) - *) - dsp_mask: cuint; - - (** - * bits per sample/pixel from the demuxer (needed for huffyuv). - * - encoding: Set by libavcodec. - * - decoding: Set by user. + * - encoding: Set by user. + * - decoding: unused *) - bits_per_coded_sample: cint; + me_threshold: cint; (** - * prediction method (needed for huffyuv) + * Macroblock threshold below which the user specified macroblock types will be used. * - encoding: Set by user. * - decoding: unused *) - prediction_method: cint; + mb_threshold: cint; (** - * 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. + * precision of the intra DC coefficient - 8 * - encoding: Set by user. - * - decoding: Set by libavcodec. + * - decoding: unused *) - sample_aspect_ratio: TAVRational; + intra_dc_precision: cint; (** - * the picture in the bitstream - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. + * Number of macroblock rows at the top which are skipped. + * - encoding: unused + * - decoding: Set by user. *) - coded_frame: PAVFrame; + skip_top: cint; (** - * debug - * - encoding: Set by user. + * Number of macroblock rows at the bottom which are skipped. + * - encoding: unused * - decoding: Set by user. *) - debug: cint; + skip_bottom: cint; (** - * debug + * Border processing masking, raises the quantizer for mbs on the borders + * of the picture. * - encoding: Set by user. - * - decoding: Set by user. + * - decoding: unused *) - debug_mv: cint; + border_masking: cfloat; (** - * error - * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR. + * minimum MB lagrange multipler + * - encoding: Set by user. * - decoding: unused *) - error: array [0..AV_NUM_DATA_POINTERS - 1] of cuint64; + mb_lmin: cint; (** - * motion estimation comparison function + * maximum MB lagrange multipler * - encoding: Set by user. * - decoding: unused *) - me_cmp: cint; + mb_lmax: cint; (** - * subpixel motion estimation comparison function + * * - encoding: Set by user. * - decoding: unused *) - me_sub_cmp: cint; + me_penalty_compensation: cint; + (** - * macroblock comparison function (not supported yet) + * * - encoding: Set by user. * - decoding: unused *) - mb_cmp: cint; + bidir_refine: cint; + (** - * interlaced DCT comparison function + * * - encoding: Set by user. * - decoding: unused *) - ildct_cmp: cint; + brd_scale: cint; (** - * ME diamond size & shape + * minimum GOP size * - encoding: Set by user. * - decoding: unused *) - dia_size: cint; + keyint_min: cint; (** - * amount of previous MV predictors (2a+1 x 2a+1 square) + * number of reference frames * - encoding: Set by user. - * - decoding: unused + * - decoding: Set by lavc. *) - last_predictor_count: cint; + refs: cint; (** - * prepass for motion estimation + * chroma qp offset from luma * - encoding: Set by user. * - decoding: unused *) - pre_me: cint; + chromaoffset: cint; (** - * motion estimation prepass comparison function + * Multiplied by qscale for each frame and added to scene_change_score. * - encoding: Set by user. * - decoding: unused *) - me_pre_cmp: cint; + scenechange_factor: cint; (** - * ME prepass diamond size & shape + * + * Note: Value depends upon the compare function used for fullpel ME. * - encoding: Set by user. * - decoding: unused *) - pre_dia_size: cint; + mv0_threshold: cint; (** - * subpel ME quality + * Adjust sensitivity of b_frame_strategy 1. * - encoding: Set by user. * - decoding: unused *) - me_subpel_quality: cint; + b_sensitivity: cint; (** - * 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. - * @return the chosen format - * - encoding: unused - * - decoding: Set by user, if not set the native format will be chosen. + * Chromaticity coordinates of the source primaries. + * - encoding: Set by user + * - decoding: Set by libavcodec *) - get_format: function (s: PAVCodecContext; fmt: {const} PAVPixelFormat): TAVPixelFormat; cdecl; + color_primaries: TAVColorPrimaries; (** - * 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. + * Color Transfer Characteristic. + * - encoding: Set by user + * - decoding: Set by libavcodec *) - dtg_active_format: cint; + color_trc: TAVColorTransferCharacteristic; (** - * maximum motion estimation search range in subpel units - * If 0 then no limit. - * - * - encoding: Set by user. - * - decoding: unused + * YUV colorspace type. + * - encoding: Set by user + * - decoding: Set by libavcodec *) - me_range: cint; + colorspace: TAVColorSpace; (** - * intra quantizer bias - * - encoding: Set by user. - * - decoding: unused + * MPEG vs JPEG YUV range. + * - encoding: Set by user + * - decoding: Set by libavcodec *) - intra_quant_bias: cint; + color_range: TAVColorRange; (** - * inter quantizer bias - * - encoding: Set by user. - * - decoding: unused + * This defines the location of chroma samples. + * - encoding: Set by user + * - decoding: Set by libavcodec *) - inter_quant_bias: cint; + chroma_sample_location: TAVChromaLocation; (** - * color table ID - * - encoding: unused - * - decoding: Which clrtable should be used for 8bit RGB images. - * Tables have to be stored somewhere. FIXME + * Number of slices. + * Indicates number of picture subdivisions. Used for parallelized + * decoding. + * - encoding: Set by user + * - decoding: unused *) - color_table_id: cint; + slices: cint; -{$IF 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 + (** Field order + * - encoding: set by libavcodec + * - decoding: Set by libavcodec *) - internal_buffer_count: cint; {deprecated} + field_order: AVFieldOrder; - (** - * internal_buffers - * Don't touch, used by libavcodec default_get_buffer(). - * @deprecated this field was moved to an internal context - *) - internal_buffer: pointer; {deprecated} -{$IFEND} + (* audio only *) + sample_rate: cint; ///< samples per second + channels: cint; ///< number of audio channels (** - * Global quality for codecs which cannot change it per frame. - * This should be proportional to MPEG-1/2/4 qscale. + * audio sample format * - encoding: Set by user. - * - decoding: unused + * - decoding: Set by libavcodec. *) - global_quality: cint; + sample_fmt: TAVSampleFormat; ///< sample format + (* The following data should not be initialized. *) (** - * coder type - * - encoding: Set by user. - * - decoding: unused - *) - coder_type: cint; - - (** - * context model - * - encoding: Set by user. - * - decoding: unused + * Samples per packet, initialized when calling 'init'. *) - context_model: cint; + frame_size: cint; (** + * Frame counter, set by libavcodec. * - * - encoding: unused - * - decoding: Set by user. - *) -// realloc: function (s: PAVCodecContext; buf: Pbyte; buf_size: cint): Pbyte; cdecl; - - (** - * slice flags - * - encoding: unused - * - decoding: Set by user. + * - 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. *) - slice_flags: cint; + frame_number: cint; ///< audio or video frame number (** - * XVideo Motion Acceleration - * - encoding: forbidden - * - decoding: set by decoder + * number of bytes per packet if constant and known or 0 + * Used by some WAV based audio codecs. *) - xvmc_acceleration: cint; + block_align: cint; (** - * macroblock decision mode + * Audio cutoff bandwidth (0 means "automatic") * - encoding: Set by user. * - decoding: unused *) - mb_decision: cint; + cutoff: cint; +{$IF FF_API_REQUEST_CHANNELS} (** - * custom intra quantization matrix - * - encoding: Set by user, can be NULL. - * - decoding: Set by libavcodec. + * Decoder should decode to this many channels if it can (0 for default) + * - encoding: unused + * - decoding: Set by user. + * @deprecated Deprecated in favor of request_channel_layout. *) - intra_matrix: PWord; + request_channels: cint; {deprecated} +{$IFEND} (** - * custom inter quantization matrix - * - encoding: Set by user, can be NULL. - * - decoding: Set by libavcodec. + * Audio channel layout. + * - encoding: set by user. + * - decoding: set by libavcodec. *) - inter_matrix: PWord; + channel_layout: cuint64; (** - * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). - * This is used to work around some encoder bugs. + * Request decoder to use this channel layout if it can (0 for default) * - encoding: unused - * - decoding: Set by user, will be converted to uppercase by libavcodec during init. - *) - stream_codec_tag: cuint; - - (** - * scene change detection threshold - * 0 is default, larger means fewer detected scene changes. - * - encoding: Set by user. - * - decoding: unused + * - decoding: Set by user. *) - scenechange_threshold: cint; + request_channel_layout: cuint64; (** - * minimum Lagrange multipler + * Type of service that the audio stream conveys. * - encoding: Set by user. - * - decoding: unused + * - decoding: Set by libavcodec. *) - lmin: cint; + audio_service_type: TAVAudioServiceType; (** - * maximum Lagrange multipler - * - encoding: Set by user. - * - decoding: unused + * desired sample format + * - encoding: Not used. + * - decoding: Set by user. + * Decoder will decode to this format if it can. *) - lmax: cint; + request_sample_fmt: TAVSampleFormat; -{$IF FF_API_PALETTE_CONTROL} (** - * palette control structure - * - encoding: ??? (no palette-enabled encoder yet) - * - decoding: Set by user. + * Called at the beginning of each frame to get a buffer for it. + * + * 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. + * + * If frame multithreading is used and thread_safe_callbacks is set, + * 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. *) - palctrl: PAVPaletteControl; -{$IFEND} + get_buffer: function (c: PAVCodecContext; pic: PAVFrame): cint; cdecl; (** - * noise reduction strength - * - encoding: Set by user. - * - decoding: unused + * Called to release buffers which were allocated with get_buffer. + * A released buffer can be reused in get_buffer(). + * pic.data[*] must be set to NULL. + * - encoding: unused + * - decoding: Set by libavcodec, user can override. *) - noise_reduction: cint; + release_buffer: procedure (c: PAVCodecContext; pic: PAVFrame); cdecl; (** * Called at the beginning of a frame to get cr buffer for it. @@ -2693,148 +2630,134 @@ type *) reget_buffer: function (c: PAVCodecContext; pic: PAVFrame): cint; cdecl; + (* - encoding parameters *) + qcompress: cfloat; ///< amount of qscale change between easy & hard scenes (0.0-1.0) + qblur: cfloat; ///< amount of qscale smoothing over time (0.0-1.0) + (** - * Number of bits which should be loaded into the rc buffer before decoding starts. + * minimum quantizer * - encoding: Set by user. * - decoding: unused *) - rc_initial_buffer_occupancy: cint; + qmin: cint; + + (** + * maximum quantizer + * - encoding: Set by user. + * - decoding: unused + *) + qmax: cint; (** - * + * maximum quantizer difference between frames * - encoding: Set by user. * - decoding: unused *) - inter_threshold: cint; + max_qdiff: cint; (** - * CODEC_FLAG2_* + * ratecontrol qmin qmax limiting method + * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax. * - encoding: Set by user. - * - decoding: Set by user. + * - decoding: unused *) - flags2: cint; + rc_qsquish: cfloat; + + rc_qmod_amp: cfloat; + rc_qmod_freq: cint; (** - * Simulates errors in the bitstream to test error concealment. + * decoder bitstream buffer size * - encoding: Set by user. * - decoding: unused *) - error_rate: cint; + rc_buffer_size: cint; + (** + * ratecontrol override, see RcOverride + * - encoding: Allocated/set/freed by user. + * - decoding: unused + *) + rc_override_count: cint; + rc_override: PRcOverride; -{$IF FF_API_ANTIALIAS_ALGO} (** - * MP3 antialias algorithm, see FF_AA_* below. - * - encoding: unused - * - decoding: Set by user. + * rate control equation + * - encoding: Set by user + * - decoding: unused *) - antialias_algo: cint; {deprecated} -{$IFEND} + rc_eq: {const} PAnsiChar; (** - * quantizer noise shaping + * maximum bitrate * - encoding: Set by user. * - decoding: unused *) - quantizer_noise_shaping: cint; + rc_max_rate: cint; (** - * thread count - * is used to decide how many independent tasks should be passed to execute() + * minimum bitrate * - encoding: Set by user. - * - decoding: Set by user. + * - decoding: unused *) - thread_count: cint; + rc_min_rate: cint; + + rc_buffer_aggressivity: cfloat; (** - * 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. + * initial complexity for pass1 ratecontrol + * - encoding: Set by user. + * - decoding: unused *) - execute: function (c: PAVCodecContext; func: TExecuteFunc; arg: Pointer; ret: PCint; count: cint; size: cint): cint; cdecl; + rc_initial_cplx: cfloat; (** - * thread opaque - * Can be used by execute() to store some per AVCodecContext stuff. - * - encoding: set by execute() - * - decoding: set by execute() + * Ratecontrol attempt to use, at maximum, of what can be used without an underflow. + * - encoding: Set by user. + * - decoding: unused. *) - thread_opaque: pointer; + rc_max_available_vbv_use: cfloat; (** - * Motion estimation threshold below which no motion estimation is - * performed, but instead the user specified motion vectors are used. - * + * Ratecontrol attempt to use, at least, times the amount needed to prevent a vbv overflow. * - encoding: Set by user. - * - decoding: unused + * - decoding: unused. *) - me_threshold: cint; + rc_min_vbv_overflow_use: cfloat; (** - * Macroblock threshold below which the user specified macroblock types will be used. + * Number of bits which should be loaded into the rc buffer before decoding starts. * - encoding: Set by user. * - decoding: unused *) - mb_threshold: cint; + rc_initial_buffer_occupancy: cint; (** - * precision of the intra DC coefficient - 8 + * coder type * - encoding: Set by user. * - decoding: unused *) - intra_dc_precision: cint; + coder_type: cint; (** - * noise vs. sse weight for the nsse comparsion function + * context model * - encoding: Set by user. * - decoding: unused *) - nsse_weight: cint; + context_model: cint; (** - * Number of macroblock rows at the top which are skipped. - * - encoding: unused - * - decoding: Set by user. + * minimum Lagrange multipler + * - encoding: Set by user. + * - decoding: unused *) - skip_top: cint; - - (** - * Number of macroblock rows at the bottom which are skipped. - * - encoding: unused - * - decoding: Set by user. - *) - skip_bottom: cint; - - (** - * profile - * - encoding: Set by user. - * - decoding: Set by libavcodec. - *) - profile: cint; + lmin: cint; (** - * level + * maximum Lagrange multipler * - encoding: Set by user. - * - decoding: Set by libavcodec. - *) - level: cint; - - (** - * low resolution decoding, 1-> 1/2 size, 2->1/4 size - * - encoding: unused - * - decoding: Set by user. - *) - lowres: cint; - - (** - * 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. + * - decoding: unused *) - coded_width, coded_height: cint; + lmax: cint; (** * frame skip threshold @@ -2865,377 +2788,257 @@ type frame_skip_cmp: cint; (** - * Border processing masking, raises the quantizer for mbs on the borders - * of the picture. + * trellis RD quantization * - encoding: Set by user. * - decoding: unused *) - border_masking: cfloat; + trellis: cint; (** - * minimum MB lagrange multipler * - encoding: Set by user. * - decoding: unused *) - mb_lmin: cint; + min_prediction_order: cint; (** - * maximum MB lagrange multipler * - encoding: Set by user. * - decoding: unused *) - mb_lmax: cint; + max_prediction_order: cint; (** - * - * - encoding: Set by user. - * - decoding: unused + * GOP timecode frame start number, in non drop frame format + * - encoding: Set by user, in non drop frame format + * - decoding: Set by libavcodec (timecode in the 25 bits format, -1 if unset) *) - me_penalty_compensation: cint; + timecode_frame_start: cint64; - (** - * - * - encoding: unused - * - decoding: Set by user. - *) - skip_loop_filter: TAVDiscard; + (* The RTP callback: This function is called *) + (* every time the encoder has a packet to send *) + (* 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 *) + rtp_callback: procedure (avctx: PAVCodecContext; data: pointer; + size: cint; mb_nb: cint); cdecl; - (** - * - * - encoding: unused - * - decoding: Set by user. - *) - skip_idct: TAVDiscard; + rtp_payload_size: cint; (* The size of the RTP payload: the coder will *) + (* do it's 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 transmited RTP payload *) - (** - * - * - encoding: unused - * - decoding: Set by user. - *) - skip_frame: TAVDiscard; + (* statistics, used for 2-pass encoding *) + mv_bits: cint; + header_bits: cint; + i_tex_bits: cint; + p_tex_bits: cint; + i_count: cint; + p_count: cint; + skip_count: cint; + misc_bits: cint; (** - * - * - encoding: Set by user. + * number of bits used for the previously encoded frame + * - encoding: Set by libavcodec. * - decoding: unused *) - bidir_refine: cint; + frame_bits: cint; (** - * - * - encoding: Set by user. + * pass1 encoding statistics output buffer + * - encoding: Set by libavcodec. * - decoding: unused *) - brd_scale: cint; + stats_out: PAnsiChar; -{$IF FF_API_X264_GLOBAL_OPTS} (** - * constant rate factor - quality-based VBR - values ~correspond to qps - * - encoding: Set by user. + * pass2 encoding statistics input buffer + * Concatenated stuff from stats_out of pass1 should be placed here. + * - encoding: Allocated/set/freed by user. * - decoding: unused - * @deprecated use 'crf' libx264 private option *) - crf: cfloat; {deprecated} + stats_in: PAnsiChar; (** - * constant quantization parameter rate control method - * - encoding: Set by user. - * - decoding: unused - * @deprecated use 'cqp' libx264 private option + * Work around bugs in encoders which sometimes cannot be detected automatically. + * - encoding: Set by user + * - decoding: Set by user *) - cqp: cint; {deprecated} -{$IFEND} + workaround_bugs: cint; (** - * minimum GOP size + * strictly follow the standard (MPEG4, ...). * - encoding: Set by user. - * - decoding: unused + * - 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) *) - keyint_min: cint; + strict_std_compliance: cint; (** - * number of reference frames - * - encoding: Set by user. - * - decoding: Set by lavc. + * error concealment flags + * - encoding: unused + * - decoding: Set by user. *) - refs: cint; + error_concealment: cint; (** - * chroma qp offset from luma + * debug * - encoding: Set by user. - * - decoding: unused + * - decoding: Set by user. *) - chromaoffset: cint; + debug: cint; -{$IF FF_API_X264_GLOBAL_OPTS} (** - * Influences how often B-frames are used. + * debug * - encoding: Set by user. - * - decoding: unused + * - decoding: Set by user. *) - bframebias: cint; {deprecated} -{$IFEND} + debug_mv: cint; (** - * trellis RD quantization - * - encoding: Set by user. - * - decoding: unused + * Error recognition; may misdetect some more or less valid parts as errors. + * - encoding: unused + * - decoding: Set by user. *) - trellis: cint; + err_recognition: cint; -{$IF FF_API_X264_GLOBAL_OPTS} (** - * Reduce fluctuations in qp (before curve compression). - * - encoding: Set by user. - * - decoding: unused + * opaque 64bit number (generally a PTS) that will be reordered and + * output in AVFrame.reordered_opaque + * - encoding: unused + * - decoding: Set by user. *) - complexityblur: cfloat; {deprecated} + reordered_opaque: cint64; (** - * in-loop deblocking filter alphac0 parameter - * alpha is in the range -6...6 - * - encoding: Set by user. - * - decoding: unused + * Hardware accelerator in use + * - encoding: unused. + * - decoding: Set by libavcodec *) - deblockalpha: cint; {deprecated} + hwaccel: PAVHWAccel; (** - * in-loop deblocking filter beta parameter - * beta is in the range -6...6 - * - encoding: Set by user. - * - decoding: unused + * Hardware accelerator context. + * For some hardware accelerators, a global context needs to be + * provided by the user. In that case, this holds display-dependent + * data FFmpeg cannot instantiate itself. Please refer to the + * FFmpeg HW accelerator documentation to know how to fill this + * is. e.g. for VA API, this is a struct vaapi_context. + * - encoding: unused + * - decoding: Set by user *) - deblockbeta: cint; {deprecated} + hwaccel_context: pointer; (** - * macroblock subpartition sizes to consider - p8x8, p4x4, b8x8, i8x8, i4x4 - * - encoding: Set by user. + * error + * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR. * - decoding: unused *) - partitions: cint; {deprecated} + error: array [0..AV_NUM_DATA_POINTERS - 1] of cuint64; (** - * direct MV prediction mode - 0 (none), 1 (spatial), 2 (temporal), 3 (auto) + * DCT algorithm, see FF_DCT_* below * - encoding: Set by user. * - decoding: unused *) - directpred: cint; {deprecated} -{$IFEND} + dct_algo: cint; (** - * Audio cutoff bandwidth (0 means "automatic") + * IDCT algorithm, see FF_IDCT_* below. * - encoding: Set by user. - * - decoding: unused + * - decoding: Set by user. *) - cutoff: cint; + idct_algo: cint; +{$IF FF_API_DSP_MASK} (** - * Multiplied by qscale for each frame and added to scene_change_score. - * - encoding: Set by user. - * - decoding: unused + * Unused. + * @deprecated use av_set_cpu_flags_mask() instead. *) - scenechange_factor: cint; + dsp_mask: cuint; {deprecated} +{$IFEND} (** - * - * Note: Value depends upon the compare function used for fullpel ME. - * - encoding: Set by user. - * - decoding: unused + * bits per sample/pixel from the demuxer (needed for huffyuv). + * - encoding: Set by libavcodec. + * - decoding: Set by user. *) - mv0_threshold: cint; + bits_per_coded_sample: cint; (** - * Adjust sensitivity of b_frame_strategy 1. - * - encoding: Set by user. - * - decoding: unused + * Bits per sample/pixel of internal libavcodec pixel/sample format. + * - encoding: set by user. + * - decoding: set by libavcodec. *) - b_sensitivity: cint; + bits_per_raw_sample: cint; (** - * - encoding: Set by user. - * - decoding: unused + * low resolution decoding, 1-> 1/2 size, 2->1/4 size + * - encoding: unused + * - decoding: Set by user. *) - compression_level: cint; + lowres: cint; (** - * - encoding: Set by user. - * - decoding: unused + * the picture in the bitstream + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. *) - min_prediction_order: cint; + coded_frame: PAVFrame; (** + * thread count + * is used to decide how many independent tasks should be passed to execute() * - encoding: Set by user. - * - decoding: unused + * - decoding: Set by user. *) - max_prediction_order: cint; + thread_count: cint; -{$IF FF_API_FLAC_GLOBAL_OPTS} (** - * @name FLAC options - * @deprecated Use FLAC encoder private options instead. - * @{ + * 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. + * + * - encoding: Set by user, otherwise the default is used. + * - decoding: Set by user, otherwise the default is used. *) + thread_type: cint; (** - * LPC coefficient precision - used by FLAC encoder - * - encoding: Set by user. - * - decoding: unused + * Which multithreading methods are in use by the codec. + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. *) - lpc_coeff_precision: cint; {deprecated} + active_thread_type: cint; (** - * search method for selecting prediction order + * Set by the client if its custom get_buffer() callback can be called + * from another thread, which allows faster multithreaded decoding. + * 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: unused - *) - prediction_order_method: cint; {deprecated} - - (** - * - encoding: Set by user. - * - decoding: unused - *) - min_partition_order: cint; {deprecated} - - (** - * - encoding: Set by user. - * - decoding: unused - *) - max_partition_order: cint; {deprecated} -{$IFEND} - - (** - * GOP timecode frame start number, in non drop frame format - * - encoding: Set by user, in non drop frame format - * - decoding: Set by libavcodec (timecode in the 25 bits format, -1 if unset) - *) - timecode_frame_start: cint64; - -{$IF FF_API_REQUEST_CHANNELS} - (** - * Decoder should decode to this many channels if it can (0 for default) - * - encoding: unused - * - decoding: Set by user. - * @deprecated Deprecated in favor of request_channel_layout. - *) - request_channels: cint; {deprecated} -{$IFEND} - -{$IF 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. - * @deprecated use AC3 decoder private option instead. - *) - drc_scale: cfloat; {deprecated} -{$IFEND} - - (** - * opaque 64bit number (generally a PTS) that will be reordered and - * output in AVFrame.reordered_opaque - * - encoding: unused - * - decoding: Set by user. - *) - reordered_opaque: cint64; - - (** - * Bits per sample/pixel of internal libavcodec pixel/sample format. - * - encoding: set by user. - * - decoding: set by libavcodec. - *) - bits_per_raw_sample: cint; - - (** - * Audio channel layout. - * - encoding: set by user. - * - decoding: set by libavcodec. - *) - 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: cuint64; - - (** - * Ratecontrol attempt to use, at maximum, of what can be used without an underflow. - * - encoding: Set by user. - * - decoding: unused. - *) - rc_max_available_vbv_use: cfloat; - - (** - * Ratecontrol attempt to use, at least, times the amount needed to prevent a vbv overflow. - * - encoding: Set by user. - * - decoding: unused. - *) - rc_min_vbv_overflow_use: cfloat; - - (** - * Hardware accelerator in use - * - encoding: unused. - * - decoding: Set by libavcodec - *) - hwaccel: PAVHWAccel; - - (** - * 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. - *) - ticks_per_frame: cint; - - (** - * Hardware accelerator context. - * For some hardware accelerators, a global context needs to be - * provided by the user. In that case, this holds display-dependent - * data FFmpeg cannot instantiate itself. Please refer to the - * FFmpeg HW accelerator documentation to know how to fill this - * is. e.g. for VA API, this is a struct vaapi_context. - * - encoding: unused - * - decoding: Set by user - *) - hwaccel_context: pointer; - - (** - * Chromaticity coordinates of the source primaries. - * - encoding: Set by user - * - decoding: Set by libavcodec - *) - color_primaries: TAVColorPrimaries; - - (** - * Color Transfer Characteristic. - * - encoding: Set by user - * - decoding: Set by libavcodec - *) - color_trc: TAVColorTransferCharacteristic; - - (** - * YUV colorspace type. - * - encoding: Set by user - * - decoding: Set by libavcodec - *) - colorspace: TAVColorSpace; - - (** - * MPEG vs JPEG YUV range. - * - encoding: Set by user - * - decoding: Set by libavcodec - *) - color_range: TAVColorRange; + thread_safe_callbacks: cint; (** - * This defines the location of chroma samples. - * - encoding: Set by user - * - decoding: Set by libavcodec + * 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. *) - chroma_sample_location: TAVChromaLocation; + execute: function (c: PAVCodecContext; func: TExecuteFunc; arg: Pointer; ret: PCint; count: cint; size: cint): cint; cdecl; (** * The codec may call this to execute several independent things. @@ -3257,95 +3060,55 @@ type *) execute2: function (c: PAVCodecContext; func: TExecute2Func; arg2: Pointer; ret: Pcint; count: cint): cint; cdecl; -{$IF FF_API_X264_GLOBAL_OPTS} - (** - * explicit P-frame weighted prediction analysis method - * 0: off - * 1: fast blind weighting (one reference duplicate with -1 offset) - * 2: smart weighting (full fade detection analysis) - * - encoding: Set by user. - * - decoding: unused - *) - weighted_p_pred: cint; {deprecated} - - (** - * AQ mode - * 0: Disabled - * 1: Variance AQ (complexity mask) - * 2: Auto-variance AQ (experimental) - * - encoding: Set by user - * - decoding: unused - *) - aq_mode: cint; {deprecated} - - (** - * AQ strength - * Reduces blocking and blurring in flat and textured areas. - * - encoding: Set by user - * - decoding: unused - *) - aq_strength: cfloat; {deprecated} - (** - * PSY RD - * Strength of psychovisual optimization - * - encoding: Set by user - * - decoding: unused + * thread opaque + * Can be used by execute() to store some per AVCodecContext stuff. + * - encoding: set by execute() + * - decoding: set by execute() *) - psy_rd: cfloat; {deprecated} + thread_opaque: pointer; (** - * PSY trellis - * Strength of psychovisual optimization - * - encoding: Set by user + * noise vs. sse weight for the nsse comparsion function + * - encoding: Set by user. * - decoding: unused *) - psy_trellis: cfloat; {deprecated} + nsse_weight: cint; (** - * RC lookahead - * Number of frames for frametype and ratecontrol lookahead - * - encoding: Set by user - * - decoding: unused + * profile + * - encoding: Set by user. + * - decoding: Set by libavcodec. *) - rc_lookahead: cint; {deprecated} + profile: cint; (** - * Constant rate factor maximum - * With CRF encoding mode and VBV restrictions enabled, prevents quality from being worse - * than crf_max, even if doing so would violate VBV restrictions. + * level * - encoding: Set by user. - * - decoding: unused + * - decoding: Set by libavcodec. *) - crf_max: cfloat; {deprecated} -{$IFEND} - - log_level_offset: cint; + level: cint; -{$IF FF_API_FLAC_GLOBAL_OPTS} (** - * Determine which LPC analysis algorithm to use. - * - encoding: Set by user - * - decoding: unused + * + * - encoding: unused + * - decoding: Set by user. *) - lpc_type: TAVLPCType; {deprecated} + skip_loop_filter: TAVDiscard; (** - * Number of passes to use for Cholesky factorization during LPC analysis - * - encoding: Set by user - * - decoding: unused + * + * - encoding: unused + * - decoding: Set by user. *) - lpc_passes: cint; {deprecated} -{$IFEND} + skip_idct: TAVDiscard; (** - * Number of slices. - * Indicates number of picture subdivisions. Used for parallelized - * decoding. - * - encoding: Set by user - * - decoding: unused + * + * - encoding: unused + * - decoding: Set by user. *) - slices: cint; + skip_frame: TAVDiscard; (** * Header containing style information for text subtitles. @@ -3358,6 +3121,13 @@ type subtitle_header: Pcuint8; subtitle_header_size: cint; + (** + * Simulates errors in the bitstream to test error concealment. + * - encoding: Set by user. + * - decoding: unused + *) + error_rate: cint; + (** * Current packet as passed into the decoder, to avoid having * to pass the packet into every function. Currently only valid @@ -3367,46 +3137,6 @@ type *) pkt: PAVPacket; -{$IF 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 - * should be freed from the original context only. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - * - * @deprecated this field has been moved to an internal context - *) - is_copy: cint; {deprecated} -{$IFEND} - - (** - * 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. - * - * - encoding: Set by user, otherwise the default is used. - * - decoding: Set by user, otherwise the default is used. - *) - thread_type: cint; - - (** - * Which multithreading methods are in use by the codec. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - *) - active_thread_type: cint; - - (** - * Set by the client if its custom get_buffer() callback can be called - * from another thread, which allows faster multithreaded decoding. - * 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. - *) - thread_safe_callbacks: cint; - (** * VBV delay coded in the last frame (in periods of a 27 MHz clock). * Used for compliant TS muxing. @@ -3416,45 +3146,9 @@ type vbv_delay: cuint64; (** - * Type of service that the audio stream conveys. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - *) - audio_service_type: TAVAudioServiceType; - - (** - * desired sample format - * - encoding: Not used. - * - decoding: Set by user. - * Decoder will decode to this format if it can. - *) - 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 + * Current statistics for PTS correction. + * - decoding: maintained and used by libavcodec, not intended to be used by user apps + * - encoding: unused *) pts_correction_num_faulty_pts: cint64; /// Number of incorrect PTS values so far pts_correction_num_faulty_dts: cint64; /// Number of incorrect DTS values so far @@ -3476,32 +3170,27 @@ type * AVCodec. *) TAVCodec = record + (** + * 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. + *) name: PAnsiChar; + (** + * 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. + *) + long_name: {const} PAnsiChar; type_: TAVMediaType; id: TCodecID; - priv_data_size: cint; - init: function (avctx: PAVCodecContext): cint; cdecl; - encode: function (avctx: PAVCodecContext; buf: PByteArray; buf_size: cint; data: pointer): cint; cdecl; - close: function (avctx: PAVCodecContext): cint; cdecl; - decode: function (avctx: PAVCodecContext; outdata: pointer; var outdata_size: cint; avpkt: PAVPacket): cint; cdecl; (** * Codec capabilities. * see CODEC_CAP_* *) capabilities: cint; - next: PAVCodec; - (** - * Flush buffers. - * Will be called when seeking - *) - flush: procedure (avctx: PAVCodecContext); cdecl; supported_framerates: {const} PAVRational; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} pix_fmts: {const} PAVPixelFormat; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 - (** - * 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. - *) - 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} PCuint64; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 @@ -3509,6 +3198,15 @@ type 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} + (***************************************************************** + * 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. + ***************************************************************** + *) + priv_data_size: cint; + next: PAVCodec; (** * @name Frame-level threading support functions * @{ @@ -3539,6 +3237,8 @@ type *) init_static_data: procedure (codec: PAVCodec); cdecl; + init: function (avctx: PAVCodecContext): cint; cdecl; + encode: function (avctx: PAVCodecContext; buf: PByteArray; buf_size: cint; data: pointer): cint; cdecl; (** * Encode data to an AVPacket. * @@ -3551,6 +3251,13 @@ type *) encode2: function (avctx: PAVCodecContext; avpkt: PAVPacket; frame: {const} PAVFrame; got_packet_ptr: Pcint): cint; cdecl; + decode: function (avctx: PAVCodecContext; outdata: pointer; var outdata_size: cint; avpkt: PAVPacket): cint; cdecl; + close: function (avctx: PAVCodecContext): cint; cdecl; + (** + * Flush buffers. + * Will be called when seeking + *) + flush: procedure (avctx: PAVCodecContext); cdecl; end; {TAVCodec} (** @@ -3570,7 +3277,7 @@ type * See AVMediaType_xxx *) type_: TAVMediaType; - + (** * Codec implemented by the hardware accelerator. * @@ -3583,7 +3290,7 @@ type * * Only hardware accelerated formats are supported here. *) - pix_fmt: PAVPixelFormat; + pix_fmt: PAVPixelFormat; (** * Hardware accelerated codec capabilities. @@ -3607,8 +3314,8 @@ type * @param buf_size the size of the frame in bytes * @return zero if successful, a negative value otherwise *) - start_frame: function (avctx: PAVCodecContext; - buf: {const} PByteArray; + start_frame: function (avctx: PAVCodecContext; + buf: {const} PByteArray; buf_size: cuint): cint; cdecl; (** @@ -3623,7 +3330,7 @@ type * @return zero if successful, a negative value otherwise *) decode_slice: function (avctx: PAVCodecContext; - buf: {const} PByteArray; + buf: {const} PByteArray; buf_size: cuint): cint; cdecl; (** @@ -3636,7 +3343,7 @@ type * @return zero if successful, a negative value otherwise *) end_frame: function (avctx: PAVCodecContext): cint; cdecl; - + (** * Size of HW accelerator private data. * @@ -3647,6 +3354,13 @@ type priv_data_size: cint; end; {TAVHWAccel} +(** + * @defgroup lavc_picture AVPicture + * + * Functions for working with AVPicture + * @{ + *) + (** * four components are given, that's all. * the last component is alpha @@ -3657,6 +3371,10 @@ type linesize: array [0..AV_NUM_DATA_POINTERS - 1] of cint; ///< number of bytes per line end; {TAVPicture} +/** + * @} + */ + TAVSubtitleType = ( SUBTITLE_NONE, @@ -3699,6 +3417,12 @@ type * struct. *) ass: PAnsiChar; + + (** + * 1 indicates this subtitle is a forced subtitle. + * A forced subtitle should be displayed even when subtitles are hidden. + *( + iforced: cint; end; {TAVSubtitleRect} PPAVSubtitle = ^PAVSubtitle; @@ -3712,458 +3436,393 @@ type pts: cint64; ///< Same as packet pts, in AV_TIME_BASE end; {TAVSubtitle} -(* packet functions *) - (** - * @deprecated use NULL instead + * 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. *) -procedure av_destruct_packet_nofree(pkt: PAVPacket); - cdecl; external av__codec; deprecated; +function av_codec_next(c: PAVCodec): PAVCodec; + cdecl; external av__codec; -(* - * Default packet destructor. +(** + * Return the LIBAVCODEC_VERSION_INT constant. *) -procedure av_destruct_packet(pkt: PAVPacket); +function avcodec_version(): cuint; cdecl; external av__codec; -(* - * Initialize optional fields of a packet with default values. - * - * @param pkt packet +(** + * Return the libavcodec build-time configuration. *) -procedure av_init_packet(var pkt: TAVPacket); +function avcodec_configuration(): PAnsiChar; cdecl; external av__codec; -(* - * Allocate the payload of a packet and initialize its fields with - * default values. - * - * @param pkt packet - * @param size wanted payload size - * @return 0 if OK, AVERROR_xxx otherwise +(** + * Return the libavcodec license. *) -function av_new_packet(pkt: PAVPacket; size: cint): cint; +function avcodec_license(): PAnsiChar; cdecl; external av__codec; -(* - * Reduce packet size, correctly zeroing padding +(** + * Register the codec codec and initialize libavcodec. * - * @param pkt packet - * @param size new size + * @warning either this function or avcodec_register_all() must be called + * before any other libavcodec functions. + * + * @see avcodec_register_all() *) -procedure av_shrink_packet(pkt: PAVPacket; size: cint); +procedure avcodec_register(codec: PAVCodec); cdecl; external av__codec; -(* - * @warning This is a hack - the packet memory allocation stuff is broken. The - * packet is allocated if it was not really allocated. +(** + * 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. + * + * @see register_avcodec + * @see avcodec_register + * @see av_register_codec_parser + * @see av_register_bitstream_filter *) -function av_dup_packet(pkt: PAVPacket): cint; +procedure avcodec_register_all(); cdecl; external av__codec; -(* - * Free a packet. +{$IF 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(). * - * @param pkt packet to free + * @return An AVCodecContext filled with default values or NULL on failure. + * @see avcodec_get_context_defaults + * + * @deprecated use avcodec_alloc_context3() *) -procedure av_free_packet(pkt: PAVPacket); - cdecl; external av__codec; +function avcodec_alloc_context(): PAVCodecContext; + 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; + cdecl; external av__codec; deprecated; (** - * Allocate new information of a packet. + * Set the fields of the given AVCodecContext to default values. * - * @param pkt packet - * @param type side information type - * @param size side information size - * @return pointer to fresh allocated data or NULL otherwise + * @param s The AVCodecContext of which the fields should be set to default values. + * @deprecated use avcodec_get_context_defaults3 *) -function av_packet_new_side_data(pkt: PAVPacket; type_: AVPacketSideDataType; - size: cint): PByte; - cdecl; external av__codec; +procedure avcodec_get_context_defaults(s: PAVCodecContext); + 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! *) +procedure avcodec_get_context_defaults2(s: PAVCodecContext; ctype: TAVMediaType); + cdecl; external av__codec; deprecated; +{$IFEND} (** - * Get side information from packet. + * 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 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 + * @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 av_packet_get_side_data(pkt: PAVPacket; type_: AVPacketSideDataType; - size: Pcint): PByte; +function avcodec_alloc_context3(codec: PAVCodec): PAVCodecContext; cdecl; external av__codec; -function av_packet_merge_side_data(pkt: PAVPacket): cint; +(** + * 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; -function av_packet_split_side_data(pkt: PAVPacket): cint; +(** + * 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; -(* resample.c *) -type - PReSampleContext = pointer; - PAVResampleContext = pointer; - PImgReSampleContext = pointer; - (** - * Initialize audio resampling context. + * Get the AVClass for AVFrame. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. * - * @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 + * @see av_opt_find(). *) - function av_audio_resample_init(output_channels: cint; input_channels: cint; - output_rate: cint; input_rate: cint; - sample_fmt_out: TAVSampleFormat; - sample_fmt_in: TAVSampleFormat; - filter_length: cint; log2_phase_count: cint; - linear: cint; cutoff: cdouble): PReSampleContext; - cdecl; external av__codec; - -function audio_resample (s: PReSampleContext; output: PSmallint; input: PSmallint; nb_samples: cint): cint; +function avcodec_get_frame_class(): {const} PAVClass; cdecl; external av__codec; (** - * Free resample context. + * Get the AVClass for AVSubtitleRect. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. * - * @param s a non-NULL pointer to a resample context previously - * created with av_audio_resample_init() + * @see av_opt_find(). *) -procedure audio_resample_close (s: PReSampleContext); +function avcodec_get_subtitle_rect_class(): {const} PAVClass; cdecl; external av__codec; (** - * 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 + * 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 + * avcodec_alloc_context3(), but otherwise uninitialized + * @param src source codec context + * @return AVERROR() on error (e.g. memory allocation error), 0 on success *) -function av_resample_init (out_rate: cint; in_rate: cint; filter_length: cint; - log2_phase_count: cint; linear: cint; cutoff: cdouble): PAVResampleContext; +function avcodec_copy_context(dest: PAVCodecContext; src: {const} PAVCodecContext): cint; cdecl; external av__codec; (** - * 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 + * Allocate an AVFrame and set its fields to default values. The resulting + * struct can be deallocated by simply calling av_free(). + * + * @return An AVFrame filled with default values or NULL on failure. + * @see avcodec_get_frame_defaults *) -function av_resample (c: PAVResampleContext; dst: PSmallint; src: PSmallint; var consumed: cint; - src_size: cint; dst_size: cint; update_ctx: cint): cint; +function avcodec_alloc_frame(): PAVFrame; cdecl; external av__codec; (** - * 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 + * Set the fields of the given AVFrame to default values. * - * 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 + * @param pic The AVFrame of which the fields should be set to default values. *) -procedure av_resample_compensate (c: PAVResampleContext; sample_delta: cint; - compensation_distance: cint); - cdecl; external av__codec; - -procedure av_resample_close (c: PAVResampleContext); +procedure avcodec_get_frame_defaults (pic: PAVFrame); cdecl; external av__codec; +{$IF FF_API_AVCODEC_OPEN} (** - * Allocate memory for a picture. Call avpicture_free to free it. + * Initialize the AVCodecContext to use the given AVCodec. Prior to using this + * function the context has to be allocated. * - * @see avpicture_fill() + * 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. * - * @param picture the picture to be filled in. - * @param pix_fmt the format of the picture. - * @param width the width of the picture. - * @param height the height of the picture. - * @return Zero if successful, a negative value if not. + * @warning This function is not thread safe! + * + * @code + * avcodec_register_all(); + * codec = avcodec_find_decoder(CODEC_ID_H264); + * if (!codec) + * exit(1); + * + * context = avcodec_alloc_context3(codec); + * + * if (avcodec_open(context, codec) < 0) + * exit(1); + * @endcode + * + * @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_context3, avcodec_find_decoder, avcodec_find_encoder, avcodec_close + * + * @deprecated use avcodec_open2 *) -function avpicture_alloc (picture: PAVPicture; pix_fmt: TAVPixelFormat; - width: cint; height: cint): cint; - cdecl; external av__codec; +function avcodec_open(avctx: PAVCodecContext; codec: PAVCodec): cint; + cdecl; external av__codec; deprecated; +{$IFEND} (** - * Free a picture previously allocated by avpicture_alloc(). + * Initialize the AVCodecContext to use the given AVCodec. Prior to using this + * function the context has to be allocated with avcodec_alloc_context3(). * - * @param picture the AVPicture to be freed + * 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(). *) -procedure avpicture_free (picture: PAVPicture); +function avcodec_open2(avctx: PAVCodecContext; codec: PAVCodec; options: PPAVDictionary): cint; cdecl; external av__codec; (** - * Fill in the AVPicture fields. - * The fields of the given AVPicture are filled in by using the 'ptr' address - * which points to the image data buffer. Depending on the specified picture - * format, one or multiple image data pointers and line sizes will be set. - * If a planar format is specified, several pointers will be set pointing to - * the different picture planes and the line sizes of the different planes - * will be stored in the lines_sizes array. - * Call with ptr == NULL to get the required size for the ptr buffer. + * Close a given AVCodecContext and free all the data associated with it + * (but not the AVCodecContext itself). * - * @param picture AVPicture whose fields are to be filled in - * @param ptr Buffer which will contain or contains the actual image data - * @param pix_fmt The format in which the picture data is stored. - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @return size of the image data in bytes + * 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 avpicture_fill (picture: PAVPicture; ptr: pcuint8; - pix_fmt: TAVPixelFormat; width: cint; height: cint): cint; +function avcodec_close(avctx: PAVCodecContext): cint; cdecl; external av__codec; (** - * Copy pixel data from an AVPicture into a buffer. - * The data is stored compactly, without any gaps for alignment or padding - * which may be applied by avpicture_fill(). - * - * @see avpicture_get_size() + * Free all allocated data in the given subtitle struct. * - * @param[in] src AVPicture containing image data - * @param[in] pix_fmt The format in which the picture data is stored. - * @param[in] width the width of the image in pixels. - * @param[in] height the height of the image in pixels. - * @param[out] dest A buffer into which picture data will be copied. - * @param[in] dest_size The size of 'dest'. - * @return The number of bytes written to dest, or a negative value (error code) on error. + * @param sub AVSubtitle to free. *) -function avpicture_layout (src: {const} PAVPicture; pix_fmt: TAVPixelFormat; - width: cint; height: cint; - dest: PByteArray; dest_size: cint): cint; +procedure avsubtitle_free(sub: PAVSubtitle); cdecl; external av__codec; (** - * Calculate the size in bytes that a picture of the given width and height - * would occupy if stored in the given picture format. - * Note that this returns the size of a compact representation as generated - * by avpicture_layout, which can be smaller than the size required for e.g. - * avpicture_fill. - * - * @param pix_fmt the given picture format - * @param width the width of the image - * @param height the height of the image - * @return Image data size in bytes or -1 on error (e.g. too large dimensions). + * @} *) -function avpicture_get_size (pix_fmt: TAVPixelFormat; width: cint; height: cint): cint; - cdecl; external av__codec; - -procedure avcodec_get_chroma_sub_sample (pix_fmt: TAVPixelFormat; var h_shift: cint; var v_shift: cint); - cdecl; external av__codec; (** - * Get the name of a codec. - * @return a static string identifying the codec; never NULL + * @addtogroup lavc_packet + * @{ *) -function avcodec_get_name(id: TCodecID): PAnsiChar; - cdecl; external av__codec; -{$IF FF_API_GET_PIX_FMT_NAME} (** - * Return the short name for a pixel format. - * - * \see av_get_pix_fmt(), av_get_pix_fmt_string(). - * @deprecated Deprecated in favor of av_get_pix_fmt_name(). + * @deprecated use NULL instead *) -function avcodec_get_pix_fmt_name(pix_fmt: TAVPixelFormat): PAnsiChar; +procedure av_destruct_packet_nofree(pkt: PAVPacket); cdecl; external av__codec; deprecated; -{$IFEND} -procedure avcodec_set_dimensions(s: PAVCodecContext; width: cint; height: cint); +(* + * Default packet destructor. + *) +procedure av_destruct_packet(pkt: PAVPacket); cdecl; external av__codec; -(** - * Return a value representing the fourCC code associated to the - * pixel format pix_fmt, or 0 if no associated fourCC code can be - * found. +(* + * Initialize optional fields of a packet with default values. + * + * @param pkt packet *) -function avcodec_pix_fmt_to_codec_tag(pix_fmt: TAVPixelFormat): cuint; +procedure av_init_packet(var pkt: TAVPacket); cdecl; external av__codec; -(** - * Put a string representing the codec tag codec_tag in buf. +(* + * Allocate the payload of a packet and initialize its fields with + * default values. * - * @param buf_size size in bytes of buf - * @return the length of the string that would have been generated if - * enough space had been available, excluding the trailing null + * @param pkt packet + * @param size wanted payload size + * @return 0 if OK, AVERROR_xxx otherwise *) -function av_get_codec_tag_string(buf: PAnsiChar; buf_size: size_t; codec_tag: cuint): size_t; +function av_new_packet(pkt: PAVPacket; size: cint): cint; cdecl; external av__codec; -const - FF_LOSS_RESOLUTION = $0001; {**< loss due to resolution change *} - FF_LOSS_DEPTH = $0002; {**< loss due to color depth change *} - FF_LOSS_COLORSPACE = $0004; {**< loss due to color space conversion *} - FF_LOSS_ALPHA = $0008; {**< loss of alpha bits *} - FF_LOSS_COLORQUANT = $0010; {**< loss due to color quantization *} - FF_LOSS_CHROMA = $0020; {**< loss of chroma (e.g. RGB to gray conversion) *} - -(** - * Compute what kind of losses will occur when converting from one specific - * pixel format to another. - * 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 some formats to - * other formats. These losses can involve loss of chroma, but also loss of - * resolution, loss of color depth, loss due to the color space conversion, loss - * of the alpha bits or loss due to color quantization. - * avcodec_get_fix_fmt_loss() informs you about the various types of losses - * which will occur when converting from one pixel format to another. +(* + * Reduce packet size, correctly zeroing padding * - * @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 - * (maximum loss for an invalid dst_pix_fmt). + * @param pkt packet + * @param size new size *) -function avcodec_get_pix_fmt_loss (dst_pix_fmt: TAVPixelFormat; src_pix_fmt: TAVPixelFormat; - has_alpha: cint): cint; +procedure av_shrink_packet(pkt: PAVPacket; size: cint); cdecl; external av__codec; (** - * 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 - * some formats to other formats. avcodec_find_best_pix_fmt() searches which of - * 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_mask parameter. + * Increase packet size, correctly zeroing padding * - * 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); - * dst_pix_fmt = avcodec_find_best_pix_fmt(pix_fmt_mask, src_pix_fmt, alpha, &loss); - * @endcode - * - * @param[in] pix_fmt_mask bitmask determining which pixel format to choose from - * @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. - *) -function avcodec_find_best_pix_fmt(pix_fmt_mask: cint64; src_pix_fmt: TAVPixelFormat; - has_alpha: cint; loss_ptr: PCint): TAVPixelFormat; - cdecl; external av__codec; - -{$IF LIBAVCODEC_VERSION_MAJOR < 53} -(** - * @deprecated Use av_get_pix_fmt_string() instead. - *) -procedure avcodec_pix_fmt_string (buf: PAnsiChar; buf_size: cint; pix_fmt: TAVPixelFormat); - cdecl; external av__codec; deprecated; -{$IFEND} - -{$IF 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 *} - -(** - * Tell if an image really has transparent alpha values. - * @return ored mask of FF_ALPHA_xxx constants + * @param pkt packet + * @param grow_by number of bytes by which to increase the size of the packet *) -function img_get_alpha_info (src: {const} PAVPicture; - pix_fmt: TAVPixelFormat; - width: cint; - height: cint): cint; {deprecated} - cdecl; external av__codec; -{$IFEND} - -(* deinterlace a picture *) -(* deinterlace - if not supported return -1 *) -function avpicture_deinterlace (dst: PAVPicture; - src: {const} PAVPicture; - pix_fmt: TAVPixelFormat; - width: cint; - height: cint): cint; +function av_grow_packet(pkt: PAVPacket; grow_by: cint): cint; cdecl; external av__codec; -(* external high level API *) - -(** - * 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. +(* + * @warning This is a hack - the packet memory allocation stuff is broken. The + * packet is allocated if it was not really allocated. *) -function av_codec_next(c: PAVCodec): PAVCodec; +function av_dup_packet(pkt: PAVPacket): cint; cdecl; external av__codec; -(** - * Return the LIBAVCODEC_VERSION_INT constant. +(* + * Free a packet. + * + * @param pkt packet to free *) -function avcodec_version(): cuint; +procedure av_free_packet(pkt: PAVPacket); cdecl; external av__codec; (** - * Return the libavcodec build-time configuration. + * 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 avcodec_configuration(): PAnsiChar; +function av_packet_new_side_data(pkt: PAVPacket; type_: AVPacketSideDataType; + size: cint): PByte; cdecl; external av__codec; (** - * Return the libavcodec license. + * Shrink the already allocated side data buffer + * + * @param pkt packet + * @param type side information type + * @param size new side information size + * @return 0 on success, < 0 on failure *) -function avcodec_license(): PAnsiChar; +function av_packet_shrink_side_data(pkt: PAVPacket; type_: AVPacketSideDataType; + size: cint): cint; cdecl; external av__codec; -{$IF FF_API_AVCODEC_INIT} -(** - * @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; deprecated; -{$IFEND} - (** - * Register the codec codec and initialize libavcodec. - * - * @warning either this function or avcodec_register_all() must be called - * before any other libavcodec functions. + * Get side information from packet. * - * @see avcodec_register_all() + * @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 *) -procedure avcodec_register(codec: PAVCodec); +function av_packet_get_side_data(pkt: PAVPacket; type_: AVPacketSideDataType; + size: Pcint): PByte; cdecl; external av__codec; -(** - * Find a registered encoder with a matching codec ID. - * - * @param id CodecID of the requested encoder - * @return An encoder if one was found, NULL otherwise. - *) -function avcodec_find_encoder(id: TCodecID): PAVCodec; +function av_packet_merge_side_data(pkt: PAVPacket): cint; cdecl; external av__codec; -(** - * Find a registered encoder with the specified name. - * - * @param name name of the requested encoder - * @return An encoder if one was found, NULL otherwise. - *) -function avcodec_find_encoder_by_name(name: PAnsiChar): PAVCodec; +function av_packet_split_side_data(pkt: PAVPacket): cint; cdecl; external av__codec; +/** + * @} + */ + +/** + * @addtogroup lavc_decoding + * @{ + */ + (** * Find a registered decoder with a matching codec ID. * @@ -4181,112 +3840,6 @@ function avcodec_find_decoder(id: TCodecID): PAVCodec; *) function avcodec_find_decoder_by_name(name: PAnsiChar): PAVCodec; cdecl; external av__codec; -procedure avcodec_string(buf: PAnsiChar; buf_size: cint; enc: PAVCodecContext; encode: cint); - cdecl; external av__codec; - -(** - * Return a name for the specified profile, if available. - * - * @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. - *) -function av_get_profile_name(codec: {const} PAVCodec; profile: cint): {const} PAnsiChar; - cdecl; external av__codec; - -{$IF 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); - 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! *) -procedure avcodec_get_context_defaults2(s: PAVCodecContext; ctype: TAVMediaType); - cdecl; external av__codec; deprecated; -{$IFEND} - -(** - * 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; - -{$IF 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(). - * - * @return An AVCodecContext filled with default values or NULL on failure. - * @see avcodec_get_context_defaults - * - * @deprecated use avcodec_alloc_context3() - *) -function avcodec_alloc_context(): PAVCodecContext; - 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; - cdecl; external av__codec; deprecated; -{$IFEND} - -(** - * 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_open2() before you - * can use this AVCodecContext to decode/encode video/audio data. - * - * @param dest target codec context, should be initialized with - * avcodec_alloc_context3(), but otherwise uninitialized - * @param src source codec context - * @return AVERROR() on error (e.g. memory allocation error), 0 on success - *) -function avcodec_copy_context(dest: PAVCodecContext; src: {const} PAVCodecContext): cint; - cdecl; external av__codec; - -(** - * Set the fields of the given AVFrame to default values. - * - * @param pic The AVFrame of which the fields should be set to default values. - *) -procedure avcodec_get_frame_defaults (pic: PAVFrame); - cdecl; external av__codec; - -(** - * Allocate an AVFrame and set its fields to default values. The resulting - * struct can be deallocated by simply calling av_free(). - * - * @return An AVFrame filled with default values or NULL on failure. - * @see avcodec_get_frame_defaults - *) -function avcodec_alloc_frame(): PAVFrame; - cdecl; external av__codec; function avcodec_default_get_buffer (s: PAVCodecContext; pic: PAVFrame): cint; cdecl; external av__codec; @@ -4330,121 +3883,30 @@ procedure avcodec_align_dimensions2(s: PAVCodecContext; width: PCint; height: PC linesize_align: PAVNDPArray); cdecl; external av__codec; -function avcodec_default_get_format(s: PAVCodecContext; fmt: {const} PAVPixelFormat): TAVPixelFormat; - cdecl; external av__codec; - -{$IF FF_API_THREAD_INIT} -(** - * @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; -{$IFEND} - -function avcodec_default_execute(s: PAVCodecContext; func: TExecuteFunc; arg: Pointer; var ret: cint; count: cint; size: cint): cint; - cdecl; external av__codec; - -function avcodec_default_execute2(s: PAVCodecContext; func: TExecuteFunc; arg: Pointer; var ret: cint; count: cint): cint; - cdecl; external av__codec; -//FIXME func typedef - -{$IF FF_API_AVCODEC_OPEN} +{$IF FF_API_OLD_DECODE_AUDIO} (** - * Initialize the AVCodecContext to use the given AVCodec. Prior to using this - * function the context has to be allocated. + * Wrapper function which calls avcodec_decode_audio4. * - * 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. + * @deprecated Use avcodec_decode_audio4 instead. * - * @warning This function is not thread safe! + * 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, + * avcodec_decode_audio3 has to be called again with an AVPacket that contains + * the remaining data in order to decode the second frame etc. + * If no frame + * could be outputted, frame_size_ptr is zero. Otherwise, it is the + * decompressed frame size in bytes. * - * @code - * avcodec_register_all(); - * codec = avcodec_find_decoder(CODEC_ID_H264); - * if (!codec) - * exit(1); + * @warning You must set frame_size_ptr to the allocated size of the + * output buffer before calling avcodec_decode_audio3(). * - * context = avcodec_alloc_context3(codec); + * @warning The input buffer 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. * - * if (avcodec_open(context, codec) < 0) - * exit(1); - * @endcode - * - * @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_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; deprecated; -{$IFEND} - -(** - * Initialize the AVCodecContext to use the given AVCodec. Prior to using this - * function the context has to be allocated with avcodec_alloc_context3(). - * - * 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_open2(avctx: PAVCodecContext; codec: PAVCodec; options: PPAVDictionary): cint; - cdecl; external av__codec; - -{$IF 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, - * avcodec_decode_audio3 has to be called again with an AVPacket that contains - * the remaining data in order to decode the second frame etc. - * If no frame - * could be outputted, frame_size_ptr is zero. Otherwise, it is the - * decompressed frame size in bytes. - * - * @warning You must set frame_size_ptr to the allocated size of the - * output buffer before calling avcodec_decode_audio3(). - * - * @warning The input buffer 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. - * - * @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 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 @@ -4558,23 +4020,12 @@ function avcodec_decode_video2(avctx: PAVCodecContext; picture: PAVFrame; avpkt: {const} PAVPacket): cint; cdecl; external av__codec; -{$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. - *) -function avcodec_decode_subtitle(avctx: PAVCodecContext; sub: PAVSubtitle; - var got_sub_ptr: cint; - buf: {const} PByteArray; buf_size: cint): cint; - cdecl; external av__codec; deprecated; -{$ENDIF} - (* Decode a subtitle message. * Return a negative value on 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. * Note that CODEC_CAP_DR1 is not available for subtitle codecs. This is for - * simplicity, because the performance difference is expect to be negligible + * 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. * @@ -4589,150 +4040,774 @@ function avcodec_decode_subtitle2(avctx: PAVCodecContext; sub: PAVSubtitle; avpkt: PAVPacket): cint; cdecl; external av__codec; -(** - * Free all allocated data in the given subtitle struct. - * - * @param sub AVSubtitle to free. - *) -procedure avsubtitle_free(sub: PAVSubtitle); - cdecl; external av__codec; +/** + * @defgroup lavc_parsing Frame parsing + * @{ + */ -{$IF 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 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 - * @param[in] buf_size the output buffer size - * @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 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; - cdecl; external av__codec; deprecated; -{$IFEND} +const + AV_PARSER_PTS_NB = 4; + PARSER_FLAG_COMPLETE_FRAMES = $0001; + PARSER_FLAG_ONCE = $0002; +/// Set if the parser has a valid file offset + PARSER_FLAG_FETCHED_OFFSET = $0004; + PARSER_FLAG_USE_CODEC_TS = $1000; -(** - * 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; +type + (* frame parsing *) + PAVCodecParserContext = ^TAVCodecParserContext; + PAVCodecParser = ^TAVCodecParser; -(** - * 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; + TAVCodecParserContext = record + priv_data: pointer; + parser: PAVCodecParser; + frame_offset: cint64; (* offset of the current frame *) + cur_offset: cint64; (* current offset (incremented by each av_parser_parse()) *) + next_frame_offset: cint64; (* offset of the next frame *) + (* video info *) + pict_type: cint; (* 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. + *) + repeat_pict: cint; (* XXX: put it back in AVCodecContext *) + pts: cint64; (* pts of the current frame *) + dts: cint64; (* dts of the current frame *) -(** - * Encode a video frame from pict into buf. - * The input picture should be - * stored using a specific format, namely avctx.pix_fmt. - * - * @param avctx the codec context - * @param[out] buf the output buffer for the bitstream of encoded frame - * @param[in] buf_size the size of the output buffer in bytes - * @param[in] pict the input picture to encode - * @return On error a negative value is returned, on success zero or the number - * of bytes used from the output buffer. - *) -function avcodec_encode_video(avctx: PAVCodecContext; buf: PByte; - buf_size: cint; pict: {const} PAVFrame): cint; - cdecl; external av__codec; -function avcodec_encode_subtitle(avctx: PAVCodecContext; buf: PByteArray; - buf_size: cint; sub: {const} PAVSubtitle): cint; - cdecl; external av__codec; + (* private data *) + last_pts: cint64; + last_dts: cint64; + fetch_timestamp: cint; -(** - * 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; + cur_frame_start_index: cint; + cur_frame_offset: array [0..AV_PARSER_PTS_NB - 1] of cint64; + cur_frame_pts: array [0..AV_PARSER_PTS_NB - 1] of cint64; + cur_frame_dts: array [0..AV_PARSER_PTS_NB - 1] of cint64; -(** - * 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. - * - * @see register_avcodec - * @see avcodec_register - * @see av_register_codec_parser - * @see av_register_bitstream_filter - *) -procedure avcodec_register_all(); + flags: cint; + + 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 + * will be used. + *) + key_frame: cint; + + (** + * Time difference in stream time base units from the pts of this + * packet to the point at which the output from the decoder has converged + * independent from the availability of previous frames. That is, the + * frames are virtually identical no matter if decoding started from + * the very first frame or from this keyframe. + * Is AV_NOPTS_VALUE if unknown. + * This field has no meaning if the packet does not have AV_PKT_FLAG_KEY + * set. + * + * The purpose of this field is to allow seeking in streams that have no + * keyframes in the conventional sense. It corresponds to the + * recovery point SEI in H.264 and match_time_delta in NUT. It is also + * essential for some types of subtitle streams to ensure that all + * subtitles are correctly displayed after seeking. + *) + convergence_duration: cint64; + + // 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. + *) + dts_sync_point: cint; + + (** + * 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. + *) + dts_ref_dts_delta: cint; + + (** + * 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. + *) + pts_dts_delta: cint; + + (** + * Position of the packet in file. + * + * Analogous to cur_frame_pts/dts + *) + cur_frame_pos: array [0..AV_PARSER_PTS_NB - 1] of cint64; + + (** + * Byte position of currently parsed frame in stream. + *) + pos: cint64; + + (** + * Previous frame byte position. + *) + last_pos: cint64; + end; {AVCodecParserContext} + + TAVCodecParser = record + codec_ids: array [0..4] of cint; (* several codec IDs are permitted *) + priv_data_size: cint; + parser_init: function(s: PAVCodecParserContext): cint; cdecl; + parser_parse: function(s: PAVCodecParserContext; + avctx: PAVCodecContext; + poutbuf: {const} PPointer; poutbuf_size: PCint; + buf: {const} PByteArray; buf_size: cint): cint; cdecl; + parser_close: procedure(s: PAVCodecParserContext); cdecl; + split: function(avctx: PAVCodecContext; buf: {const} PByteArray; + buf_size: cint): cint; cdecl; + next: PAVCodecParser; + end; {AVCodecParser} + +function av_parser_next(c: PAVCodecParser): PAVCodecParser; + cdecl; external av__codec; + +procedure av_register_codec_parser(parser: PAVCodecParser); + cdecl; external av__codec; + +function av_parser_init(codec_id: cint): PAVCodecParserContext; + cdecl; external av__codec; + +(** + * 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) do + * begin + * len := av_parser_parse2(myparser, AVCodecContext, data, size, + * in_data, in_len, + * pts, dts, pos); + * in_data := in_data + len; + * in_len := in_len - len; + * + * if (size) then + * decode_frame(data, size); + * end; + * @endcode + *) +function av_parser_parse2(s: PAVCodecParserContext; + avctx: PAVCodecContext; + poutbuf: PPointer; + poutbuf_size: PCint; + buf: {const} PByteArray; + buf_size: cint; + pts: cint64; + dts: cint64; + pos: cint64): cint; + cdecl; external av__codec; + +function av_parser_change(s: PAVCodecParserContext; + avctx: PAVCodecContext; + poutbuf: PPointer; poutbuf_size: PCint; + buf: {const} PByteArray; buf_size: cint; keyframe: cint): cint; + cdecl; external av__codec; + +procedure av_parser_close(s: PAVCodecParserContext); + cdecl; external av__codec; + +(** + * @} + * @} + *) + +(** + * @addtogroup lavc_encoding + * @{ + *) + +(** + * Find a registered encoder with a matching codec ID. + * + * @param id CodecID of the requested encoder + * @return An encoder if one was found, NULL otherwise. + *) +function avcodec_find_encoder(id: TCodecID): PAVCodec; + cdecl; external av__codec; + +(** + * Find a registered encoder with the specified name. + * + * @param name name of the requested encoder + * @return An encoder if one was found, NULL otherwise. + *) +function avcodec_find_encoder_by_name(name: PAnsiChar): PAVCodec; + cdecl; external av__codec; + +{$IF 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 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 + * @param[in] buf_size the output buffer size + * @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 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; + cdecl; external av__codec; deprecated; +{$IFEND} + +(** + * 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; + +{$IF FF_API_OLD_ENCODE_AUDIO} +(** + * @deprecated use avcodec_encode_video2() instead. + * + * Encode a video frame from pict into buf. + * The input picture should be + * stored using a specific format, namely avctx.pix_fmt. + * + * @param avctx the codec context + * @param[out] buf the output buffer for the bitstream of encoded frame + * @param[in] buf_size the size of the output buffer in bytes + * @param[in] pict the input picture to encode + * @return On error a negative value is returned, on success zero or the number + * of bytes used from the output buffer. + *) +function avcodec_encode_video(avctx: PAVCodecContext; buf: PByte; + buf_size: cint; pict: {const} PAVFrame): cint; + cdecl; external av__codec; deprecated; +{$IFEND} + +(** + * 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. + * + * 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). + * @param[in] frame AVFrame containing the raw video data to be encoded. + * May be NULL when flushing an encoder that has the + * CODEC_CAP_DELAY capability set. + * @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_video2(avctx: PAVCodecContext; avpkt: PAVPacket; + frame: {const} PAVFrame; got_packet_ptr: Pcint): cint; + cdecl; external av__codec; + +function avcodec_encode_subtitle(avctx: PAVCodecContext; buf: PByteArray; + buf_size: cint; sub: {const} PAVSubtitle): cint; + cdecl; external av__codec; + +(** + * @} + *) + +(** + * @defgroup lavc_resample Audio resampling + * @ingroup libavc + * + * @{ + *) +type + PReSampleContext = pointer; + PAVResampleContext = pointer; + PImgReSampleContext = pointer; + +(** + * 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 + *) + function av_audio_resample_init(output_channels: cint; input_channels: cint; + output_rate: cint; input_rate: cint; + sample_fmt_out: TAVSampleFormat; + sample_fmt_in: TAVSampleFormat; + filter_length: cint; log2_phase_count: cint; + linear: cint; cutoff: cdouble): PReSampleContext; + cdecl; external av__codec; + +function audio_resample (s: PReSampleContext; output: PSmallint; input: PSmallint; nb_samples: cint): cint; + cdecl; external av__codec; + +(** + * Free resample context. + * + * @param s a non-NULL pointer to a resample context previously + * created with av_audio_resample_init() + *) +procedure audio_resample_close (s: PReSampleContext); + cdecl; external av__codec; + +(** + * 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 + *) +function av_resample_init (out_rate: cint; in_rate: cint; filter_length: cint; + log2_phase_count: cint; linear: cint; cutoff: cdouble): PAVResampleContext; + cdecl; external av__codec; + +(** + * 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 + *) +function av_resample (c: PAVResampleContext; dst: PSmallint; src: PSmallint; var consumed: cint; + src_size: cint; dst_size: cint; update_ctx: cint): cint; + cdecl; external av__codec; + +(** + * 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 + *) +procedure av_resample_compensate (c: PAVResampleContext; sample_delta: cint; + compensation_distance: cint); + cdecl; external av__codec; + +procedure av_resample_close (c: PAVResampleContext); + cdecl; external av__codec; + +(** + * @} + *) + +(** + * @addtogroup lavc_picture + * @{ + *) + +(** + * Allocate memory for a picture. Call avpicture_free to free it. + * + * @see avpicture_fill() + * + * @param picture the picture to be filled in. + * @param pix_fmt the format of the picture. + * @param width the width of the picture. + * @param height the height of the picture. + * @return Zero if successful, a negative value if not. + *) +function avpicture_alloc (picture: PAVPicture; pix_fmt: TAVPixelFormat; + width: cint; height: cint): cint; + cdecl; external av__codec; + +(** + * Free a picture previously allocated by avpicture_alloc(). + * + * @param picture the AVPicture to be freed + *) +procedure avpicture_free (picture: PAVPicture); + cdecl; external av__codec; + +(** + * Fill in the AVPicture fields. + * The fields of the given AVPicture are filled in by using the 'ptr' address + * which points to the image data buffer. Depending on the specified picture + * format, one or multiple image data pointers and line sizes will be set. + * If a planar format is specified, several pointers will be set pointing to + * the different picture planes and the line sizes of the different planes + * will be stored in the lines_sizes array. + * Call with ptr == NULL to get the required size for the ptr buffer. + * + * @param picture AVPicture whose fields are to be filled in + * @param ptr Buffer which will contain or contains the actual image data + * @param pix_fmt The format in which the picture data is stored. + * @param width the width of the image in pixels + * @param height the height of the image in pixels + * @return size of the image data in bytes + *) +function avpicture_fill (picture: PAVPicture; ptr: pcuint8; + pix_fmt: TAVPixelFormat; width: cint; height: cint): cint; + cdecl; external av__codec; + +(** + * Copy pixel data from an AVPicture into a buffer. + * The data is stored compactly, without any gaps for alignment or padding + * which may be applied by avpicture_fill(). + * + * @see avpicture_get_size() + * + * @param[in] src AVPicture containing image data + * @param[in] pix_fmt The format in which the picture data is stored. + * @param[in] width the width of the image in pixels. + * @param[in] height the height of the image in pixels. + * @param[out] dest A buffer into which picture data will be copied. + * @param[in] dest_size The size of 'dest'. + * @return The number of bytes written to dest, or a negative value (error code) on error. + *) +function avpicture_layout (src: {const} PAVPicture; pix_fmt: TAVPixelFormat; + width: cint; height: cint; + dest: PByteArray; dest_size: cint): cint; + cdecl; external av__codec; + +(** + * Calculate the size in bytes that a picture of the given width and height + * would occupy if stored in the given picture format. + * Note that this returns the size of a compact representation as generated + * by avpicture_layout, which can be smaller than the size required for e.g. + * avpicture_fill. + * + * @param pix_fmt the given picture format + * @param width the width of the image + * @param height the height of the image + * @return Image data size in bytes or -1 on error (e.g. too large dimensions). + *) +function avpicture_get_size (pix_fmt: TAVPixelFormat; width: cint; height: cint): cint; + cdecl; external av__codec; + +(** + * deinterlace - if not supported return -1 *) + *) +function avpicture_deinterlace (dst: PAVPicture; src: {const} PAVPicture; + pix_fmt: TAVPixelFormat; width: cint; height: cint): cint; + cdecl; external av__codec; + +(** + * Copy image src to dst. Wraps av_picture_data_copy() above. + *) +procedure av_picture_copy(dst: PAVPicture; src: {const} PAVPicture; + pix_fmt: TAVPixelFormat; width: cint; height: cint); + cdecl; external av__codec; + +(** + * Crop image top and left side. + *) +function av_picture_crop(dst: PAVPicture; src: {const} PAVPicture; + pix_fmt: TAVPixelFormat; top_band: cint; left_band: cint): cint; + cdecl; external av__codec; + +(** + * Pad image. + *) +function av_picture_pad(dst: PAVPicture; src: {const} PAVPicture; + height: cint; width: cint; pix_fmt: TAVPixelFormat; + padtop: cint; padbottom: cint; padleft: cint; + padright: cint; color: PCint): cint; + cdecl; external av__codec; + +(** + * @} + *) + +(** + * @defgroup lavc_misc Utility functions + * @ingroup libavc + * + * Miscellaneous utility functions related to both encoding and decoding + * (or neither). + * @{ + *) + +(** + * @defgroup lavc_misc_pixfmt Pixel formats + * + * Functions for working with pixel formats. + * @{ + *) + +procedure avcodec_get_chroma_sub_sample (pix_fmt: TAVPixelFormat; var h_shift: cint; var v_shift: cint); + cdecl; external av__codec; + +(** + * Return a value representing the fourCC code associated to the + * pixel format pix_fmt, or 0 if no associated fourCC code can be + * found. + *) +function avcodec_pix_fmt_to_codec_tag(pix_fmt: TAVPixelFormat): cuint; + cdecl; external av__codec; + +const + FF_LOSS_RESOLUTION = $0001; (**< loss due to resolution change *) + FF_LOSS_DEPTH = $0002; (**< loss due to color depth change *) + FF_LOSS_COLORSPACE = $0004; (**< loss due to color space conversion *) + FF_LOSS_ALPHA = $0008; (**< loss of alpha bits *) + FF_LOSS_COLORQUANT = $0010; (**< loss due to color quantization *) + FF_LOSS_CHROMA = $0020; (**< loss of chroma (e.g. RGB to gray conversion) *) + +(** + * Compute what kind of losses will occur when converting from one specific + * pixel format to another. + * 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 some formats to + * other formats. These losses can involve loss of chroma, but also loss of + * resolution, loss of color depth, loss due to the color space conversion, loss + * of the alpha bits or loss due to color quantization. + * avcodec_get_fix_fmt_loss() informs you about the various types of losses + * which will occur when converting from one pixel format to another. + * + * @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 + * (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; + cdecl; external av__codec; + +(** + * 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 + * some formats to other formats. avcodec_find_best_pix_fmt() searches which of + * 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_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); + * dst_pix_fmt = avcodec_find_best_pix_fmt(pix_fmt_mask, src_pix_fmt, alpha, &loss); + * @endcode + * + * @param[in] pix_fmt_mask bitmask determining which pixel format to choose from + * @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. + *) +function avcodec_find_best_pix_fmt(pix_fmt_mask: cint64; src_pix_fmt: TAVPixelFormat; + has_alpha: cint; loss_ptr: PCint): TAVPixelFormat; + cdecl; external av__codec; + +(** + * Find the best pixel format to convert to given a certain source pixel + * format and a selection of two destination pixel formats. 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 some formats to other formats. avcodec_find_best_pix_fmt2() selects which of + * the given pixel formats should be used to suffer the least amount of loss. + * + * If one of the destination formats is PIX_FMT_NONE the other pixel format (if valid) will be + * returned. + * + * @code + * src_pix_fmt = PIX_FMT_YUV420P; + * dst_pix_fmt1= PIX_FMT_RGB24; + * dst_pix_fmt2= PIX_FMT_GRAY8; + * dst_pix_fmt3= PIX_FMT_RGB8; + * loss= FF_LOSS_CHROMA; // don't care about chroma loss, so chroma loss will be ignored. + * dst_pix_fmt = avcodec_find_best_pix_fmt2(dst_pix_fmt1, dst_pix_fmt2, src_pix_fmt, alpha, &loss); + * dst_pix_fmt = avcodec_find_best_pix_fmt2(dst_pix_fmt, dst_pix_fmt3, src_pix_fmt, alpha, &loss); + * @endcode + * + * @param[in] dst_pix_fmt1 One of the two destination pixel formats to choose from + * @param[in] dst_pix_fmt2 The other of the two destination pixel formats to choose from + * @param[in] src_pix_fmt Source pixel format + * @param[in] has_alpha Whether the source pixel format alpha channel is used. + * @param[in, out] loss_ptr Combination of loss flags. In: selects which of the losses to ignore, i.e. + * NULL or value of zero means we care about all losses. Out: the loss + * that occurs when converting from src to selected dst pixel format. + * @return The best pixel format to convert to or -1 if none was found. + *) +function avcodec_find_best_pix_fmt2(dst_pix_fmt1: TAVPixelFormat; dst_pix_fmt2: TAVPixelFormat; + src_pix_fmt: TAVPixelFormat; has_alpha: Pcint; loss_ptr: Pcint): TAVPixelFormat; + cdecl; external av__codec; + +function avcodec_default_get_format(s: PAVCodecContext; fmt: {const} PAVPixelFormat): TAVPixelFormat; + cdecl; external av__codec; + +(** + * @} + *) + +procedure avcodec_set_dimensions(s: PAVCodecContext; width: cint; height: cint); + cdecl; external av__codec; + + * Put a string representing the codec tag codec_tag in buf. + * + * @param buf_size size in bytes of buf + * @return the length of the string that would have been generated if + * enough space had been available, excluding the trailing null + *) +function av_get_codec_tag_string(buf: PAnsiChar; buf_size: size_t; codec_tag: cuint): size_t; + cdecl; external av__codec; + +procedure avcodec_string(buf: PAnsiChar; buf_size: cint; enc: PAVCodecContext; encode: cint); + cdecl; external av__codec; + +(** + * Return a name for the specified profile, if available. + * + * @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. + *) +function av_get_profile_name(codec: {const} PAVCodec; profile: cint): {const} PAnsiChar; + cdecl; external av__codec; + +function avcodec_default_execute(s: PAVCodecContext; func: TExecuteFunc; arg: Pointer; var ret: cint; count: cint; size: cint): cint; + cdecl; external av__codec; + +function avcodec_default_execute2(s: PAVCodecContext; func: TExecuteFunc; arg: Pointer; var ret: cint; count: cint): cint; + cdecl; external av__codec; +//FIXME func typedef + +(** + * 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; (** @@ -4740,24 +4815,10 @@ procedure avcodec_register_all(); *) procedure avcodec_flush_buffers(avctx: PAVCodecContext); cdecl; external av__codec; - + procedure avcodec_default_free_buffers(s: PAVCodecContext); cdecl; external av__codec; -(* misc useful functions *) - -{$IF FF_API_OLD_FF_PICT_TYPES} -(** - * Return a single letter to describe the given picture type pict_type. - * - * @param[in] pict_type the picture type - * @return A single character representing the picture type. - * @deprecated Use av_get_picture_type_char() instead. - *) -function av_get_pict_type_char(pict_type: cint): AnsiChar; - cdecl; external av__codec; deprecated; -{$IFEND} - (** * Return codec bits per sample. * @@ -4767,217 +4828,35 @@ 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} (** - * @deprecated Use av_get_bytes_per_sample() instead. + * Return the PCM codec associated with a sample format. + * @param be endianness, 0 for little, 1 for big, + * -1 (or anything else) for native + * @return CODEC_ID_PCM_* or CODEC_ID_NONE *) -function av_get_bits_per_sample_format(sample_fmt: TAVSampleFormat): cint; - cdecl; external av__codec; deprecated; -{$IFEND} - -const - AV_PARSER_PTS_NB = 4; - PARSER_FLAG_COMPLETE_FRAMES = $0001; - PARSER_FLAG_ONCE = $0002; -/// Set if the parser has a valid file offset - PARSER_FLAG_FETCHED_OFFSET = $0004; - -type - (* frame parsing *) - PAVCodecParserContext = ^TAVCodecParserContext; - PAVCodecParser = ^TAVCodecParser; - - TAVCodecParserContext = record - priv_data: pointer; - parser: PAVCodecParser; - frame_offset: cint64; (* offset of the current frame *) - cur_offset: cint64; (* current offset (incremented by each av_parser_parse()) *) - next_frame_offset: cint64; (* offset of the next frame *) - (* video info *) - pict_type: cint; (* 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. - *) - repeat_pict: cint; (* XXX: put it back in AVCodecContext *) - pts: cint64; (* pts of the current frame *) - dts: cint64; (* dts of the current frame *) - - (* private data *) - last_pts: cint64; - last_dts: cint64; - fetch_timestamp: cint; - - cur_frame_start_index: cint; - cur_frame_offset: array [0..AV_PARSER_PTS_NB - 1] of cint64; - cur_frame_pts: array [0..AV_PARSER_PTS_NB - 1] of cint64; - cur_frame_dts: array [0..AV_PARSER_PTS_NB - 1] of cint64; - - flags: cint; - - 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 - * will be used. - *) - key_frame: cint; - - (** - * Time difference in stream time base units from the pts of this - * packet to the point at which the output from the decoder has converged - * independent from the availability of previous frames. That is, the - * frames are virtually identical no matter if decoding started from - * the very first frame or from this keyframe. - * Is AV_NOPTS_VALUE if unknown. - * This field has no meaning if the packet does not have AV_PKT_FLAG_KEY - * set. - * - * The purpose of this field is to allow seeking in streams that have no - * keyframes in the conventional sense. It corresponds to the - * recovery point SEI in H.264 and match_time_delta in NUT. It is also - * essential for some types of subtitle streams to ensure that all - * subtitles are correctly displayed after seeking. - *) - convergence_duration: cint64; - - // 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. - *) - dts_sync_point: cint; - - (** - * 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. - *) - dts_ref_dts_delta: cint; - - (** - * 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. - *) - pts_dts_delta: cint; - - (** - * Position of the packet in file. - * - * Analogous to cur_frame_pts/dts - *) - cur_frame_pos: array [0..AV_PARSER_PTS_NB - 1] of cint64; - - (** - * Byte position of currently parsed frame in stream. - *) - pos: cint64; - - (** - * Previous frame byte position. - *) - last_pos: cint64; - end; {AVCodecParserContext} - - TAVCodecParser = record - codec_ids: array [0..4] of cint; (* several codec IDs are permitted *) - priv_data_size: cint; - parser_init: function(s: PAVCodecParserContext): cint; cdecl; - parser_parse: function(s: PAVCodecParserContext; - avctx: PAVCodecContext; - poutbuf: {const} PPointer; poutbuf_size: PCint; - buf: {const} PByteArray; buf_size: cint): cint; cdecl; - parser_close: procedure(s: PAVCodecParserContext); cdecl; - split: function(avctx: PAVCodecContext; buf: {const} PByteArray; - buf_size: cint): cint; cdecl; - next: PAVCodecParser; - end; {AVCodecParser} - -function av_parser_next(c: PAVCodecParser): PAVCodecParser; - cdecl; external av__codec; - -procedure av_register_codec_parser(parser: PAVCodecParser); - cdecl; external av__codec; - -function av_parser_init(codec_id: cint): PAVCodecParserContext; +function av_get_pcm_codec(fmt: TAVSampleFormat; be: cint): TCodecID; cdecl; external av__codec; (** - * 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) do - * begin - * len := av_parser_parse2(myparser, AVCodecContext, data, size, - * in_data, in_len, - * pts, dts, pos); - * in_data := in_data + len; - * in_len := in_len - len; + * Return codec bits per sample. + * Only return non-zero if the bits per sample is exactly correct, not an + * approximation. * - * if (size) then - * decode_frame(data, size); - * end; - * @endcode + * @param[in] codec_id the codec + * @return Number of bits per sample or zero if unknown for the given codec. *) -function av_parser_parse2(s: PAVCodecParserContext; - avctx: PAVCodecContext; - poutbuf: PPointer; - poutbuf_size: PCint; - buf: {const} PByteArray; - buf_size: cint; - pts: cint64; - dts: cint64; - pos: cint64): cint; - cdecl; external av__codec; - -function av_parser_change(s: PAVCodecParserContext; - avctx: PAVCodecContext; - poutbuf: PPointer; poutbuf_size: PCint; - buf: {const} PByteArray; buf_size: cint; keyframe: cint): cint; +function av_get_exact_bits_per_sample(codec_id: TCodecID): cint; cdecl; external av__codec; -procedure av_parser_close(s: PAVCodecParserContext); +(** + * 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. + *) +function av_get_audio_frame_duration(avctx: PAVCodecContext, frame_bytes: cint): cint; cdecl; external av__codec; type @@ -5055,42 +4934,6 @@ procedure av_fast_malloc(ptr: pointer; size: PCuint; min_size: size_t); 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. - *) -procedure av_picture_copy(dst: PAVPicture; - src: {const} PAVPicture; - pix_fmt: TAVPixelFormat; - width: cint; - height: cint); - cdecl; external av__codec; - -(** - * Crop image top and left side. - *) -function av_picture_crop(dst: PAVPicture; - src: {const} PAVPicture; - pix_fmt: TAVPixelFormat; - top_band: cint; - left_band: cint): cint; - cdecl; external av__codec; - -(** - * Pad image. - *) -function av_picture_pad(dst: PAVPicture; - src: {const} PAVPicture; - height: cint; - width: cint; - pix_fmt: TAVPixelFormat; - padtop: cint; - padbottom: cint; - padleft: cint; - padright: - cint; - color: PCint): cint; - cdecl; external av__codec; - (** * Encode extradata length to a buffer. Used by xiph codecs. * @@ -5176,30 +5019,35 @@ 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(). + * Get the name of a codec. + * @return a static string identifying the codec; never NULL *) -function avcodec_get_class(): {const} PAVClass; +function avcodec_get_name(id: TCodecID): PAnsiChar; 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(). + * @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_get_frame_class(): {const} PAVClass; +function avcodec_is_open(s: PAVCodecContext): cint; 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. + * @return a non-zero number if codec is an encoder, zero otherwise *) -function avcodec_is_open(s: PAVCodecContext): cint; +function av_codec_is_encoder(codec: PAVCodec): cint; cdecl; external av__codec; +(** + * @return a non-zero number if codec is a decoder, zero otherwise + *) +function av_codec_is_decoder(codec: PAVCodec): cint; + cdecl; external av__codec; + +(** + * @} + *) + implementation end. diff --git a/src/lib/ffmpeg-0.11/avformat.pas b/src/lib/ffmpeg-0.11/avformat.pas index ae3ab8e0..19459646 100644 --- a/src/lib/ffmpeg-0.11/avformat.pas +++ b/src/lib/ffmpeg-0.11/avformat.pas @@ -22,8 +22,8 @@ * - Changes and updates by the UltraStar Deluxe Team * * Conversion of version 0.11 libavformat/avformat.h - * Min. version: 53.31.100 - * Max. version: 53.32.100 + * Min. version: 54.6.1 + * Max. version: 54.6.100 *) unit avformat; @@ -56,22 +56,21 @@ uses const (* * IMPORTANT: This headers are valid for all minor revisions of ffmpeg - * version 0.10x - * This file has been created with the previous ffmpeg headers as a basis - * by removing all unneeded conditionals. + * version 0.11.x + * This file has been created with the 0.10.* ffmpeg headers as a basis *) (* Max. supported version by this header *) - LIBAVFORMAT_MAX_VERSION_MAJOR = 53; - LIBAVFORMAT_MAX_VERSION_MINOR = 32; + LIBAVFORMAT_MAX_VERSION_MAJOR = 54; + LIBAVFORMAT_MAX_VERSION_MINOR = 6; LIBAVFORMAT_MAX_VERSION_RELEASE = 100; LIBAVFORMAT_MAX_VERSION = (LIBAVFORMAT_MAX_VERSION_MAJOR * VERSION_MAJOR) + (LIBAVFORMAT_MAX_VERSION_MINOR * VERSION_MINOR) + (LIBAVFORMAT_MAX_VERSION_RELEASE * VERSION_RELEASE); (* Min. supported version by this header *) - LIBAVFORMAT_MIN_VERSION_MAJOR = 53; - LIBAVFORMAT_MIN_VERSION_MINOR = 31; - LIBAVFORMAT_MIN_VERSION_RELEASE = 100; + LIBAVFORMAT_MIN_VERSION_MAJOR = 54; + LIBAVFORMAT_MIN_VERSION_MINOR = 6; + LIBAVFORMAT_MIN_VERSION_RELEASE = 1; LIBAVFORMAT_MIN_VERSION = (LIBAVFORMAT_MIN_VERSION_MAJOR * VERSION_MAJOR) + (LIBAVFORMAT_MIN_VERSION_MINOR * VERSION_MINOR) + (LIBAVFORMAT_MIN_VERSION_RELEASE * VERSION_RELEASE); @@ -199,7 +198,7 @@ const * * Main lavf structure used for both muxing and demuxing is AVFormatContext, * which exports all information about the file being read or written. As with - * most Libav structures, its size is not part of public ABI, so it cannot be + * most Libavformat structures, its size is not part of public ABI, so it cannot be * allocated on stack or directly with av_malloc(). To create an * AVFormatContext, use avformat_alloc_context() (some functions, like * avformat_open_input() might do that for you). @@ -215,11 +214,23 @@ const * set by user for input, always set by user for output (unless you are dealing * with an AVFMT_NOFILE format). * + * @section lavf_options Passing options to (de)muxers + * Lavf allows to configure muxers and demuxers using the @ref avoptions + * mechanism. Generic (format-independent) libavformat options are provided by + * AVFormatContext, they can be examined from a user program by calling + * av_opt_next() / av_opt_find() on an allocated AVFormatContext (or its AVClass + * from avformat_get_class()). Private (format-specific) options are provided by + * AVFormatContext.priv_data if and only if AVInputFormat.priv_class / + * AVOutputFormat.priv_class of the corresponding format struct is non-NULL. + * Further options may be provided by the @ref AVFormatContext.pb "I/O context", + * if its AVClass is non-NULL, and the protocols layer. See the discussion on + * nesting in @ref avoptions documentation to learn how to access those. + * * @defgroup lavf_decoding Demuxing * @{ * Demuxers read a media file and split it into chunks of data (@em packets). A - * @ref AVPacket "packet" contains one or more frames which belong a single - * elementary stream. In lavf API this process is represented by the + * @ref AVPacket "packet" contains one or more encoded frames which belongs to a + * single elementary stream. In the lavf API this process is represented by the * avformat_open_input() function for opening a file, av_read_frame() for * reading a single packet and finally avformat_close_input(), which does the * cleanup. @@ -249,10 +260,55 @@ const * your reading callbacks to it. Then set the @em pb field of your * AVFormatContext to newly created AVIOContext. * + * Since the format of the opened file is in general not known until after + * avformat_open_input() has returned, it is not possible to set demuxer private + * options on a preallocated context. Instead, the options should be passed to + * avformat_open_input() wrapped in an AVDictionary: + * @code + * AVDictionary *options = NULL; + * av_dict_set(&options, "video_size", "640x480", 0); + * av_dict_set(&options, "pixel_format", "rgb24", 0); + * + * if (avformat_open_input(&s, url, NULL, &options) < 0) + * abort(); + * av_dict_free(&options); + * @endcode + * This code passes the private options 'video_size' and 'pixel_format' to the + * demuxer. They would be necessary for e.g. the rawvideo demuxer, since it + * cannot know how to interpret raw video data otherwise. If the format turns + * out to be something different than raw video, those options will not be + * recognized by the demuxer and therefore will not be applied. Such unrecognized + * options are then returned in the options dictionary (recognized options are + * consumed). The calling program can handle such unrecognized options as it + * wishes, e.g. + * @code + * AVDictionaryEntry *e; + * if (e = av_dict_get(options, "", NULL, AV_DICT_IGNORE_SUFFIX)) { + * fprintf(stderr, "Option %s not recognized by the demuxer.\n", e->key); + * abort(); + * } + * @endcode + * * After you have finished reading the file, you must close it with * avformat_close_input(). It will free everything associated with the file. * * @section lavf_decoding_read Reading from an opened file + * Reading data from an opened AVFormatContext is done by repeatedly calling + * av_read_frame() on it. Each call, if successful, will return an AVPacket + * containing encoded data for one AVStream, identified by + * AVPacket.stream_index. This packet may be passed straight into the libavcodec + * decoding functions avcodec_decode_video2(), avcodec_decode_audio4() or + * avcodec_decode_subtitle2() if the caller wishes to decode the data. + * + * AVPacket.pts, AVPacket.dts and AVPacket.duration timing information will be + * set if known. They may also be unset (i.e. AV_NOPTS_VALUE for + * pts/dts, 0 for duration) if the stream does not provide them. The timing + * information will be in AVStream.time_base units, i.e. it has to be + * multiplied by the timebase to convert them to seconds. + * + * The packet data belongs to the demuxer and is invalid after the next call to + * av_read_frame(). The user must free the packet with av_free_packet() before + * calling av_read_frame() again or closing the file. * * @section lavf_decoding_seek Seeking * @} @@ -360,85 +416,6 @@ type * @} *) -{$IF FF_API_OLD_METADATA2} -(** - * @defgroup old_metadata Old metadata API - * The following functions are deprecated, use - * their equivalents from libavutil/dict.h instead. - * @ - *) - -const -{ - AV_METADATA_MATCH_CASE = 1; - AV_METADATA_IGNORE_SUFFIX = 2; - AV_METADATA_DONT_STRDUP_KEY = 4; - AV_METADATA_DONT_STRDUP_VAL = 8; - AV_METADATA_DONT_OVERWRITE = 16; -} - AV_METADATA_MATCH_CASE = AV_DICT_MATCH_CASE; - AV_METADATA_IGNORE_SUFFIX = AV_DICT_IGNORE_SUFFIX; - AV_METADATA_DONT_STRDUP_KEY = AV_DICT_DONT_STRDUP_KEY; - AV_METADATA_DONT_STRDUP_VAL = AV_DICT_DONT_STRDUP_VAL; - AV_METADATA_DONT_OVERWRITE = AV_DICT_DONT_OVERWRITE; - -type - PAVMetadataTag = ^TAVMetadataTag; - TAVMetadataTag = record - key: PAnsiChar; - value: PAnsiChar; - end; - - PAVMetadata = Pointer; - PAVDictionary = PAVMetadata; - PAVDictionaryEntry = PAVMetadata; - -(** - * Get a metadata element with matching key. - * - * @param prev Set to the previous matching element to find the next. - * If set to NULL the first matching element is returned. - * @param flags Allows case as well as suffix-insensitive comparisons. - * @return Found tag or NULL, changing key or value leads to undefined behavior. - *) -function av_metadata_get(m: PAVDictionary; key: {const} PAnsiChar; - prev: {const} PAVDictionaryEntry; flags: cint): PAVDictionaryEntry; - cdecl; external av__format; - -(** - * Set the given tag in *pm, overwriting an existing tag. - * - * @param pm pointer to a pointer to a metadata struct. If *pm is NULL - * a metadata struct is allocated and put in *pm. - * @param key tag key to add to *pm (will be av_strduped depending on flags) - * @param value tag value to add to *pm (will be av_strduped depending on flags). - * Passing a NULL value will cause an existing tag to be deleted. - * @return >= 0 on success otherwise an error code <0 - *) -function av_metadata_set2(var pm: PAVDictionary; key: {const} PAnsiChar; value: {const} PAnsiChar; flags: cint): cint; - cdecl; external av__format; deprecated; - -(** - * Copy metadata from one AVDictionary struct into another. - * @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL, - * this function will allocate a struct for you and put it in *dst - * @param src pointer to source AVDictionary struct - * @param flags flags to use when setting metadata in *dst - * @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag - *) -procedure av_metadata_copy(var dst: PAVDictionary; src: PAVDictionary; flags: cint); - cdecl; external av__format; deprecated; - -(** - * Free all the memory allocated for an AVDictionary struct. - *) -procedure av_metadata_free(var m: PAVDictionary); - cdecl; external av__format; deprecated; -(** - * @} - *) -{$IFEND} - (* packet functions *) (** @@ -514,10 +491,18 @@ const AVFMT_NOBINSEARCH = $2000; (**< Format does not allow to fallback to binary search via read_timestamp *) AVFMT_NOGENSEARCH = $4000; (**< Format does not allow to fallback to generic search *) AVFMT_NO_BYTE_SEEK = $8000; (**< Format does not allow seeking by bytes *) - AVFMT_TS_NONSTRICT = $8000000; (**< Format does not require strictly + AVFMT_ALLOW_FLUSH = $10000;(**< Format allows flushing. If not set, the muxer will not receive a NULL packet in the write_packet function. *) +{$IF LIBAVFORMAT_VERSION_MAJOR <= 54} + AVFMT_TS_NONSTRICT = $8020000; //we try to be compatible to the ABIs of ffmpeg and major forks +{$ELSE} + AVFMT_TS_NONSTRICT = $20000; +{$ENDIF} + (**< Format does not require strictly increasing timestamps, but they must still be monotonic *) + AVFMT_SEEK_TO_PTS = $4000000 (**< Seeking is based on PTS *) + // used by AVIndexEntry AVINDEX_KEYFRAME = $0001; @@ -531,11 +516,16 @@ const AVFMT_INFINITEOUTPUTLOOP = 0; AVFMT_FLAG_GENPTS = $0001; ///< Generate missing pts even if it requires parsing future frames. AVFMT_FLAG_IGNIDX = $0002; ///< Ignore index. - AVFMT_FLAG_NONBLOCK = $0004; ///< Do not block when reading packets from input. - AVFMT_FLAG_IGNDTS = $0008; ///< Ignore DTS on frames that contain both DTS & PTS - AVFMT_FLAG_NOFILLIN = $0010; ///< Do not infer any values from other values, just return what is stored in the container - AVFMT_FLAG_NOPARSE = $0020; ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled - AVFMT_FLAG_RTP_HINT = $0040; ///< Add RTP hinting to the output file + AVFMT_FLAG_NONBLOCK = $0004; ///< Do not block when reading packets from input. + AVFMT_FLAG_IGNDTS = $0008; ///< Ignore DTS on frames that contain both DTS & PTS + AVFMT_FLAG_NOFILLIN = $0010; ///< Do not infer any values from other values, just return what is stored in the container + AVFMT_FLAG_NOPARSE = $0020; ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled + AVFMT_FLAG_CUSTOM_IO = $0080; ///< The caller has supplied a custom AVIOContext, don't avio_close() it. + AVFMT_FLAG_DISCARD_CORRUPT = $0100; ///< Discard frames marked corrupted + AVFMT_FLAG_MP4A_LATM = $8000; ///< Enable RTP MP4A-LATM payload + AVFMT_FLAG_SORT_DTS = $10000; ///< try to interleave outputted packets by dts (using this flag can slow demuxing down) + AVFMT_FLAG_PRIV_OPT = $20000; ///< Enable use of private options by delaying codec open (this could be made default once all code is converted) + AVFMT_FLAG_KEEP_SIDE_DATA = $40000; ///< Dont merge side data but keep it separate. MAX_STD_TIMEBASES = (60*12+5); @@ -559,6 +549,16 @@ const * even when user did not explicitly ask for subtitles. *) AV_DISPOSITION_FORCED = $0040; + AV_DISPOSITION_HEARING_IMPAIRED = $0080; /**< stream for hearing impaired audiences */ + AV_DISPOSITION_VISUAL_IMPAIRED = $0100; /**< stream for visual impaired audiences */ + AV_DISPOSITION_CLEAN_EFFECTS = $0200; /**< stream without voice */ +(** + * The stream is stored in the file as an attached picture/"cover art" (e.g. + * APIC frame in ID3v2). The single packet associated with it will be returned + * among the first few packets read from the file unless seeking takes place. + * It can also be accessed at any time in AVStream.attached_pic. + *) + AV_DISPOSITION_ATTACHED_PIC = $0400; // used by TAVFormatContext.debug FF_FDEBUG_TS = 0001; @@ -570,8 +570,6 @@ type PPAVCodecTag = ^PAVCodecTag; PAVCodecTag = Pointer; - PAVFormatParameters = ^TAVFormatParameters; - PAVOutputFormat = ^TAVOutputFormat; PAVProbeData = ^TAVProbeData; @@ -602,27 +600,6 @@ type s_conv: {const} PAVMetadataConv; end; - TAVFormatParameters = record - time_base: TAVRational; - sample_rate: cint; - channels: cint; - width: cint; - height: cint; - pix_fmt: TAVPixelFormat; - channel: cint; (**< Used to select DV channel. *) - standard: PAnsiChar; (**< TV standard, NTSC, PAL, SECAM *) - { Delphi does not support bit fields -> use bf_flags instead - unsigned int mpeg2ts_raw:1; (**< Force raw MPEG-2 transport stream output, if possible. *) - unsigned int mpeg2ts_compute_pcr:1; (**< Compute exact PCR for each transport - stream packet (only meaningful if - mpeg2ts_raw is TRUE). *) - unsigned int initial_pause:1; (**< Do not begin to play the stream - immediately (RTSP only). *) - unsigned int prealloced_context:1; - } - bf_flags: byte; // 0:mpeg2ts_raw/1:mpeg2ts_compute_pcr/2:initial_pause/3:prealloced_context - end; - (** * @addtogroup lavf_encoding * @{ @@ -637,13 +614,39 @@ type long_name: PAnsiChar; mime_type: PAnsiChar; extensions: PAnsiChar; (**< comma-separated filename extensions *) + (* output support *) + audio_codec: TCodecID; (**< default audio codec *) + video_codec: TCodecID; (**< default video codec *) + subtitle_codec: TCodecID; (**< default subtitle codec *) + (** + * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_RAWPICTURE, + * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, + * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH, + * AVFMT_TS_NONSTRICT + *) + flags: cint; + + (** + * List of supported codec_id-codec_tag pairs, ordered by "better + * choice first". The arrays are all terminated by CODEC_ID_NONE. + *) + codec_tag: {const} PPAVCodecTag; + + priv_class: {const} PAVClass; ///< AVClass for the private context + + (***************************************************************** + * No fields below this line are part of the public API. They + * may not be used outside of libavformat and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + *) + next: PAVOutputFormat; (** * size of private data so that it can be allocated in the wrapper *) priv_data_size: cint; - (* output support *) - audio_codec: TCodecID; (**< default audio codec *) - video_codec: TCodecID; (**< default video codec *) + write_header: function (c: PAVFormatContext): cint; cdecl; (** * Write a packet. If AVFMT_ALLOW_FLUSH is set in flags, @@ -655,31 +658,10 @@ type write_packet: function (c: PAVFormatContext; pkt: PAVPacket): cint; cdecl; write_trailer: function (c: PAVFormatContext): cint; cdecl; (** - * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_RAWPICTURE, - * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, - * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH + * Currently only used to set pixel format if not YUV420P. *) - flags: cint; - - dummy: pointer; - interleave_packet: function (s: PAVFormatContext; out_: PAVPacket; in_: PAVPacket; flush: cint): cint; cdecl; - - (** - * List of supported codec_id-codec_tag pairs, ordered by "better - * choice first". The arrays are all terminated by CODEC_ID_NONE. - *) - codec_tag: {const} PPAVCodecTag; - - subtitle_codec: TCodecID; (**< default subtitle codec *) - -{$IF FF_API_OLD_METADATA2} - {const} metadata_conv: PAVMetadataConv; -{$IFEND} - - {const} priv_class: PAVClass; ///< AVClass for the private context - (** * Test if the given codec can be stored in this container. * @@ -690,9 +672,6 @@ type get_output_timestamp: procedure (s: PAVFormatContext; stream: cint; dts: Pcint64; wall: Pcint64); cdecl; - - (* private fields *) - next: PAVOutputFormat; end; (** * @} @@ -716,6 +695,38 @@ type *) long_name: PAnsiChar; + (** + * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, + * AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, + * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS. + *) + flags: cint; + + (** + * If extensions are defined, then no probe is done. You should + * usually not use extension format guessing because it is not + * reliable enough + *) + extensions: PAnsiChar; + + codec_tag: {const} PPAVCodecTag; + + priv_class: {const} PAVClass; ///< AVClass for the private context + + (***************************************************************** + * No fields below this line are part of the public API. They + * may not be used outside of libavformat and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + *) + next: PAVInputFormat; + + (** + * Raw demuxers store their codec ID here. + *) + raw_codec_id: cint; + (** * Size of private data so that it can be allocated in the wrapper. *) @@ -730,15 +741,14 @@ type (** * Read the format header and initialize the AVFormatContext - * structure. Return 0 if OK. 'ap' if non-NULL contains - * additional parameters. Only used in raw format right - * now. 'av_new_stream' should be called to create new streams. + * structure. Return 0 if OK. Only used in raw format right + * now. 'avformat_new_stream' should be called to create new streams. *) - read_header: function (c: PAVFormatContext; ap: PAVFormatParameters): cint; cdecl; + read_header: function (c: PAVFormatContext): cint; cdecl; (** * Read one packet and put it in 'pkt'. pts and flags are also - * set. 'av_new_stream' can be called only if the flag + * set. 'avformat_new_stream' can be called only if the flag * AVFMTCTX_NOHEADER is used. * @return 0 on success, < 0 on error. * When returning an error, pkt must not have been allocated @@ -770,25 +780,6 @@ type read_timestamp: function (s: PAVFormatContext; stream_index: cint; pos: pint64; pos_limit: cint64): cint64; cdecl; - (** - * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, - * AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, - * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK. - *) - flags: cint; - - (** - * If extensions are defined, then no probe is done. You should - * usually not use extension format guessing because it is not - * reliable enough - *) - extensions: PAnsiChar; - - (** - * General purpose read-only value that the format can use. - *) - value: cint; - (** * Start/resume playing - only meaningful if using a network-based format * (RTSP). @@ -801,8 +792,6 @@ type *) read_pause: function (c: PAVFormatContext): cint; cdecl; - codec_tag: {const} PPAVCodecTag; - (** * Seek to timestamp ts. * Seeking will be done so that the point from which all active streams @@ -815,11 +804,6 @@ type ts: cint64; max_ts: cint64; flags: cint): cint; cdecl; - - {const} metadata_conv: PAVMetadataConv; - - (* private fields *) - next: PAVInputFormat; end; (** * @} @@ -831,6 +815,7 @@ type AVSTREAM_PARSE_HEADERS, (**< Only parse headers, do not repack. *) AVSTREAM_PARSE_TIMESTAMPS, (**< full parsing and interpolation of timestamps for frames not starting on a packet boundary *) AVSTREAM_PARSE_FULL_ONCE (**< full parsing and repack of the first frame only, only implemented for H.264 currently *) + AVSTREAM_PARSE_FULL_RAW = $57415230; // MKTAG(0,'R','A','W'), /**< full parsing and repack with timestamp generation for raw */ ); TAVIndexEntry = record @@ -868,7 +853,23 @@ type *) TAVStream = record index: cint; (**< stream index in AVFormatContext *) + (** + * Format-specific stream ID. + * decoding: set by libavformat + * encoding: set by the user + *) id: cint; (**< format-specific stream ID *) + (** + * Codec context associated with this stream. Allocated and freed by + * libavformat. + * + * - decoding: The demuxer exports codec information stored in the headers + * here. + * - encoding: The user sets codec information, the muxer writes it to the + * output. Mandatory fields as specified in AVCodecContext + * documentation must be set even if this AVCodecContext is + * not actually used for encoding. + *) codec: PAVCodecContext; (**< codec context *) (** * Real base framerate of the stream. @@ -881,11 +882,6 @@ type r_frame_rate: TAVRational; priv_data: pointer; -{$IF FF_API_REORDER_PRIVATE} - (* internal data used in av_find_stream_info() *) - first_dts: cint64; -{$IFEND} - (** * encoding: pts generation when outputting stream *) @@ -893,28 +889,14 @@ type (** * This is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. For fixed-fps content, - * time base should be 1/framerate and timestamp increments should be 1. + * of which frame timestamps are represented. + * * decoding: set by libavformat - * encoding: set by libavformat in av_write_header + * encoding: set by libavformat in av_write_header. The muxer may use the + * user-provided value of @ref AVCodecContext.time_base "codec->time_base" + * as a hint. *) time_base: TAVRational; -{$IF FF_API_REORDER_PRIVATE} - pts_wrap_bits: cint; (* number of bits in pts (used for wrapping control) *) -{$IFEND} -{$IF FF_API_STREAM_COPY} - (* ffmpeg.c private use *) - stream_copy: cint; (**< If set, just copy stream. *) {deprecated} -{$IFEND} - discard: TAVDiscard; ///< Selects which packets can be discarded at will and do not need to be demuxed. -{$IF FF_API_AVSTREAM_QUALITY} - //FIXME move stuff to a flags field? - (** - * Quality, as it has been removed from AVCodecContext and put in AVVideoFrame. - * MN:dunno if thats the right place, for it - *) - quality: cfloat; {deprecated} -{$IFEND} (** * Decoding: pts of the first frame of the stream in presentation order, in stream time base. @@ -933,29 +915,11 @@ type *) duration: cint64; -{$IF FF_API_REORDER_PRIVATE} - (* av_read_frame() support *) - need_parsing: TAVStreamParseType; - parser: PAVCodecParserContext; - - cur_dts: cint64; - last_IP_duration: cint; - last_IP_pts: cint64; - (* av_seek_frame() support *) - index_entries: PAVIndexEntry; (**< Only used if the format does not - support seeking natively. *) - nb_index_entries: cint; - index_entries_allocated_size: cuint; -{$IFEND} - nb_frames: cint64; ///< number of frames in this stream if known or 0 disposition: cint; (**< AV_DISPOSITION_* bitfield *) -{$IF FF_API_REORDER_PRIVATE} - probe_data: TAVProbeData; - pts_buffer: array [0..MAX_REORDER_DELAY] of cint64; -{$IFEND} + discard: TAVDiscard; ///< Selects which packets can be discarded at will and do not need to be demuxed. (** * sample aspect ratio (0 if unknown) @@ -966,41 +930,19 @@ type metadata: PAVDictionary; -{$IF FF_API_REORDER_PRIVATE} - {* Intended mostly for av_read_frame() support. Not supposed to be used by *} - {* external applications; try to use something else if at all possible. *} - cur_ptr: {const} PCuint8; - cur_len: cint; - cur_pkt: TAVPacket; - - // Timestamp generation support: - (** - * Timestamp corresponding to the last dts sync point. - * - * Initialized when AVCodecParserContext.dts_sync_point >= 0 and - * a DTS is received from the underlying container. Otherwise set to - * AV_NOPTS_VALUE by default. - *) - reference_dts: cint64; - - (** - * Number of packets to buffer for codec probing - * NOT PART OF PUBLIC API - *) - probe_packets: cint; - (** - * last packet in packet_buffer for this stream when muxing. - * Used internally, NOT PART OF PUBLIC API, do not read or - * write from outside of libav* + * Average framerate *) - last_in_packet_buffer: PAVPacketList; -{$IFEND} + avg_frame_rate: TAVRational; (** - * Average framerate + * For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet + * will contain the attached picture. + * + * decoding: set by libavformat, must not be modified by the caller. + * encoding: unused *) - avg_frame_rate: TAVRational; + attached_pic: TAVPacket; (***************************************************************** * All fields below this line are not part of the public API. They @@ -1010,36 +952,13 @@ type ***************************************************************** *) - (** - * Number of frames that have been demuxed during av_find_stream_info() - *) - codec_info_nb_frames: cint; - - (** - * Stream Identifier - * This is the MPEG-TS stream identifier +1 - * 0 means unknown - *) - stream_identifier: cint; - - interleaver_chunk_size: cint64; - interleaver_chunk_duration: cint64; - (** * Stream information used internally by av_find_stream_info() *) info: PStreamInfo; - (** - * flag to indicate that probing is requested - * NOT PART OF PUBLIC API - *) - request_probe: cint; -{$IF NOT FF_API_REORDER_PRIVATE} - {const} cur_ptr: PByte; - cur_len: cint; - cur_pkt: TAVPacket; - + pts_wrap_bits: cint; (**< number of bits in pts (used for wrapping control) *) + // Timestamp generation support: (** * Timestamp corresponding to the last dts sync point. @@ -1051,31 +970,55 @@ type reference_dts: cint64; first_dts: cint64; cur_dts: cint64; - last_IP_duration: cint; last_IP_pts: cint64; + last_IP_duration: cint; (** * Number of packets to buffer for codec probing *) probe_packets: cint; + (** + * Number of frames that have been demuxed during av_find_stream_info() + *) + codec_info_nb_frames: cint; + + (** + * Stream Identifier + * This is the MPEG-TS stream identifier +1 + * 0 means unknown + *) + stream_identifier: cint; + + interleaver_chunk_size: cint64; + interleaver_chunk_duration: cint64; + + (* av_read_frame() support *) + need_parsing: TAVStreamParseType; + parser: PAVCodecParserContext; + (** * last packet in packet_buffer for this stream when muxing. *) last_in_packet_buffer: PAVPacketList; probe_data: TAVProbeData; pts_buffer: array [0..MAX_REORDER_DELAY] of cint64; - (* av_read_frame() support *) - need_parsing: TAVStreamParseType; - parser: PAVCodecParserContext; index_entries: PAVIndexEntry; (**< Only used if the format does not support seeking natively. *) nb_index_entries: cint; index_entries_allocated_size: cuint; - pts_wrap_bits: cint; (**< number of bits in pts (used for wrapping control) *) -{$IFEND} + (** + * flag to indicate that probing is requested + * NOT PART OF PUBLIC API + *) + request_probe: cint; + (** + * Indicates that everything up to the next keyframe + * should be discarded. + *) + skip_to_keyframe: cint; end; (** @@ -1151,6 +1094,9 @@ type *) pb: PByteIOContext; + (* stream info *) + ctx_flags: cint; (**< Format-specific flags, see AVFMTCTX_xx *) + (** * A list of all streams in the file. New streams are created with * avformat_new_stream(). @@ -1164,24 +1110,6 @@ type streams: PPAVStream; filename: array [0..1023] of AnsiChar; (* input or output filename *) - (* stream info *) -{$IF FF_API_TIMESTAMP} - (** - * @deprecated use 'creation_time' metadata tag instead - *) - timestamp: cint64; {deprecated} -{$IFEND} - - ctx_flags: cint; (**< Format-specific flags, see AVFMTCTX_xx *) -{$IF FF_API_REORDER_PRIVATE} - (* private data for pts handling (do not modify directly). *) - (** - * This buffer is only needed when packets were already buffered but - * not decoded, for example to get the codec parameters in MPEG - * streams. - *) - packet_buffer: PAVPacketList; -{$IFEND} (** * Decoding: position of the first frame of the component, in @@ -1197,13 +1125,6 @@ type *) duration: cint64; -{$IF FF_API_FILESIZE} - (** - * decoding: total file size, 0 if unknown - *) - file_size: cint64; -{$IFEND} - (** * Decoding: total stream bitrate in bit/s, 0 if not * available. Never set it directly if the file_size and the @@ -1211,42 +1132,10 @@ type *) bit_rate: cint; -{$IF FF_API_REORDER_PRIVATE} - (* av_read_frame() support *) - cur_st: PAVStream; - - (* av_seek_frame() support *) - data_offset: cint64; (**< offset of the first packet *) -{$IFEND} - -{$IF FF_API_MUXRATE} - (** - * use mpeg muxer private options instead - *) - mux_rate: cint; {deprecated} -{$IFEND} packet_size: cuint; -{$IF FF_API_PRELOAD} - preload: cint; {deprecated} -{$IFEND} max_delay: cint; -{$IF FF_API_LOOP_OUTPUT} - (** - * number of times to loop output in formats that support it - * - * @deprecated use the 'loop' private option in the gif muxer. - *) - loop_output: cint; -{$IFEND} - flags: cint; -{$IF FF_API_LOOP_INPUT} - (** - * @deprecated, use the 'loop' img2 demuxer private option. - *) - loop_input: cint; {deprecated} -{$IFEND} (** * decoding: size of data to probe; encoding: unused. @@ -1260,7 +1149,7 @@ type max_analyze_duration: cint; key: pbyte; - keylen : cint; + keylen: cint; nb_programs: cuint; programs: PPAVProgram; @@ -1304,34 +1193,8 @@ type nb_chapters: cuint; chapters: PAVChapterArray; - (** - * Flags to enable debugging. - *) - debug: cint; - -{$IF FF_API_REORDER_PRIVATE} - (** - * Raw packets from the demuxer, prior to parsing and decoding. - * This buffer is used for buffering packets until the codec can - * be identified, as parsing cannot be done without knowing the - * codec. - *) - raw_packet_buffer: PAVPacketList; - raw_packet_buffer_end: PAVPacketList; - - packet_buffer_end: PAVPacketList; -{$IFEND} - metadata: PAVDictionary; -{$IF FF_API_REORDER_PRIVATE} - (** - * Remaining size available for raw_packet_buffer, in bytes. - * NOT PART OF PUBLIC API - *) - raw_packet_buffer_remaining_size: cint; -{$IFEND} - (** * Start time of the stream in real world time, in microseconds * since the unix epoch (00:00 1st January 1970). That is, pts=0 @@ -1365,6 +1228,11 @@ type *) interrupt_callback: TAVIOInterruptCB; + (** + * Flags to enable debugging. + *) + debug: cint; + (** * Transport stream id. * This will be moved into demuxer private options. Thus no API/ABI compatibility @@ -1402,7 +1270,18 @@ type * New public fields should be added right above. ***************************************************************** *) -{$IF NOT FF_API_REORDER_PRIVATE} + + (** + * This buffer is only needed when packets were already buffered but + * not decoded, for example to get the codec parameters in MPEG + * streams. + *) + packet_buffer: PAVPacketList; + packet_buffer_end_: PAVPacketList; + + (* av_seek_frame() support *) + data_offset: cint64; (**< offset of the first packet *) + (** * Raw packets from the demuxer, prior to parsing and decoding. * This buffer is used for buffering packets until the codec can @@ -1412,24 +1291,16 @@ type raw_packet_buffer_: PAVPacketList; raw_packet_buffer_end_: PAVPacketList; (** - * Remaining size available for raw_packet_buffer, in bytes. + * Packets split by the parser get queued here. *) - raw_packet_buffer_remaining_size: cint; - + parse_queue: PAVPacketList; + parse_queue_end: PAVPacketList; (** - * This buffer is only needed when packets were already buffered but - * not decoded, for example to get the codec parameters in MPEG - * streams. + * Remaining size available for raw_packet_buffer, in bytes. *) - packet_buffer: PAVPacketList; - packet_buffer_end_: PAVPacketList; - - (* av_read_frame() support *) - cur_st: PAVStream; - - (* av_seek_frame() support *) - data_offset: cint64; (**< offset of the first packet *) -{$IFEND} + raw_packet_buffer_remaining_size: cint; + + avio_flags: cint; end; TAVPacketList = record @@ -1569,11 +1440,6 @@ function av_new_program(s: PAVFormatContext; id: cint): PAVProgram; * @} *) -{$IF FF_API_GUESS_IMG2_CODEC} -function av_guess_image2_codec(filename: {const} PAnsiChar): TCodecID; - cdecl; external av__format; -{$IFEND} - {$IF FF_API_PKT_DUMP} procedure av_pkt_dump(f: PAVFile; pkt: PAVPacket; dump_payload: cint); {deprecated} cdecl; external av__format; @@ -1655,34 +1521,25 @@ function av_probe_input_format2(pd: PAVProbeData; is_opened: cint; score_max: PC function av_probe_input_format3(pd: PAVProbeData; is_opened: cint; score_ret: Pcint): PAVInputFormat; cdecl; external av__format; -{$IF FF_API_FORMAT_PARAMETERS} (** - * Allocate all the structures needed to read an input stream. - * This does not open the needed codecs for decoding the stream[s]. - *) -function av_open_input_stream(var ic_ptr: PAVFormatContext; - pb: PByteIOContext; filename: PAnsiChar; - fmt: PAVInputFormat; ap: PAVFormatParameters): cint; - cdecl; external av__format; deprecated; - -(** - * Open a media file as input. The codecs are not opened. Only the file - * header (if present) is read. + * Probe a bytestream to determine the input format. Each time a probe returns + * with a score that is too low, the probe buffer size is increased and another + * attempt is made. When the maximum probe size is reached, the input format + * with the highest score is returned. * - * @param ic_ptr The opened media file handle is put here. - * @param filename filename to open - * @param fmt If non-NULL, force the file format to use. - * @param buf_size optional buffer size (zero if default is OK) - * @param ap Additional parameters needed when opening the file - * (NULL if default). - * @return 0 if OK, AVERROR_xxx otherwise + * @param pb the bytestream to probe + * @param fmt the input format is put here + * @param filename the filename of the stream + * @param logctx the log context + * @param offset the offset within the bytestream to probe from + * @param max_probe_size the maximum probe buffer size (zero for default) + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code otherwise *) -function av_open_input_file(var ic_ptr: PAVFormatContext; filename: PAnsiChar; - fmt: PAVInputFormat; buf_size: cint; - ap: PAVFormatParameters): cint; - cdecl; external av__format; deprecated; -{$IFEND} - +function av_probe_input_buffer(pb: PAVIOContext; var fmt: PAVInputFormat; + filename: {const} PAnsiChar; logctx: pointer; + offset: cuint; max_probe_size: cuint); + (** * Open an input stream and read the header. The codecs are not opened. * The stream must be closed with av_close_input_file(). @@ -1702,11 +1559,11 @@ function av_open_input_file(var ic_ptr: PAVFormatContext; filename: PAnsiChar; * * @note If you want to use custom IO, preallocate the format context and set its pb field. *) -function avformat_open_input(ps: PPAVFormatContext; {const} filename: PAnsiChar; fmt: PAVInputFormat; options: PPAVDictionary): cint; +function avformat_open_input(ps: PPAVFormatContext; filename: {const} PAnsiChar; fmt: PAVInputFormat; options: PPAVDictionary): cint; cdecl; external av__format; -function av_demuxer_open(ic: PAVFormatContext; ap: TAVFormatParameters): cint; - cdecl; external av__format; +function av_demuxer_open(ic: PAVFormatContext): cint; + cdecl; external av__format; deprecated; {$IF FF_API_FORMAT_PARAMETERS} (** @@ -1721,6 +1578,8 @@ function av_demuxer_open(ic: PAVFormatContext; ap: TAVFormatParameters): cint; * @return >=0 if OK, AVERROR_xxx on error * @todo Let the user decide somehow what information is needed so that * we do not waste time getting stuff the user does not need. + * + * @deprecated use avformat_find_stream_info. *) function av_find_stream_info(ic: PAVFormatContext): cint; cdecl; external av__format; deprecated; @@ -1865,16 +1724,6 @@ function av_read_play(s: PAVFormatContext): cint; function av_read_pause(s: PAVFormatContext): cint; cdecl; external av__format; -{$IF FF_API_FORMAT_PARAMETERS} -(** - * Free a AVFormatContext allocated by av_open_input_stream. - * @param s context to free - * @deprecated use av_close_input_file() - *) -procedure av_close_input_stream(s: PAVFormatContext); - cdecl; external av__format; -{$IFEND} - {$IF FF_API_CLOSE_INPUT_FILE} (** * @deprecated use avformat_close_input() @@ -1926,35 +1775,6 @@ const AVSEEK_FLAG_ANY = 4; ///< seek to any frame, even non-keyframes AVSEEK_FLAG_FRAME = 8; -{$IF FF_API_SEEK_PUBLIC} -function av_seek_frame_binary(s: PAVFormatContext; stream_index: cint; - target_ts: cint64; flags: cint): cint; - cdecl; external av__format; deprecated; -procedure av_update_cur_dts(s: PAVFormatContext; ref_st: PAVStream; - timestamp: cint64); - cdecl; external av__format; deprecated; - -type - TReadTimestampFunc = function (pavfc: PAVFormatContext; - arg2: cint; arg3: Pint64; arg4: cint64): cint64; cdecl; {deprecated} - -function av_gen_search(s: PAVFormatContext; stream_index: cint; - target_ts: cint64; pos_min: cint64; - pos_max: cint64; pos_limit: cint64; - ts_min: cint64; ts_max: cint64; - flags: cint; ts_ret: Pint64; - read_timestamp: TReadTimestampFunc): cint64; - cdecl; external av__format; deprecated; -{$IFEND} - -{$IF FF_API_FORMAT_PARAMETERS} -(** - * media file output - *) -function av_set_parameters(s: PAVFormatContext; ap: PAVFormatParameters): cint; - cdecl; external av__format; -{$IFEND} - (** * @addtogroup lavf_encoding * @{ @@ -1977,29 +1797,6 @@ function av_set_parameters(s: PAVFormatContext; ap: PAVFormatParameters): cint; function avformat_write_header(s: PAVFormatContext; options: {PPAVDictionary} pointer): cint; cdecl; external av__format; -(** - * Allocate the stream private data and write the stream header to an - * output media file. - * - * @param s media file handle - * @return 0 if OK, AVERROR_xxx on error - *) -{$IF FF_API_FORMAT_PARAMETERS} -(** - * Allocate the stream private data and write the stream header to an - * output media file. - * @note: this sets stream time-bases, if possible to stream->codec->time_base - * but for some formats it might also be some other time base - * - * @param s media file handle - * @return 0 if OK, AVERROR_xxx on error - * - * @deprecated use avformat_write_header. - *) -function av_write_header(s: PAVFormatContext): cint; {deprecated} - cdecl; external av__format; -{$IFEND} - (** * Write a packet to an output media file ensuring correct interleaving. * @@ -2013,6 +1810,8 @@ function av_write_header(s: PAVFormatContext): cint; {deprecated} * @param s media file handle * @param pkt The packet containing the data to be written. Libavformat takes * ownership of the data and will free it when it sees fit using the packet's + * This can be NULL (at any time, not just at the end), to flush the + * interleaving queues. * @ref AVPacket.destruct "destruct" field. The caller must not access the data * after this function returns, as it may already be freed. * Packet's @ref AVPacket.stream_index "stream_index" field must be set to the @@ -2027,24 +1826,15 @@ function av_write_header(s: PAVFormatContext): cint; {deprecated} function av_interleaved_write_frame(s: PAVFormatContext; var pkt: TAVPacket): cint; cdecl; external av__format; +{$IF FF_API_INTERLEAVE_PACKET} (** - * Interleave a packet per dts in an output media file. - * - * Packets with pkt->destruct == av_destruct_packet will be freed inside this - * function, so they cannot be used after it. Note that calling av_free_packet() - * on them is still safe. - * - * @param s media file handle - * @param out the interleaved packet will be output here - * @param pkt the input packet - * @param flush 1 if no further packets are available as input and all - * remaining packets should be output - * @return 1 if a packet was output, 0 if no packet could be output, - * < 0 if an error occurred + * @deprecated this function was never meant to be called by the user + * programs. *) function av_interleave_packet_per_dts(s: PAVFormatContext; _out: PAVPacket; pkt: PAVPacket; flush: cint): cint; - cdecl; external av__format; + cdecl; external av__format; deprecated; +{$ENDIF} (** * Write the stream trailer to an output media file and free the @@ -2241,45 +2031,18 @@ procedure av_url_split(proto: PAnsiChar; proto_size: cint; {const} url: PAnsiChar); cdecl; external av__format; -{$IF FF_API_DUMP_FORMAT} -(** - * @deprecated Deprecated in favor of av_dump_format(). - *) -procedure dump_format(ic: PAVFormatContext; index: cint; url: PAnsiChar; - is_output: cint); - cdecl; external av__format; deprecated; -{$IFEND} - -procedure av_dump_format(ic: PAVFormatContext; index: cint; url: PAnsiChar; - is_output: cint); +procedure av_dump_format(ic: PAVFormatContext; + index: cint; + url: PAnsiChar; + is_output: cint); cdecl; external av__format; -{$IF FF_API_PARSE_DATE} -(** - * Parse datestr and return a corresponding number of microseconds. - * - * @param datestr String representing a date or a duration. - * See av_parse_time() for the syntax of the provided string. - * @deprecated in favor of av_parse_time() - *) -function parse_date(datestr: PAnsiChar; duration: cint): cint64; {deprecated} - cdecl; external av__format; deprecated; -{$IFEND} - (** * Get the current time in microseconds. *) function av_gettime(): cint64; cdecl; external av__format; -{$IF FF_API_FIND_INFO_TAG} -(** - * @deprecated use av_find_info_tag in libavutil instead. - *) -function find_info_tag(arg: PAnsiChar; arg_size: cint; tag1: PAnsiChar; info: PAnsiChar): cint; - cdecl; external av__format; -{$IFEND} - (** * Return in 'buf' the path with '%d' replaced by a number. * @@ -2322,11 +2085,6 @@ function av_filename_number_test(filename: PAnsiChar): cint; function av_sdp_create(ac: pointer; n_files: cint; buf: PAnsiChar; size: cint): cint; cdecl; external av__format; -{$IF FF_API_SDP_CREATE} -function avf_sdp_create(ac: PPAVFormatContext; n_files: cint; buff: PByteArray; size: cint): cint; - cdecl; external av__format; -{$IFEND} - (** * Return a positive value if the given filename has one of the given * extensions, 0 otherwise. @@ -2369,6 +2127,27 @@ function avformat_get_riff_video_tags(): {const} PAVCodecTag; *) function avformat_get_riff_audio_tags(): {const} PAVCodecTag; cdecl; external av__format; + +(** + * Guesses the sample aspect ratio of a frame, based on both the stream and the + * frame aspect ratio. + * + * Since the frame aspect ratio is set by the codec but the stream aspect ratio + * is set by the demuxer, these two may not be equal. This function tries to + * return the value that you should use if you would like to display the frame. + * + * Basic logic is to use the stream aspect ratio if it is set to something sane + * otherwise use the frame aspect ratio. This way a container setting, which is + * usually easy to modify can override the coded value in the frames. + * + * @param format the format context which the stream is part of + * @param stream the stream which the frame is part of + * @param frame the frame with the aspect ratio to be determined + * @return the guessed (valid) sample_aspect_ratio, 0/1 if no idea + *) +function av_guess_sample_aspect_ratio(format: PAVFormatContext; stream: PAVStream; frame: PAVFrame): TAVRational; + cdecl; external av__format; + (** * @} *) diff --git a/src/lib/ffmpeg-0.11/avio.pas b/src/lib/ffmpeg-0.11/avio.pas index 616e723a..72fa93a3 100644 --- a/src/lib/ffmpeg-0.11/avio.pas +++ b/src/lib/ffmpeg-0.11/avio.pas @@ -29,7 +29,7 @@ * header, so it should not be directly included in your projects. * * update to - * avformat version: 52.110.0 + * avformat version: 54.6.100 *) unit avio; @@ -91,7 +91,6 @@ const const AVIO_SEEKABLE_NORMAL = 0001; (**< Seeking works like for a local file *) - URL_PROTOCOL_FLAG_NESTED_SCHEME = 1; (*< The protocol name can be the first part of a nested protocol scheme *) type TReadWriteFunc = function(opaque: Pointer; buf: PByteArray; buf_size: cint): cint; cdecl; @@ -130,7 +129,6 @@ type *) PAVIOContext = ^TAVIOContext; TAVIOContext = record -{$IFNDEF FF_API_OLD_AVIO} (** * A class for private options. * @@ -143,8 +141,7 @@ type * warning -- this field can be NULL, be sure to not pass this AVIOContext * to any av_opt_* functions in that case. *) - av_class: PAVClass; -{$ENDIF} + av_class: {const} PAVClass; buffer: PByteArray; (**< Start of the buffer. *) buffer_size: cint; (**< Maximum buffer size *) buf_ptr: PByteArray; (**< Current position in the buffer *) @@ -161,9 +158,6 @@ type must_flush: cint; (**< true if the next seek should flush *) eof_reached: cint; (**< true if eof reached *) write_flag: cint; (**< true if open for writing *) -{$IF FF_API_OLD_AVIO} - is_streamed: cint; { deprecated } -{$IFEND} max_packet_size: cint; checksum: culong; checksum_ptr: PByteArray; @@ -190,345 +184,16 @@ type * This field is internal to libavformat and access from outside is not allowed. *) maxsize: cint64; - end; -(* unbuffered I/O *) - -{$IF FF_API_OLD_AVIO} - PURLProtocol = ^TURLProtocol; - -(** - * URL Context. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(URLContext) must not be used outside libav*. - * @deprecated This struct will be made private - *) - PPURLContext = ^PURLContext; - PURLContext = ^TURLContext; - TURLContext = record - av_class: {const} PAVClass; ///< information for av_log(). Set by url_open(). - prot: PURLProtocol; - flags: cint; - is_streamed: cint; (**< true if streamed (no seek possible), default = false *) - max_packet_size: cint; (**< if non zero, the stream is packetized with this max packet size *) - priv_data: pointer; - filename: PAnsiChar; (**< specified URL *) - is_connected: cint; - interrupt_callback: TAVIOInterruptCB; + (** + * avio_read and avio_write should if possible be satisfied directly + * instead of going through a buffer, and avio_seek will always + * call the underlying seek function directly. + *) + direct: cint; end; -(** - * @deprecated This struct is to be made private. Use the higher-level - * AVIOContext-based API instead. - *) - TURLProtocol = record - name: PAnsiChar; - url_open: function (h: PURLContext; url: {const} PAnsiChar; flags: cint): cint; cdecl; - url_read: function (h: PURLContext; buf: PByteArray; size: cint): cint; cdecl; - url_write: function (h: PURLContext; {const} buf: PByteArray; size: cint): cint; cdecl; - url_seek: function (h: PURLContext; pos: cint64; whence: cint): cint64; cdecl; - url_close: function (h: PURLContext): cint; cdecl; - next: PURLProtocol; - url_read_pause: function (h: PURLContext; pause: cint): cint; cdecl; - url_read_seek: function (h: PURLContext; stream_index: cint; - timestamp: cint64; flags: cint): cint64; cdecl; - url_get_file_handle: function (h: PURLContext): cint; cdecl; - priv_data_size: cint; - {const} priv_data_class: PAVClass; - flags: cint; - url_check: function (h: PURLContext; mask: cint): cint; - end; - - PURLPollEntry = ^TURLPollEntry; - TURLPollEntry = record - handle: PURLContext; - events: cint; - revents: cint; - end; - -(* not implemented *) -function url_poll(poll_table: PURLPollEntry; n: cint; timeout: cint): cint; - cdecl; external av__format; deprecated; - -const -(** - * @name URL open modes - * The flags argument to url_open and cosins must be one of the following - * constants, optionally ORed with other flags. - * @{ - *) - URL_RDONLY = 1; (**< read-only *) - URL_WRONLY = 2; (**< write-only *) - URL_RDWR = {(URL_RDONLY|URL_WRONLY)} 3; (**< read-write *) -(** - * @ - *) - -(** - * Use non-blocking mode. - * If this flag is set, operations on the context will return - * AVERROR(EAGAIN) if they can not be performed immediately. - * If this flag is not set, operations on the context will never return - * AVERROR(EAGAIN). - * Note that this flag does not affect the opening/connecting of the - * context. Connecting a protocol will always block if necessary (e.g. on - * network protocols) but never hang (e.g. on busy devices). - * Warning: non-blocking protocols is work-in-progress; this flag may be - * silently ignored. - *) - URL_FLAG_NONBLOCK = 8; - -type - PURLInterruptCB = ^TURLInterruptCB; - TURLInterruptCB = function (): cint; cdecl; - -{ -var - url_interrupt_cb: PURLInterruptCB; cvar; external: av__format; -} - -(** - * @defgroup old_url_funcs Old url_* functions - * @eprecated. Use the buffered API based on AVIOContext instead. - * @ - * @ingroup lavf_io - *) -function url_open_protocol(puc: PPURLContext; up: PURLProtocol; - url: {const} PAnsiChar; flags: cint): cint; - cdecl; external av__format; deprecated; -function url_alloc(h: PPURLContext; {const} url: PAnsiChar; flags: cint): cint; - cdecl; external av__format; deprecated; -function url_connect(h: PURLContext): cint; - cdecl; external av__format; deprecated; -function url_open(h: PPointer; url: {const} PAnsiChar; flags: cint): cint; - cdecl; external av__format; deprecated; -function url_read (h: PURLContext; buf: PByteArray; size: cint): cint; - cdecl; external av__format; deprecated; -function url_read_complete (h: PURLContext; buf: PByteArray; size: cint): cint; - cdecl; external av__format; deprecated; -function url_write (h: PURLContext; {const} buf: PByteArray; size: cint): cint; - cdecl; external av__format; deprecated; -function url_seek (h: PURLContext; pos: cint64; whence: cint): cint64; - cdecl; external av__format; deprecated; -function url_close (h: PURLContext): cint; - cdecl; external av__format; deprecated; -function url_filesize (h: PURLContext): cint64; - cdecl; external av__format; deprecated; -function url_get_file_handle(h: PURLContext): cint; - cdecl; external av__format; deprecated; -function url_get_max_packet_size(h: PURLContext): cint; - cdecl; external av__format; deprecated; -procedure url_get_filename(h: PURLContext; buf: PAnsiChar; buf_size: cint); - cdecl; external av__format; deprecated; -function av_url_read_pause(h: PURLContext; pause: cint): cint; - cdecl; external av__format; deprecated; -function av_url_read_seek(h: PURLContext; stream_index: cint; - timestamp: cint64; flags: cint): cint64; - cdecl; external av__format; deprecated; -procedure url_set_interrupt_cb (interrupt_cb: TURLInterruptCB); - cdecl; external av__format; deprecated; - -(** - * returns the next registered protocol after the given protocol (the first if - * NULL is given), or NULL if protocol is the last one. - *) -function av_protocol_next(p: PURLProtocol): PURLProtocol; - cdecl; external av__format; - -(** - * Register the URLProtocol protocol. - * - * @param size the size of the URLProtocol struct referenced - *) -function av_register_protocol2(protocol: PURLProtocol; size: cint): cint; - cdecl; external av__format; deprecated; -(** - * @ - *) - -type - PByteIOContext = PAVIOContext; { deprecated } - TByteIOContext = TAVIOContext; { deprecated } - -function init_put_byte(s: PAVIOContext; - buffer: PByteArray; - buffer_size: cint; - write_flag: cint; - opaque: pointer; - read_packet: TReadWriteFunc; - write_packet: TReadWriteFunc; - seek: TSeekFunc): cint; - cdecl; external av__format; deprecated; -function av_alloc_put_byte( - buffer: PByteArray; - buffer_size: cint; - write_flag: cint; - opaque: Pointer; - read_packet: TReadWriteFunc; - write_packet: TReadWriteFunc; - seek: TSeekFunc): PAVIOContext; - cdecl; external av__format; deprecated; - -(** - * @defgroup old_avio_funcs Old put_/get_*() functions - * The following functions are deprecated. Use the "avio_"-prefixed functions instead. - * @ - *) -function get_buffer(s: PAVIOContext; buf: PByteArray; size: cint): cint; - cdecl; external av__format; deprecated; -function get_partial_buffer(s: PAVIOContext; buf: PByteArray; size: cint): cint; - cdecl; external av__format; deprecated; -function get_byte(s: PAVIOContext): cint; - cdecl; external av__format; deprecated; -function get_le16(s: PAVIOContext): cuint; - cdecl; external av__format; deprecated; -function get_le24(s: PAVIOContext): cuint; - cdecl; external av__format; deprecated; -function get_le32(s: PAVIOContext): cuint; - cdecl; external av__format; deprecated; -function get_le64(s: PAVIOContext): cuint64; - cdecl; external av__format; deprecated; -function get_be16(s: PAVIOContext): cuint; - cdecl; external av__format; deprecated; -function get_be24(s: PAVIOContext): cuint; - cdecl; external av__format; deprecated; -function get_be32(s: PAVIOContext): cuint; - cdecl; external av__format; deprecated; -function get_be64(s: PAVIOContext): cuint64; - cdecl; external av__format; deprecated; - -procedure put_byte(s: PAVIOContext; b: cint); - cdecl; external av__format; deprecated; -procedure put_nbyte(s: PAVIOContext; b: cint; count: cint); - cdecl; external av__format; deprecated; -procedure put_buffer (s: PAVIOContext; buf: {const} PByteArray; size: cint); - cdecl; external av__format; deprecated; -procedure put_le64(s: PAVIOContext; val: cuint64); - cdecl; external av__format; deprecated; -procedure put_be64(s: PAVIOContext; val: cuint64); - cdecl; external av__format; deprecated; -procedure put_le32(s: PAVIOContext; val: cuint); - cdecl; external av__format; deprecated; -procedure put_be32(s: PAVIOContext; val: cuint); - cdecl; external av__format; deprecated; -procedure put_le24(s: PAVIOContext; val: cuint); - cdecl; external av__format; deprecated; -procedure put_be24(s: PAVIOContext; val: cuint); - cdecl; external av__format; deprecated; -procedure put_le16(s: PAVIOContext; val: cuint); - cdecl; external av__format; deprecated; -procedure put_be16(s: PAVIOContext; val: cuint); - cdecl; external av__format; deprecated; -procedure put_tag(s: PAVIOContext; tag: {const} PAnsiChar); - cdecl; external av__format; deprecated; -(** - * @ - *) - -function av_url_read_fpause(h: PAVIOContext; pause: cint): cint; - cdecl; external av__format; deprecated; -function av_url_read_fseek(h: PAVIOContext; stream_index: cint; - timestamp: cint64; flags: cint): cint64; - cdecl; external av__format; deprecated; - -(** - * @defgroup old_url_f_funcs Old url_f* functions - * @deprecated, use the "avio_"-prefixed functions instead. - * @ - *) -function url_fopen(var s: PAVIOContext; url: {const} PAnsiChar; flags: cint): cint; - cdecl; external av__format; deprecated; -function url_fclose(s: PAVIOContext): cint; - cdecl; external av__format; deprecated; -function url_fseek(s: PAVIOContext; offset: cint64; whence: cint): cint64; - cdecl; external av__format; deprecated; -function url_fskip(s: PAVIOContext; offset: cint64): cint; - cdecl; external av__format; deprecated; -function url_ftell(s: PAVIOContext): cint64; - cdecl; external av__format; deprecated; -function url_fsize(s: PAVIOContext): cint64; - cdecl; external av__format; deprecated; -const - URL_EOF = -1; -(** @note return URL_EOF (-1) if EOF *) -function url_fgetc(s: PAVIOContext): cint; - cdecl; external av__format; deprecated; -function url_setbufsize (s: PAVIOContext; buf_size: cint): cint; - cdecl; external av__format; deprecated; -function url_fprintf(s: PAVIOContext; fmt: {const} PAnsiChar; args: array of const): cint; - cdecl; external av__format; deprecated; -procedure put_flush_packet (s: PAVIOContext); - cdecl; external av__format; deprecated; -function url_open_dyn_buf(var s: PAVIOContext): cint; - cdecl; external av__format; deprecated; -function url_open_dyn_packet_buf(var s: PAVIOContext; max_packet_size: cint): cint; - cdecl; external av__format; deprecated; -function url_close_dyn_buf(s: PAVIOContext; pbuffer:PPointer): cint; - cdecl; external av__format; deprecated; -function url_fdopen (var s: PAVIOContext; h: PURLContext): cint; - cdecl; external av__format; deprecated; -(** - * @ - *) - -function url_ferror(s: PAVIOContext): cint; - cdecl; external av__format; deprecated; - -function udp_set_remote_url(h: PURLContext; uri: {const} PAnsiChar): cint; - cdecl; external av__format; deprecated; -function udp_get_local_port(h: PURLContext): cint; - cdecl; external av__format; deprecated; - -type - Tupdate_checksum = function (c: culong; p: Pcuint8; len: cuint): culong; cdecl; -procedure init_checksum(s: PAVIOContext; - update_checksum: Tupdate_checksum; - checksum: culong); - cdecl; external av__format; deprecated; -function get_checksum(s: PAVIOContext): culong; - cdecl; external av__format; deprecated; -procedure put_strz(s: PAVIOContext; buf: {const} PAnsiChar); - cdecl; external av__format; deprecated; -(** @note unlike fgets, the EOL character is not returned and a whole - line is parsed. return NULL if first char read was EOF *) -function url_fgets(s: PAVIOContext; buf: PAnsiChar; buf_size: cint): PAnsiChar; - cdecl; external av__format; deprecated; -(** - * @deprecated use avio_get_str instead - *) -function get_strz(s: PAVIOContext; buf: PAnsiChar; maxlen: cint): PAnsiChar; - cdecl; external av__format; deprecated; -(** - * @deprecated Use AVIOContext.seekable field directly. - *) -function url_is_streamed(s: PAVIOContext): cint; {$IFDEF HasInline}inline;{$ENDIF} deprecated; - -function url_fileno(s: PAVIOContext): PURLContext; - cdecl; external av__format; deprecated; - -(** - * @deprecated use AVIOContext.max_packet_size directly. - *) -function url_fget_max_packet_size (s: PAVIOContext): cint; - cdecl; external av__format; deprecated; - -function url_open_buf(var s: PAVIOContext; buf: PAnsiChar; buf_size: cint; flags: cint): cint; - cdecl; external av__format; deprecated; - -(** return the written or read size *) -function url_close_buf(s: PAVIOContext): cint; - cdecl; external av__format; deprecated; - -(** - * Return a non-zero value if the resource indicated by url - * exists, 0 otherwise. - * @deprecated Use avio_check instead. - *) -function url_exist(url: {const} PAnsiChar): cint; - cdecl; external av__format; deprecated; -{$IFEND} // FF_API_OLD_AVIO +(* unbuffered I/O *) (** * Return AVIO_* access flags corresponding to the access permissions @@ -545,19 +210,6 @@ function url_exist(url: {const} PAnsiChar): cint; function avio_check(url: {const} PAnsiChar; flags: cint): cint; cdecl; external av__format; -{$IFDEF FF_API_OLD_INTERRUPT_CB} -(** - * The callback is called in blocking functions to test regulary if - * asynchronous interruption is needed. AVERROR_EXIT is returned - * in this case by the interrupted function. 'NULL' means no interrupt - * callback is given. - * @deprecated Use interrupt_callback in AVFormatContext/avio_open2 - * instead. - *) -procedure avio_set_interrupt_cb(interrupt_cb: Pointer); - cdecl; external av__format; deprecated; -{$ENDIF} - (** * Allocate and initialize an AVIOContext for buffered I/O. It must be later * freed with av_free(). @@ -765,6 +417,7 @@ const * @ *) +const (** * Use non-blocking mode. * If this flag is set, operations on the context will return @@ -777,9 +430,16 @@ const * Warning: non-blocking protocols is work-in-progress; this flag may be * silently ignored. *) -const AVIO_FLAG_NONBLOCK = 8; +(** + * Use direct mode. + * avio_read and avio_write should if possible be satisfied directly + * instead of going through a buffer, and avio_seek will always + * call the underlying seek function directly. + *) + AVIO_FLAG_DIRECT = $8000; + (** * Create and initialize a AVIOContext for accessing the * resource indicated by url. @@ -849,7 +509,7 @@ function avio_close_dyn_buf(s: PAVIOContext; var pbuffer: Pcuint8): cint; (** * Iterate through names of available protocols. - * @note it is recommanded to use av_protocol_next() instead of this + * @note it is recommended to use av_protocol_next() instead of this * * @param opaque A private pointer representing current protocol. * It must be a pointer to NULL on first iteration and will diff --git a/src/lib/ffmpeg-0.11/avutil.pas b/src/lib/ffmpeg-0.11/avutil.pas index 23899794..9643a591 100644 --- a/src/lib/ffmpeg-0.11/avutil.pas +++ b/src/lib/ffmpeg-0.11/avutil.pas @@ -24,7 +24,7 @@ * Conversions of * * libavutil/avutil.h: - * version: 51.34.101 + * version: 51.54.100 * *) @@ -55,7 +55,7 @@ uses const (* Max. supported version by this header *) LIBAVUTIL_MAX_VERSION_MAJOR = 51; - LIBAVUTIL_MAX_VERSION_MINOR = 35; + LIBAVUTIL_MAX_VERSION_MINOR = 54; LIBAVUTIL_MAX_VERSION_RELEASE = 100; LIBAVUTIL_MAX_VERSION = (LIBAVUTIL_MAX_VERSION_MAJOR * VERSION_MAJOR) + (LIBAVUTIL_MAX_VERSION_MINOR * VERSION_MINOR) + @@ -63,8 +63,8 @@ const (* Min. supported version by this header *) LIBAVUTIL_MIN_VERSION_MAJOR = 51; - LIBAVUTIL_MIN_VERSION_MINOR = 34; - LIBAVUTIL_MIN_VERSION_RELEASE = 101; + LIBAVUTIL_MIN_VERSION_MINOR = 54; + LIBAVUTIL_MIN_VERSION_RELEASE = 0; LIBAVUTIL_MIN_VERSION = (LIBAVUTIL_MIN_VERSION_MAJOR * VERSION_MAJOR) + (LIBAVUTIL_MIN_VERSION_MINOR * VERSION_MINOR) + (LIBAVUTIL_MIN_VERSION_RELEASE * VERSION_RELEASE); diff --git a/src/lib/ffmpeg-0.11/libavcodec/audioconvert.pas b/src/lib/ffmpeg-0.11/libavcodec/audioconvert.pas index 9b2877d1..41c8ca29 100644 --- a/src/lib/ffmpeg-0.11/libavcodec/audioconvert.pas +++ b/src/lib/ffmpeg-0.11/libavcodec/audioconvert.pas @@ -19,7 +19,7 @@ * - Changes and updates by the UltraStar Deluxe Team * * Conversion of libavutil/audioconvert.h - * avutil version 50.43.0 + * avutil version 51.54.100 * *) @@ -99,19 +99,21 @@ const AV_CH_LAYOUT_STEREO_DOWNMIX = (AV_CH_STEREO_LEFT or AV_CH_STEREO_RIGHT); (** - * Return a channel layout id that matches name, 0 if no match. + * Return a channel layout id that matches name, or 0 if no match is found. + * * name can be one or several of the following notations, * separated by '+' or '|': * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0, * 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix); * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC, * SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR); - * - a number of channels, in decimal, optionnally followed by 'c', yielding + * - a number of channels, in decimal, optionally followed by 'c', yielding * the default channel layout for that number of channels (@see * av_get_default_channel_layout); * - a channel layout mask, in hexadecimal starting with "0x" (see the * AV_CH_* macros). - + Example: "stereo+FC" = "2+FC" = "2c+1c" = "0x7" + * + * Example: "stereo+FC" = "2+FC" = "2c+1c" = "0x7" *) function av_get_channel_layout(name: {const} PAnsiChar): cuint64; cdecl; external av__util; diff --git a/src/lib/ffmpeg-0.11/libavutil/cpu.pas b/src/lib/ffmpeg-0.11/libavutil/cpu.pas index c28441bf..c52c2b4e 100644 --- a/src/lib/ffmpeg-0.11/libavutil/cpu.pas +++ b/src/lib/ffmpeg-0.11/libavutil/cpu.pas @@ -19,7 +19,7 @@ * - Changes and updates by the UltraStar Deluxe Team * * Conversion of libavutil/cpu.h - * avutil version 51.34.101 + * avutil version 51.54.100 * *) @@ -47,11 +47,18 @@ const AV_CPU_FLAG_SSE4 = $0100; ///< Penryn SSE4.1 functions AV_CPU_FLAG_SSE42 = $0200; ///< Nehalem SSE4.2 functions AV_CPU_FLAG_AVX = $4000; ///< AVX functions: requires OS support even if YMM registers aren't used + AV_CPU_FLAG_CMOV = $1000000; ///< supports cmov instruction AV_CPU_FLAG_XOP = $0400; ///< Bulldozer XOP functions AV_CPU_FLAG_FMA4 = $0800; ///< Bulldozer FMA4 functions - AV_CPU_FLAG_IWMMXT = $0100; ///< XScale IWMMXT AV_CPU_FLAG_ALTIVEC = $0001; ///< standard + AV_CPU_FLAG_ARMV5TE = (1 << 0); + AV_CPU_FLAG_ARMV6 = (1 << 1); + AV_CPU_FLAG_ARMV6T2 = (1 << 2); + AV_CPU_FLAG_VFP = (1 << 3); + AV_CPU_FLAG_VFPV3 = (1 << 4); + AV_CPU_FLAG_NEON = (1 << 5); + (** * Return the flags which specify extensions supported by the CPU. *) @@ -60,10 +67,39 @@ function av_get_cpu_flags(): cint; (** * Disables cpu detection and forces the specified flags. + * -1 is a special case that disables forcing of specific flags. *) procedure av_force_cpu_flags(flags: cint); cdecl; external av__util; +(** + * Set a mask on flags returned by av_get_cpu_flags(). + * This function is mainly useful for testing. + * Please use av_force_cpu_flags() and av_get_cpu_flags() instead which are more flexible + * + * @warning this function is not thread safe. + *) +procedure av_set_cpu_flags_mask(mask: cint); + cdecl; external av__util; deprecated; + +(** + * Parse CPU flags from a string. + * + * The returned flags contain the specified flags as well as related unspecified flags. + * + * This function exists only for compatibility with libav. + * Please use av_parse_cpu_caps() when possible. + * @return a combination of AV_CPU_* flags, negative on error. + *) +function av_parse_cpu_flags(s: {const} PAnsiChar): cint; + +(** + * Parse CPU caps from a string and update the given AV_CPU_* flags based on that. + * + * @return negative on error. + *) +function av_parse_cpu_caps(flags: Pcuint, s: {const} PAnsiChar): cint; + (* The following CPU-specific functions shall not be called directly. *) function ff_get_cpu_flags_arm(): cint; cdecl; external av__util; diff --git a/src/lib/ffmpeg-0.11/libavutil/dict.pas b/src/lib/ffmpeg-0.11/libavutil/dict.pas index aa52861e..d141becb 100644 --- a/src/lib/ffmpeg-0.11/libavutil/dict.pas +++ b/src/lib/ffmpeg-0.11/libavutil/dict.pas @@ -19,7 +19,7 @@ * This is a part of the Pascal port of ffmpeg. * * Conversion of libavutil/dict.h - * avutil version 51.34.101 + * avutil version 51.54.100 * *) @@ -68,7 +68,7 @@ function av_dict_get(m: PAVDictionary; {const} key: PAnsiChar; {const} prev: PAV * a dictionary struct is allocated and put in *pm. * @param key entry key to add to *pm (will be av_strduped depending on flags) * @param value entry value to add to *pm (will be av_strduped depending on flags). - * Passing a NULL value will cause an existing tag to be deleted. + * Passing a NULL value will cause an existing entry to be deleted. * @return >= 0 on success otherwise an error code <0 *) function av_dict_set(var pm: PAVDictionary; {const} key: PAnsiChar; {const} value: PAnsiChar; flags: cint): cint; diff --git a/src/lib/ffmpeg-0.11/libavutil/error.pas b/src/lib/ffmpeg-0.11/libavutil/error.pas index da6cce6c..44ade13c 100644 --- a/src/lib/ffmpeg-0.11/libavutil/error.pas +++ b/src/lib/ffmpeg-0.11/libavutil/error.pas @@ -19,7 +19,7 @@ * - Changes and updates by the UltraStar Deluxe Team * * Conversion of libavutil/error.h - * avutil version 51.34.101 + * avutil version 51.54.100 * *) @@ -109,7 +109,8 @@ const * This is semantically identical to AVERROR_BUG * it has been introduced in Libav after our AVERROR_BUG and with a modified value. *) - AVERROR_BUG2 = -(ord('B') or (ord('U') shl 8) or (ord('G') shl 16) or (ord(' ') shl 24)); + AVERROR_BUG2 = -(ord('B') or (ord('U') shl 8) or (ord('G') shl 16) or (ord(' ') shl 24)); + AVERROR_UNKNOWN = -(ord('U') or (ord('N') shl 8) or (ord('K') shl 16) or (ord('N') shl 24)); ///< Unknown error, typically from an external library (* * Put a description of the AVERROR code errnum in errbuf. diff --git a/src/lib/ffmpeg-0.11/libavutil/log.pas b/src/lib/ffmpeg-0.11/libavutil/log.pas index ecde0b87..e61f8f03 100644 --- a/src/lib/ffmpeg-0.11/libavutil/log.pas +++ b/src/lib/ffmpeg-0.11/libavutil/log.pas @@ -19,7 +19,7 @@ * - Changes and updates by the UltraStar Deluxe Team * * Conversion of libavutil/log.h - * avutil version 51.34.101 + * avutil version 51.54.100 * *) @@ -128,6 +128,8 @@ const *) AV_LOG_DEBUG = 48; + AV_LOG_MAX_OFFSET = (AV_LOG_DEBUG - AV_LOG_QUIET); + (** * Send the specified message to the log if the level is less than or equal * to the current av_log_level. By default, all logging messages are sent to diff --git a/src/lib/ffmpeg-0.11/libavutil/mathematics.pas b/src/lib/ffmpeg-0.11/libavutil/mathematics.pas index 3859311b..d4e3c01f 100644 --- a/src/lib/ffmpeg-0.11/libavutil/mathematics.pas +++ b/src/lib/ffmpeg-0.11/libavutil/mathematics.pas @@ -22,7 +22,7 @@ * - Changes and updates by the UltraStar Deluxe Team * * Conversion of libavutil/mathematics.h - * avutil version 51.34.101 + * avutil version 51.54.100 * *) @@ -80,6 +80,13 @@ function av_rescale_rnd (a, b, c: cint64; enum: TAVRounding): cint64; function av_rescale_q (a: cint64; bq, cq: TAVRational): cint64; cdecl; external av__util; {av_const} +(** + * Rescale a 64-bit integer by 2 rational numbers with specified rounding. + *) +function av_rescale_q_rnd(a: cint64; bq, cq: TAVRational; + enum: TAVRounding): cint64; + cdecl; external av__util; {av_const} + (** * Compare 2 timestamps each in its own timebases. * The result of the function is undefined if one of the timestamps diff --git a/src/lib/ffmpeg-0.11/libavutil/mem.pas b/src/lib/ffmpeg-0.11/libavutil/mem.pas index d59b9a46..5144b709 100644 --- a/src/lib/ffmpeg-0.11/libavutil/mem.pas +++ b/src/lib/ffmpeg-0.11/libavutil/mem.pas @@ -19,7 +19,7 @@ * - Changes and updates by the UltraStar Deluxe Team * * Conversion of libavutil/mem.h - * avutil version 51.34.101 + * avutil version 51.54.100 * *) diff --git a/src/lib/ffmpeg-0.11/libavutil/opt.pas b/src/lib/ffmpeg-0.11/libavutil/opt.pas index f2c258de..28e3b858 100644 --- a/src/lib/ffmpeg-0.11/libavutil/opt.pas +++ b/src/lib/ffmpeg-0.11/libavutil/opt.pas @@ -23,7 +23,7 @@ * - Changes and updates by the UltraStar Deluxe Team * * Conversion of libavutil/opt.h - * avutil version 51.34.101 + * avutil version 51.54.100 * *) @@ -151,24 +151,25 @@ function av_find_opt(obj: Pointer; {const} name: {const} PAnsiChar; {const} unit * AVERROR(EINVAL) if the value is not valid *) function av_set_string3(obj: Pointer; name: {const} PAnsiChar; val: {const} PAnsiChar; alloc: cint; out o_out: {const} PAVOption): cint; - cdecl; external av__util; + cdecl; external av__util; deprecated; -function av_set_double(obj: pointer; name: {const} PAnsiChar; n: cdouble): PAVOption; - cdecl; external av__util; -function av_set_q(obj: pointer; name: {const} PAnsiChar; n: TAVRational): PAVOption; - cdecl; external av__util; -function av_set_int(obj: pointer; name: {const} PAnsiChar; n: cint64): PAVOption; - cdecl; external av__util; -function av_get_double(obj: pointer; name: {const} PAnsiChar; var o_out: {const} PAVOption): cdouble; - cdecl; external av__util; -function av_get_q(obj: pointer; name: {const} PAnsiChar; var o_out: {const} PAVOption): TAVRational; +function av_set_double(obj: pointer; name: {const} PAnsiChar; n: cdouble): PAVOption; + cdecl; external av__util; deprecated; +function av_set_q (obj: pointer; name: {const} PAnsiChar; n: TAVRational): PAVOption; + cdecl; external av__util; deprecated; +function av_set_int (obj: pointer; name: {const} PAnsiChar; n: cint64): PAVOption; + cdecl; external av__util; deprecated; + +function av_get_double(obj: pointer; name: {const} PAnsiChar; out o_out: {const} PAVOption): cdouble; cdecl; external av__util; -function av_get_int(obj: pointer; name: {const} PAnsiChar; var o_out: {const} PAVOption): cint64; +function av_get_q (obj: pointer; name: {const} PAnsiChar; out o_out: {const} PAVOption): TAVRational; cdecl; external av__util; -function av_get_string(obj: pointer; name: {const} PAnsiChar; var o_out: {const} PAVOption; buf: PAnsiChar; buf_len: cint): PAnsiChar; +function av_get_int (obj: pointer; name: {const} PAnsiChar; out o_out: {const} PAVOption): cint64; cdecl; external av__util; +function av_get_string(obj: pointer; name: {const} PAnsiChar; out o_out: {const} PAVOption; buf: PAnsiChar; buf_len: cint): PAnsiChar; + cdecl; external av__util; deprecated; function av_next_option(obj: pointer; last: {const} PAVOption): PAVOption; - cdecl; external av__util; + cdecl; external av__util; deprecated; (** * Show the obj options. @@ -182,10 +183,16 @@ function av_next_option(obj: pointer; last: {const} PAVOption): PAVOption; function av_opt_show2(obj: pointer; av_log_obj: pointer; req_flags: cint; rej_flags: cint): cint; cdecl; external av__util; +(** + * Set the values of all AVOption fields to their default values. + * + * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) + *) procedure av_opt_set_defaults(s: pointer); cdecl; external av__util; + procedure av_opt_set_defaults2(s: Pointer; mask: cint; flags: cint); - cdecl; external av__util; + cdecl; external av__util; deprecated; (** * Parse the key/value pairs list in opts. For each key/value pair @@ -242,9 +249,40 @@ function av_opt_flag_is_set(obj: pointer; field_name: {const} PAnsiChar; flag_na function av_opt_set_dict(obj: pointer; var options: PAVDictionary): cint; cdecl; external av__util; -const +(** + * @defgroup opt_eval_funcs Evaluating option strings + * @{ + * This group of functions can be used to evaluate option strings + * and get numbers out of them. They do the same thing as av_opt_set(), + * except the result is written into the caller-supplied pointer. + * + * @param obj a struct whose first element is a pointer to AVClass. + * @param o an option for which the string is to be evaluated. + * @param val string to be evaluated. + * @param *_out value of the string will be written here. + * + * @return 0 on success, a negative number on failure. + *) +function av_opt_eval_flags (obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; flags_out: Pcint): cint; +function av_opt_eval_int (obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; int_out: Pcint): cint; +function av_opt_eval_int64 (obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; int64_out: Pcint64): cint; +function av_opt_eval_float (obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; float_out: Pcfloat): cint; +function av_opt_eval_double(obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; double_out: Pcdouble): cint; +function av_opt_eval_q (obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; q_out: PAVRational): cint; +(** + * @} + *) + + const AV_OPT_SEARCH_CHILDREN = 0001; (**< Search in possible children of the given object first.*) +(** + * The obj passed to av_opt_find() is fake -- only a double pointer to AVClass + * instead of a required pointer to a struct containing AVClass. This is + * useful for searching for options without needing to allocate the corresponding + * object. + *) + AV_OPT_SEARCH_FAKE_OBJ = 0002; (** * Look for an option in an object. Consider only options which @@ -267,5 +305,138 @@ const * flag. *) function av_opt_find(obj: pointer; name: {const} PAnsiChar; unit_: {const} PAnsiChar; - opt_flags: cint; search_flags: cint): PAVOption; + opt_flags: cint; search_flags: cint): PAVOption; + cdecl; external av__util; + +(** + * Look for an option in an object. Consider only options which + * have all the specified flags set. + * + * @param[in] obj A pointer to a struct whose first element is a + * pointer to an AVClass. + * Alternatively a double pointer to an AVClass, if + * AV_OPT_SEARCH_FAKE_OBJ search flag is set. + * @param[in] name The name of the option to look for. + * @param[in] unit When searching for named constants, name of the unit + * it belongs to. + * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). + * @param search_flags A combination of AV_OPT_SEARCH_*. + * @param[out] target_obj if non-NULL, an object to which the option belongs will be + * written here. It may be different from obj if AV_OPT_SEARCH_CHILDREN is present + * in search_flags. This parameter is ignored if search_flags contain + * AV_OPT_SEARCH_FAKE_OBJ. + * + * @return A pointer to the option found, or NULL if no option + * was found. + *) +function av_opt_find2(obj: pointer; name: {const} PAnsiChar; unit_: {const} PAnsiChar; + opt_flags: cint; search_flags: cint; out target_obj: pointer): {const} PAVOption; cdecl; external av__util; + +(** + * Iterate over all AVOptions belonging to obj. + * + * @param obj an AVOptions-enabled struct or a double pointer to an + * AVClass describing it. + * @param prev result of the previous call to av_opt_next() on this object + * or NULL + * @return next AVOption or NULL + *) +function av_opt_next(obj: pointer; prev: {const} PAVOption): {const} PAVOption; + cdecl; external av__util; + +(** + * Iterate over AVOptions-enabled children of obj. + * + * @param prev result of a previous call to this function or NULL + * @return next AVOptions-enabled child or NULL + *) +function av_opt_child_next(obj: pointer; prev: pointer): pointer; + cdecl; external av__util; + +(** + * Iterate over potential AVOptions-enabled children of parent. + * + * @param prev result of a previous call to this function or NULL + * @return AVClass corresponding to next potential child or NULL + *) +function av_opt_child_class_next(parent: {const} PAVClass; prev: {const} PAVClass): {const} PAVClass; + cdecl; external av__util; + +(** + * @defgroup opt_set_funcs Option setting functions + * @{ + * Those functions set the field of obj with the given name to value. + * + * @param[in] obj A struct whose first element is a pointer to an AVClass. + * @param[in] name the name of the field to set + * @param[in] val The value to set. In case of av_opt_set() if the field is not + * of a string type, then the given string is parsed. + * SI postfixes and some named scalars are supported. + * If the field is of a numeric type, it has to be a numeric or named + * scalar. Behavior with more than one scalar and +- infix operators + * is undefined. + * If the field is of a flags type, it has to be a sequence of numeric + * scalars or named flags separated by '+' or '-'. Prefixing a flag + * with '+' causes it to be set without affecting the other flags; + * similarly, '-' unsets a flag. + * @param search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN + * is passed here, then the option may be set on a child of obj. + * + * @return 0 if the value has been set, or an AVERROR code in case of + * error: + * AVERROR_OPTION_NOT_FOUND if no matching option exists + * AVERROR(ERANGE) if the value is out of range + * AVERROR(EINVAL) if the value is not valid + *) +function av_opt_set (obj: pointer; name: {const} PAnsiChar; val: {const} PAnsiChar; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_int (obj: pointer; name: {const} PAnsiChar; val: cint64; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_double(obj: pointer; name: {const} PAnsiChar; val: cdouble; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_q (obj: pointer; name: {const} PAnsiChar; val: TAVRational; search_flags: cint): cint; + cdecl; external av__util; +(** + * @} + *) + +(** + * @defgroup opt_get_funcs Option getting functions + * @{ + * Those functions get a value of the option with the given name from an object. + * + * @param[in] obj a struct whose first element is a pointer to an AVClass. + * @param[in] name name of the option to get. + * @param[in] search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN + * is passed here, then the option may be found in a child of obj. + * @param[out] out_val value of the option will be written here + * @return 0 on success, a negative error code otherwise + *) +(** + * @note the returned string will av_malloc()ed and must be av_free()ed by the caller + *) +function av_opt_get (obj: pointer; name: {const} PAnsiChar; search_flags: cint; out out_val: Pcuint8): cint; + cdecl; external av__util; +function av_opt_get_int (obj: pointer; name: {const} PAnsiChar; search_flags: cint; out_val: Pcint64): cint; + cdecl; external av__util; +function av_opt_get_double(obj: pointer; name: {const} PAnsiChar; search_flags: cint; out_val: Pcdouble): cint; + cdecl; external av__util; +function av_opt_get_q (obj: pointer; name: {const} PAnsiChar; search_flags: cint; out_val: PAVRational): cint; + cdecl; external av__util; +(** + * @} + *) +(** + * Gets a pointer to the requested field in a struct. + * This function allows accessing a struct even when its fields are moved or + * renamed since the application making the access has been compiled, + * + * @returns a pointer to the field, it can be cast to the correct type and read + * or written to. + *) +function av_opt_ptr(avclass: {const} PAVClass; obj: pointer; name: {const} PAnsiChar): pointer; + cdecl; external av__util; +(** + * @} + *) diff --git a/src/lib/ffmpeg-0.11/libavutil/pixfmt.pas b/src/lib/ffmpeg-0.11/libavutil/pixfmt.pas index 5e8a547d..f93e482b 100644 --- a/src/lib/ffmpeg-0.11/libavutil/pixfmt.pas +++ b/src/lib/ffmpeg-0.11/libavutil/pixfmt.pas @@ -19,7 +19,7 @@ * - Changes and updates by the UltraStar Deluxe Team * * Conversion of libavutil/pixfmt.h - * avutil version 51.34.101 + * avutil version 51.54.100 * *) @@ -28,6 +28,10 @@ * Pixel format *) +const + AVPALETTE_SIZE = 1024; + AVPALETTE_COUNT = 256; + type (** * Pixel format. Notes: @@ -181,6 +185,8 @@ type PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGB0RGB0... PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, 0BGR0BGR... PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGR0BGR0... + PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) + PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions ); diff --git a/src/lib/ffmpeg-0.11/libavutil/samplefmt.pas b/src/lib/ffmpeg-0.11/libavutil/samplefmt.pas index 80cdd71b..62165737 100644 --- a/src/lib/ffmpeg-0.11/libavutil/samplefmt.pas +++ b/src/lib/ffmpeg-0.11/libavutil/samplefmt.pas @@ -19,13 +19,32 @@ * This is a part of the Pascal port of ffmpeg. * * Conversion of libavutil/samplefmt.h - * avutil version 51.34.101 + * avutil version 51.54.100 * *) type (** - * all in native-endian format + * Audio Sample Formats + * + * @par + * The data described by the sample format is always in native-endian order. + * Sample values can be expressed by native C types, hence the lack of a signed + * 24-bit sample format even though it is a common raw audio data format. + * + * @par + * The floating-point formats are based on full volume being in the range + * [-1.0, 1.0]. Any values outside this range are beyond full volume level. + * + * @par + * The data layout as used in av_samples_fill_arrays() and elsewhere in Libav + * (such as AVFrame in libavcodec) is as follows: + * + * For planar sample formats, each audio channel is in a separate data plane, + * and linesize is the buffer size, in bytes, for a single plane. All data + * planes must be the same size. For packed sample formats, only the first data + * plane is used, and samples for each channel are interleaved. In this case, + * linesize is the buffer size, in bytes, for the 1 plane. *) TAVSampleFormat = ( AV_SAMPLE_FMT_NONE = -1, @@ -69,6 +88,30 @@ function av_get_sample_fmt(name: {const} PAnsiChar): TAVSampleFormat; function av_get_alt_sample_fmt(sample_fmt: TAVSampleFormat; planar: cint): TAVSampleFormat; cdecl; external av__util; +(** + * Get the packed alternative form of the given sample format. + * + * If the passed sample_fmt is already in packed format, the format returned is + * the same as the input. + * + * @return the packed alternative form of the given sample format or + AV_SAMPLE_FMT_NONE on error. + *) +function av_get_packed_sample_fmt(sample_fmt: TAVSampleFormat): TAVSampleFormat; + cdecl; external av__util; + +(** + * Get the planar alternative form of the given sample format. + * + * If the passed sample_fmt is already in planar format, the format returned is + * the same as the input. + * + * @return the planar alternative form of the given sample format or + AV_SAMPLE_FMT_NONE on error. + *) +function av_get_planar_sample_fmt(sample_fmt: TAVSampleFormat): TAVSampleFormat; + cdecl; external av__util; + (** * Generate a string corresponding to the sample format with * sample_fmt, or a header if sample_fmt is negative. @@ -89,7 +132,7 @@ function av_get_sample_fmt_string(buf: PAnsiChar; buf_size: cint; sample_fmt: TA * @deprecated Use av_get_bytes_per_sample() instead. *) function av_get_bits_per_sample_fmt(sample_fmt: TAVSampleFormat): cint; deprecated; - cdecl; external av__util; + cdecl; external av__util; deprecated; {$ENDIF} (** @@ -122,6 +165,7 @@ function av_sample_fmt_is_planar(sample_fmt: TAVSampleFormat): cint; * @param nb_channels the number of channels * @param nb_samples the number of samples in a single channel * @param sample_fmt the sample format + * @param align buffer size alignment (0 = default, 1 = no alignment) * @return required buffer size, or negative error code on failure *) function av_samples_get_buffer_size(linesize: Pcint; nb_channels: cint; nb_samples: cint; @@ -140,17 +184,21 @@ function av_samples_get_buffer_size(linesize: Pcint; nb_channels: cint; nb_sampl * buffer for planar layout, or the aligned size of the buffer for all channels * for packed layout. * + * @see enum AVSampleFormat + * The documentation for AVSampleFormat describes the data layout. + * * @param[out] audio_data array to be filled with the pointer for each channel - * @param[out] linesize calculated linesize + * @param[out] linesize calculated linesize, may be NULL * @param buf the pointer to a buffer containing the samples * @param nb_channels the number of channels * @param nb_samples the number of samples in a single channel * @param sample_fmt the sample format - * @param align buffer size alignment (1 = no alignment required) + * @param align buffer size alignment (0 = default, 1 = no alignment) * @return 0 on success or a negative error code on failure *) function av_samples_fill_arrays(audio_data: pointer; linesize: Pcint; - buf: Pcuint8; nb_channels: cint; nb_samples: cint; + buf: Pcuint8; + nb_channels: cint; nb_samples: cint; sample_fmt: TAVSampleFormat; align: cint): cint; cdecl; external av__util; @@ -159,11 +207,14 @@ function av_samples_fill_arrays(audio_data: pointer; linesize: Pcint; * linesize accordingly. * The allocated samples buffer can be freed by using av_freep(&audio_data[0]) * + * @see enum AVSampleFormat + * The documentation for AVSampleFormat describes the data layout. + * * @param[out] audio_data array to be filled with the pointer for each channel - * @param[out] linesize aligned size for audio buffer(s) + * @param[out] linesize aligned size for audio buffer(s), may be NULL * @param nb_channels number of audio channels * @param nb_samples number of samples per channel - * @param align buffer size alignment (1 = no alignment required) + * @param align buffer size alignment (0 = default, 1 = no alignment) * @return 0 on success or a negative error code on failure * @see av_samples_fill_arrays() *) @@ -171,3 +222,32 @@ function av_samples_alloc(audio_data: pointer; linesize: Pcint; nb_channels: cint; nb_samples: cint; sample_fmt: TAVSampleFormat; align: cint): cint; cdecl; external av__util; + +(** + * Copy samples from src to dst. + * + * @param dst destination array of pointers to data planes + * @param src source array of pointers to data planes + * @param dst_offset offset in samples at which the data will be written to dst + * @param src_offset offset in samples at which the data will be read from src + * @param nb_samples number of samples to be copied + * @param nb_channels number of audio channels + * @param sample_fmt audio sample format + *) +function av_samples_copy(var dst: Pcuint8; src: {const} Pcuint8; dst_offset: cint; + src_offset: cint; nb_samples: cint; nb_channels: cint; + sample_fmt: TAVSampleFormat): cint; + cdecl; external av__util; + +(** + * Fill an audio buffer with silence. + * + * @param audio_data array of pointers to data planes + * @param offset offset in samples at which to start filling + * @param nb_samples number of samples to fill + * @param nb_channels number of audio channels + * @param sample_fmt audio sample format + *) +function av_samples_set_silence(var audio_data: Pcuint8; offset: cint; nb_samples: cint; + nb_channels: cint; sample_fmt: TAVSampleFormat): cint; + cdecl; external av__util; -- cgit v1.2.3