aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authork-m_schindler <k-m_schindler@b956fd51-792f-4845-bead-9b4dfca2ff2c>2012-10-20 00:32:35 +0000
committerk-m_schindler <k-m_schindler@b956fd51-792f-4845-bead-9b4dfca2ff2c>2012-10-20 00:32:35 +0000
commiteaca529cd5bcea6af4b8cdf9a878bec49cba231c (patch)
tree50c13053ec788d3939b4f91d66c4a0ca9ef25993 /src
parent811417715784937a5d8b84743fcf29476b6a5687 (diff)
downloadusdx-eaca529cd5bcea6af4b8cdf9a878bec49cba231c.tar.gz
usdx-eaca529cd5bcea6af4b8cdf9a878bec49cba231c.tar.xz
usdx-eaca529cd5bcea6af4b8cdf9a878bec49cba231c.zip
first try of version 0.11.*
git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2926 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to 'src')
-rw-r--r--src/lib/ffmpeg-0.11/avcodec.pas4206
-rw-r--r--src/lib/ffmpeg-0.11/avformat.pas837
-rw-r--r--src/lib/ffmpeg-0.11/avio.pas378
-rw-r--r--src/lib/ffmpeg-0.11/avutil.pas8
-rw-r--r--src/lib/ffmpeg-0.11/libavcodec/audioconvert.pas10
-rw-r--r--src/lib/ffmpeg-0.11/libavutil/cpu.pas40
-rw-r--r--src/lib/ffmpeg-0.11/libavutil/dict.pas4
-rw-r--r--src/lib/ffmpeg-0.11/libavutil/error.pas5
-rw-r--r--src/lib/ffmpeg-0.11/libavutil/log.pas4
-rw-r--r--src/lib/ffmpeg-0.11/libavutil/mathematics.pas9
-rw-r--r--src/lib/ffmpeg-0.11/libavutil/mem.pas2
-rw-r--r--src/lib/ffmpeg-0.11/libavutil/opt.pas205
-rw-r--r--src/lib/ffmpeg-0.11/libavutil/pixfmt.pas8
-rw-r--r--src/lib/ffmpeg-0.11/libavutil/samplefmt.pas96
14 files changed, 2702 insertions, 3110 deletions
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,13 +207,22 @@ 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:
* Two decoders with the same ID can decode the same streams.
@@ -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.<br>
* 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,81 +1131,8 @@ 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_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;
-
- 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_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_PROFILE_UNKNOWN = -99;
FF_PROFILE_RESERVED = -100;
@@ -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.
@@ -1457,6 +1408,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.
* - encoding: MUST be set by user.
@@ -1465,11 +1431,26 @@ 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
@@ -1516,6 +1490,11 @@ type
qstride: cint;
(**
+ *
+ *)
+ qscale_type: cint;
+
+ (**
* mbskip_table[mb]>=1 if MB didn't change
* stride= mb_width = (width+15)>>4
* - encoding: unused
@@ -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
@@ -1585,11 +1571,6 @@ type
repeat_pict: cint;
(**
- *
- *)
- qscale_type: cint;
-
- (**
* The content of the picture is interlaced.
* - encoding: Set by user.
* - decoding: Set by libavcodec. (default 0)
@@ -1604,13 +1585,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)
* - decoding: Set by libavcodec. (default 0).
@@ -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
@@ -1660,20 +1626,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.
* - decoding: Set by libavcodec.
@@ -1688,57 +1640,33 @@ 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.
+ * Sample rate of the audio data.
*
- * 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()
- *)
- extended_data: PPointer;
-
- (**
- * reordered sample aspect ratio for the video frame, 0/1 if unknown\unspecified
* - encoding: unused
- * - decoding: Read by user.
+ * - decoding: read by user
*)
- sample_aspect_ratio: TAVRational;
+ sample_rate: cint;
(**
- * width and height of the video frame
- * - encoding: unused
- * - decoding: Read by user.
- *)
- width, height: cint;
-
- (**
- * 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)
+ * Channel layout of the audio data.
+ *
* - encoding: unused
- * - decoding: Read by user.
+ * - decoding: read by user.
*)
- format: cint;
+ channel_layout: cuint64;
(**
* 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: set by libavcodec, read by user.
*)
@@ -1746,12 +1674,41 @@ type
(**
* 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.
@@ -1890,6 +1912,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.
* - decoding: unused
@@ -1906,6 +1935,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
* all codecs can do that. You must check the codec capabilities
@@ -1928,58 +1966,16 @@ 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.
- *)
- sample_fmt: TAVSampleFormat; ///< sample format
-
- (* The following data should not be initialized. *)
- (**
- * Samples per packet, initialized when calling 'init'.
- *)
- frame_size: cint;
- frame_number: cint; ///< audio or video frame number
-
- (**
- * 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.
- *)
- delay: cint;
-
- (* - 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)
-
- (**
- * minimum quantizer
- * - encoding: Set by user.
- * - decoding: unused
- *)
- qmin: cint;
-
- (**
- * maximum quantizer
- * - encoding: Set by user.
- * - decoding: unused
- *)
- qmax: cint;
-
- (**
- * maximum quantizer difference between frames
- * - encoding: Set by user.
- * - decoding: unused
+ * 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.
*)
- max_qdiff: cint;
+ get_format: function (s: PAVCodecContext; fmt: {const} PAVPixelFormat): TAVPixelFormat; cdecl;
(**
* maximum number of B-frames between non-B-frames
@@ -2003,104 +1999,21 @@ type
b_frame_strategy: cint;
- codec: PAVCodec;
-
- 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;
-
- (**
- * number of bits used for the previously encoded frame
- * - encoding: Set by libavcodec.
- * - decoding: unused
- *)
- frame_bits: cint;
-
- (**
- * Private data of the user, can be used to carry app specific stuff.
- * - 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.
- *)
- codec_tag: cuint;
-
- (**
- * Work around bugs in encoders which sometimes cannot be detected automatically.
- * - encoding: Set by user
- * - decoding: Set by user
- *)
- workaround_bugs: cint;
-
+{$IFDEF FF_API_MPV_GLOBAL_OPTS}
(**
* luma single coefficient elimination threshold
* - encoding: Set by user.
* - decoding: unused
*)
- luma_elim_threshold: cint;
+ luma_elim_threshold: cint; {deprecated}
(**
* chroma single coeff elimination threshold
* - encoding: Set by user.
* - decoding: unused
*)
- chroma_elim_threshold: cint;
-
- (**
- * strictly follow the standard (MPEG4, ...).
- * - 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)
- *)
- strict_std_compliance: cint;
+ chroma_elim_threshold: cint; {deprecated}
+{$ENDIF}
(**
* qscale offset between IP and B-frames
@@ -2109,82 +2022,6 @@ type
*)
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;
-
(**
* Size of the frame reordering buffer in the decoder.
* For MPEG-2 it is 1 IPB or 0 low delay IP.
@@ -2194,22 +2031,6 @@ type
has_b_frames: cint;
(**
- * number of bytes per packet if constant and known or 0
- * Used by some WAV based audio codecs.
- *)
- block_align: cint;
-
-{$IF FF_API_PARSE_FRAME}
- (**
- * If true, only parsing is done. The frame data is returned.
- * Only MPEG audio decoders support this now.
- * - encoding: unused
- * - decoding: Set by user
- *)
- parse_only: cint; {deprecated}
-{$IFEND}
-
- (**
* 0-> h263 quant 1-> mpeg quant
* - encoding: Set by user.
* - decoding: unused
@@ -2217,69 +2038,6 @@ type
mpeg_quant: cint;
(**
- * pass1 encoding statistics output buffer
- * - encoding: Set by libavcodec.
- * - decoding: unused
- *)
- stats_out: PAnsiChar;
-
- (**
- * pass2 encoding statistics input buffer
- * Concatenated stuff from stats_out of pass1 should be placed here.
- * - encoding: Allocated/set/freed by user.
- * - decoding: unused
- *)
- stats_in: PAnsiChar;
-
- (**
- * ratecontrol qmin qmax limiting method
- * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax.
- * - encoding: Set by user.
- * - decoding: unused
- *)
- rc_qsquish: cfloat;
-
- rc_qmod_amp: cfloat;
- rc_qmod_freq: cint;
-
- (**
- * ratecontrol override, see RcOverride
- * - encoding: Allocated/set/freed by user.
- * - decoding: unused
- *)
- rc_override: PRcOverride;
- rc_override_count: cint;
-
- (**
- * rate control equation
- * - encoding: Set by user
- * - decoding: unused
- *)
- rc_eq: {const} PAnsiChar;
-
- (**
- * maximum bitrate
- * - encoding: Set by user.
- * - decoding: unused
- *)
- rc_max_rate: cint;
-
- (**
- * minimum bitrate
- * - encoding: Set by user.
- * - decoding: unused
- *)
- rc_min_rate: cint;
-
- (**
- * decoder bitstream buffer size
- * - encoding: Set by user.
- * - decoding: unused
- *)
- rc_buffer_size: cint;
- rc_buffer_aggressivity: cfloat;
-
- (**
* 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).
@@ -2296,20 +2054,6 @@ type
i_quant_offset: cfloat;
(**
- * initial complexity for pass1 ratecontrol
- * - encoding: Set by user.
- * - decoding: unused
- *)
- rc_initial_cplx: cfloat;
-
- (**
- * DCT algorithm, see FF_DCT_* below
- * - encoding: Set by user.
- * - decoding: unused
- *)
- dct_algo: cint;
-
- (**
* luminance masking (0-> disabled)
* - encoding: Set by user.
* - decoding: unused
@@ -2345,13 +2089,6 @@ type
dark_masking: cfloat;
(**
- * 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).
@@ -2359,37 +2096,6 @@ type
slice_count: cint;
(**
- * slice offsets in the frame in bytes
- * - encoding: Set/allocated by libavcodec.
- * - decoding: Set/allocated by user (or NULL).
- *)
- slice_offset: PCint;
-
- (**
- * error concealment flags
- * - encoding: unused
- * - decoding: Set by user.
- *)
- error_concealment: cint;
-
- (**
- * dsp_mask could be add used to disable unwanted CPU features
- * CPU features (i.e. MMX, SSE. ...)
- *
- * 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.
- *)
- bits_per_coded_sample: cint;
-
- (**
* prediction method (needed for huffyuv)
* - encoding: Set by user.
* - decoding: unused
@@ -2397,6 +2103,13 @@ type
prediction_method: cint;
(**
+ * slice offsets in the frame in bytes
+ * - encoding: Set/allocated by libavcodec.
+ * - decoding: Set/allocated by user (or NULL).
+ *)
+ slice_offset: PCint;
+
+ (**
* 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.
@@ -2406,34 +2119,6 @@ type
sample_aspect_ratio: TAVRational;
(**
- * the picture in the bitstream
- * - encoding: Set by libavcodec.
- * - decoding: Set by libavcodec.
- *)
- coded_frame: PAVFrame;
-
- (**
- * debug
- * - encoding: Set by user.
- * - decoding: Set by user.
- *)
- debug: cint;
-
- (**
- * debug
- * - encoding: Set by user.
- * - decoding: Set by user.
- *)
- debug_mv: cint;
-
- (**
- * error
- * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR.
- * - decoding: unused
- *)
- error: array [0..AV_NUM_DATA_POINTERS - 1] of cuint64;
-
- (**
* motion estimation comparison function
* - encoding: Set by user.
* - decoding: unused
@@ -2502,17 +2187,6 @@ type
me_subpel_quality: 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.
- *)
- get_format: function (s: PAVCodecContext; fmt: {const} PAVPixelFormat): TAVPixelFormat; cdecl;
-
- (**
* DTG active format information (additional aspect ratio
* information only used in DVB MPEG-2 transport streams)
* 0 if not set.
@@ -2545,58 +2219,15 @@ type
*)
inter_quant_bias: cint;
+{$IFDEF FF_API_COLOR_TABLE_ID}
(**
* color table ID
* - encoding: unused
* - decoding: Which clrtable should be used for 8bit RGB images.
* Tables have to be stored somewhere. FIXME
*)
- color_table_id: 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
- *)
- internal_buffer_count: cint; {deprecated}
-
- (**
- * 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}
-
- (**
- * 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: unused
- *)
- global_quality: cint;
-
- (**
- * coder type
- * - encoding: Set by user.
- * - decoding: unused
- *)
- coder_type: cint;
-
- (**
- * context model
- * - encoding: Set by user.
- * - decoding: unused
- *)
- context_model: cint;
-
- (**
- *
- * - encoding: unused
- * - decoding: Set by user.
- *)
-// realloc: function (s: PAVCodecContext; buf: Pbyte; buf_size: cint): Pbyte; cdecl;
+ color_table_id: cint; {deprecated}
+{$ENDIF}
(**
* slice flags
@@ -2634,14 +2265,6 @@ type
inter_matrix: PWord;
(**
- * 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;
-
- (**
* scene change detection threshold
* 0 is default, larger means fewer detected scene changes.
* - encoding: Set by user.
@@ -2650,458 +2273,538 @@ type
scenechange_threshold: cint;
(**
- * minimum Lagrange multipler
+ * noise reduction strength
* - encoding: Set by user.
* - decoding: unused
*)
- lmin: cint;
+ noise_reduction: cint;
+{$IFDEF FF_API_INTER_THRESHOLD}
(**
- * maximum Lagrange multipler
+ *
* - encoding: Set by user.
* - decoding: unused
*)
- lmax: cint;
+ inter_threshold: cint; {deprecated}
+{$ENDIF}
-{$IF FF_API_PALETTE_CONTROL}
+{$IFDEF FF_API_MPV_GLOBAL_OPTS}
(**
- * palette control structure
- * - encoding: ??? (no palette-enabled encoder yet)
- * - decoding: Set by user.
+ * quantizer noise shaping
+ * - encoding: Set by user.
+ * - decoding: unused
*)
- palctrl: PAVPaletteControl;
-{$IFEND}
+ quantizer_noise_shaping: cint; {deprecated}
+{$ENDIF}
(**
- * noise reduction strength
+ * Motion estimation threshold below which no motion estimation is
+ * performed, but instead the user specified motion vectors are used.
+ *
* - encoding: Set by user.
* - decoding: unused
*)
- noise_reduction: cint;
+ me_threshold: cint;
(**
- * Called at the beginning of a frame to get cr buffer for it.
- * Buffer type (size, hints) must be the same. libavcodec won't check it.
- * libavcodec will pass previous buffer in pic, function should return
- * same buffer or new buffer with old frame "painted" into it.
- * If pic.data[0] == NULL must behave like get_buffer().
- * if CODEC_CAP_DR1 is not set then reget_buffer() must call
- * avcodec_default_reget_buffer() instead of providing buffers allocated by
- * some other means.
- * - encoding: unused
- * - decoding: Set by libavcodec, user can override
+ * Macroblock threshold below which the user specified macroblock types will be used.
+ * - encoding: Set by user.
+ * - decoding: unused
*)
- reget_buffer: function (c: PAVCodecContext; pic: PAVFrame): cint; cdecl;
+ mb_threshold: cint;
(**
- * Number of bits which should be loaded into the rc buffer before decoding starts.
+ * precision of the intra DC coefficient - 8
* - encoding: Set by user.
* - decoding: unused
*)
- rc_initial_buffer_occupancy: cint;
+ intra_dc_precision: cint;
(**
- *
- * - encoding: Set by user.
- * - decoding: unused
+ * Number of macroblock rows at the top which are skipped.
+ * - encoding: unused
+ * - decoding: Set by user.
*)
- inter_threshold: cint;
+ skip_top: cint;
(**
- * CODEC_FLAG2_*
- * - encoding: Set by user.
+ * Number of macroblock rows at the bottom which are skipped.
+ * - encoding: unused
* - decoding: Set by user.
*)
- flags2: cint;
+ skip_bottom: cint;
(**
- * Simulates errors in the bitstream to test error concealment.
+ * Border processing masking, raises the quantizer for mbs on the borders
+ * of the picture.
* - encoding: Set by user.
* - decoding: unused
*)
- error_rate: cint;
+ border_masking: cfloat;
-{$IF FF_API_ANTIALIAS_ALGO}
(**
- * MP3 antialias algorithm, see FF_AA_* below.
- * - encoding: unused
- * - decoding: Set by user.
+ * minimum MB lagrange multipler
+ * - encoding: Set by user.
+ * - decoding: unused
*)
- antialias_algo: cint; {deprecated}
-{$IFEND}
+ mb_lmin: cint;
(**
- * quantizer noise shaping
+ * maximum MB lagrange multipler
* - encoding: Set by user.
* - decoding: unused
*)
- quantizer_noise_shaping: cint;
+ mb_lmax: cint;
(**
- * thread count
- * is used to decide how many independent tasks should be passed to execute()
+ *
* - encoding: Set by user.
- * - decoding: Set by user.
+ * - decoding: unused
*)
- thread_count: cint;
+ me_penalty_compensation: cint;
(**
- * 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.
+ *
+ * - encoding: Set by user.
+ * - decoding: unused
*)
- execute: function (c: PAVCodecContext; func: TExecuteFunc; arg: Pointer; ret: PCint; count: cint; size: cint): cint; cdecl;
+ bidir_refine: cint;
(**
- * thread opaque
- * Can be used by execute() to store some per AVCodecContext stuff.
- * - encoding: set by execute()
- * - decoding: set by execute()
+ *
+ * - encoding: Set by user.
+ * - decoding: unused
*)
- thread_opaque: pointer;
+ brd_scale: cint;
(**
- * Motion estimation threshold below which no motion estimation is
- * performed, but instead the user specified motion vectors are used.
- *
+ * minimum GOP size
* - encoding: Set by user.
* - decoding: unused
*)
- me_threshold: cint;
+ keyint_min: cint;
(**
- * Macroblock threshold below which the user specified macroblock types will be used.
+ * number of reference frames
+ * - encoding: Set by user.
+ * - decoding: Set by lavc.
+ *)
+ refs: cint;
+
+ (**
+ * chroma qp offset from luma
* - encoding: Set by user.
* - decoding: unused
*)
- mb_threshold: cint;
+ chromaoffset: cint;
(**
- * precision of the intra DC coefficient - 8
+ * Multiplied by qscale for each frame and added to scene_change_score.
* - encoding: Set by user.
* - decoding: unused
*)
- intra_dc_precision: cint;
+ scenechange_factor: cint;
(**
- * noise vs. sse weight for the nsse comparsion function
+ *
+ * Note: Value depends upon the compare function used for fullpel ME.
* - encoding: Set by user.
* - decoding: unused
*)
- nsse_weight: cint;
+ mv0_threshold: cint;
(**
- * Number of macroblock rows at the top which are skipped.
- * - encoding: unused
- * - decoding: Set by user.
+ * Adjust sensitivity of b_frame_strategy 1.
+ * - encoding: Set by user.
+ * - decoding: unused
*)
- skip_top: cint;
+ b_sensitivity: cint;
(**
- * Number of macroblock rows at the bottom which are skipped.
- * - encoding: unused
- * - decoding: Set by user.
+ * Chromaticity coordinates of the source primaries.
+ * - encoding: Set by user
+ * - decoding: Set by libavcodec
*)
- skip_bottom: cint;
+ color_primaries: TAVColorPrimaries;
(**
- * profile
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
+ * Color Transfer Characteristic.
+ * - encoding: Set by user
+ * - decoding: Set by libavcodec
*)
- profile: cint;
+ color_trc: TAVColorTransferCharacteristic;
(**
- * level
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
+ * YUV colorspace type.
+ * - encoding: Set by user
+ * - decoding: Set by libavcodec
*)
- level: cint;
+ colorspace: TAVColorSpace;
(**
- * low resolution decoding, 1-> 1/2 size, 2->1/4 size
- * - encoding: unused
- * - decoding: Set by user.
+ * MPEG vs JPEG YUV range.
+ * - encoding: Set by user
+ * - decoding: Set by libavcodec
*)
- lowres: cint;
+ color_range: TAVColorRange;
(**
- * 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.
+ * This defines the location of chroma samples.
+ * - encoding: Set by user
+ * - decoding: Set by libavcodec
*)
- coded_width, coded_height: cint;
+ chroma_sample_location: TAVChromaLocation;
(**
- * frame skip threshold
- * - encoding: Set by user.
+ * Number of slices.
+ * Indicates number of picture subdivisions. Used for parallelized
+ * decoding.
+ * - encoding: Set by user
* - decoding: unused
*)
- frame_skip_threshold: cint;
+ slices: cint;
+
+ (** Field order
+ * - encoding: set by libavcodec
+ * - decoding: Set by libavcodec
+ *)
+ field_order: AVFieldOrder;
+
+ (* audio only *)
+ sample_rate: cint; ///< samples per second
+ channels: cint; ///< number of audio channels
(**
- * frame skip factor
+ * audio sample format
* - encoding: Set by user.
- * - decoding: unused
+ * - decoding: Set by libavcodec.
*)
- frame_skip_factor: cint;
+ sample_fmt: TAVSampleFormat; ///< sample format
+ (* The following data should not be initialized. *)
(**
- * frame skip exponent
- * - encoding: Set by user.
- * - decoding: unused
+ * Samples per packet, initialized when calling 'init'.
*)
- frame_skip_exp: cint;
+ frame_size: cint;
(**
- * frame skip comparison function
- * - encoding: Set by user.
- * - decoding: unused
+ * Frame counter, set by libavcodec.
+ *
+ * - decoding: total number of frames returned from the decoder so far.
+ * - encoding: total number of frames passed to the encoder so far.
+ *
+ * @note the counter is not incremented if encoding/decoding resulted in
+ * an error.
*)
- frame_skip_cmp: cint;
+ frame_number: cint; ///< audio or video frame number
(**
- * Border processing masking, raises the quantizer for mbs on the borders
- * of the picture.
- * - encoding: Set by user.
- * - decoding: unused
+ * number of bytes per packet if constant and known or 0
+ * Used by some WAV based audio codecs.
*)
- border_masking: cfloat;
+ block_align: cint;
(**
- * minimum MB lagrange multipler
+ * Audio cutoff bandwidth (0 means "automatic")
* - encoding: Set by user.
* - decoding: unused
*)
- mb_lmin: cint;
+ cutoff: cint;
+{$IF FF_API_REQUEST_CHANNELS}
(**
- * maximum MB lagrange multipler
- * - encoding: Set by user.
- * - decoding: unused
+ * 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.
*)
- mb_lmax: cint;
+ request_channels: cint; {deprecated}
+{$IFEND}
(**
- *
- * - encoding: Set by user.
- * - decoding: unused
+ * Audio channel layout.
+ * - encoding: set by user.
+ * - decoding: set by libavcodec.
*)
- me_penalty_compensation: cint;
+ channel_layout: cuint64;
(**
- *
+ * Request decoder to use this channel layout if it can (0 for default)
* - encoding: unused
* - decoding: Set by user.
*)
- skip_loop_filter: TAVDiscard;
+ request_channel_layout: cuint64;
(**
- *
- * - encoding: unused
+ * 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.
*)
- skip_idct: TAVDiscard;
+ request_sample_fmt: TAVSampleFormat;
(**
+ * 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 user.
+ * - decoding: Set by libavcodec, user can override.
*)
- skip_frame: TAVDiscard;
+ get_buffer: function (c: PAVCodecContext; pic: PAVFrame): cint; cdecl;
(**
- *
- * - 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.
*)
- bidir_refine: cint;
+ release_buffer: procedure (c: PAVCodecContext; pic: PAVFrame); cdecl;
(**
- *
- * - encoding: Set by user.
- * - decoding: unused
+ * Called at the beginning of a frame to get cr buffer for it.
+ * Buffer type (size, hints) must be the same. libavcodec won't check it.
+ * libavcodec will pass previous buffer in pic, function should return
+ * same buffer or new buffer with old frame "painted" into it.
+ * If pic.data[0] == NULL must behave like get_buffer().
+ * if CODEC_CAP_DR1 is not set then reget_buffer() must call
+ * avcodec_default_reget_buffer() instead of providing buffers allocated by
+ * some other means.
+ * - encoding: unused
+ * - decoding: Set by libavcodec, user can override
*)
- brd_scale: cint;
+ 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)
-{$IF FF_API_X264_GLOBAL_OPTS}
(**
- * constant rate factor - quality-based VBR - values ~correspond to qps
+ * minimum quantizer
* - encoding: Set by user.
* - decoding: unused
- * @deprecated use 'crf' libx264 private option
*)
- crf: cfloat; {deprecated}
+ qmin: cint;
- (**
- * constant quantization parameter rate control method
+ (**
+ * maximum quantizer
* - encoding: Set by user.
* - decoding: unused
- * @deprecated use 'cqp' libx264 private option
*)
- cqp: cint; {deprecated}
-{$IFEND}
+ qmax: cint;
(**
- * minimum GOP size
+ * maximum quantizer difference between frames
* - encoding: Set by user.
* - decoding: unused
*)
- keyint_min: cint;
+ max_qdiff: cint;
(**
- * number of reference frames
+ * 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 lavc.
+ * - decoding: unused
*)
- refs: cint;
+ rc_qsquish: cfloat;
+
+ rc_qmod_amp: cfloat;
+ rc_qmod_freq: cint;
(**
- * chroma qp offset from luma
+ * decoder bitstream buffer size
* - encoding: Set by user.
* - decoding: unused
*)
- chromaoffset: cint;
-
-{$IF FF_API_X264_GLOBAL_OPTS}
+ rc_buffer_size: cint;
(**
- * Influences how often B-frames are used.
- * - encoding: Set by user.
+ * ratecontrol override, see RcOverride
+ * - encoding: Allocated/set/freed by user.
* - decoding: unused
*)
- bframebias: cint; {deprecated}
-{$IFEND}
+ rc_override_count: cint;
+ rc_override: PRcOverride;
(**
- * trellis RD quantization
- * - encoding: Set by user.
+ * rate control equation
+ * - encoding: Set by user
* - decoding: unused
*)
- trellis: cint;
+ rc_eq: {const} PAnsiChar;
-{$IF FF_API_X264_GLOBAL_OPTS}
(**
- * Reduce fluctuations in qp (before curve compression).
+ * maximum bitrate
* - encoding: Set by user.
* - decoding: unused
*)
- complexityblur: cfloat; {deprecated}
+ rc_max_rate: cint;
(**
- * in-loop deblocking filter alphac0 parameter
- * alpha is in the range -6...6
+ * minimum bitrate
* - encoding: Set by user.
* - decoding: unused
*)
- deblockalpha: cint; {deprecated}
+ rc_min_rate: cint;
+
+ rc_buffer_aggressivity: cfloat;
(**
- * in-loop deblocking filter beta parameter
- * beta is in the range -6...6
+ * initial complexity for pass1 ratecontrol
* - encoding: Set by user.
* - decoding: unused
*)
- deblockbeta: cint; {deprecated}
+ rc_initial_cplx: cfloat;
(**
- * macroblock subpartition sizes to consider - p8x8, p4x4, b8x8, i8x8, i4x4
+ * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
* - encoding: Set by user.
- * - decoding: unused
+ * - decoding: unused.
*)
- partitions: cint; {deprecated}
+ rc_max_available_vbv_use: cfloat;
(**
- * direct MV prediction mode - 0 (none), 1 (spatial), 2 (temporal), 3 (auto)
+ * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.
* - encoding: Set by user.
- * - decoding: unused
+ * - decoding: unused.
*)
- directpred: cint; {deprecated}
-{$IFEND}
+ rc_min_vbv_overflow_use: cfloat;
(**
- * Audio cutoff bandwidth (0 means "automatic")
+ * Number of bits which should be loaded into the rc buffer before decoding starts.
* - encoding: Set by user.
* - decoding: unused
*)
- cutoff: cint;
+ rc_initial_buffer_occupancy: cint;
(**
- * Multiplied by qscale for each frame and added to scene_change_score.
+ * coder type
* - encoding: Set by user.
* - decoding: unused
*)
- scenechange_factor: cint;
+ coder_type: cint;
(**
- *
- * Note: Value depends upon the compare function used for fullpel ME.
+ * context model
* - encoding: Set by user.
* - decoding: unused
*)
- mv0_threshold: cint;
+ context_model: cint;
(**
- * Adjust sensitivity of b_frame_strategy 1.
+ * minimum Lagrange multipler
* - encoding: Set by user.
* - decoding: unused
*)
- b_sensitivity: cint;
+ lmin: cint;
(**
+ * maximum Lagrange multipler
* - encoding: Set by user.
* - decoding: unused
*)
- compression_level: cint;
+ lmax: cint;
(**
+ * frame skip threshold
* - encoding: Set by user.
* - decoding: unused
*)
- min_prediction_order: cint;
+ frame_skip_threshold: cint;
(**
+ * frame skip factor
* - encoding: Set by user.
* - decoding: unused
*)
- max_prediction_order: cint;
+ frame_skip_factor: cint;
-{$IF FF_API_FLAC_GLOBAL_OPTS}
(**
- * @name FLAC options
- * @deprecated Use FLAC encoder private options instead.
- * @{
+ * frame skip exponent
+ * - encoding: Set by user.
+ * - decoding: unused
*)
+ frame_skip_exp: cint;
(**
- * LPC coefficient precision - used by FLAC encoder
+ * frame skip comparison function
* - encoding: Set by user.
* - decoding: unused
*)
- lpc_coeff_precision: cint; {deprecated}
+ frame_skip_cmp: cint;
(**
- * search method for selecting prediction order
+ * trellis RD quantization
* - encoding: Set by user.
* - decoding: unused
*)
- prediction_order_method: cint; {deprecated}
+ trellis: cint;
(**
* - encoding: Set by user.
* - decoding: unused
*)
- min_partition_order: cint; {deprecated}
+ min_prediction_order: cint;
(**
* - encoding: Set by user.
* - decoding: unused
*)
- max_partition_order: cint; {deprecated}
-{$IFEND}
+ max_prediction_order: cint;
(**
* GOP timecode frame start number, in non drop frame format
@@ -3110,69 +2813,110 @@ type
*)
timecode_frame_start: cint64;
-{$IF FF_API_REQUEST_CHANNELS}
+ (* 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;
+
+ 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 *)
+
+ (* 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;
+
(**
- * 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.
+ * number of bits used for the previously encoded frame
+ * - encoding: Set by libavcodec.
+ * - decoding: unused
*)
- request_channels: cint; {deprecated}
-{$IFEND}
+ frame_bits: cint;
-{$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.
+ * pass1 encoding statistics output buffer
+ * - encoding: Set by libavcodec.
+ * - decoding: unused
*)
- drc_scale: cfloat; {deprecated}
-{$IFEND}
+ stats_out: PAnsiChar;
(**
- * opaque 64bit number (generally a PTS) that will be reordered and
- * output in AVFrame.reordered_opaque
- * - encoding: unused
- * - decoding: 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
*)
- reordered_opaque: cint64;
-
+ stats_in: PAnsiChar;
+
(**
- * Bits per sample/pixel of internal libavcodec pixel/sample format.
- * - encoding: set by user.
- * - decoding: set by libavcodec.
+ * Work around bugs in encoders which sometimes cannot be detected automatically.
+ * - encoding: Set by user
+ * - decoding: Set by user
*)
- bits_per_raw_sample: cint;
+ workaround_bugs: cint;
(**
- * Audio channel layout.
- * - encoding: set by user.
- * - decoding: set by libavcodec.
+ * strictly follow the standard (MPEG4, ...).
+ * - 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)
*)
- channel_layout: cuint64;
+ strict_std_compliance: cint;
(**
- * Request decoder to use this channel layout if it can (0 for default)
+ * error concealment flags
* - encoding: unused
* - decoding: Set by user.
*)
- request_channel_layout: cuint64;
+ error_concealment: cint;
(**
- * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
+ * debug
* - encoding: Set by user.
- * - decoding: unused.
+ * - decoding: Set by user.
*)
- rc_max_available_vbv_use: cfloat;
+ debug: cint;
(**
- * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.
+ * debug
* - encoding: Set by user.
- * - decoding: unused.
+ * - decoding: Set by user.
*)
- rc_min_vbv_overflow_use: cfloat;
+ debug_mv: cint;
+
+ (**
+ * Error recognition; may misdetect some more or less valid parts as errors.
+ * - encoding: unused
+ * - decoding: Set by user.
+ *)
+ err_recognition: cint;
+
+ (**
+ * 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;
(**
* Hardware accelerator in use
@@ -3182,15 +2926,6 @@ type
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
@@ -3203,39 +2938,107 @@ type
hwaccel_context: pointer;
(**
- * Chromaticity coordinates of the source primaries.
- * - encoding: Set by user
- * - decoding: Set by libavcodec
+ * error
+ * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR.
+ * - decoding: unused
*)
- color_primaries: TAVColorPrimaries;
+ error: array [0..AV_NUM_DATA_POINTERS - 1] of cuint64;
(**
- * Color Transfer Characteristic.
- * - encoding: Set by user
- * - decoding: Set by libavcodec
+ * DCT algorithm, see FF_DCT_* below
+ * - encoding: Set by user.
+ * - decoding: unused
*)
- color_trc: TAVColorTransferCharacteristic;
+ dct_algo: cint;
(**
- * YUV colorspace type.
- * - encoding: Set by user
- * - decoding: Set by libavcodec
+ * IDCT algorithm, see FF_IDCT_* below.
+ * - encoding: Set by user.
+ * - decoding: Set by user.
*)
- colorspace: TAVColorSpace;
+ idct_algo: cint;
+{$IF FF_API_DSP_MASK}
(**
- * MPEG vs JPEG YUV range.
- * - encoding: Set by user
- * - decoding: Set by libavcodec
+ * Unused.
+ * @deprecated use av_set_cpu_flags_mask() instead.
*)
- color_range: TAVColorRange;
+ dsp_mask: cuint; {deprecated}
+{$IFEND}
(**
- * This defines the location of chroma samples.
- * - encoding: Set by user
- * - decoding: Set by libavcodec
+ * bits per sample/pixel from the demuxer (needed for huffyuv).
+ * - encoding: Set by libavcodec.
+ * - decoding: Set by user.
*)
- chroma_sample_location: TAVChromaLocation;
+ bits_per_coded_sample: cint;
+
+ (**
+ * Bits per sample/pixel of internal libavcodec pixel/sample format.
+ * - encoding: set by user.
+ * - decoding: set by libavcodec.
+ *)
+ bits_per_raw_sample: cint;
+
+ (**
+ * low resolution decoding, 1-> 1/2 size, 2->1/4 size
+ * - encoding: unused
+ * - decoding: Set by user.
+ *)
+ lowres: cint;
+
+ (**
+ * the picture in the bitstream
+ * - encoding: Set by libavcodec.
+ * - decoding: Set by libavcodec.
+ *)
+ coded_frame: PAVFrame;
+
+ (**
+ * thread count
+ * is used to decide how many independent tasks should be passed to execute()
+ * - encoding: Set by user.
+ * - decoding: Set by user.
+ *)
+ thread_count: cint;
+
+ (**
+ * 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;
+
+ (**
+ * 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.
+ *)
+ 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.
@@ -3359,6 +3122,13 @@ type
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
* inside lavc and get/release_buffer callbacks.
@@ -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,42 +3146,6 @@ 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
@@ -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.
*
@@ -3648,6 +3355,13 @@ type
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,580 +3436,409 @@ type
pts: cint64; ///< Same as packet pts, in AV_TIME_BASE
end; {TAVSubtitle}
-(* packet functions *)
-
(**
- * @deprecated use NULL instead
- *)
-procedure av_destruct_packet_nofree(pkt: PAVPacket);
- cdecl; external av__codec; deprecated;
-
-(*
- * Default packet destructor.
- *)
-procedure av_destruct_packet(pkt: PAVPacket);
- cdecl; external av__codec;
-
-(*
- * Initialize optional fields of a packet with default values.
- *
- * @param pkt packet
- *)
-procedure av_init_packet(var pkt: TAVPacket);
- 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
- *)
-function av_new_packet(pkt: PAVPacket; size: cint): cint;
- cdecl; external av__codec;
-
-(*
- * Reduce packet size, correctly zeroing padding
- *
- * @param pkt packet
- * @param size new size
- *)
-procedure av_shrink_packet(pkt: PAVPacket; size: cint);
- 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.
+ * 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.
*)
-function av_dup_packet(pkt: PAVPacket): cint;
+function av_codec_next(c: PAVCodec): PAVCodec;
cdecl; external av__codec;
-(*
- * Free a packet.
- *
- * @param pkt packet to free
+(**
+ * Return the LIBAVCODEC_VERSION_INT constant.
*)
-procedure av_free_packet(pkt: PAVPacket);
+function avcodec_version(): cuint;
cdecl; external av__codec;
(**
- * Allocate new information of a packet.
- *
- * @param pkt packet
- * @param type side information type
- * @param size side information size
- * @return pointer to fresh allocated data or NULL otherwise
+ * Return the libavcodec build-time configuration.
*)
-function av_packet_new_side_data(pkt: PAVPacket; type_: AVPacketSideDataType;
- size: cint): PByte;
+function avcodec_configuration(): PAnsiChar;
cdecl; external av__codec;
(**
- * Get side information from packet.
- *
- * @param pkt packet
- * @param type desired side information type
- * @param size pointer for side information size to store (optional)
- * @return pointer to data if present or NULL otherwise
+ * Return the libavcodec license.
*)
-function av_packet_get_side_data(pkt: PAVPacket; type_: AVPacketSideDataType;
- size: Pcint): PByte;
- cdecl; external av__codec;
-
-function av_packet_merge_side_data(pkt: PAVPacket): cint;
- cdecl; external av__codec;
-
-function av_packet_split_side_data(pkt: PAVPacket): cint;
+function avcodec_license(): PAnsiChar;
cdecl; external av__codec;
-(* resample.c *)
-type
- PReSampleContext = pointer;
- PAVResampleContext = pointer;
- PImgReSampleContext = pointer;
-
(**
- * Initialize audio resampling context.
+ * Register the codec codec and initialize libavcodec.
*
- * @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
+ * @warning either this function or avcodec_register_all() must be called
+ * before any other libavcodec functions.
+ *
+ * @see avcodec_register_all()
*)
- 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;
+procedure avcodec_register(codec: PAVCodec);
cdecl; external av__codec;
(**
- * Free resample context.
+ * 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.
*
- * @param s a non-NULL pointer to a resample context previously
- * created with av_audio_resample_init()
+ * @see register_avcodec
+ * @see avcodec_register
+ * @see av_register_codec_parser
+ * @see av_register_bitstream_filter
*)
-procedure audio_resample_close (s: PReSampleContext);
+procedure avcodec_register_all();
cdecl; external av__codec;
+{$IF FF_API_ALLOC_CONTEXT}
(**
- * 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
+ * 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 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;
+function avcodec_alloc_context(): PAVCodecContext;
+ cdecl; external av__codec; deprecated;
-(**
- * 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;
+(** 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;
(**
- * 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 AVCodecContext 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 s The AVCodecContext of which the fields should be set to default values.
+ * @deprecated use avcodec_get_context_defaults3
*)
-procedure av_resample_compensate (c: PAVResampleContext; sample_delta: cint;
- compensation_distance: cint);
- cdecl; external av__codec;
+procedure avcodec_get_context_defaults(s: PAVCodecContext);
+ cdecl; external av__codec; deprecated;
-procedure av_resample_close (c: PAVResampleContext);
- cdecl; external av__codec;
+(** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
+ * we WILL change its arguments and name a few times! *)
+procedure avcodec_get_context_defaults2(s: PAVCodecContext; ctype: TAVMediaType);
+ cdecl; external av__codec; deprecated;
+{$IFEND}
(**
- * Allocate memory for a picture. Call avpicture_free to free it.
+ * 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().
*
- * @see avpicture_fill()
+ * @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.
*
- * @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.
+ * @return An AVCodecContext filled with default values or NULL on failure.
+ * @see avcodec_get_context_defaults
*)
-function avpicture_alloc (picture: PAVPicture; pix_fmt: TAVPixelFormat;
- width: cint; height: cint): cint;
+function avcodec_alloc_context3(codec: PAVCodec): PAVCodecContext;
cdecl; external av__codec;
(**
- * Free a picture previously allocated by avpicture_alloc().
+ * Set the fields of the given AVCodecContext to default values corresponding
+ * to the given codec (defaults may be codec-dependent).
*
- * @param picture the AVPicture to be freed
+ * 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 avpicture_free (picture: PAVPicture);
+procedure avcodec_get_context_defaults3(s: PAVCodecContext; codec: PAVCodec);
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.
+ * Get the AVClass for AVCodecContext. It can be used in combination with
+ * AV_OPT_SEARCH_FAKE_OBJ for examining options.
*
- * @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
+ * @see av_opt_find().
*)
-function avpicture_fill (picture: PAVPicture; ptr: pcuint8;
- pix_fmt: TAVPixelFormat; width: cint; height: cint): cint;
+function avcodec_get_class(): {const} PAVClass;
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()
+ * Get the AVClass for AVFrame. It can be used in combination with
+ * AV_OPT_SEARCH_FAKE_OBJ for examining options.
*
- * @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.
+ * @see av_opt_find().
*)
-function avpicture_layout (src: {const} PAVPicture; pix_fmt: TAVPixelFormat;
- width: cint; height: cint;
- dest: PByteArray; dest_size: cint): cint;
+function avcodec_get_frame_class(): {const} PAVClass;
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.
+ * Get the AVClass for AVSubtitleRect. It can be used in combination with
+ * AV_OPT_SEARCH_FAKE_OBJ for examining options.
*
- * @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
+ * @see av_opt_find().
*)
-function avcodec_get_name(id: TCodecID): PAnsiChar;
+function avcodec_get_subtitle_rect_class(): {const} PAVClass;
cdecl; external av__codec;
-{$IF FF_API_GET_PIX_FMT_NAME}
(**
- * Return the short name for a pixel format.
+ * 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.
*
- * \see av_get_pix_fmt(), av_get_pix_fmt_string().
- * @deprecated Deprecated in favor of av_get_pix_fmt_name().
- *)
-function avcodec_get_pix_fmt_name(pix_fmt: TAVPixelFormat): PAnsiChar;
- cdecl; external av__codec; deprecated;
-{$IFEND}
-
-procedure avcodec_set_dimensions(s: PAVCodecContext; width: cint; height: 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.
+ * @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_pix_fmt_to_codec_tag(pix_fmt: TAVPixelFormat): cuint;
+function avcodec_copy_context(dest: PAVCodecContext; src: {const} PAVCodecContext): cint;
cdecl; external av__codec;
(**
- * Put a string representing the codec tag codec_tag in buf.
+ * Allocate an AVFrame and set its fields to default values. The resulting
+ * struct can be deallocated by simply calling av_free().
*
- * @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
+ * @return An AVFrame filled with default values or NULL on failure.
+ * @see avcodec_get_frame_defaults
*)
-function av_get_codec_tag_string(buf: PAnsiChar; buf_size: size_t; codec_tag: cuint): size_t;
+function avcodec_alloc_frame(): PAVFrame;
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.
+ * Set the fields of the given AVFrame to default values.
*
- * @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 pic The AVFrame of which the fields should be set to default values.
*)
-function avcodec_get_pix_fmt_loss (dst_pix_fmt: TAVPixelFormat; src_pix_fmt: TAVPixelFormat;
- has_alpha: cint): cint;
+procedure avcodec_get_frame_defaults (pic: PAVFrame);
cdecl; external av__codec;
+{$IF FF_API_AVCODEC_OPEN}
(**
- * 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.
+ * Initialize the AVCodecContext to use the given AVCodec. Prior to using this
+ * function the context has to be allocated.
*
- * Note, only the first 64 pixel formats will fit in pix_fmt_mask.
+ * 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
- * 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);
+ * 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[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.
+ * @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
*)
-procedure avcodec_pix_fmt_string (buf: PAnsiChar; buf_size: cint; pix_fmt: TAVPixelFormat);
+function avcodec_open(avctx: PAVCodecContext; codec: PAVCodec): cint;
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
+ * 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 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 avcodec_open2(avctx: PAVCodecContext; codec: PAVCodec; options: PPAVDictionary): 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.
+ * 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 av_codec_next(c: PAVCodec): PAVCodec;
+function avcodec_close(avctx: PAVCodecContext): cint;
cdecl; external av__codec;
(**
- * Return the LIBAVCODEC_VERSION_INT constant.
+ * Free all allocated data in the given subtitle struct.
+ *
+ * @param sub AVSubtitle to free.
*)
-function avcodec_version(): cuint;
+procedure avsubtitle_free(sub: PAVSubtitle);
cdecl; external av__codec;
(**
- * Return the libavcodec build-time configuration.
+ * @}
*)
-function avcodec_configuration(): PAnsiChar;
- cdecl; external av__codec;
(**
- * Return the libavcodec license.
+ * @addtogroup lavc_packet
+ * @{
*)
-function avcodec_license(): PAnsiChar;
- 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
+ * @deprecated use NULL instead
*)
-procedure avcodec_init();
+procedure av_destruct_packet_nofree(pkt: PAVPacket);
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.
- *
- * @see avcodec_register_all()
+(*
+ * Default packet destructor.
*)
-procedure avcodec_register(codec: PAVCodec);
+procedure av_destruct_packet(pkt: PAVPacket);
cdecl; external av__codec;
-(**
- * Find a registered encoder with a matching codec ID.
+(*
+ * Initialize optional fields of a packet with default values.
*
- * @param id CodecID of the requested encoder
- * @return An encoder if one was found, NULL otherwise.
+ * @param pkt packet
*)
-function avcodec_find_encoder(id: TCodecID): PAVCodec;
+procedure av_init_packet(var pkt: TAVPacket);
cdecl; external av__codec;
-(**
- * Find a registered encoder with the specified name.
+(*
+ * Allocate the payload of a packet and initialize its fields with
+ * default values.
*
- * @param name name of the requested encoder
- * @return An encoder if one was found, NULL otherwise.
+ * @param pkt packet
+ * @param size wanted payload size
+ * @return 0 if OK, AVERROR_xxx otherwise
*)
-function avcodec_find_encoder_by_name(name: PAnsiChar): PAVCodec;
+function av_new_packet(pkt: PAVPacket; size: cint): cint;
cdecl; external av__codec;
-(**
- * Find a registered decoder with a matching codec ID.
+(*
+ * Reduce packet size, correctly zeroing padding
*
- * @param id CodecID of the requested decoder
- * @return A decoder if one was found, NULL otherwise.
+ * @param pkt packet
+ * @param size new size
*)
-function avcodec_find_decoder(id: TCodecID): PAVCodec;
+procedure av_shrink_packet(pkt: PAVPacket; size: cint);
cdecl; external av__codec;
(**
- * Find a registered decoder with the specified name.
+ * Increase packet size, correctly zeroing padding
*
- * @param name name of the requested decoder
- * @return A decoder if one was found, NULL otherwise.
+ * @param pkt packet
+ * @param grow_by number of bytes by which to increase the size of the packet
*)
-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);
+function av_grow_packet(pkt: PAVPacket; grow_by: cint): 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.
+(*
+ * @warning This is a hack - the packet memory allocation stuff is broken. The
+ * packet is allocated if it was not really allocated.
*)
-function av_get_profile_name(codec: {const} PAVCodec; profile: cint): {const} PAnsiChar;
+function av_dup_packet(pkt: PAVPacket): cint;
cdecl; external av__codec;
-{$IF FF_API_ALLOC_CONTEXT}
-(**
- * Set the fields of the given AVCodecContext to default values.
+(*
+ * Free a packet.
*
- * @param s The AVCodecContext of which the fields should be set to default values.
- * @deprecated use avcodec_get_context_defaults3
+ * @param pkt packet to free
*)
-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}
+procedure av_free_packet(pkt: PAVPacket);
+ cdecl; external av__codec;
(**
- * Set the fields of the given AVCodecContext to default values corresponding
- * to the given codec (defaults may be codec-dependent).
+ * Allocate new information of a packet.
*
- * 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.
+ * @param pkt packet
+ * @param type side information type
+ * @param size side information size
+ * @return pointer to fresh allocated data or NULL otherwise
*)
-procedure avcodec_get_context_defaults3(s: PAVCodecContext; codec: PAVCodec);
+function av_packet_new_side_data(pkt: PAVPacket; type_: AVPacketSideDataType;
+ size: cint): PByte;
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().
+ * Shrink the already allocated side data buffer
*
- * @return An AVCodecContext filled with default values or NULL on failure.
- * @see avcodec_get_context_defaults
- *
- * @deprecated use avcodec_alloc_context3()
+ * @param pkt packet
+ * @param type side information type
+ * @param size new side information size
+ * @return 0 on success, < 0 on failure
*)
-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}
+function av_packet_shrink_side_data(pkt: PAVPacket; type_: AVPacketSideDataType;
+ size: cint): cint;
+ cdecl; external av__codec;
(**
- * 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.
+ * Get side information from packet.
*
- * @return An AVCodecContext filled with default values or NULL on failure.
- * @see avcodec_get_context_defaults
+ * @param pkt packet
+ * @param type desired side information type
+ * @param size pointer for side information size to store (optional)
+ * @return pointer to data if present or NULL otherwise
*)
-function avcodec_alloc_context3(codec: PAVCodec): PAVCodecContext;
+function av_packet_get_side_data(pkt: PAVPacket; type_: AVPacketSideDataType;
+ size: Pcint): PByte;
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;
+function av_packet_merge_side_data(pkt: PAVPacket): cint;
+ cdecl; external av__codec;
+
+function av_packet_split_side_data(pkt: PAVPacket): cint;
cdecl; external av__codec;
+/**
+ * @}
+ */
+
+/**
+ * @addtogroup lavc_decoding
+ * @{
+ */
+
(**
- * Set the fields of the given AVFrame to default values.
+ * Find a registered decoder with a matching codec ID.
*
- * @param pic The AVFrame of which the fields should be set to default values.
+ * @param id CodecID of the requested decoder
+ * @return A decoder if one was found, NULL otherwise.
*)
-procedure avcodec_get_frame_defaults (pic: PAVFrame);
+function avcodec_find_decoder(id: TCodecID): PAVCodec;
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().
+ * Find a registered decoder with the specified name.
*
- * @return An AVFrame filled with default values or NULL on failure.
- * @see avcodec_get_frame_defaults
+ * @param name name of the requested decoder
+ * @return A decoder if one was found, NULL otherwise.
*)
-function avcodec_alloc_frame(): PAVFrame;
+function avcodec_find_decoder_by_name(name: PAnsiChar): PAVCodec;
cdecl; external av__codec;
function avcodec_default_get_buffer (s: PAVCodecContext; pic: PAVFrame): cint;
@@ -4330,97 +3883,6 @@ 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}
-(**
- * Initialize the AVCodecContext to use the given AVCodec. Prior to using this
- * function the context has to be allocated.
- *
- * 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();
- * 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 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.
@@ -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,191 +4040,10 @@ 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;
-
-{$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;
-
-(**
- * 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;
-
-(**
- * 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;
-
-(**
- * 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;
-
-(**
- * 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();
- cdecl; external av__codec;
-
-(**
- * Flush buffers, should be called when seeking or when switching to a different stream.
- *)
-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.
- *
- * @param[in] codec_id the codec
- * @return Number of bits per sample or zero if unknown for the given codec.
- *)
-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.
- *)
-function av_get_bits_per_sample_format(sample_fmt: TAVSampleFormat): cint;
- cdecl; external av__codec; deprecated;
-{$IFEND}
+/**
+ * @defgroup lavc_parsing Frame parsing
+ * @{
+ */
const
AV_PARSER_PTS_NB = 4;
@@ -4781,6 +4051,7 @@ const
PARSER_FLAG_ONCE = $0002;
/// Set if the parser has a valid file offset
PARSER_FLAG_FETCHED_OFFSET = $0004;
+ PARSER_FLAG_USE_CODEC_TS = $1000;
type
(* frame parsing *)
@@ -4980,6 +4251,614 @@ function av_parser_change(s: PAVCodecParserContext;
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;
+
+(**
+ * Flush buffers, should be called when seeking or when switching to a different stream.
+ *)
+procedure avcodec_flush_buffers(avctx: PAVCodecContext);
+ cdecl; external av__codec;
+
+procedure avcodec_default_free_buffers(s: PAVCodecContext);
+ cdecl; external av__codec;
+
+(**
+ * Return codec bits per sample.
+ *
+ * @param[in] codec_id the codec
+ * @return Number of bits per sample or zero if unknown for the given codec.
+ *)
+function av_get_bits_per_sample(codec_id: TCodecID): cint;
+ cdecl; external av__codec;
+
+(**
+ * 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_pcm_codec(fmt: TAVSampleFormat; be: cint): TCodecID;
+ cdecl; external av__codec;
+
+(**
+ * Return codec bits per sample.
+ * Only return non-zero if the bits per sample is exactly correct, not an
+ * approximation.
+ *
+ * @param[in] codec_id the codec
+ * @return Number of bits per sample or zero if unknown for the given codec.
+ *)
+function av_get_exact_bits_per_sample(codec_id: TCodecID): cint;
+ cdecl; external av__codec;
+
+(**
+ * 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
PAVBitStreamFilterContext = ^TAVBitStreamFilterContext;
PAVBitStreamFilter = ^TAVBitStreamFilter;
@@ -5056,42 +4935,6 @@ 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.
*
* @param s buffer to write to; must be at least (v/255+1) bytes long
@@ -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;
(**
* @}
@@ -717,6 +696,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.
*)
priv_data_size: cint;
@@ -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
@@ -771,25 +781,6 @@ type
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
@@ -1366,6 +1229,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
* @{
@@ -1978,29 +1798,6 @@ function avformat_write_header(s: PAVFormatContext; options: {PPAVDictionary} po
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.
*
* The packet must contain one audio or video frame.
@@ -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,10 +430,17 @@ 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.
* @note When the resource indicated by url has been opened in
@@ -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
*
*)
@@ -81,6 +81,13 @@ 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
* is outside the int64_t range when represented in the others timebase.
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,
@@ -70,6 +89,30 @@ function av_get_alt_sample_fmt(sample_fmt: TAVSampleFormat; planar: cint): TAVSa
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;