aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/ffmpeg-0.10
diff options
context:
space:
mode:
authorlotanrm <lotanrm@b956fd51-792f-4845-bead-9b4dfca2ff2c>2012-05-17 17:32:26 +0000
committerlotanrm <lotanrm@b956fd51-792f-4845-bead-9b4dfca2ff2c>2012-05-17 17:32:26 +0000
commitc03bb84ce50794bab234b1c5cbfa74f6e8e3c6f2 (patch)
tree68fb6fbb36529b0d93959072afc0adc358539b30 /src/lib/ffmpeg-0.10
parenta537d34f9306bf50391d295f87bde4fdaeccc3e6 (diff)
downloadusdx-c03bb84ce50794bab234b1c5cbfa74f6e8e3c6f2.tar.gz
usdx-c03bb84ce50794bab234b1c5cbfa74f6e8e3c6f2.tar.xz
usdx-c03bb84ce50794bab234b1c5cbfa74f6e8e3c6f2.zip
Added support for ffmpeg-0.10.
git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2883 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to 'src/lib/ffmpeg-0.10')
-rw-r--r--src/lib/ffmpeg-0.10/avcodec.pas1277
-rw-r--r--src/lib/ffmpeg-0.10/avformat.pas1651
-rw-r--r--src/lib/ffmpeg-0.10/avio.pas137
-rw-r--r--src/lib/ffmpeg-0.10/avutil.pas333
-rw-r--r--src/lib/ffmpeg-0.10/libavutil/dict.pas8
-rw-r--r--src/lib/ffmpeg-0.10/libavutil/mem.pas14
-rw-r--r--src/lib/ffmpeg-0.10/libavutil/opt.pas406
-rw-r--r--src/lib/ffmpeg-0.10/libavutil/pixfmt.pas2
-rw-r--r--src/lib/ffmpeg-0.10/libavutil/samplefmt.pas2
9 files changed, 2134 insertions, 1696 deletions
diff --git a/src/lib/ffmpeg-0.10/avcodec.pas b/src/lib/ffmpeg-0.10/avcodec.pas
index b2ed9fd2..6e4a9a32 100644
--- a/src/lib/ffmpeg-0.10/avcodec.pas
+++ b/src/lib/ffmpeg-0.10/avcodec.pas
@@ -78,10 +78,11 @@ const
* you start working on it). Simply adjusting the max. versions is NOT a valid
* fix.
*)
+
(* Supported version by this header *)
- LIBAVCODEC_MAX_VERSION_MAJOR = 52;
- LIBAVCODEC_MAX_VERSION_MINOR = 122;
- LIBAVCODEC_MAX_VERSION_RELEASE = 0;
+ LIBAVCODEC_MAX_VERSION_MAJOR = 53;
+ LIBAVCODEC_MAX_VERSION_MINOR = 61;
+ LIBAVCODEC_MAX_VERSION_RELEASE = 100;
LIBAVCODEC_MAX_VERSION = (LIBAVCODEC_MAX_VERSION_MAJOR * VERSION_MAJOR) +
(LIBAVCODEC_MAX_VERSION_MINOR * VERSION_MINOR) +
(LIBAVCODEC_MAX_VERSION_RELEASE * VERSION_RELEASE);
@@ -108,69 +109,94 @@ const
* Those FF_API_* defines are not part of public API.
* They may change, break or disappear at any time.
*)
-const
+{$macro on}
{$ifndef FF_API_PALETTE_CONTROL}
- FF_API_PALETTE_CONTROL = LIBAVCODEC_VERSION_MAJOR < 54;
+{$define FF_API_PALETTE_CONTROL := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_MM_FLAGS}
- FF_API_MM_FLAGS = LIBAVCODEC_VERSION_MAJOR < 53;
+{$ifndef FF_API_OLD_SAMPLE_FMT}
+{$define FF_API_OLD_SAMPLE_FMT := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_OPT_SHOW}
- FF_API_OPT_SHOW = LIBAVCODEC_VERSION_MAJOR < 53;
+{$ifndef FF_API_OLD_AUDIOCONVERT}
+{$define FF_API_OLD_AUDIOCONVERT := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_AUDIO_OLD}
- FF_API_AUDIO_OLD = LIBAVCODEC_VERSION_MAJOR < 53;
+{$ifndef FF_API_ANTIALIAS_ALGO}
+{$define FF_API_ANTIALIAS_ALGO := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_VIDEO_OLD}
- FF_API_VIDEO_OLD = LIBAVCODEC_VERSION_MAJOR < 53;
+{$ifndef FF_API_REQUEST_CHANNELS}
+{$define FF_API_REQUEST_CHANNELS := (LIBAVCODEC_VERSION_MAJOR < 55)}
{$endif}
-{$ifndef FF_API_SUBTITLE_OLD}
- FF_API_SUBTITLE_OLD = LIBAVCODEC_VERSION_MAJOR < 53;
+{$ifndef FF_API_OPT_H}
+{$define FF_API_OPT_H := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_USE_LPC}
- FF_API_USE_LPC = LIBAVCODEC_VERSION_MAJOR < 53;
+{$ifndef FF_API_THREAD_INIT}
+{$define FF_API_THREAD_INIT := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_SET_STRING_OLD}
- FF_API_SET_STRING_OLD = LIBAVCODEC_VERSION_MAJOR < 53;
+{$ifndef FF_API_OLD_FF_PICT_TYPES}
+{$define FF_API_OLD_FF_PICT_TYPES := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_INOFFICIAL}
- FF_API_INOFFICIAL = LIBAVCODEC_VERSION_MAJOR < 53;
+{$ifndef FF_API_FLAC_GLOBAL_OPTS}
+{$define FF_API_FLAC_GLOBAL_OPTS := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_OLD_SAMPLE_FMT}
- FF_API_OLD_SAMPLE_FMT = LIBAVCODEC_VERSION_MAJOR < 54;
+{$ifndef FF_API_GET_PIX_FMT_NAME}
+{$define FF_API_GET_PIX_FMT_NAME := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_OLD_AUDIOCONVERT}
- FF_API_OLD_AUDIOCONVERT = LIBAVCODEC_VERSION_MAJOR < 54;
+{$ifndef FF_API_ALLOC_CONTEXT}
+{$define FF_API_ALLOC_CONTEXT := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_HURRY_UP}
- FF_API_HURRY_UP = LIBAVCODEC_VERSION_MAJOR < 53;
+{$ifndef FF_API_AVCODEC_OPEN}
+{$define FF_API_AVCODEC_OPEN := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_RATE_EMU}
- FF_API_RATE_EMU = LIBAVCODEC_VERSION_MAJOR < 53;
+{$ifndef FF_API_DRC_SCALE}
+{$define FF_API_DRC_SCALE := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_MB_Q}
- FF_API_MB_Q = LIBAVCODEC_VERSION_MAJOR < 53;
+{$ifndef FF_API_ER}
+{$define FF_API_ER := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_ANTIALIAS_ALGO}
- FF_API_ANTIALIAS_ALGO = LIBAVCODEC_VERSION_MAJOR < 54;
+{$ifndef FF_API_AVCODEC_INIT}
+{$define FF_API_AVCODEC_INIT := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_REQUEST_CHANNELS}
- FF_API_REQUEST_CHANNELS = LIBAVCODEC_VERSION_MAJOR < 54;
+{$ifndef FF_API_X264_GLOBAL_OPTS}
+{$define FF_API_X264_GLOBAL_OPTS := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_OPT_H}
- FF_API_OPT_H = LIBAVCODEC_VERSION_MAJOR < 54;
+{$ifndef FF_API_MPEGVIDEO_GLOBAL_OPTS}
+//{$define FF_API_MPEGVIDEO_GLOBAL_OPTS := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_THREAD_INIT}
- FF_API_THREAD_INIT = LIBAVCODEC_VERSION_MAJOR < 54;
+{$ifndef FF_API_LAME_GLOBAL_OPTS}
+//{$define FF_API_LAME_GLOBAL_OPTS := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_OLD_FF_PICT_TYPES}
- FF_API_OLD_FF_PICT_TYPES = LIBAVCODEC_VERSION_MAJOR < 54;
+{$ifndef FF_API_SNOW_GLOBAL_OPTS}
+//{$define FF_API_SNOW_GLOBAL_OPTS := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_FLAC_GLOBAL_OPTS}
- FF_API_FLAC_GLOBAL_OPTS = LIBAVCODEC_VERSION_MAJOR < 54;
+{$ifndef FF_API_MJPEG_GLOBAL_OPTS}
+//{$define FF_API_MJPEG_GLOBAL_OPTS := (LIBAVCODEC_VERSION_MAJOR < 54)}
{$endif}
-{$ifndef FF_API_GET_PIX_FMT_NAME}
- FF_API_GET_PIX_FMT_NAME = LIBAVCODEC_VERSION_MAJOR < 54;
+{$ifndef FF_API_GET_ALPHA_INFO}
+{$define FF_API_GET_ALPHA_INFO := (LIBAVCODEC_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_PARSE_FRAME}
+{$define FF_API_PARSE_FRAME := (LIBAVCODEC_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_INTERNAL_CONTEXT}
+{$define FF_API_INTERNAL_CONTEXT := (LIBAVCODEC_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_TIFFENC_COMPLEVEL}
+{$define FF_API_TIFFENC_COMPLEVEL := (LIBAVCODEC_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_DATA_POINTERS}
+{$define FF_API_DATA_POINTERS := (LIBAVCODEC_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_OLD_DECODE_AUDIO}
+{$define FF_API_OLD_DECODE_AUDIO := (LIBAVCODEC_VERSION_MAJOR < 55)}
+{$endif}
+{$ifndef FF_API_OLD_TIMECODE}
+{$define FF_API_OLD_TIMECODE := (LIBAVCODEC_VERSION_MAJOR < 54)}
+{$endif}
+
+{$ifndef FF_API_AVFRAME_AGE}
+{$define FF_API_AVFRAME_AGE := (LIBAVCODEC_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_OLD_ENCODE_AUDIO}
+{$define FF_API_OLD_ENCODE_AUDIO := (LIBAVCODEC_VERSION_MAJOR < 55)}
{$endif}
type
@@ -260,9 +286,6 @@ type
CODEC_ID_QDRAW,
CODEC_ID_VIXL,
CODEC_ID_QPEG,
-{$IF LIBAVCODEC_VERSION_MAJOR < 53}
- CODEC_ID_XVID,
-{$IFEND}
CODEC_ID_PNG,
CODEC_ID_PPM,
CODEC_ID_PBM,
@@ -300,7 +323,9 @@ type
CODEC_ID_TIERTEXSEQVIDEO,
CODEC_ID_TIFF,
CODEC_ID_GIF,
+{$IFDEF LIBAVCODEC_VERSION_MAJOR == 53}
CODEC_ID_FFH264,
+{$ENDIF}
CODEC_ID_DXA,
CODEC_ID_DNXHD,
CODEC_ID_THP,
@@ -318,8 +343,10 @@ type
CODEC_ID_INDEO5,
CODEC_ID_MIMIC,
CODEC_ID_RL2,
+{$IF LIBAVCODEC_VERSION_MAJOR = 53}
CODEC_ID_8SVX_EXP,
CODEC_ID_8SVX_FIB,
+{$ENDIF}
CODEC_ID_ESCAPE124,
CODEC_ID_DIRAC,
CODEC_ID_BFI,
@@ -356,10 +383,22 @@ type
CODEC_ID_PRORES,
CODEC_ID_JV,
CODEC_ID_DFA,
- CODEC_ID_8SVX_RAW,
-
+ CODEC_ID_WMV3IMAGE,
+ CODEC_ID_VC1IMAGE,
+{$IF LIBAVCODEC_VERSION_MAJOR = 53}
+ CODEC_ID_G723_1_DEPRECATED,
+ CODEC_ID_G729_DEPRECATED,
+{$ENDIF}
+ CODEC_ID_UTVIDEO_DEPRECATED,
+ CODEC_ID_BMV_VIDEO,
+ CODEC_ID_VBLE,
+ CODEC_ID_DXTORY,
+ CODEC_ID_V410,
+ CODEC_ID_XWD,
+ CODEC_ID_UTVIDEO = $0800,
+
//* various PCM "codecs" */
- CODEC_ID_PCM_S16LE= $10000,
+ CODEC_ID_PCM_S16LE = $10000,
CODEC_ID_PCM_S16BE,
CODEC_ID_PCM_U16LE,
CODEC_ID_PCM_U16BE,
@@ -386,9 +425,10 @@ type
CODEC_ID_PCM_BLURAY,
CODEC_ID_PCM_LXF,
CODEC_ID_S302M,
+ CODEC_ID_PCM_S8_PLANAR,
//* various ADPCM codecs */
- CODEC_ID_ADPCM_IMA_QT= $11000,
+ CODEC_ID_ADPCM_IMA_QT = $11000,
CODEC_ID_ADPCM_IMA_WAV,
CODEC_ID_ADPCM_IMA_DK3,
CODEC_ID_ADPCM_IMA_DK4,
@@ -417,23 +457,24 @@ type
CODEC_ID_ADPCM_EA_MAXIS_XA,
CODEC_ID_ADPCM_IMA_ISS,
CODEC_ID_ADPCM_G722,
+ CODEC_ID_ADPCM_IMA_APC,
//* AMR */
- CODEC_ID_AMR_NB= $12000,
+ CODEC_ID_AMR_NB = $12000,
CODEC_ID_AMR_WB,
//* RealAudio codecs*/
- CODEC_ID_RA_144= $13000,
+ CODEC_ID_RA_144 = $13000,
CODEC_ID_RA_288,
//* various DPCM codecs */
- CODEC_ID_ROQ_DPCM= $14000,
+ CODEC_ID_ROQ_DPCM = $14000,
CODEC_ID_INTERPLAY_DPCM,
CODEC_ID_XAN_DPCM,
CODEC_ID_SOL_DPCM,
//* audio codecs */
- CODEC_ID_MP2= $15000,
+ CODEC_ID_MP2 = $15000,
CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
CODEC_ID_AAC,
CODEC_ID_AC3,
@@ -445,8 +486,10 @@ type
CODEC_ID_MACE3,
CODEC_ID_MACE6,
CODEC_ID_VMDAUDIO,
+{$IF LIBAVCODEC_VERSION_MAJOR = 53}
CODEC_ID_SONIC,
CODEC_ID_SONIC_LS,
+{$ENDIF}
CODEC_ID_FLAC,
CODEC_ID_MP3ADU,
CODEC_ID_MP3ON4,
@@ -488,9 +531,18 @@ type
CODEC_ID_AAC_LATM,
CODEC_ID_QDMC,
CODEC_ID_CELT,
-
+//{$IF LIBAVCODEC_VERSION_MAJOR = 53}
+// CODEC_ID_G723_1_DEPRECATED,
+// CODEC_ID_G729_DEPRECATED,
+// CODEC_ID_8SVX_EXP,
+// CODEC_ID_8SVX_FIB,
+//{$ENDIF}
+ CODEC_ID_BMV_AUDIO,
+ CODEC_ID_G729 = $15800,
+ CODEC_ID_G723_1= $15801,
+
//* subtitle codecs */
- CODEC_ID_DVD_SUBTITLE= $17000,
+ CODEC_ID_DVD_SUBTITLE = $17000,
CODEC_ID_DVB_SUBTITLE,
CODEC_ID_TEXT, ///< raw UTF-8 text
CODEC_ID_XSUB,
@@ -499,16 +551,30 @@ type
CODEC_ID_HDMV_PGS_SUBTITLE,
CODEC_ID_DVB_TELETEXT,
CODEC_ID_SRT,
- CODEC_ID_MICRODVD,
//* other specific kind of codecs (generally used for attachments) */
- CODEC_ID_TTF= $18000,
-
- CODEC_ID_PROBE= $19000, ///< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it
+ CODEC_ID_TTF = $18000,
+
+ CODEC_ID_PROBE = $19000, ///< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it
- CODEC_ID_MPEG2TS= $20000, (**< _FAKE_ codec to indicate a raw MPEG-2 TS
+ CODEC_ID_MPEG2TS = $20000, (**< _FAKE_ codec to indicate a raw MPEG-2 TS
* stream (only used by libavformat) *)
- CODEC_ID_FFMETADATA= $21000 ///< Dummy codec for streams containing only metadata information.
+ CODEC_ID_MPEG4SYSTEMS = $20001, (**< _FAKE_ codec to indicate a MPEG-4 Systems
+ * stream (only used by libavformat) *)
+ CODEC_ID_FFMETADATA = $21000, ///< Dummy codec for streams containing only metadata information.
+
+ CODEC_ID_G2M = $0047324D,
+ CODEC_ID_IDF = $00494446,
+ CODEC_ID_8SVX_RAW = $38535658,
+ CODEC_ID_AVRP = $41565250,
+ CODEC_ID_BINTEXT = $42545854,
+ CODEC_ID_ESCAPE130 = $45313330,
+ CODEC_ID_FFWAVESYNTH = $46465753,
+ CODEC_ID_V308 = $56333038,
+ CODEC_ID_XBIN = $5842494E,
+ CODEC_ID_Y41P = $59343150,
+ CODEC_ID_YUV4 = $59555634,
+ CODEC_ID_MICRODVD = $6D445644
);
type
@@ -523,7 +589,7 @@ const
CODEC_TYPE_ATTACHMENT = AVMEDIA_TYPE_ATTACHMENT;
CODEC_TYPE_NB = AVMEDIA_TYPE_NB;
-{$IF FF_API_OLD_AUDIOCONVERT}
+{$IFDEF FF_API_OLD_AUDIOCONVERT}
{$I libavcodec/audioconvert.pas}
@@ -574,8 +640,10 @@ const
CH_LAYOUT_STEREO_DOWNMIX = AV_CH_LAYOUT_STEREO_DOWNMIX;
{$IFEND}
+{$IFDEF FF_API_OLD_DECODE_AUDIO}
{* in bytes *}
AVCODEC_MAX_AUDIO_FRAME_SIZE = 192000; // 1 second of 48khz 32bit audio
+{$ENDIF}
{**
* Required number of additionally allocated bytes at the end of the input bitstream for decoding.
@@ -584,7 +652,7 @@ const
* Note: If the first 23 bits of the additional bytes are not 0, then damaged
* MPEG bitstreams could cause overread and segfault.
*}
- FF_INPUT_BUFFER_PADDING_SIZE = 8;
+ FF_INPUT_BUFFER_PADDING_SIZE = 16;
{**
* minimum encoding buffer size.
@@ -637,6 +705,7 @@ type
AVCOL_TRC_UNSPECIFIED = 2,
AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM
AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG
+ AVCOL_SPC_SMPTE240M = 7,
AVCOL_TRC_NB ///< Not part of ABI
);
@@ -647,7 +716,8 @@ type
AVCOL_SPC_FCC = 4,
AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above
- AVCOL_SPC_SMPTE240M = 7,
+ AVCOL_SPC_SMPTE240M_ = 7,
+ AVCOL_SPC_YCGCO = 8,
AVCOL_SPC_NB ///< Not part of ABI
);
@@ -674,7 +744,7 @@ type
AVCHROMA_LOC_NB ///< Not part of ABI
);
-{$IF FF_API_FLAC_GLOBAL_OPTS}
+{$IFDEF FF_API_FLAC_GLOBAL_OPTS}
(**
* LPC analysis type
*)
@@ -759,6 +829,30 @@ const
CODEC_FLAG2_STRICT_GOP = $00000002; ///< strictly enforce GOP size
CODEC_FLAG2_NO_OUTPUT = $00000004; ///< skip bitstream encoding
CODEC_FLAG2_LOCAL_HEADER = $00000008; ///< place global headers at every keyframe instead of in extradata
+ CODEC_FLAG2_SKIP_RD = $00004000; ///< RD optimal MB level residual skipping
+ CODEC_FLAG2_CHUNKS = $00008000; ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries.
+ CODEC_FLAG2_SHOW_ALL = $00400000; ///< Show all frames before the first keyframe
+(**
+ * @defgroup deprecated_flags Deprecated codec flags
+ * Use corresponding private codec options instead.
+ * @{
+ *)
+{$IFDEF FF_API_MPEGVIDEO_GLOBAL_OPTS}
+ CODEC_FLAG_OBMC = $00000001; ///< OBMC
+ CODEC_FLAG_H263P_AIV = $00000008; ///< H.263 alternative inter VLC
+ CODEC_FLAG_PART 0x0080 ///< Use data partitioning.
+ CODEC_FLAG_ALT_SCAN = $00100000; ///< Use alternate scan.
+ CODEC_FLAG_H263P_UMV = $02000000; ///< unlimited motion vector
+ CODEC_FLAG_H263P_SLICE_STRUCT = $10000000;
+ CODEC_FLAG_SVCD_SCAN_OFFSET = $40000000; ///< Will reserve space for SVCD scan offset user data.
+ CODEC_FLAG2_INTRA_VLC = $00000800; ///< Use MPEG-2 intra VLC table.
+ CODEC_FLAG2_DROP_FRAME_TIMECODE = $00002000; ///< timecode is in drop frame format.
+ CODEC_FLAG2_NON_LINEAR_QUANT = $00010000; ///< Use MPEG-2 nonlinear quantizer.
+{$ENDIF}
+{$IFDEF FF_API_MJPEG_GLOBAL_OPTS}
+ CODEC_FLAG_EXTERN_HUFF = $1000; ///< Use external Huffman table (for MJPEG).
+{$ENDIF}
+{$IFDEF FF_API_X264_GLOBAL_OPTS}
CODEC_FLAG2_BPYRAMID = $00000010; ///< H.264 allow b-frames to be used as references
CODEC_FLAG2_WPRED = $00000020; ///< H.264 weighted biprediction for b-frames
CODEC_FLAG2_MIXED_REFS = $00000040; ///< H.264 multiple references per partition
@@ -766,18 +860,21 @@ const
CODEC_FLAG2_FASTPSKIP = $00000100; ///< H.264 fast pskip
CODEC_FLAG2_AUD = $00000200; ///< H.264 access unit delimiters
CODEC_FLAG2_BRDO = $00000400; ///< b-frame rate-distortion optimization
- CODEC_FLAG2_INTRA_VLC = $00000800; ///< use MPEG-2 intra VLC table
- CODEC_FLAG2_MEMC_ONLY = $00001000; ///< only do ME/MC (I frames -> ref, P frame -> ME+MC)
- CODEC_FLAG2_DROP_FRAME_TIMECODE = $00002000; ///< timecode is in drop frame format.
- CODEC_FLAG2_SKIP_RD = $00004000; ///< RD optimal MB level residual skipping
- CODEC_FLAG2_CHUNKS = $00008000; ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries.
- CODEC_FLAG2_NON_LINEAR_QUANT = $00010000; ///< Use MPEG-2 nonlinear quantizer.
- CODEC_FLAG2_BIT_RESERVOIR = $00020000; ///< Use a bit reservoir when encoding if possible
CODEC_FLAG2_MBTREE = $00040000; ///< Use macroblock tree ratecontrol (x264 only)
CODEC_FLAG2_PSY = $00080000; ///< Use psycho visual optimizations.
CODEC_FLAG2_SSIM = $00100000; ///< Compute SSIM during encoding, error[] values are undefined.
CODEC_FLAG2_INTRA_REFRESH = $00200000; ///< Use periodic insertion of intra blocks instead of keyframes.
-
+{$ENDIF}
+{$IFDEF FF_API_SNOW_GLOBAL_OPTS}
+ CODEC_FLAG2_MEMC_ONLY = $00001000 ///< Only do ME/MC (I frames -> ref, P frame -> ME+MC).
+{$ENDIF}
+{$IFDEF FF_API_LAME_GLOBAL_OPTS}
+ CODEC_FLAG2_BIT_RESERVOIR = $00020000 ///< Use a bit reservoir when encoding if possible
+{$ENDIF}
+(**
+ * @}
+ *)
+
(* Unsupported options :
* Syntax Arithmetic coding (SAC)
* Reference Picture Selection
@@ -793,17 +890,38 @@ const
* assume the buffer was allocated by avcodec_default_get_buffer.
*)
CODEC_CAP_DR1 = $0002;
+{$IFDEF FF_API_PARSE_FRAME}
(* if 'parse_only' field is true, then avcodec_parse_frame() can be used *)
CODEC_CAP_PARSE_ONLY = $0004;
+{$ENDIF}
CODEC_CAP_TRUNCATED = $0008;
(* codec can export data for HW decoding (XvMC) *)
CODEC_CAP_HWACCEL = $0010;
- (**
- * codec has a non zero delay and needs to be feeded with NULL at the end to get the delayed data.
- * if this is not set, the codec is guranteed to never be feeded with NULL data
- *)
+(**
+ * Encoder or decoder requires flushing with NULL input at the end in order to
+ * give the complete and correct output.
+ *
+ * NOTE: If this flag is not set, the codec is guaranteed to never be fed with
+ * with NULL data. The user can still send NULL data to the public encode
+ * or decode function, but libavcodec will not pass it along to the codec
+ * unless this flag is set.
+ *
+ * Decoders:
+ * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL,
+ * avpkt->size=0 at the end to get the delayed data until the decoder no longer
+ * returns frames.
+ *
+ * Encoders:
+ * The encoder needs to be fed with NULL data at the end of encoding until the
+ * encoder no longer returns data.
+ *
+ * NOTE: For encoders implementing the AVCodec.encode2() function, setting this
+ * flag also means that the encoder must set the pts and duration for
+ * each output packet. If this flag is not set, the pts and duration will
+ * be determined by libavcodec from the input frame.
+ *)
CODEC_CAP_DELAY = $0020;
(**
@@ -857,6 +975,18 @@ const
CODEC_CAP_SLICE_THREADS = $2000;
(**
+ * Codec supports changed parameters at any point.
+ *)
+ CODEC_CAP_PARAM_CHANGE = $4000;
+ (**
+ * Codec supports avctx->thread_count == 0 (auto).
+ *)
+ CODEC_CAP_AUTO_THREADS = $8000;
+ (**
+ * Audio encoder supports receiving a different number of samples in each call.
+ *)
+ CODEC_CAP_VARIABLE_FRAME_SIZE = $10000;
+ (**
* Codec is lossless.
*)
CODEC_CAP_LOSSLESS = $80000000;
@@ -921,7 +1051,7 @@ const
FF_BUFFER_TYPE_SHARED = 4; ///< buffer from somewhere else, don't dealloc image (data/base), all other tables are not shared
FF_BUFFER_TYPE_COPY = 8; ///< just a (modified) copy of some other buffer, don't dealloc anything.
-{$IF FF_API_OLD_FF_PICT_TYPES}
+{$IFDEF FF_API_OLD_FF_PICT_TYPES}
(* DEPRECATED, directly use the AV_PICTURE_TYPE_* enum values *)
FF_I_TYPE = 1; ///< Intra
FF_P_TYPE = 2; ///< Predicted
@@ -962,9 +1092,6 @@ const
FF_COMPLIANCE_VERY_STRICT = 2; ///< strictly conform to an older more strict version of the spec or reference software
FF_COMPLIANCE_STRICT = 1; ///< strictly conform to all the things in the spec no matter what consequences
FF_COMPLIANCE_NORMAL = 0;
-{$IF FF_API_INOFFICIAL}
- FF_COMPLIANCE_INOFFICIAL = -1; ///< Allow inofficial extensions
-{$IFEND}
FF_COMPLIANCE_UNOFFICIAL = -1; ///< Allow unofficial extensions
FF_COMPLIANCE_EXPERIMENTAL = -2; ///< Allow nonstandardized experimental things.
@@ -972,6 +1099,7 @@ const
FF_ER_COMPLIANT = 2;
FF_ER_AGGRESSIVE = 3;
FF_ER_VERY_AGGRESSIVE = 4;
+ FF_ER_EXPLODE = 5;
FF_DCT_AUTO = 0;
FF_DCT_FASTINT = 1;
@@ -1010,25 +1138,6 @@ const
FF_EC_GUESS_MVS = 1;
FF_EC_DEBLOCK = 2;
-{$IF FF_API_MM_FLAGS}
- FF_MM_FORCE = AV_CPU_FLAG_FORCE;
- FF_MM_MMX = AV_CPU_FLAG_MMX;
- FF_MM_3DNOW = AV_CPU_FLAG_3DNOW;
- FF_MM_MMXEXT = AV_CPU_FLAG_MMX2;
- FF_MM_MMX2 = AV_CPU_FLAG_MMX2;
- FF_MM_SSE = AV_CPU_FLAG_SSE;
- FF_MM_SSE2 = AV_CPU_FLAG_SSE2;
- FF_MM_SSE2SLOW = AV_CPU_FLAG_SSE2SLOW;
- FF_MM_3DNOWEXT = AV_CPU_FLAG_3DNOWEXT;
- FF_MM_SSE3 = AV_CPU_FLAG_SSE3;
- FF_MM_SSE3SLOW = AV_CPU_FLAG_SSE3SLOW;
- FF_MM_SSSE3 = AV_CPU_FLAG_SSSE3;
- FF_MM_SSE4 = AV_CPU_FLAG_SSE4;
- FF_MM_SSE42 = AV_CPU_FLAG_SSE42;
- FF_MM_IWMMXT = AV_CPU_FLAG_IWMMXT;
- FF_MM_ALTIVEC = AV_CPU_FLAG_ALTIVEC;
-{$IFEND}
-
FF_PRED_LEFT = 0;
FF_PRED_PLANE = 1;
FF_PRED_MEDIAN = 2;
@@ -1095,7 +1204,7 @@ const
FF_MB_DECISION_BITS = 1; ///< chooses the one which needs the fewest bits
FF_MB_DECISION_RD = 2; ///< rate distortion
-{$IF FF_API_ANTIALIAS_ALGO}
+{$IFDEF FF_API_ANTIALIAS_ALGO}
FF_AA_AUTO = 0;
FF_AA_FASTINT = 1; //not implemented yet
FF_AA_INT = 2;
@@ -1141,6 +1250,23 @@ const
FF_PROFILE_VC1_COMPLEX = 2;
FF_PROFILE_VC1_ADVANCED = 3;
+ FF_PROFILE_MPEG4_SIMPLE = 0;
+ FF_PROFILE_MPEG4_SIMPLE_SCALABLE = 1;
+ FF_PROFILE_MPEG4_CORE = 2;
+ FF_PROFILE_MPEG4_MAIN = 3;
+ FF_PROFILE_MPEG4_N_BIT = 4;
+ FF_PROFILE_MPEG4_SCALABLE_TEXTURE = 5;
+ FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION = 6;
+ FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE = 7;
+ FF_PROFILE_MPEG4_HYBRID = 8;
+ FF_PROFILE_MPEG4_ADVANCED_REAL_TIME = 9;
+ FF_PROFILE_MPEG4_CORE_SCALABLE = 10;
+ FF_PROFILE_MPEG4_ADVANCED_CODING = 11;
+ FF_PROFILE_MPEG4_ADVANCED_CORE = 12;
+ FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE = 13;
+ FF_PROFILE_MPEG4_SIMPLE_STUDIO = 14;
+ FF_PROFILE_MPEG4_ADVANCED_SIMPLE = 15;
+
FF_LEVEL_UNKNOWN = -99;
X264_PART_I4X4 = $001; (* Analyse i4x4 *)
@@ -1151,13 +1277,35 @@ const
FF_COMPRESSION_DEFAULT = -1;
- FF_THREAD_FRAME = 1; //< Decode more than one frame at once
- FF_THREAD_SLICE = 2; //< Decode more than one part of a single frame at once
+ FF_THREAD_FRAME = 1; ///< Decode more than one frame at once
+ FF_THREAD_SLICE = 2; ///< Decode more than one part of a single frame at once
+
+ AV_EF_CRCCHECK = 1;
+ AV_EF_BITSTREAM = 2;
+ AV_EF_BUFFER = 4;
+ AV_EF_EXPLODE = 8;
+
+ AV_EF_CAREFUL = 65536;
+ AV_EF_COMPLIANT = 131072;
+ AV_EF_AGGRESSIVE = 262144;
AVPALETTE_SIZE = 1024;
AVPALETTE_COUNT = 256;
type
+ AVPacketSideDataType = (
+ AV_PKT_DATA_PALETTE,
+ AV_PKT_DATA_NEW_EXTRADATA,
+ AV_PKT_DATA_PARAM_CHANGE
+ );
+
+ TAVPacketSideDataType = record
+ data: PByte;
+ size: cint;
+ type_: AVPacketSideDataType;
+ end;
+ PAVPacketSideDataType = ^TAVPacketSideDataType;
+
PAVPacket = ^TAVPacket;
TAVPacket = record
(*
@@ -1179,7 +1327,16 @@ type
data: PByteArray;
size: cint;
stream_index: cint;
+ (**
+ * A combination of AV_PKT_FLAG values
+ *)
flags: cint;
+ (**
+ * Additional packet data that can be provided by the container.
+ * Packet can contain several types of side information.
+ *)
+ side_data: PAVPacketSideDataType;
+ side_data_elems: cint;
(*
* Duration of this packet in AVStream->time_base units, 0 if unknown.
* Equals next_pts - this_pts in presentation order.
@@ -1209,40 +1366,67 @@ type
end; {TAVPacket}
const
- AV_PKT_FLAG_KEY = $0001;
-{$IF LIBAVCODEC_VERSION_MAJOR < 53}
- PKT_FLAG_KEY = AV_PKT_FLAG_KEY;
-{$IFEND}
-
+ AV_PKT_FLAG_KEY = $0001; ///< The packet contains a keyframe
+ AV_PKT_FLAG_CORRUPT = $0002; ///< The packet content is corrupted
+
+{$IFDEF FF_API_DATA_POINTERS}
+ AV_NUM_DATA_POINTERS = 4;
+{$ELSE}
+ AV_NUM_DATA_POINTERS = 8;
+{$ENDIF}
+
+(**
+ * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
+ * u32le param_flags
+ * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT)
+ * s32le channel_count
+ * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT)
+ * u64le channel_layout
+ * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE)
+ * s32le sample_rate
+ * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS)
+ * s32le width
+ * s32le height
+ *)
+
+type
+ AVSideDataParamChangeFlags = (
+ AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = $0001,
+ AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = $0002,
+ AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = $0004,
+ AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = $0008
+ );
+
type
PAVCodecContext = ^TAVCodecContext;
(**
* Audio Video Frame.
- * New fields can be added to the end of FF_COMMON_FRAME with minor version
- * bumps.
- * Removal, reordering and changes to existing fields require a major
- * version bump. No fields should be added into AVFrame before or after
- * FF_COMMON_FRAME!
- * sizeof(AVFrame) must not be used outside libav*.
- *)
+ * New fields can be added to the end of AVFRAME with minor version
+ * bumps. Similarly fields that are marked as to be only accessed by
+ * av_opt_ptr() can be reordered. This allows 2 forks to add fields
+ * without breaking compatibility with each other.
+ * Removal, reordering and changes in the remaining cases require
+ * a major version bump.
+ * sizeof(AVFrame) must not be used outside libavcodec.
+ x *)
PAVFrame = ^TAVFrame;
TAVFrame = record
(**
- * pointer to the picture planes.
+ * pointer to the picture/channel planes.
* This might be different from the first allocated byte
- * - encoding:
- * - decoding:
+ * - encoding: Set by user
+ * - decoding: set by AVCodecContext.get_buffer()
*)
- data: array [0..3] of pbyte;
- linesize: array [0..3] of cint;
+ data: array [0..AV_NUM_DATA_POINTERS - 1] of pbyte;
+ linesize: array [0..AV_NUM_DATA_POINTERS - 1] of cint;
(**
* pointer to the first allocated byte of the picture. Can be used in get_buffer/release_buffer.
* This isn't used by libavcodec unless the default get/release_buffer() is used.
* - encoding:
* - decoding:
*)
- base: array [0..3] of pbyte;
+ base: array [0..AV_NUM_DATA_POINTERS - 1] of pbyte;
(**
* 1 -> keyframe, 0-> not
* - encoding: Set by libavcodec.
@@ -1282,13 +1466,12 @@ type
*)
quality: cint;
+{$IFDEF FF_API_AVFRAME_AGE}
(**
- * buffer age (1->was last buffer and dint change, 2->..., ...).
- * Set to INT_MAX if the buffer has not been used yet.
- * - encoding: unused
- * - decoding: MUST be set by get_buffer().
+ * @deprecated unused
*)
age: cint;
+{$ENDIF}
(**
* is this picture used as reference
@@ -1365,7 +1548,7 @@ type
* - encoding: Set by libavcodec. if flags&CODEC_FLAG_PSNR.
* - decoding: unused
*)
- error: array [0..3] of cuint64;
+ error: array [0..AV_NUM_DATA_POINTERS - 1] of cuint64;
(**
* type of the buffer (to keep track of who has to deallocate data[*])
@@ -1463,56 +1646,69 @@ type
* - encoding: unused
* - decoding: Read by user.
*)
- pkt_pts: cint64;
+ pkt_pts: cint64;
(**
* dts from the last AVPacket that has been input into the decoder
* - encoding: unused
* - decoding: Read by user.
*)
- pkt_dts: cint64;
+ pkt_dts: cint64;
(**
* the AVCodecContext which ff_thread_get_buffer() was last called on
* - encoding: Set by libavcodec.
* - decoding: Set by libavcodec.
*)
- owner: PAVCodecContext;
+ owner: PAVCodecContext;
(**
* used by multithreading to store frame-specific info
* - encoding: Set by libavcodec.
* - decoding: Set by libavcodec.
*)
- thread_opaque: pointer;
+ thread_opaque: pointer;
(**
- * frame timestamp estimated using various heuristics, in stream time base
+ * number of audio samples (per channel) described by this frame
* - encoding: unused
- * - decoding: set by libavcodec, read by user.
+ * - decoding: Set by libavcodec
*)
- best_effort_timestamp: cint64;
+ nb_samples: cint;
(**
- * reordered pos from the last AVPacket that has been input into the decoder
- * - encoding: unused
- * - decoding: Read by user.
+ * pointers to the data planes/channels.
+ *
+ * For video, this should simply point to data[].
+ *
+ * For planar audio, each channel has a separate data pointer, and
+ * linesize[0] contains the size of each channel buffer.
+ * For packed audio, there is just one data pointer, and linesize[0]
+ * contains the total size of the buffer for all channels.
+ *
+ * Note: Both data and extended_data will always be set by get_buffer(),
+ * but for planar audio with more channels that can fit in data,
+ * extended_data must be used by the decoder in order to access all
+ * channels.
+ *
+ * encoding: unused
+ * decoding: set by AVCodecContext.get_buffer()
*)
- pkt_pos: cint64;
+ extended_data: PPointer;
(**
* reordered sample aspect ratio for the video frame, 0/1 if unknown\unspecified
* - encoding: unused
* - decoding: Read by user.
*)
- sample_aspect_ratio: TAVRational;
+ sample_aspect_ratio: TAVRational;
(**
* width and height of the video frame
* - encoding: unused
* - decoding: Read by user.
*)
- width, height: cint;
+ width, height: cint;
(**
* format of the frame, -1 if unknown or unset
@@ -1521,7 +1717,21 @@ type
* - encoding: unused
* - decoding: Read by user.
*)
- format: cint;
+ format: cint;
+
+ (**
+ * frame timestamp estimated using various heuristics, in stream time base
+ * - encoding: unused
+ * - decoding: set by libavcodec, read by user.
+ *)
+ best_effort_timestamp: cint64;
+
+ (**
+ * reordered pos from the last AVPacket that has been input into the decoder
+ * - encoding: unused
+ * - decoding: Read by user.
+ *)
+ pkt_pos: cint64;
end; {TAVFrame}
PAVClass = ^TAVClass;
@@ -1531,14 +1741,14 @@ type
PAVHWAccel = ^TAVHWAccel;
// int[4]
- PQuadIntArray = ^TQuadIntArray;
- TQuadIntArray = array [0..3] of cint;
+ PAVNDPArray = ^TAVNDPArray;
+ TAVNDPArray = array [0..AV_NUM_DATA_POINTERS - 1] of cint;
// int (*func)(struct AVCodecContext *c2, void *arg)
TExecuteFunc = function(c2: PAVCodecContext; arg: Pointer): cint; cdecl;
// int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr)
TExecute2Func = function(c2: PAVCodecContext; arg: Pointer; jobnr: cint; threadnr: cint): cint; cdecl;
-{$IF FF_API_PALETTE_CONTROL}
+{$IFDEF FF_API_PALETTE_CONTROL}
(**
* AVPaletteControl
* This structure defines a method for communicating palette changes
@@ -1561,17 +1771,28 @@ type
end; {deprecated;}
{$IFEND}
+ AVFieldOrder = (
+ AV_FIELD_UNKNOWN,
+ AV_FIELD_PROGRESSIVE,
+ AV_FIELD_TT, //< Top coded_first, top displayed first
+ AV_FIELD_BB, //< Bottom coded first, bottom displayed first
+ AV_FIELD_TB, //< Top coded first, bottom displayed first
+ AV_FIELD_BT //< Bottom coded first, top displayed first
+ );
+
(**
* main external API structure.
* New fields can be added to the end with minor version bumps.
* Removal, reordering and changes to existing fields require a major
* version bump.
+ * Please use AVOptions (av_opt* / av_set/get*()) to access these fields from user
+ * applications.
* sizeof(AVCodecContext) must not be used outside libav*.
*)
TAVCodecContext = record {720}
(**
* information on struct for av_log
- * - set by avcodec_alloc_context
+ * - set by avcodec_alloc_context3
*)
av_class: PAVClass;
(**
@@ -1600,7 +1821,7 @@ type
* Some codecs need additional format info. It is stored here.
* If any muxer uses this then ALL demuxers/parsers AND encoders for the
* specific codec MUST set it correctly otherwise stream copy breaks.
- * In general use of this field by muxers is not recommanded.
+ * In general use of this field by muxers is not recommended.
* - encoding: Set by libavcodec.
* - decoding: Set by libavcodec. (FIXME: Is this OK?)
*)
@@ -1665,16 +1886,6 @@ type
*)
pix_fmt: TAVPixelFormat;
-{$IF FF_API_RATE_EMU}
- (**
- * Frame rate emulation. If not zero, the lower layer (i.e. format handler)
- * has to read frames at native frame rate.
- * - encoding: Set by user.
- * - decoding: unused
- *)
- rate_emu: cint;
-{$IFEND}
-
(**
* If non NULL, 'draw_horiz_band' is called by the libavcodec
* decoder to draw a horizontal band. It improves cache usage. Not
@@ -1695,7 +1906,7 @@ type
* @param offset offset into the AVFrame.data from which the slice should be read
*)
draw_horiz_band: procedure (s: PAVCodecContext;
- src: {const} PAVFrame; offset: PQuadIntArray;
+ src: {const} PAVFrame; offset: PAVNDPArray;
y: cint; type_: cint; height: cint); cdecl;
(* audio only *)
@@ -1715,15 +1926,12 @@ type
*)
frame_size: cint;
frame_number: cint; ///< audio or video frame number
-{$IF LIBAVCODEC_MAX_VERSION_MAJOR < 53}
- real_pict_num: cint; ///< returns the real picture number of previous encoded frame
-{$IFEND}
(**
* Number of frames the decoded output will be delayed relative to
* the encoded input.
* - encoding: Set by libavcodec.
- * - decoding: unused
+ * - decoding: Set by libavcodec.
*)
delay: cint;
@@ -1774,16 +1982,6 @@ type
b_frame_strategy: cint;
-{$IF FF_API_HURRY_UP}
- (**
- * hurry up amount
- * - encoding: unused
- * - decoding: Set by user. 1-> Skip B-frames, 2-> Skip IDCT/dequant too, 5-> Skip everything except header
- * @deprecated Deprecated in favor of skip_idct and skip_frame.
- *)
- hurry_up: cint;
-{$IFEND}
-
codec: PAVCodec;
priv_data: pointer;
@@ -1839,7 +2037,7 @@ type
* A demuxer should set this to what is stored in the field used to identify the codec.
* If there are multiple such fields in a container then the demuxer should choose the one
* which maximizes the information about the used codec.
- * If the codec tag field in a container is larger then 32 bits then the demuxer should
+ * If the codec tag field in a container is larger than 32 bits then the demuxer should
* remap the longer ID to 32 bits with a table or other structure. Alternatively a new
* extra_codec_tag + size could be added but for this a clear advantage must be demonstrated
* first.
@@ -1890,6 +2088,7 @@ type
*)
b_quant_offset: cfloat;
+{$IFDEF FF_API_ER}
(**
* Error recognization; higher values will detect more errors but may
* misdetect some more or less valid parts as errors.
@@ -1897,15 +2096,59 @@ type
* - decoding: Set by user.
*)
error_recognition: cint;
+{$ENDIF}
(**
* Called at the beginning of each frame to get a buffer for it.
- * If pic.reference is set then the frame will be read later by libavcodec.
- * avcodec_align_dimensions2() should be used to find the required width and
- * height, as they normally need to be rounded up to the next multiple of 16.
+ *
+ * The function will set AVFrame.data[], AVFrame.linesize[].
+ * AVFrame.extended_data[] must also be set, but it should be the same as
+ * AVFrame.data[] except for planar audio with more channels than can fit
+ * in AVFrame.data[]. In that case, AVFrame.data[] shall still contain as
+ * many data pointers as it can hold.
+ *
* if CODEC_CAP_DR1 is not set then get_buffer() must call
* avcodec_default_get_buffer() instead of providing buffers allocated by
* some other means.
+ *
+ * AVFrame.data[] should be 32- or 16-byte-aligned unless the CPU doesn't
+ * need it. avcodec_default_get_buffer() aligns the output buffer properly,
+ * but if get_buffer() is overridden then alignment considerations should
+ * be taken into account.
+ *
+ * @see avcodec_default_get_buffer()
+ *
+ * Video:
+ *
+ * If pic.reference is set then the frame will be read later by libavcodec.
+ * avcodec_align_dimensions2() should be used to find the required width and
+ * height, as they normally need to be rounded up to the next multiple of 16.
+ *
+ * it may be called from a different thread, but not from more than one at
+ * once. Does not need to be reentrant.
+ *
+ * @see release_buffer(), reget_buffer()
+ * @see avcodec_align_dimensions2()
+ *
+ * Audio:
+ *
+ * Decoders request a buffer of a particular size by setting
+ * AVFrame.nb_samples prior to calling get_buffer(). The decoder may,
+ * however, utilize only part of the buffer by setting AVFrame.nb_samples
+ * to a smaller value in the output frame.
+ *
+ * Decoders cannot use the buffer after returning from
+ * avcodec_decode_audio4(), so they will not call release_buffer(), as it
+ * is assumed to be released immediately upon return.
+ *
+ * As a convenience, av_samples_get_buffer_size() and
+ * av_samples_fill_arrays() in libavutil may be used by custom get_buffer()
+ * functions to find the required data size and to fill data pointers and
+ * linesize. In AVFrame.linesize, only linesize[0] may be set for audio
+ * since all planes must be the same size.
+ *
+ * @see av_samples_get_buffer_size(), av_samples_fill_arrays()
+ *
* - encoding: unused
* - decoding: Set by libavcodec, user can override.
*)
@@ -1934,9 +2177,15 @@ type
*)
block_align: cint;
- parse_only: cint; (* - decoding only: if true, only parsing is done
- (function avcodec_parse_frame()). The frame
- data is returned. Only MPEG codecs support this now. *)
+{$IFDEF FF_API_PARSE_FRAME}
+ (**
+ * If true, only parsing is done. The frame data is returned.
+ * Only MPEG audio decoders support this now.
+ * - encoding: unused
+ * - decoding: Set by user
+ *)
+ parse_only: cint; {deprecated}
+{$ENDIF}
(**
* 0-> h263 quant 1-> mpeg quant
@@ -2116,7 +2365,7 @@ type
* - encoding: Set by libavcodec.
* - decoding: Set by user.
*)
- bits_per_coded_sample: cint;
+ bits_per_coded_sample: cint;
(**
* prediction method (needed for huffyuv)
@@ -2160,23 +2409,7 @@ type
* - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR.
* - decoding: unused
*)
- error: array [0..3] of cuint64;
-
-{$IF FF_API_MB_Q}
- (**
- * minimum MB quantizer
- * - encoding: unused
- * - decoding: unused
- *)
- mb_qmin: cint; {deprecated}
-
- (**
- * maximum MB quantizer
- * - encoding: unused
- * - decoding: unused
- *)
- mb_qmax: cint; {deprecated}
-{$IFEND}
+ error: array [0..AV_NUM_DATA_POINTERS - 1] of cuint64;
(**
* motion estimation comparison function
@@ -2298,17 +2531,21 @@ type
*)
color_table_id: cint;
+{$IFDEF FF_API_INTERNAL_CONTEXT}
(**
* internal_buffer count
* Don't touch, used by libavcodec default_get_buffer().
+ * @deprecated this field was moved to an internal context
*)
internal_buffer_count: cint;
(**
* internal_buffers
* Don't touch, used by libavcodec default_get_buffer().
+ * @deprecated this field was moved to an internal context
*)
internal_buffer: pointer;
+{$ENDIF}
(**
* Global quality for codecs which cannot change it per frame.
@@ -2332,14 +2569,12 @@ type
*)
context_model: cint;
- {
(**
*
* - encoding: unused
* - decoding: Set by user.
*)
- realloc: function (s: PAVCodecContext; buf: Pbyte; buf_size: cint): Pbyte; cdecl;
- }
+// realloc: function (s: PAVCodecContext; buf: Pbyte; buf_size: cint): Pbyte; cdecl;
(**
* slice flags
@@ -2382,7 +2617,7 @@ type
* - encoding: unused
* - decoding: Set by user, will be converted to uppercase by libavcodec during init.
*)
- stream_codec_tag: array [0..3] of AnsiChar; //cuint;
+ stream_codec_tag: cuint;
(**
* scene change detection threshold
@@ -2406,7 +2641,7 @@ type
*)
lmax: cint;
-{$IF FF_API_PALETTE_CONTROL}
+{$IFDEF FF_API_PALETTE_CONTROL}
(**
* palette control structure
* - encoding: ??? (no palette-enabled encoder yet)
@@ -2464,7 +2699,7 @@ type
*)
error_rate: cint;
-{$IF FF_API_ANTIALIAS_ALGO}
+{$IFDEF FF_API_ANTIALIAS_ALGO}
(**
* MP3 antialias algorithm, see FF_AA_* below.
* - encoding: unused
@@ -2528,53 +2763,52 @@ type
* - encoding: Set by user.
* - decoding: unused
*)
- intra_dc_precision: cint;
+ intra_dc_precision: cint;
(**
* noise vs. sse weight for the nsse comparsion function
* - encoding: Set by user.
* - decoding: unused
*)
- nsse_weight: cint;
+ nsse_weight: cint;
(**
* Number of macroblock rows at the top which are skipped.
* - encoding: unused
* - decoding: Set by user.
*)
- skip_top: cint;
+ skip_top: cint;
(**
* Number of macroblock rows at the bottom which are skipped.
* - encoding: unused
* - decoding: Set by user.
*)
- skip_bottom: cint;
+ skip_bottom: cint;
(**
* profile
* - encoding: Set by user.
* - decoding: Set by libavcodec.
*)
- profile: cint;
+ profile: cint;
(**
* level
* - encoding: Set by user.
* - decoding: Set by libavcodec.
*)
- level: cint;
+ level: cint;
(**
* low resolution decoding, 1-> 1/2 size, 2->1/4 size
* - encoding: unused
* - decoding: Set by user.
*)
- lowres: cint;
+ lowres: cint;
(**
- * Bitstream width / height, may be different from width/height if lowres
- * or other things are used.
+ * Bitstream width / height, may be different from width/height if lowres enabled.
* - encoding: unused
* - decoding: Set by user before init if known. Codec should override / dynamically change if needed.
*)
@@ -2672,10 +2906,12 @@ type
*)
brd_scale: cint;
+{$IFDEF FF_API_X264_GLOBAL_OPTS}
(**
* constant rate factor - quality-based VBR - values ~correspond to qps
* - encoding: Set by user.
* - decoding: unused
+ * @deprecated use 'crf' libx264 private option
*)
crf: cfloat;
@@ -2683,8 +2919,10 @@ type
* constant quantization parameter rate control method
* - encoding: Set by user.
* - decoding: unused
+ * @deprecated use 'cqp' libx264 private option
*)
cqp: cint;
+{$ENDIF}
(**
* minimum GOP size
@@ -2707,12 +2945,14 @@ type
*)
chromaoffset: cint;
+{$IFDEF FF_API_X264_GLOBAL_OPTS}
(**
* Influences how often B-frames are used.
* - encoding: Set by user.
* - decoding: unused
*)
bframebias: cint;
+{$ENDIF}
(**
* trellis RD quantization
@@ -2721,6 +2961,7 @@ type
*)
trellis: cint;
+{$IFDEF FF_API_X264_GLOBAL_OPTS}
(**
* Reduce fluctuations in qp (before curve compression).
* - encoding: Set by user.
@@ -2757,6 +2998,7 @@ type
* - decoding: unused
*)
directpred: cint;
+{$ENDIF}
(**
* Audio cutoff bandwidth (0 means "automatic")
@@ -2781,7 +3023,7 @@ type
mv0_threshold: cint;
(**
- * Adjusts sensitivity of b_frame_strategy 1.
+ * Adjust sensitivity of b_frame_strategy 1.
* - encoding: Set by user.
* - decoding: unused
*)
@@ -2793,36 +3035,32 @@ type
*)
compression_level: cint;
-{$IF FF_API_USE_LPC}
(**
- * Sets whether to use LPC mode - used by FLAC encoder.
* - encoding: Set by user.
* - decoding: unused
- * @deprecated Deprecated in favor of lpc_type and lpc_passes.
*)
- use_lpc: cint;
+ min_prediction_order: cint;
(**
- * LPC coefficient precision - used by FLAC encoder
* - encoding: Set by user.
* - decoding: unused
*)
- lpc_coeff_precision: cint;
-{$IFEND}
+ max_prediction_order: cint;
+{$IFDEF FF_API_FLAC_GLOBAL_OPTS}
(**
- * - encoding: Set by user.
- * - decoding: unused
+ * @name FLAC options
+ * @deprecated Use FLAC encoder private options instead.
+ * @{
*)
- min_prediction_order: cint;
(**
+ * LPC coefficient precision - used by FLAC encoder
* - encoding: Set by user.
* - decoding: unused
*)
- max_prediction_order: cint;
+ lpc_coeff_precision: cint; {deprecated}
-{$IF FF_API_FLAC_GLOBAL_OPTS}
(**
* search method for selecting prediction order
* - encoding: Set by user.
@@ -2850,7 +3088,7 @@ type
*)
timecode_frame_start: cint64;
-{$IF FF_API_REQUEST_CHANNELS}
+{$IFDEF FF_API_REQUEST_CHANNELS}
(**
* Decoder should decode to this many channels if it can (0 for default)
* - encoding: unused
@@ -2860,13 +3098,15 @@ type
request_channels: cint;
{$IFEND}
+{$IFDEF FF_API_DRC_SCALE}
(**
* Percentage of dynamic range compression to be applied by the decoder.
* The default value is 1.0, corresponding to full compression.
* - encoding: unused
* - decoding: Set by user.
*)
- drc_scale: cfloat;
+ drc_scale: cfloat; {deprecated}
+{$ENDIF}
(**
* opaque 64bit number (generally a PTS) that will be reordered and
@@ -2878,7 +3118,6 @@ type
(**
* Bits per sample/pixel of internal libavcodec pixel/sample format.
- * This field is applicable only when sample_fmt is SAMPLE_FMT_S32.
* - encoding: set by user.
* - decoding: set by libavcodec.
*)
@@ -2889,14 +3128,14 @@ type
* - encoding: set by user.
* - decoding: set by libavcodec.
*)
- channel_layout: cint64;
+ channel_layout: cuint64;
(**
* Request decoder to use this channel layout if it can (0 for default)
* - encoding: unused
* - decoding: Set by user.
*)
- request_channel_layout: cint64;
+ request_channel_layout: cuint64;
(**
* Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
@@ -2995,6 +3234,7 @@ type
*)
execute2: function (c: PAVCodecContext; func: TExecute2Func; arg2: Pointer; ret: Pcint; count: cint): cint; cdecl;
+{$IFDEF FF_API_X264_GLOBAL_OPTS}
(**
* explicit P-frame weighted prediction analysis method
* 0: off
@@ -3003,7 +3243,7 @@ type
* - encoding: Set by user.
* - decoding: unused
*)
- weighted_p_pred: cint;
+ weighted_p_pred: cint; {deprecated}
(**
* AQ mode
@@ -3013,7 +3253,7 @@ type
* - encoding: Set by user
* - decoding: unused
*)
- aq_mode: cint;
+ aq_mode: cint; {deprecated}
(**
* AQ strength
@@ -3021,7 +3261,7 @@ type
* - encoding: Set by user
* - decoding: unused
*)
- aq_strength: cfloat;
+ aq_strength: cfloat; {deprecated}
(**
* PSY RD
@@ -3029,7 +3269,7 @@ type
* - encoding: Set by user
* - decoding: unused
*)
- psy_rd: cfloat;
+ psy_rd: cfloat; {deprecated}
(**
* PSY trellis
@@ -3037,7 +3277,7 @@ type
* - encoding: Set by user
* - decoding: unused
*)
- psy_trellis: cfloat;
+ psy_trellis: cfloat; {deprecated}
(**
* RC lookahead
@@ -3045,7 +3285,7 @@ type
* - encoding: Set by user
* - decoding: unused
*)
- rc_lookahead: cint;
+ rc_lookahead: cint; {deprecated}
(**
* Constant rate factor maximum
@@ -3054,13 +3294,14 @@ type
* - encoding: Set by user.
* - decoding: unused
*)
- crf_max: cfloat;
+ crf_max: cfloat; {deprecated}
+{$ENDIF}
log_level_offset: cint;
-{$IF FF_API_FLAC_GLOBAL_OPTS}
+{$IFDEF FF_API_FLAC_GLOBAL_OPTS}
(**
- * Determines which LPC analysis algorithm to use.
+ * Determine which LPC analysis algorithm to use.
* - encoding: Set by user
* - decoding: unused
*)
@@ -3088,8 +3329,8 @@ type
* For SUBTITLE_ASS subtitle type, it should contain the whole ASS
* [Script Info] and [V4+ Styles] section, plus the [Events] line and
* the Format line following. It shouldn't include any Dialogue line.
- * - encoding: Set/allocated/freed by user (before avcodec_open())
- * - decoding: Set/allocated/freed by libavcodec (by avcodec_open())
+ * - encoding: Set/allocated/freed by user (before avcodec_open2())
+ * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2())
*)
subtitle_header: Pcuint8;
subtitle_header_size: cint;
@@ -3103,6 +3344,7 @@ type
*)
pkt: PAVPacket;
+{$IFDEF FF_API_INTERNAL_CONTEXT}
(**
* Whether this is a copy of the context which had init() called on it.
* This is used by multithreading - shared tables and picture pointers
@@ -3110,7 +3352,8 @@ type
* - encoding: Set by libavcodec.
* - decoding: Set by libavcodec.
*)
- is_copy: cint;
+ is_copy: cint; {deprecated}
+{$ENDIF}
(**
* Which multithreading methods to use.
@@ -3163,6 +3406,27 @@ type
request_sample_fmt: TAVSampleFormat;
(**
+ * Error recognition; may misdetect some more or less valid parts as errors.
+ * - encoding: unused
+ * - decoding: Set by user.
+ *)
+ err_recognition: cint;
+
+ (**
+ * Private context used for internal data.
+ *
+ * Unlike priv_data, this is not codec-specific. It is used in general
+ * libavcodec functions.
+ *)
+ internal: pointer;
+
+ (** Field order
+ * - encoding: set by libavcodec
+ * - decoding: Set by libavcodec
+ *)
+ field_order: AVFieldOrder;
+
+ (**
* Current statistics for PTS correction.
* - decoding: maintained and used by libavcodec, not intended to be used by user apps
* - encoding: unused
@@ -3215,13 +3479,13 @@ type
long_name: {const} PAnsiChar;
supported_samplerates: {const} PCint; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
sample_fmts: {const} PAVSampleFormatArray; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
- channel_layouts: {const} PCint64; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
+ channel_layouts: {const} PCuint64; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
max_lowres: byte; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
priv_class: {const} PAVClass; ///< AVClass for the private context
profiles: {const} PAVProfile; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}
(**
- * @defgroup framethreading Frame-level threading support functions.
+ * @name Frame-level threading support functions
* @{
*)
(**
@@ -3239,6 +3503,29 @@ type
*)
update_thread_context: function (dst: PAVCodecContext; src: {const} PAVCodecContext): cint; cdecl;
(** @} *)
+
+ (**
+ * Private codec-specific defaults.
+ *)
+ defaults: {const} pointer;
+
+ (**
+ * Initialize codec static data, called from avcodec_register().
+ *)
+ init_static_data: procedure (codec: PAVCodec); cdecl;
+
+ (**
+ * Encode data to an AVPacket.
+ *
+ * @param avctx codec context
+ * @param avpkt output AVPacket (may contain a user-provided buffer)
+ * @param[in] frame AVFrame containing the raw data to be encoded
+ * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a
+ * non-empty packet was returned in avpkt.
+ * @return 0 on success, negative error code on failure
+ *)
+ encode2: function (avctx: PAVCodecContext; avpkt: PAVPacket; frame: {const} PAVFrame;
+ got_packet_ptr: Pcint): cint; cdecl;
end; {TAVCodec}
(**
@@ -3341,8 +3628,8 @@ type
*)
PAVPicture = ^TAVPicture;
TAVPicture = record
- data: array [0..3] of PByteArray;
- linesize: array [0..3] of cint; ///< number of bytes per line
+ data: array [0..AV_NUM_DATA_POINTERS] of PByteArray;
+ linesize: array [0..AV_NUM_DATA_POINTERS] of cint; ///< number of bytes per line
end; {TAVPicture}
TAVSubtitleType = (
@@ -3457,21 +3744,42 @@ function av_dup_packet(pkt: PAVPacket): cint;
procedure av_free_packet(pkt: PAVPacket);
cdecl; external av__codec;
+(**
+ * Allocate new information of a packet.
+ *
+ * @param pkt packet
+ * @param type side information type
+ * @param size side information size
+ * @return pointer to fresh allocated data or NULL otherwise
+ *)
+function av_packet_new_side_data(pkt: PAVPacket; type_: AVPacketSideDataType;
+ size: cint): PByte;
+ cdecl; external av__codec;
+
+(**
+ * Get side information from packet.
+ *
+ * @param pkt packet
+ * @param type desired side information type
+ * @param size pointer for side information size to store (optional)
+ * @return pointer to data if present or NULL otherwise
+ *)
+function av_packet_get_side_data(pkt: PAVPacket; type_: AVPacketSideDataType;
+ size: Pcint): PByte;
+ cdecl; external av__codec;
+
+function av_packet_merge_side_data(pkt: PAVPacket): cint;
+ cdecl; external av__codec;
+
+function av_packet_split_side_data(pkt: PAVPacket): cint;
+ cdecl; external av__codec;
+
(* resample.c *)
type
PReSampleContext = pointer;
PAVResampleContext = pointer;
PImgReSampleContext = pointer;
-{$IF FF_API_AUDIO_OLD}
-(**
- * @deprecated Use av_audio_resample_init() instead.
- *)
-function audio_resample_init (output_channels: cint; input_channels: cint;
- output_rate: cint; input_rate: cint): PReSampleContext;
- cdecl; external av__codec; deprecated;
-{$IFEND}
-
(**
* Initialize audio resampling context.
*
@@ -3486,7 +3794,7 @@ function audio_resample_init (output_channels: cint; input_channels: cint;
* @param linear if 1 then the used FIR filter will be linearly interpolated
between the 2 closest, if 0 the closest will be used
* @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate
- * @return allocated ReSampleContext, NULL if error occured
+ * @return allocated ReSampleContext, NULL if error occurred
*)
function av_audio_resample_init(output_channels: cint; input_channels: cint;
output_rate: cint; input_rate: cint;
@@ -3600,7 +3908,7 @@ function avpicture_fill (picture: PAVPicture; ptr: pcuint8;
* The data is stored compactly, without any gaps for alignment or padding
* which may be applied by avpicture_fill().
*
- * \see avpicture_get_size()
+ * @see avpicture_get_size()
*
* @param[in] src AVPicture containing image data
* @param[in] pix_fmt The format in which the picture data is stored.
@@ -3633,7 +3941,14 @@ function avpicture_get_size (pix_fmt: TAVPixelFormat; width: cint; height: cint)
procedure avcodec_get_chroma_sub_sample (pix_fmt: TAVPixelFormat; var h_shift: cint; var v_shift: cint);
cdecl; external av__codec;
-{$IF FF_API_GET_PIX_FMT_NAME}
+(**
+ * Get the name of a codec.
+ * @return a static string identifying the codec; never NULL
+ *)
+function avcodec_get_name(id: TCodecID): PAnsiChar;
+ cdecl; external av__codec;
+
+{$IFDEF FF_API_GET_PIX_FMT_NAME}
(**
* Return the short name for a pixel format.
*
@@ -3647,23 +3962,6 @@ function avcodec_get_pix_fmt_name(pix_fmt: TAVPixelFormat): PAnsiChar;
procedure avcodec_set_dimensions(s: PAVCodecContext; width: cint; height: cint);
cdecl; external av__codec;
-{$IF LIBAVCODEC_MAX_VERSION_MAJOR < 53}
-(**
- * Return the pixel format corresponding to the name name.
- *
- * If there is no pixel format with name name, then looks for a
- * pixel format with the name corresponding to the native endian
- * format of name.
- * For example in a little-endian system, first looks for "gray16",
- * then for "gray16le".
- *
- * Finally if no pixel format has been found, returns PIX_FMT_NONE.*
- * @deprecated Deprecated in favor of av_get_pix_fmt().
- *)
-function avcodec_get_pix_fmt(name: {const} PAnsiChar): TAVPixelFormat;
- cdecl; external av__codec; deprecated;
-{$IFEND}
-
(**
* Return a value representing the fourCC code associated to the
* pixel format pix_fmt, or 0 if no associated fourCC code can be
@@ -3705,7 +4003,8 @@ const
* @param[in] dst_pix_fmt destination pixel format
* @param[in] src_pix_fmt source pixel format
* @param[in] has_alpha Whether the source pixel format alpha channel is used.
- * @return Combination of flags informing you what kind of losses will occur.
+ * @return Combination of flags informing you what kind of losses will occur
+ * (maximum loss for an invalid dst_pix_fmt).
*)
function avcodec_get_pix_fmt_loss (dst_pix_fmt: TAVPixelFormat; src_pix_fmt: TAVPixelFormat;
has_alpha: cint): cint;
@@ -3721,9 +4020,11 @@ function avcodec_get_pix_fmt_loss (dst_pix_fmt: TAVPixelFormat; src_pix_fmt: TAV
* The pixel formats from which it chooses one, are determined by the
* pix_fmt_mask parameter.
*
+ * Note, only the first 64 pixel formats will fit in pix_fmt_mask.
+ *
* @code
* src_pix_fmt = PIX_FMT_YUV420P;
- * pix_fmt_mask = (1 << PIX_FMT_YUV422P) || (1 << PIX_FMT_RGB24);
+ * pix_fmt_mask = (1 << PIX_FMT_YUV422P) | (1 << PIX_FMT_RGB24);
* dst_pix_fmt = avcodec_find_best_pix_fmt(pix_fmt_mask, src_pix_fmt, alpha, &loss);
* @endcode
*
@@ -3745,6 +4046,7 @@ procedure avcodec_pix_fmt_string (buf: PAnsiChar; buf_size: cint; pix_fmt: TAVPi
cdecl; external av__codec; deprecated;
{$IFEND}
+{$IFDEF FF_API_GET_ALPHA_INFO}
const
FF_ALPHA_TRANSP = $0001; {* image has some totally transparent pixels *}
FF_ALPHA_SEMI_TRANSP = $0002; {* image has some transparent pixels *}
@@ -3756,8 +4058,9 @@ const
function img_get_alpha_info (src: {const} PAVPicture;
pix_fmt: TAVPixelFormat;
width: cint;
- height: cint): cint;
+ height: cint): cint; {deprecated}
cdecl; external av__codec;
+{$ENDIF}
(* deinterlace a picture *)
(* deinterlace - if not supported return -1 *)
@@ -3796,29 +4099,22 @@ function avcodec_configuration(): PAnsiChar;
function avcodec_license(): PAnsiChar;
cdecl; external av__codec;
+{$IFDEF FF_API_AVCODEC_INIT}
(**
- * Initialize libavcodec.
- *
- * @warning This function must be called before any other libavcodec
- * function.
- *
- * @warning This function is not thread-safe.
+ * @deprecated this function is called automatically from avcodec_register()
+ * and avcodec_register_all(), there is no need to call it manually
*)
procedure avcodec_init();
cdecl; external av__codec;
-
-{$IF LIBAVCODEC_VERSION_MAJOR < 53}
-(**
- * @deprecated Deprecated in favor of avcodec_register().
- *)
-procedure register_avcodec(codec: PAVCodec);
- cdecl; external av__codec; deprecated;
{$IFEND}
(**
* Register the codec codec and initialize libavcodec.
*
- * @see avcodec_init(), avcodec_register_all()
+ * @warning either this function or avcodec_register_all() must be called
+ * before any other libavcodec functions.
+ *
+ * @see avcodec_register_all()
*)
procedure avcodec_register(codec: PAVCodec);
cdecl; external av__codec;
@@ -3871,24 +4167,35 @@ procedure avcodec_string(buf: PAnsiChar; buf_size: cint; enc: PAVCodecContext; e
function av_get_profile_name(codec: {const} PAVCodec; profile: cint): {const} PAnsiChar;
cdecl; external av__codec;
+{$IFDEF FF_API_ALLOC_CONTEXT}
(**
* Set the fields of the given AVCodecContext to default values.
*
* @param s The AVCodecContext of which the fields should be set to default values.
+ * @deprecated use avcodec_get_context_defaults3
*)
-procedure avcodec_get_context_defaults(s: PAVCodecContext);
+procedure avcodec_get_context_defaults(s: PAVCodecContext); {deprecated}
cdecl; external av__codec;
(** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
* we WILL change its arguments and name a few times! *)
-procedure avcodec_get_context_defaults2(s: PAVCodecContext; ctype: TAVMediaType);
+procedure avcodec_get_context_defaults2(s: PAVCodecContext; ctype: TAVMediaType); {deprecated}
cdecl; external av__codec;
+{$ENDIF}
-(** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
- * we WILL change its arguments and name a few times! *)
+(**
+ * Set the fields of the given AVCodecContext to default values corresponding
+ * to the given codec (defaults may be codec-dependent).
+ *
+ * Do not call this function if a non-NULL codec has been passed
+ * to avcodec_alloc_context3() that allocated this AVCodecContext.
+ * If codec is non-NULL, it is illegal to call avcodec_open2() with a
+ * different codec on this AVCodecContext.
+ *)
procedure avcodec_get_context_defaults3(s: PAVCodecContext; codec: PAVCodec);
cdecl; external av__codec;
+{$IFDEF FF_API_ALLOC_CONTEXT}
(**
* Allocate an AVCodecContext and sets it fields to default values. The
* resulting struct can be deallocated by simply calling av_free().
@@ -3897,26 +4204,37 @@ procedure avcodec_get_context_defaults3(s: PAVCodecContext; codec: PAVCodec);
* @see avcodec_get_context_defaults
*)
function avcodec_alloc_context(): PAVCodecContext;
- cdecl; external av__codec;
+ cdecl; external av__codec; deprecated;
(** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
* we WILL change its arguments and name a few times! *)
-function avcodec_alloc_context2(ctype: TAVMediaType): PAVCodecContext;
+function avcodec_alloc_context2(ctype: TAVMediaType): PAVCodecContext; {deprecated}
cdecl; external av__codec;
+{$ENDIF}
-(** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
- * we WILL change its arguments and name a few times! *)
+(**
+ * Allocate an AVCodecContext and set its fields to default values. The
+ * resulting struct can be deallocated by calling avcodec_close() on it followed
+ * by av_free().
+ *
+ * @param codec if non-NULL, allocate private data and initialize defaults
+ * for the given codec. It is illegal to then call avcodec_open2()
+ * with a different codec.
+ *
+ * @return An AVCodecContext filled with default values or NULL on failure.
+ * @see avcodec_get_context_defaults
+ *)
function avcodec_alloc_context3(codec: PAVCodec): PAVCodecContext;
cdecl; external av__codec;
(**
* Copy the settings of the source AVCodecContext into the destination
* AVCodecContext. The resulting destination codec context will be
- * unopened, i.e. you are required to call avcodec_open() before you
+ * unopened, i.e. you are required to call avcodec_open2() before you
* can use this AVCodecContext to decode/encode video/audio data.
*
* @param dest target codec context, should be initialized with
- * avcodec_alloc_context(), but otherwise uninitialized
+ * avcodec_alloc_context3(), but otherwise uninitialized
* @param src source codec context
* @return AVERROR() on error (e.g. memory allocation error), 0 on success
*)
@@ -3980,28 +4298,18 @@ procedure avcodec_align_dimensions(s: PAVCodecContext; width: PCint; height: PCi
* according to avcodec_get_edge_width() before.
*)
procedure avcodec_align_dimensions2(s: PAVCodecContext; width: PCint; height: PCint;
- linesize_align: PQuadIntArray);
+ linesize_align: PAVNDPArray);
cdecl; external av__codec;
-{$IF LIBAVCODEC_VERSION_MAJOR < 53}
-(**
- * @deprecated Deprecated in favor of av_check_image_size().
- *)
-function avcodec_check_dimensions(av_log_ctx: pointer; w: cuint; h: cuint): cint;
- cdecl; external av__codec; deprecated;
-{$IFEND}
-
function avcodec_default_get_format(s: PAVCodecContext; fmt: {const} PAVPixelFormat): TAVPixelFormat;
cdecl; external av__codec;
-{$IF FF_API_THREAD_INIT}
+{$IFDEF FF_API_THREAD_INIT}
(**
- * @deprecated Set s->thread_count before calling avcodec_open() instead of calling this.
+ * @deprecated Set s->thread_count before calling avcodec_open2() instead of calling this.
*)
function avcodec_thread_init(s: PAVCodecContext; thread_count: cint): cint;
cdecl; external av__codec; deprecated;
-procedure avcodec_thread_free(s: PAVCodecContext);
- cdecl; external av__codec; deprecated;
{$IFEND}
function avcodec_default_execute(s: PAVCodecContext; func: TExecuteFunc; arg: Pointer; var ret: cint; count: cint; size: cint): cint;
@@ -4011,6 +4319,7 @@ function avcodec_default_execute2(s: PAVCodecContext; func: TExecuteFunc; arg: P
cdecl; external av__codec;
//FIXME func typedef
+{$IFDEF FF_API_AVCODEC_OPEN}
(**
* Initialize the AVCodecContext to use the given AVCodec. Prior to using this
* function the context has to be allocated.
@@ -4027,7 +4336,7 @@ function avcodec_default_execute2(s: PAVCodecContext; func: TExecuteFunc; arg: P
* if (!codec)
* exit(1);
*
- * context = avcodec_alloc_context();
+ * context = avcodec_alloc_context3(codec);
*
* if (avcodec_open(context, codec) < 0)
* exit(1);
@@ -4036,33 +4345,59 @@ function avcodec_default_execute2(s: PAVCodecContext; func: TExecuteFunc; arg: P
* @param avctx The context which will be set up to use the given codec.
* @param codec The codec to use within the context.
* @return zero on success, a negative value on error
- * @see avcodec_alloc_context, avcodec_find_decoder, avcodec_find_encoder
+ * @see avcodec_alloc_context3, avcodec_find_decoder, avcodec_find_encoder, avcodec_close
+ *
+ * @deprecated use avcodec_open2
*)
function avcodec_open(avctx: PAVCodecContext; codec: PAVCodec): cint;
- cdecl; external av__codec;
-
+ cdecl; external av__codec; deprecated;
+{$ENDIF}
-{$IF FF_API_AUDIO_OLD}
(**
- * Decode an audio frame from buf into samples.
- * Wrapper function which calls avcodec_decode_audio3.
+ * Initialize the AVCodecContext to use the given AVCodec. Prior to using this
+ * function the context has to be allocated with avcodec_alloc_context3().
*
- * @deprecated Use avcodec_decode_audio3 instead.
- * @param avctx the codec context
- * @param[out] samples the output buffer, sample type in avctx->sample_fmt
- * @param[in,out] frame_size_ptr the output buffer size in bytes
- * @param[in] buf the input buffer
- * @param[in] buf_size the input buffer size in bytes
- * @return On error a negative value is returned, otherwise the number of bytes
- * used or zero if no frame could be decompressed.
+ * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),
+ * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for
+ * retrieving a codec.
+ *
+ * @warning This function is not thread safe!
+ *
+ * @code
+ * avcodec_register_all();
+ * av_dict_set(&opts, "b", "2.5M", 0);
+ * codec = avcodec_find_decoder(CODEC_ID_H264);
+ * if (!codec)
+ * exit(1);
+ *
+ * context = avcodec_alloc_context3(codec);
+ *
+ * if (avcodec_open2(context, codec, opts) < 0)
+ * exit(1);
+ * @endcode
+ *
+ * @param avctx The context to initialize.
+ * @param codec The codec to open this context for. If a non-NULL codec has been
+ * previously passed to avcodec_alloc_context3() or
+ * avcodec_get_context_defaults3() for this context, then this
+ * parameter MUST be either NULL or equal to the previously passed
+ * codec.
+ * @param options A dictionary filled with AVCodecContext and codec-private options.
+ * On return this object will be filled with options that were not found.
+ *
+ * @return zero on success, a negative value on error
+ * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(),
+ * av_dict_set(), av_opt_find().
*)
-function avcodec_decode_audio2(avctx: PAVCodecContext; samples: PSmallint;
- var frame_size_ptr: cint;
- buf: {const} PByteArray; buf_size: cint): cint;
- cdecl; external av__codec; deprecated;
-{$IFEND}
+function avcodec_open2(avctx: PAVCodecContext; codec: PAVCodec; options: pointer): cint;
+ cdecl; external av__codec;
+{$IFDEF FF_API_OLD_DECODE_AUDIO}
(**
+ * Wrapper function which calls avcodec_decode_audio4.
+ *
+ * @deprecated Use avcodec_decode_audio4 instead.
+ *
* Decode the audio frame of size avpkt->size from avpkt->data into samples.
* Some decoders may support multiple frames in a single AVPacket, such
* decoders would then just decode the first frame. In this case,
@@ -4082,6 +4417,11 @@ function avcodec_decode_audio2(avctx: PAVCodecContext; samples: PSmallint;
* @warning The end of the input buffer avpkt->data should be set to 0 to ensure that
* no overreading happens for damaged MPEG streams.
*
+ * @warning You must not provide a custom get_buffer() when using
+ * avcodec_decode_audio3(). Doing so will override it with
+ * avcodec_default_get_buffer. Use avcodec_decode_audio4() instead,
+ * which does allow the application to provide a custom get_buffer().
+ *
* @note You might have to align the input buffer avpkt->data and output buffer
* samples. The alignment requirements depend on the CPU: On some CPUs it isn't
* necessary at all, on others it won't work at all if not aligned and on others
@@ -4091,11 +4431,14 @@ function avcodec_decode_audio2(avctx: PAVCodecContext; samples: PSmallint;
* samples should be 16 byte aligned unless the CPU doesn't need it
* (AltiVec and SSE do).
*
- * @note Some codecs have a delay between input and output, these need to be
- * fed with avpkt->data=NULL, avpkt->size=0 at the end to return the remaining frames.
+ * @note Codecs which have the CODEC_CAP_DELAY capability set have a delay
+ * between input and output, these need to be fed with avpkt->data=NULL,
+ * avpkt->size=0 at the end to return the remaining frames.
*
* @param avctx the codec context
- * @param[out] samples the output buffer
+ * @param[out] samples the output buffer, sample type in avctx->sample_fmt
+ * If the sample format is planar, each channel plane will
+ * be the same size, with no padding between channels.
* @param[in,out] frame_size_ptr the output buffer size in bytes
* @param[in] avpkt The input AVPacket containing the input buffer.
* You can create such packet with av_init_packet() and by then setting
@@ -4106,35 +4449,46 @@ function avcodec_decode_audio2(avctx: PAVCodecContext; samples: PSmallint;
*)
function avcodec_decode_audio3(avctx: PAVCodecContext; samples: PSmallint;
var frame_size_ptr: cint;
- avpkt: PAVPacket): cint;
+ avpkt: PAVPacket): cint; {deprecated}
cdecl; external av__codec;
+{$ENDIF}
-{$IF FF_API_VIDEO_OLD}
(**
- * Decode a video frame from buf into picture.
- * Wrapper function which calls avcodec_decode_video2.
+ * Decode the audio frame of size avpkt->size from avpkt->data into frame.
*
- * @deprecated Use avcodec_decode_video2 instead.
- * @param avctx the codec context
- * @param[out] picture The AVFrame in which the decoded video frame will be stored.
- * Use avcodec_alloc_frame to get an AVFrame, the codec will
- * allocate memory for the actual bitmap.
- * with default get/release_buffer(), the decoder frees/reuses the bitmap as it sees fit.
- * with overridden get/release_buffer() (needs CODEC_CAP_DR1) the user decides into what buffer the decoder
- * decodes and the decoder tells the user once it does not need the data anymore,
- * the user app can at this point free/reuse/keep the memory as it sees fit.
+ * Some decoders may support multiple frames in a single AVPacket. Such
+ * decoders would then just decode the first frame. In this case,
+ * avcodec_decode_audio4 has to be called again with an AVPacket containing
+ * the remaining data in order to decode the second frame, etc...
+ * Even if no frames are returned, the packet needs to be fed to the decoder
+ * with remaining data until it is completely consumed or an error occurs.
*
- * @param[in] buf the input buffer
- * @param[in] buf_size the size of the input buffer in bytes
- * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero.
- * @return On error a negative value is returned, otherwise the number of bytes
- * used or zero if no frame could be decompressed.
+ * @warning The input buffer, avpkt->data must be FF_INPUT_BUFFER_PADDING_SIZE
+ * larger than the actual read bytes because some optimized bitstream
+ * readers read 32 or 64 bits at once and could read over the end.
+ *
+ * @note You might have to align the input buffer. The alignment requirements
+ * depend on the CPU and the decoder.
+ *
+ * @param avctx the codec context
+ * @param[out] frame The AVFrame in which to store decoded audio samples.
+ * Decoders request a buffer of a particular size by setting
+ * AVFrame.nb_samples prior to calling get_buffer(). The
+ * decoder may, however, only utilize part of the buffer by
+ * setting AVFrame.nb_samples to a smaller value in the
+ * output frame.
+ * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is
+ * non-zero.
+ * @param[in] avpkt The input AVPacket containing the input buffer.
+ * At least avpkt->data and avpkt->size should be set. Some
+ * decoders might also require additional fields to be set.
+ * @return A negative error code is returned if an error occurred during
+ * decoding, otherwise the number of bytes consumed from the input
+ * AVPacket is returned.
*)
-function avcodec_decode_video(avctx: PAVCodecContext; picture: PAVFrame;
- var got_picture_ptr: cint;
- buf: {const} PByteArray; buf_size: cint): cint;
- cdecl; external av__codec; deprecated;
-{$IFEND}
+function avcodec_decode_audio4(avctx: PAVCodecContext; frame: PAVFrame;
+ got_frame_ptr: Pcint; avpkt: PAVPacket): cint;
+ cdecl; external av__codec;
(**
* Decode the video frame of size avpkt->size from avpkt->data into picture.
@@ -4155,6 +4509,10 @@ function avcodec_decode_video(avctx: PAVCodecContext; picture: PAVFrame;
*
* In practice, avpkt->data should have 4 byte alignment at minimum.
*
+ * @note Codecs which have the CODEC_CAP_DELAY capability set have a delay
+ * between input and output, these need to be fed with avpkt->data=NULL,
+ * avpkt->size=0 at the end to return the remaining frames.
+ *
* @param avctx the codec context
* @param[out] picture The AVFrame in which the decoded video frame will be stored.
* @param[in] avpkt The input AVpacket containing the input buffer.
@@ -4168,10 +4526,10 @@ function avcodec_decode_video(avctx: PAVCodecContext; picture: PAVFrame;
*)
function avcodec_decode_video2(avctx: PAVCodecContext; picture: PAVFrame;
var got_picture_ptr: cint;
- avpkt: PAVPacket): cint;
+ avpkt: {const} PAVPacket): cint;
cdecl; external av__codec;
-{$IF FF_API_SUBTITLE_OLD}
+{$IFDEF FF_API_SUBTITLE_OLD}
(* Decode a subtitle message. Return -1 if error, otherwise return the
* number of bytes used. If no subtitle could be decompressed,
* got_sub_ptr is zero. Otherwise, the subtitle is stored in*sub.
@@ -4203,25 +4561,23 @@ function avcodec_decode_subtitle2(avctx: PAVCodecContext; sub: PAVSubtitle;
cdecl; external av__codec;
(**
- * Frees all allocated data in the given subtitle struct.
+ * Free all allocated data in the given subtitle struct.
*
* @param sub AVSubtitle to free.
*)
procedure avsubtitle_free(sub: PAVSubtitle);
cdecl; external av__codec;
-function avcodec_parse_frame(avctx: PAVCodecContext; pdata: PPointer;
- data_size_ptr: PCint;
- buf: PByteArray; buf_size: cint): cint;
- cdecl; external av__codec;
-
+{$IFDEF FF_API_OLD_ENCODE_AUDIO}
(**
* Encode an audio frame from samples into buf.
*
+ * @deprecated Use avcodec_encode_audio2 instead.
+ *
* @note The output buffer should be at least FF_MIN_BUFFER_SIZE bytes large.
- * However, for PCM audio the user will know how much space is needed
- * because it depends on the value passed in buf_size as described
- * below. In that case a lower value can be used.
+ * However, for codecs with avctx->frame_size equal to 0 (e.g. PCM) the user
+ * will know how much space is needed because it depends on the value passed
+ * in buf_size as described below. In that case a lower value can be used.
*
* @param avctx the codec context
* @param[out] buf the output buffer
@@ -4229,13 +4585,80 @@ function avcodec_parse_frame(avctx: PAVCodecContext; pdata: PPointer;
* @param[in] samples the input buffer containing the samples
* The number of samples read from this buffer is frame_size*channels,
* both of which are defined in avctx.
- * For PCM audio the number of samples read from samples is equal to
- * buf_size * input_sample_size / output_sample_size.
+ * For codecs which have avctx->frame_size equal to 0 (e.g. PCM) the number of
+ * samples read from samples is equal to:
+ * buf_size * 8 / (avctx->channels * av_get_bits_per_sample(avctx->codec_id))
+ * This also implies that av_get_bits_per_sample() must not return 0 for these
+ * codecs.
* @return On error a negative value is returned, on success zero or the number
* of bytes used to encode the data read from the input buffer.
*)
function avcodec_encode_audio(avctx: PAVCodecContext; buf: PByte;
- buf_size: cint; samples: {const} PSmallint): cint;
+ buf_size: cint; samples: {const} PSmallint): cint; {deprecated}
+ cdecl; external av__codec;
+{$ENDIF}
+
+(**
+ * Encode a frame of audio.
+ *
+ * Takes input samples from frame and writes the next output packet, if
+ * available, to avpkt. The output packet does not necessarily contain data for
+ * the most recent frame, as encoders can delay, split, and combine input frames
+ * internally as needed.
+ *
+ * @param avctx codec context
+ * @param avpkt output AVPacket.
+ * The user can supply an output buffer by setting
+ * avpkt->data and avpkt->size prior to calling the
+ * function, but if the size of the user-provided data is not
+ * large enough, encoding will fail. All other AVPacket fields
+ * will be reset by the encoder using av_init_packet(). If
+ * avpkt->data is NULL, the encoder will allocate it.
+ * The encoder will set avpkt->size to the size of the
+ * output packet.
+ * @param[in] frame AVFrame containing the raw audio data to be encoded.
+ * May be NULL when flushing an encoder that has the
+ * CODEC_CAP_DELAY capability set.
+ * There are 2 codec capabilities that affect the allowed
+ * values of frame->nb_samples.
+ * If CODEC_CAP_SMALL_LAST_FRAME is set, then only the final
+ * frame may be smaller than avctx->frame_size, and all other
+ * frames must be equal to avctx->frame_size.
+ * If CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame
+ * can have any number of samples.
+ * If neither is set, frame->nb_samples must be equal to
+ * avctx->frame_size for all frames.
+ * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the
+ * output packet is non-empty, and to 0 if it is
+ * empty. If the function returns an error, the
+ * packet can be assumed to be invalid, and the
+ * value of got_packet_ptr is undefined and should
+ * not be used.
+ * @return 0 on success, negative error code on failure
+ *)
+function avcodec_encode_audio2(avctx: PAVCodecContext; avpkt: PAVPacket;
+ frame: {const} PAVFrame; got_packet_ptr: Pcint): cint;
+ cdecl; external av__codec;
+
+(**
+ * Fill audio frame data and linesize.
+ * AVFrame extended_data channel pointers are allocated if necessary for
+ * planar audio.
+ *
+ * @param frame the AVFrame
+ * frame->nb_samples must be set prior to calling the
+ * function. This function fills in frame->data,
+ * frame->extended_data, frame->linesize[0].
+ * @param nb_channels channel count
+ * @param sample_fmt sample format
+ * @param buf buffer to use for frame data
+ * @param buf_size size of buffer
+ * @param align plane size sample alignment
+ * @return 0 on success, negative error code on failure
+ *)
+function avcodec_fill_audio_frame(frame: PAVFrame; nb_channels: cint;
+ sample_fmt: TAVSampleFormat; buf: {const} PByte;
+ buf_size: cint; align: cint): cint;
cdecl; external av__codec;
(**
@@ -4257,6 +4680,15 @@ function avcodec_encode_subtitle(avctx: PAVCodecContext; buf: PByteArray;
buf_size: cint; sub: {const} PAVSubtitle): cint;
cdecl; external av__codec;
+(**
+ * Close a given AVCodecContext and free all the data associated with it
+ * (but not the AVCodecContext itself).
+ *
+ * Calling this function on an AVCodecContext that hasn't been opened will free
+ * the codec-specific data allocated in avcodec_alloc_context3() /
+ * avcodec_get_context_defaults3() with a non-NULL codec. Subsequent calls will
+ * do nothing.
+ *)
function avcodec_close(avctx: PAVCodecContext): cint;
cdecl; external av__codec;
@@ -4285,7 +4717,7 @@ procedure avcodec_default_free_buffers(s: PAVCodecContext);
(* misc useful functions *)
-{$IF FF_API_OLD_FF_PICT_TYPES}
+{$IFDEF FF_API_OLD_FF_PICT_TYPES}
(**
* Return a single letter to describe the given picture type pict_type.
*
@@ -4306,9 +4738,9 @@ function av_get_pict_type_char(pict_type: cint): AnsiChar;
function av_get_bits_per_sample(codec_id: TCodecID): cint;
cdecl; external av__codec;
-{$IF FF_API_OLD_SAMPLE_FMT}
+{$IFDEF FF_API_OLD_SAMPLE_FMT}
(**
- * @deprecated Use av_get_bits_per_sample_fmt() instead.
+ * @deprecated Use av_get_bytes_per_sample() instead.
*)
function av_get_bits_per_sample_format(sample_fmt: TAVSampleFormat): cint;
cdecl; external av__codec; deprecated;
@@ -4362,7 +4794,7 @@ type
offset: cint64; ///< byte offset from starting packet start
cur_frame_end: array [0..AV_PARSER_PTS_NB - 1] of cint64;
- (*!
+ (**
* Set by parser to 1 for key frames and 0 for non-key frames.
* It is initialized to -1, so if the parser doesn't set this flag,
* old-style fallback using FF_I_TYPE picture type as key frames
@@ -4470,18 +4902,6 @@ procedure av_register_codec_parser(parser: PAVCodecParser);
function av_parser_init(codec_id: cint): PAVCodecParserContext;
cdecl; external av__codec;
-{$IF LIBAVCODEC_MAX_VERSION_MAJOR < 53}
-function av_parser_parse(s: PAVCodecParserContext;
- avctx: PAVCodecContext;
- poutbuf: PPointer;
- poutbuf_size: PCint;
- buf: {const} PByteArray;
- buf_size: cint;
- pts: cint64;
- dts: cint64): cint;
- cdecl; external av__codec; deprecated;
-{$IFEND}
-
(**
* Parse a packet.
*
@@ -4578,7 +4998,7 @@ function av_bitstream_filter_next(f: PAVBitStreamFilter): PAVBitStreamFilter;
*
* @see av_realloc
*)
-procedure av_fast_realloc(ptr: pointer; size: PCuint; min_size: FF_INTERNALC_MEM_TYPE);
+procedure av_fast_realloc(ptr: pointer; size: PCuint; min_size: size_t);
cdecl; external av__codec;
(**
@@ -4593,22 +5013,18 @@ procedure av_fast_realloc(ptr: pointer; size: PCuint; min_size: FF_INTERNALC_MEM
* @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and
* *size 0 if an error occurred.
*)
-procedure av_fast_malloc(ptr: pointer; size: PCuint; min_size: FF_INTERNALC_MEM_TYPE);
+procedure av_fast_malloc(ptr: pointer; size: PCuint; min_size: size_t);
cdecl; external av__codec;
-{$IF LIBAVCODEC_MAX_VERSION_MAJOR < 53}
(**
- * @deprecated Deprecated in favor of av_image_copy().
+ * Same behaviour av_fast_malloc but the buffer has additional
+ * FF_INPUT_PADDING_SIZE at the end which will will always be 0.
+ *
+ * In addition the whole buffer will initially and after resizes
+ * be 0-initialized so that no uninitialized data will ever appear.
*)
-type
- PQuaduint8Array = ^TQuaduint8Array;
- TQuaduint8Array = array [0..3] of cuint8;
-
-procedure av_picture_data_copy(dst_data: PQuaduint8Array; dst_linesize: TQuadIntArray;
- src_data: PQuaduint8Array; src_linesize: TQuadIntArray;
- pix_fmt: TAVPixelFormat; width: cint; height: cint);
- cdecl; external av__codec; deprecated;
-{$IFEND}
+procedure av_fast_padded_malloc(ptr: pointer; size: Pcuint; min_size: size_t);
+ cdecl; external av__codec;
(**
* Copy image src to dst. Wraps av_picture_data_copy() above.
@@ -4656,24 +5072,6 @@ function av_picture_pad(dst: PAVPicture;
function av_xiphlacing(s: PByte; v: cuint): cuint;
cdecl; external av__codec;
-{$IF LIBAVCODEC_VERSION_MAJOR < 53}
-(**
- * Parse str and put in width_ptr and height_ptr the detected values.
- *
- * @deprecated Deprecated in favor of av_parse_video_size().
- *)
-function av_parse_video_frame_size(width_ptr: PCint; height_ptr: PCint; str: {const} PAnsiChar): cint;
- cdecl; external av__codec; deprecated;
-
-(**
- * Parse str and store the detected values in *frame_rate.
- *
- * @deprecated Deprecated in favor of av_parse_video_rate().
- *)
-function av_parse_video_frame_rate(frame_rate: PAVRational; str: {const} PAnsiChar): cint;
- cdecl; external av__codec; deprecated;
-{$IFEND}
-
(**
* Log a generic warning message about a missing feature. This function is
* intended to be used internally by FFmpeg (libavcodec, libavformat, etc.)
@@ -4697,7 +5095,7 @@ procedure av_log_missing_feature(avc: Pointer; feature: {const} PAnsiChar; want_
* a pointer to an AVClass struct
* @param[in] msg string containing an optional message, or NULL if no message
*)
-procedure av_log_ask_for_sample(avc: Pointer; msg: {const} PAnsiChar);
+procedure av_log_ask_for_sample(avc: Pointer; msg: {const} PAnsiChar); {todo: av_printf_format(2, 3);}
cdecl; external av__codec;
(**
@@ -4742,6 +5140,37 @@ type
//function av_lockmgr_register(cb: function (mutex: Ppointer; op: TAVLockOp)): cint;
// cdecl; external av__codec;
+(**
+ * Get the type of the given codec.
+ *)
+function avcodec_get_type(codec_id: TCodecID): TAVMediaType;
+ cdecl; external av__codec;
+
+(**
+ * Get the AVClass for AVCodecContext. It can be used in combination with
+ * AV_OPT_SEARCH_FAKE_OBJ for examining options.
+ *
+ * @see av_opt_find().
+ *)
+function avcodec_get_class(): {const} PAVClass;
+ cdecl; external av__codec;
+
+(**
+ * Get the AVClass for AVFrame. It can be used in combination with
+ * AV_OPT_SEARCH_FAKE_OBJ for examining options.
+ *
+ * @see av_opt_find().
+ *)
+function avcodec_get_frame_class(): {const} PAVClass;
+ cdecl; external av__codec;
+
+(**
+ * @return a positive value if s is open (i.e. avcodec_open2() was called on it
+ * with no corresponding avcodec_close()), 0 otherwise.
+ *)
+function avcodec_is_open(s: PAVCodecContext): cint;
+ cdecl; external av__codec;
+
implementation
end.
diff --git a/src/lib/ffmpeg-0.10/avformat.pas b/src/lib/ffmpeg-0.10/avformat.pas
index a1c72e66..31d0777d 100644
--- a/src/lib/ffmpeg-0.10/avformat.pas
+++ b/src/lib/ffmpeg-0.10/avformat.pas
@@ -61,9 +61,9 @@ const
* by removing all unneeded conditionals.
*)
(* Max. supported version by this header *)
- LIBAVFORMAT_MAX_VERSION_MAJOR = 52;
- LIBAVFORMAT_MAX_VERSION_MINOR = 111;
- LIBAVFORMAT_MAX_VERSION_RELEASE = 0;
+ LIBAVFORMAT_MAX_VERSION_MAJOR = 53;
+ LIBAVFORMAT_MAX_VERSION_MINOR = 32;
+ 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);
@@ -93,83 +93,271 @@ const
}
(**
- * Return the LIBAVFORMAT_VERSION_INT constant.
- *)
-function avformat_version(): cuint;
- cdecl; external av__format;
-
-(**
- * Return the libavformat build-time configuration.
- *)
-function avformat_configuration(): {const} PansiChar;
- cdecl; external av__format;
-
-(**
- * Return the libavformat license.
+ * Those FF_API_* defines are not part of public API.
+ * They may change, break or disappear at any time.
+ *)
+{$macro on}
+{$ifndef FF_API_OLD_METADATA2}
+{$define FF_API_OLD_METADATA2 := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_OLD_AVIO}
+{$define FF_API_OLD_AVIO := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_DUMP_FORMAT}
+{$define FF_API_DUMP_FORMAT := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_PARSE_DATE}
+{$define FF_API_PARSE_DATE := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_FIND_INFO_TAG}
+{$define FF_API_FIND_INFO_TAG := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_PKT_DUMP}
+{$define FF_API_PKT_DUMP := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_GUESS_IMG2_CODEC}
+{$define FF_API_GUESS_IMG2_CODEC := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_SDP_CREATE}
+{$define FF_API_SDP_CREATE := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_ALLOC_OUTPUT_CONTEXT}
+{$define FF_API_ALLOC_OUTPUT_CONTEXT := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_FORMAT_PARAMETERS}
+{$define FF_API_FORMAT_PARAMETERS := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_FLAG_RTP_HINT}
+{$define FF_API_FLAG_RTP_HINT := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_AVSTREAM_QUALITY}
+{$define FF_API_AVSTREAM_QUALITY := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_LOOP_INPUT}
+{$define FF_API_LOOP_INPUT := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_LOOP_OUTPUT}
+{$define FF_API_LOOP_OUTPUT := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_TIMESTAMP}
+{$define FF_API_TIMESTAMP := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_FILESIZE}
+{$define FF_API_FILESIZE := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_MUXRATE}
+{$define FF_API_MUXRATE := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_RTSP_URL_OPTIONS}
+{$define FF_API_RTSP_URL_OPTIONS := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_NEW_STREAM}
+{$define FF_API_NEW_STREAM := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_PRELOAD}
+{$define FF_API_PRELOAD := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_STREAM_COPY}
+{$define FF_API_STREAM_COPY := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_SEEK_PUBLIC}
+{$define FF_API_SEEK_PUBLIC := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_REORDER_PRIVATE}
+{$define FF_API_REORDER_PRIVATE := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_OLD_INTERRUPT_CB}
+{$define FF_API_OLD_INTERRUPT_CB := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_SET_PTS_INFO}
+{$define FF_API_SET_PTS_INFO := (LIBAVFORMAT_VERSION_MAJOR < 54)}
+{$endif}
+{$ifndef FF_API_CLOSE_INPUT_FILE}
+{$define FF_API_CLOSE_INPUT_FILE := (LIBAVFORMAT_VERSION_MAJOR < 55)}
+{$endif}
+
+(**
+ * @defgroup libavf I/O and Muxing/Demuxing Library
+ * @{
+ *
+ * Libavformat (lavf) is a library for dealing with various media container
+ * formats. Its main two purposes are demuxing - i.e. splitting a media file
+ * into component streams, and the reverse process of muxing - writing supplied
+ * data in a specified container format. It also has an @ref lavf_io
+ * "I/O module" which supports a number of protocols for accessing the data (e.g.
+ * file, tcp, http and others). Before using lavf, you need to call
+ * av_register_all() to register all compiled muxers, demuxers and protocols.
+ * Unless you are absolutely sure you won't use libavformat's network
+ * capabilities, you should also call avformat_network_init().
+ *
+ * A supported input format is described by an AVInputFormat struct, conversely
+ * an output format is described by AVOutputFormat. You can iterate over all
+ * registered input/output formats using the av_iformat_next() /
+ * av_oformat_next() functions. The protocols layer is not part of the public
+ * API, so you can only get the names of supported protocols with the
+ * avio_enum_protocols() function.
+ *
+ * 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
+ * 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).
+ *
+ * Most importantly an AVFormatContext contains:
+ * @li the @ref AVFormatContext.iformat "input" or @ref AVFormatContext.oformat
+ * "output" format. It is either autodetected or set by user for input;
+ * always set by user for output.
+ * @li an @ref AVFormatContext.streams "array" of AVStreams, which describe all
+ * elementary streams stored in the file. AVStreams are typically referred to
+ * using their index in this array.
+ * @li an @ref AVFormatContext.pb "I/O context". It is either opened by lavf or
+ * set by user for input, always set by user for output (unless you are dealing
+ * with an AVFMT_NOFILE format).
+ *
+ * @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
+ * 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.
+ *
+ * @section lavf_decoding_open Opening a media file
+ * The minimum information required to open a file is its URL or filename, which
+ * is passed to avformat_open_input(), as in the following code:
+ * @code
+ * const char *url = "in.mp3";
+ * AVFormatContext *s = NULL;
+ * int ret = avformat_open_input(&s, url, NULL, NULL);
+ * if (ret < 0)
+ * abort();
+ * @endcode
+ * The above code attempts to allocate an AVFormatContext, open the
+ * specified file (autodetecting the format) and read the header, exporting the
+ * information stored there into s. Some formats do not have a header or do not
+ * store enough information there, so it is recommended that you call the
+ * avformat_find_stream_info() function which tries to read and decode a few
+ * frames to find missing information.
+ *
+ * In some cases you might want to preallocate an AVFormatContext yourself with
+ * avformat_alloc_context() and do some tweaking on it before passing it to
+ * avformat_open_input(). One such case is when you want to use custom functions
+ * for reading input data instead of lavf internal I/O layer.
+ * To do that, create your own AVIOContext with avio_alloc_context(), passing
+ * your reading callbacks to it. Then set the @em pb field of your
+ * AVFormatContext to newly created AVIOContext.
+ *
+ * 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
+ *
+ * @section lavf_decoding_seek Seeking
+ * @}
+ *
+ * @defgroup lavf_encoding Muxing
+ * @{
+ * @}
+ *
+ * @defgroup lavf_io I/O Read/Write
+ * @{
+ * @}
+ *
+ * @defgroup lavf_codec Demuxers
+ * @{
+ * @defgroup lavf_codec_native Native Demuxers
+ * @{
+ * @}
+ * @defgroup lavf_codec_wrappers External library wrappers
+ * @{
+ * @}
+ * @}
+ * @defgroup lavf_protos I/O Protocols
+ * @{
+ * @}
+ * @defgroup lavf_internal Internal
+ * @{
+ * @}
+ * @}
+ *
*)
-function avformat_license(): {const} PansiChar;
- cdecl; external av__format;
type
PAVFile = Pointer;
(*
- * Public Metadata API.
+ * @defgroup metadata_api Public Metadata API
+ * @{
+ * @ingroup libavf
* The metadata API allows libavformat to export metadata tags to a client
- * application using a sequence of key/value pairs. Like all strings in FFmpeg,
- * metadata must be stored as UTF-8 encoded Unicode. Note that metadata
+ * application when demuxing. Conversely it allows a client application to
+ * set metadata when muxing.
+ *
+ * Metadata is exported or set as pairs of key/value strings in the 'metadata'
+ * fields of the AVFormatContext, AVStream, AVChapter and AVProgram structs
+ * using the @ref lavu_dict "AVDictionary" API. Like all strings in FFmpeg,
+ * metadata is assumed to be UTF-8 encoded Unicode. Note that metadata
* exported by demuxers isn't checked to be valid UTF-8 in most cases.
+ *
* Important concepts to keep in mind:
- * 1. Keys are unique; there can never be 2 tags with the same key. This is
+ * - Keys are unique; there can never be 2 tags with the same key. This is
* also meant semantically, i.e., a demuxer should not knowingly produce
* several keys that are literally different but semantically identical.
* E.g., key=Author5, key=Author6. In this example, all authors must be
* placed in the same tag.
- * 2. Metadata is flat, not hierarchical; there are no subtags. If you
+ * - Metadata is flat, not hierarchical; there are no subtags. If you
* want to store, e.g., the email address of the child of producer Alice
* and actor Bob, that could have key=alice_and_bobs_childs_email_address.
- * 3. Several modifiers can be applied to the tag name. This is done by
+ * - Several modifiers can be applied to the tag name. This is done by
* appending a dash character ('-') and the modifier name in the order
* they appear in the list below -- e.g. foo-eng-sort, not foo-sort-eng.
- * a) language -- a tag whose value is localized for a particular language
+ * - language -- a tag whose value is localized for a particular language
* is appended with the ISO 639-2/B 3-letter language code.
* For example: Author-ger=Michael, Author-eng=Mike
* The original/default language is in the unqualified "Author" tag.
* A demuxer should set a default if it sets any translated tag.
- * b) sorting -- a modified version of a tag that should be used for
+ * - sorting -- a modified version of a tag that should be used for
* sorting will have '-sort' appended. E.g. artist="The Beatles",
* artist-sort="Beatles, The".
*
- * 4. Demuxers attempt to export metadata in a generic format, however tags
+ * - Demuxers attempt to export metadata in a generic format, however tags
* with no generic equivalents are left as they are stored in the container.
* Follows a list of generic tag names:
*
- * album -- name of the set this work belongs to
- * album_artist -- main creator of the set/album, if different from artist.
- * e.g. "Various Artists" for compilation albums.
- * artist -- main creator of the work
- * comment -- any additional description of the file.
- * composer -- who composed the work, if different from artist.
- * copyright -- name of copyright holder.
- * creation_time-- date when the file was created, preferably in ISO 8601.
- * date -- date when the work was created, preferably in ISO 8601.
- * disc -- number of a subset, e.g. disc in a multi-disc collection.
- * encoder -- name/settings of the software/hardware that produced the file.
- * encoded_by -- person/group who created the file.
- * filename -- original name of the file.
- * genre -- <self-evident>.
- * language -- main language in which the work is performed, preferably
- * in ISO 639-2 format. Multiple languages can be specified by
- * separating them with commas.
- * performer -- artist who performed the work, if different from artist.
- * E.g for "Also sprach Zarathustra", artist would be "Richard
- * Strauss" and performer "London Philharmonic Orchestra".
- * publisher -- name of the label/publisher.
- * service_name -- name of the service in broadcasting (channel name).
- * service_provider -- name of the service provider in broadcasting.
- * title -- name of the work.
- * track -- number of this work in the set, can be in form current/total.
- * variant_bitrate -- the total bitrate of the bitrate variant that the current stream is part of
+ @verbatim
+ album -- name of the set this work belongs to
+ album_artist -- main creator of the set/album, if different from artist.
+ e.g. "Various Artists" for compilation albums.
+ artist -- main creator of the work
+ comment -- any additional description of the file.
+ composer -- who composed the work, if different from artist.
+ copyright -- name of copyright holder.
+ creation_time-- date when the file was created, preferably in ISO 8601.
+ date -- date when the work was created, preferably in ISO 8601.
+ disc -- number of a subset, e.g. disc in a multi-disc collection.
+ encoder -- name/settings of the software/hardware that produced the file.
+ encoded_by -- person/group who created the file.
+ filename -- original name of the file.
+ genre -- <self-evident>.
+ language -- main language in which the work is performed, preferably
+ in ISO 639-2 format. Multiple languages can be specified by
+ separating them with commas.
+ performer -- artist who performed the work, if different from artist.
+ E.g for "Also sprach Zarathustra", artist would be "Richard
+ Strauss" and performer "London Philharmonic Orchestra".
+ publisher -- name of the label/publisher.
+ service_name -- name of the service in broadcasting (channel name).
+ service_provider -- name of the service provider in broadcasting.
+ title -- name of the work.
+ track -- number of this work in the set, can be in form current/total.
+ variant_bitrate -- the total bitrate of the bitrate variant that the current stream is part of
+ @endverbatim
+ *
+ * Look in the examples section for an application example how to use the Metadata API.
+ *
+ * @}
*)
{$IF FF_API_OLD_METADATA2}
@@ -217,21 +405,6 @@ function av_metadata_get(m: PAVDictionary; key: {const} PAnsiChar;
prev: {const} PAVDictionaryEntry; flags: cint): PAVDictionaryEntry;
cdecl; external av__format;
-{$IF FF_API_OLD_METADATA}
-(**
- * 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)
- * @param value tag value to add to *pm (will be av_strduped)
- * @return >= 0 on success otherwise an error code <0
- * @deprecated Use av_metadata_set2() instead.
- *)
-function av_metadata_set(var pm: PAVMetadata; key: {const} PAnsiChar; value: {const} PAnsiChar): cint;
- cdecl; external av__format; deprecated;
-{$ENDIF}
-
(**
* Set the given tag in *pm, overwriting an existing tag.
*
@@ -261,7 +434,9 @@ procedure av_metadata_copy(var dst: PAVDictionary; src: PAVDictionary; flags: ci
*)
procedure av_metadata_free(var m: PAVDictionary);
cdecl; external av__format; deprecated;
-
+(**
+ * @}
+ *)
{$ENDIF}
(* packet functions *)
@@ -338,7 +513,7 @@ const
AVPROBE_SCORE_MAX = 100; ///< Maximum score, half of that is used for file-extension-based detection
AVPROBE_PADDING_SIZE = 32; ///< extra allocated bytes at the end of the probe buffer
- //! Demuxer will use url_fopen, no opened file should be provided by the caller.
+/// Demuxer will use avio_open, no opened file should be provided by the caller.
AVFMT_NOFILE = $0001;
AVFMT_NEEDNUMBER = $0002; (**< Needs '%d' in filename. *)
AVFMT_SHOW_IDS = $0008; (**< Show format stream IDs numbers. *)
@@ -350,7 +525,15 @@ const
AVFMT_TS_DISCONT = $0200; (**< Format allows timestamp discontinuities. *)
AVFMT_VARIABLE_FPS = $0400; (**< Format allows variable fps. *)
AVFMT_NODIMENSIONS = $0800; (**< Format does not need width/height *)
-
+ AVFMT_NOSTREAMS = $1000; (**< Format does not require any streams *)
+ 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_ALLOW_FLUSH = $10000; (**< Format allows flushing. If not set, the muxer will not receive a NULL packet in the write_packet function. *)
+ AVFMT_TS_NONSTRICT = $8000000; (**< Format does not require strictly
+ increasing timestamps, but they must
+ still be monotonic *)
+
// used by AVIndexEntry
AVINDEX_KEYFRAME = $0001;
@@ -370,6 +553,8 @@ const
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
+ MAX_STD_TIMEBASES = (60*12+5);
+
// used by AVStream
MAX_REORDER_DELAY = 16;
@@ -409,6 +594,7 @@ type
PAVInputFormat = ^TAVInputFormat;
PAVIndexEntry = ^TAVIndexEntry;
+ PPAVStream = ^PAVStream;
PAVStream = ^TAVStream;
PAVPacketList = ^TAVPacketList;
@@ -432,20 +618,6 @@ type
s_conv: {const} PAVMetadataConv;
end;
- PAVChapter = ^TAVChapter;
- TAVChapter = record
- id: cint; ///< unique ID to identify the chapter
- time_base: TAVRational; ///< time base in which the start/end timestamps are specified
- start, end_: cint64; ///< chapter start/end time in time_base units
-{$IF FF_API_OLD_METADATA}
- title: PAnsiChar; ///< chapter title
-{$ENDIF}
- metadata: PAVMetadata;
- end;
-
- TAVChapterArray = array[0..(MaxInt div SizeOf(TAVChapter))-1] of TAVChapter;
- PAVChapterArray = ^TAVChapterArray;
-
TAVFormatParameters = record
time_base: TAVRational;
sample_rate: cint;
@@ -465,11 +637,13 @@ type
unsigned int prealloced_context:1;
}
bf_flags: byte; // 0:mpeg2ts_raw/1:mpeg2ts_compute_pcr/2:initial_pause/3:prealloced_context
- video_codec_id: TCodecID;
- audio_codec_id: TCodecID;
end;
- TAVOutputFormat = record
+(**
+ * @addtogroup lavf_encoding
+ * @{
+ *)
+ TAVOutputFormat = record
name: PAnsiChar;
(**
* Descriptive name for the format, meant to be more human-readable
@@ -487,16 +661,24 @@ type
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,
+ * pkt can be NULL in order to flush data buffered in the muxer.
+ * When flushing, return 0 if there still is more data to flush,
+ * or 1 if everything was flushed and there is no more buffered
+ * data.
+ *)
write_packet: function (c: PAVFormatContext; pkt: PAVPacket): cint; cdecl;
write_trailer: function (c: PAVFormatContext): cint; cdecl;
- (**
- * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER
- *)
- flags: cint;
(**
- * Currently only used to set pixel format if not YUV420P.
+ * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_RAWPICTURE,
+ * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS,
+ * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH
*)
- set_parameters: function (c: PAVFormatContext; f: PAVFormatParameters): cint; cdecl;
+ flags: cint;
+
+ dummy: pointer;
+
interleave_packet: function (s: PAVFormatContext; out_: PAVPacket;
in_: PAVPacket; flush: cint): cint; cdecl;
@@ -508,12 +690,34 @@ type
subtitle_codec: TCodecID; (**< default subtitle codec *)
+{$IF FF_API_OLD_METADATA2}
{const} metadata_conv: PAVMetadataConv;
+{$ENDIF}
- (* private fields *)
+ {const} priv_class: PAVClass; ///< AVClass for the private context
+
+ (**
+ * Test if the given codec can be stored in this container.
+ *
+ * @return 1 if the codec is supported, 0 if it is not.
+ * A negative number if unknown.
+ *)
+ query_codec: function (id: TCodecID; std_compliance: cint): cint; cdecl;
+
+ get_output_timestamp: procedure (s: PAVFormatContext; stream: cint;
+ dts: Pcint64; wall: Pcint64); cdecl;
+
+ (* private fields *)
next: PAVOutputFormat;
end;
-
+(**
+ * @}
+ *)
+
+(**
+ * @addtogroup lavf_decoding
+ * @{
+ *)
TAVInputFormat = record
(**
* A comma separated list of short names for the format. New names
@@ -576,14 +780,16 @@ type
timestamp: cint64; flags: cint): cint; cdecl;
(**
- * Gets the next timestamp in stream[stream_index].time_base units.
+ * Get the next timestamp in stream[stream_index].time_base units.
* @return the timestamp or AV_NOPTS_VALUE if an error occurred
*)
read_timestamp: function (s: PAVFormatContext; stream_index: cint;
pos: pint64; pos_limit: cint64): cint64; cdecl;
(**
- * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER.
+ * 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;
@@ -631,7 +837,10 @@ type
(* private fields *)
next: PAVInputFormat;
end;
-
+(**
+ * @}
+ *)
+
TAVStreamParseType = (
AVSTREAM_PARSE_NONE,
AVSTREAM_PARSE_FULL, (**< full parsing and repack *)
@@ -642,8 +851,13 @@ type
TAVIndexEntry = record
pos: cint64;
- timestamp: cint64;
- { Delphi doesn't support bitfields -> use flags_size instead
+ timestamp: cint64; (**<
+ * Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are available
+ * when seeking to this entry. That means preferable PTS on keyframe based formats.
+ * But demuxers can choose to store a different timestamp, if it is more convenient for the implementation or nothing better
+ * is known
+ *)
+ { Delphi doesn't support bitfields -> use flags_size instead
int flags:2;
int size:30; //Yeah, trying to keep the size of this small to reduce memory requirements (it is 24 vs. 32 bytes due to possible 8-byte alignment).
}
@@ -651,6 +865,16 @@ type
min_distance: cint; (**< Minimum distance between this and the previous keyframe, used to avoid unneeded searching. *)
end;
+ PStreamInfo = ^TStreamInfo;
+ TStreamInfo = record
+ last_dts: cint64;
+ duration_gcd: cint64;
+ duration_count: cint;
+ duration_error: array[0..1] of array[0..1] of array[0..MAX_STD_TIMEBASES - 1] of cdouble;
+ codec_info_duration: cint64;
+ nb_decoded_frames: cint;
+ end;
+
(**
* Stream structure.
* New fields can be added to the end with minor version bumps.
@@ -673,32 +897,43 @@ type
r_frame_rate: TAVRational;
priv_data: pointer;
+{$IFDEF FF_API_REORDER_PRIVATE}
(* internal data used in av_find_stream_info() *)
first_dts: cint64;
+{$ENDIF}
(**
* encoding: pts generation when outputting stream
*)
pts: TAVFrac;
+
(**
* 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.
+ * decoding: set by libavformat
+ * encoding: set by libavformat in av_write_header
*)
time_base: TAVRational;
+{$IFDEF FF_API_REORDER_PRIVATE}
pts_wrap_bits: cint; (* number of bits in pts (used for wrapping control) *)
+{$ENDIF}
+{$IFDEF FF_API_STREAM_COPY}
(* ffmpeg.c private use *)
- stream_copy: cint; (**< If set, just copy stream. *)
+ stream_copy: cint; (**< If set, just copy stream. *) {deprecated}
+{$ENDIF}
discard: TAVDiscard; ///< Selects which packets can be discarded at will and do not need to be demuxed.
+{$IFDEF 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;
+ quality: cfloat; {deprecated}
+{$ENDIF}
(**
- * Decoding: pts of the first frame of the stream, in stream time base.
+ * Decoding: pts of the first frame of the stream in presentation order, in stream time base.
* Only set this if you are absolutely 100% sure that the value you set
* it to really is the pts of the first frame.
* This may be undefined (AV_NOPTS_VALUE).
@@ -714,10 +949,7 @@ type
*)
duration: cint64;
-{$IF FF_API_OLD_METADATA}
- language: array [0..3] of PAnsiChar; (**< ISO 639-2/B 3-letter language code (empty string if undefined) *)
-{$ENDIF}
-
+{$IFDEF FF_API_REORDER_PRIVATE}
(* av_read_frame() support *)
need_parsing: TAVStreamParseType;
parser: PAVCodecParserContext;
@@ -730,17 +962,16 @@ type
support seeking natively. *)
nb_index_entries: cint;
index_entries_allocated_size: cuint;
+{$ENDIF}
nb_frames: cint64; ///< number of frames in this stream if known or 0
- unused: array [0..4] of cint64;
-{$IF FF_API_OLD_METADATA}
- filename: PAnsiChar; (**< source filename of the stream *)
-{$ENDIF}
-
disposition: cint; (**< AV_DISPOSITION_* bitfield *)
+
+{$IFDEF FF_API_REORDER_PRIVATE}
probe_data: TAVProbeData;
pts_buffer: array [0..MAX_REORDER_DELAY] of cint64;
+{$ENDIF}
(**
* sample aspect ratio (0 if unknown)
@@ -749,8 +980,9 @@ type
*)
sample_aspect_ratio: TAVRational;
- metadata: PAVMetadata;
+ metadata: PAVDictionary;
+{$IFDEF 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;
@@ -775,53 +1007,188 @@ type
(**
* last packet in packet_buffer for this stream when muxing.
- * used internally, NOT PART OF PUBLIC API, dont read or write from outside of libav*
+ * Used internally, NOT PART OF PUBLIC API, do not read or
+ * write from outside of libav*
*)
last_in_packet_buffer: PAVPacketList;
+{$ENDIF}
(**
* Average framerate
*)
avg_frame_rate: TAVRational;
- (**
+ (*****************************************************************
+ * All fields below this line are not 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.
+ *****************************************************************
+ *)
+
+ (**
* 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;
+{$IFNDEF FF_API_REORDER_PRIVATE}
+ {const} cur_ptr: PByte;
+ 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;
+ first_dts: cint64;
+ cur_dts: cint64;
+ last_IP_duration: cint;
+ last_IP_pts: cint64;
+
+ (**
+ * Number of packets to buffer for codec probing
+ *)
+ probe_packets: cint;
+
+ (**
+ * 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) *)
+{$ENDIF}
end;
+(**
+ * 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(AVProgram) must not be used outside libav*.
+ *)
+ TAVProgram = record
+ id: cint;
+ flags: cint;
+ discard: TAVDiscard; ///< selects which program to discard and which to feed to the caller
+ stream_index: Pcuint;
+ nb_stream_indexes: cuint;
+ metadata: PAVDictionary;
+
+ program_num: cint;
+ pmt_pid: cint;
+ pcr_pid: cint;
+ end; (*AVProgram*)
+
+ PAVChapter = ^TAVChapter;
+ TAVChapter = record
+ id: cint; ///< unique ID to identify the chapter
+ time_base: TAVRational; ///< time base in which the start/end timestamps are specified
+ start, end_: cint64; ///< chapter start/end time in time_base units
+ metadata: PAVDictionary;
+ end; (*AVChapter*)
+
+ TAVChapterArray = array[0..(MaxInt div SizeOf(TAVChapter))-1] of TAVChapter;
+ PAVChapterArray = ^TAVChapterArray;
+
(**
* Format I/O 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(AVFormatContext) must not be used outside libav*.
+ * sizeof(AVFormatContext) must not be used outside libav*, use
+ * avformat_alloc_context() to create an AVFormatContext.
*)
TAVFormatContext = record
+ (**
+ * A class for logging and AVOptions. Set by avformat_alloc_context().
+ * Exports (de)muxer private options if they exist.
+ *)
av_class: PAVClass; (**< Set by avformat_alloc_context. *)
- (* Can only be iformat or oformat, not both at the same time. *)
+
+ (**
+ * Can only be iformat or oformat, not both at the same time.
+ *
+ * decoding: set by avformat_open_input().
+ * encoding: set by the user.
+ *)
iformat: PAVInputFormat;
oformat: PAVOutputFormat;
+
+ (**
+ * Format private data. This is an AVOptions-enabled struct
+ * if and only if iformat/oformat.priv_class is not NULL.
+ *)
priv_data: pointer;
- pb: PByteIOContext;
+ (*
+ * I/O context.
+ *
+ * decoding: either set by the user before avformat_open_input() (then
+ * the user must close it manually) or set by avformat_open_input().
+ * encoding: set by the user.
+ *
+ * Do NOT set this field if AVFMT_NOFILE flag is set in
+ * iformat/oformat.flags. In such a case, the (de)muxer will handle
+ * I/O in some other way and this field will be NULL.
+ *)
+ pb: PByteIOContext;
+ (**
+ * A list of all streams in the file. New streams are created with
+ * avformat_new_stream().
+ *
+ * decoding: streams are created by libavformat in avformat_open_input().
+ * If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams may also
+ * appear in av_read_frame().
+ * encoding: streams are created by the user before avformat_write_header().
+ *)
nb_streams: cuint;
- streams: array [0..MAX_STREAMS - 1] of PAVStream;
+ streams: PPAVStream;
+
filename: array [0..1023] of AnsiChar; (* input or output filename *)
(* stream info *)
- timestamp: cint64;
-{$IF FF_API_OLD_METADATA}
- title: array [0..511] of AnsiChar;
- author: array [0..511] of AnsiChar;
- copyright: array [0..511] of AnsiChar;
- comment: array [0..511] of AnsiChar;
- album: array [0..511] of AnsiChar;
- year: cint; (**< ID3 year, 0 if none *)
- track: cint; (**< track number, 0 if none *)
- genre: array [0..31] of AnsiChar; (**< ID3 genre *)
+{$IFDEF FF_API_TIMESTAMP}
+ (**
+ * @deprecated use 'creation_time' metadata tag instead
+ *)
+ timestamp: cint64; {deprecated}
{$ENDIF}
+{$IFDEF FF_API_REORDER_PRIVATE}
ctx_flags: cint; (**< Format-specific flags, see AVFMTCTX_xx *)
(* private data for pts handling (do not modify directly). *)
(**
@@ -830,6 +1197,7 @@ type
* streams.
*)
packet_buffer: PAVPacketList;
+{$ENDIF}
(**
* Decoding: position of the first frame of the component, in
@@ -844,10 +1212,14 @@ type
* AVStream values if not set.
*)
duration: cint64;
+
+{$IFDEF FF_API_FILESIZE}
(**
* decoding: total file size, 0 if unknown
*)
file_size: cint64;
+{$ENDIF}
+
(**
* Decoding: total stream bitrate in bit/s, 0 if not
* available. Never set it directly if the file_size and the
@@ -855,28 +1227,42 @@ type
*)
bit_rate: cint;
+{$IFDEF FF_API_REORDER_PRIVATE}
(* av_read_frame() support *)
cur_st: PAVStream;
- cur_ptr_deprecated: pbyte;
- cur_len_deprecated: cint;
- cur_pkt_deprecated: TAVPacket;
(* av_seek_frame() support *)
data_offset: cint64; (**< offset of the first packet *)
- index_built: cint;
+{$ENDIF}
- mux_rate: cint;
+{$IFDEF FF_API_MUXRATE}
+ (**
+ * use mpeg muxer private options instead
+ *)
+ mux_rate: cint; {deprecated}
+{$ENDIF}
packet_size: cuint;
- preload: cint;
+{$IFDEF FF_API_PRELOAD}
+ preload: cint; {deprecated}
+{$ENDIF}
max_delay: cint;
+{$IFDEF 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;
+{$ENDIF}
flags: cint;
- loop_input: cint;
+{$IFDEF FF_API_LOOP_INPUT}
+ (**
+ * @deprecated, use the 'loop' img2 demuxer private option.
+ *)
+ loop_input: cint; {deprecated}
+{$ENDIF}
(**
* decoding: size of data to probe; encoding: unused.
@@ -930,6 +1316,7 @@ type
* obtained from realtime capture devices.
*)
max_picture_buffer: cuint;
+
nb_chapters: cuint;
chapters: PAVChapterArray;
@@ -949,13 +1336,15 @@ type
packet_buffer_end: PAVPacketList;
- metadata: PAVMetadata;
+ metadata: PAVDictionary;
+{$IFDEF FF_API_REORDER_PRIVATE}
(**
* Remaining size available for raw_packet_buffer, in bytes.
* NOT PART OF PUBLIC API
*)
raw_packet_buffer_remaining_size: cint;
+{$ENDIF}
(**
* Start time of the stream in real world time, in microseconds
@@ -966,199 +1355,280 @@ type
*)
start_time_realtime: cint64;
- end;
+ (**
+ * decoding: number of frames used to probe fps
+ *)
+ fps_probe_size: cint;
- (**
- * 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(AVProgram) must not be used outside libav*.
- *)
- TAVProgram = record
- id : cint;
-{$IF FF_API_OLD_METADATA}
- provider_name : PAnsiChar; ///< network name for DVB streams
- name : PAnsiChar; ///< service name for DVB streams
+ (**
+ * 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;
+
+ (**
+ * Custom interrupt callbacks for the I/O layer.
+ *
+ * decoding: set by the user before avformat_open_input().
+ * encoding: set by the user before avformat_write_header()
+ * (mainly useful for AVFMT_NOFILE formats). The callback
+ * should also be passed to avio_open2() if it's used to
+ * open the file.
+ *)
+ interrupt_callback: TAVIOInterruptCB;
+
+ (**
+ * Transport stream id.
+ * This will be moved into demuxer private options. Thus no API/ABI compatibility
+ *)
+ ts_id: cint;
+
+ (**
+ * Audio preload in microseconds.
+ * Note, not all formats support this and unpredictable things may happen if it is used when not supported.
+ * - encoding: Set by user via AVOptions (NO direct access)
+ * - decoding: unused
+ *)
+ audio_preload: cint;
+
+ (**
+ * Max chunk time in microseconds.
+ * Note, not all formats support this and unpredictable things may happen if it is used when not supported.
+ * - encoding: Set by user via AVOptions (NO direct access)
+ * - decoding: unused
+ *)
+ max_chunk_duration: cint;
+
+ (**
+ * Max chunk size in bytes
+ * Note, not all formats support this and unpredictable things may happen if it is used when not supported.
+ * - encoding: Set by user via AVOptions (NO direct access)
+ * - decoding: unused
+ *)
+ max_chunk_size: cint;
+
+ (*****************************************************************
+ * All fields below this line are not 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.
+ *****************************************************************
+ *)
+{$IFNDEF 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;
+ (**
+ * Remaining size available for raw_packet_buffer, in bytes.
+ *)
+ raw_packet_buffer_remaining_size: cint;
+
+ (**
+ * 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_read_frame() support *)
+ cur_st: PAVStream;
+
+ (* av_seek_frame() support *)
+ data_offset: cint64; (**< offset of the first packet *)
{$ENDIF}
- flags : cint;
- discard : TAVDiscard; ///< selects which program to discard and which to feed to the caller
- stream_index : PCardinal;
- nb_stream_indexes : PCardinal;
- metadata : PAVMetadata;
end;
TAVPacketList = record
pkt: TAVPacket;
next: PAVPacketList;
- end;
+ end; (*AVPacketList*)
(**
- * Convert all the metadata sets from ctx according to the source and
- * destination conversion tables. If one of the tables is NULL, then
- * tags are converted to/from ffmpeg generic tag names.
- *
- * @param d_conv destination tags format conversion table
- * @param s_conv source tags format conversion table
+ * This function is provided for compatibility reason and currently does nothing.
*)
-procedure av_metadata_conv(ctx: PAVFormatContext; {const} d_conv: PAVMetadataConv;
- {const} s_conv: PAVMetadataConv);
- cdecl; external av__format;
+procedure av_metadata_conv(ctx: PAVFormatContext; {const} d_conv: PAVMetadataConv; {const} s_conv: PAVMetadataConv);
+ cdecl; external av__format; deprecated;
-{
-var
- first_iformat: PAVInputFormat; external av__format;
- first_oformat: PAVOutputFormat; external av__format;
-}
(**
- * If f is NULL, returns the first registered input format,
- * if f is non-NULL, returns the next registered input format after f
- * or NULL if f is the last one.
+ * @defgroup lavf_core Core functions
+ * @ingroup libavf
+ *
+ * Functions for querying libavformat capabilities, allocating core structures,
+ * etc.
+ * @{
*)
-function av_iformat_next(f: PAVInputFormat): PAVInputFormat;
- cdecl; external av__format;
+
(**
- * If f is NULL, returns the first registered output format,
- * if f is non-NULL, returns the next registered input format after f
- * or NULL if f is the last one.
+ * Return the LIBAVFORMAT_VERSION_INT constant.
*)
-function av_oformat_next(f: PAVOutputFormat): PAVOutputFormat;
- cdecl; external av__format;
+function avformat_version(): cuint;
+ cdecl; external av__format;
-function av_guess_image2_codec(filename: {const} PAnsiChar): TCodecID;
- cdecl; external av__format;
+(**
+ * Return the libavformat build-time configuration.
+ *)
+function avformat_configuration(): {const} PansiChar;
+ cdecl; external av__format;
-(* XXX: Use automatic init with either ELF sections or C file parser *)
-(* modules. *)
+(**
+ * Return the libavformat license.
+ *)
+function avformat_license(): {const} PansiChar;
+ cdecl; external av__format;
-(* utils.c *)
-procedure av_register_input_format(format: PAVInputFormat);
+(**
+ * Initialize libavformat and register all the muxers, demuxers and
+ * protocols. If you do not call this function, then you can select
+ * exactly which formats you want to support.
+ *
+ * @see av_register_input_format()
+ * @see av_register_output_format()
+ * @see av_register_protocol()
+ *)
+procedure av_register_all();
cdecl; external av__format;
+procedure av_register_input_format(format: PAVInputFormat);
+ cdecl; external av__format;
procedure av_register_output_format(format: PAVOutputFormat);
cdecl; external av__format;
-function guess_stream_format(short_name: PAnsiChar;
- filename: PAnsiChar;
- mime_type: PAnsiChar): PAVOutputFormat;
- cdecl; external av__format; deprecated;
-
(**
- * Return the output format in the list of registered output formats
- * which best matches the provided parameters, or return NULL if
- * there is no match.
+ * Do global initialization of network components. This is optional,
+ * but recommended, since it avoids the overhead of implicitly
+ * doing the setup for each session.
*
- * @param short_name if non-NULL checks if short_name matches with the
- * names of the registered formats
- * @param filename if non-NULL checks if filename terminates with the
- * extensions of the registered formats
- * @param mime_type if non-NULL checks if mime_type matches with the
- * MIME type of the registered formats
+ * Calling this function will become mandatory if using network
+ * protocols at some major version bump.
*)
+function avformat_network_init(): cint;
+ cdecl; external av__format;
+
(**
- * @deprecated Use av_guess_format() instead.
+ * Undo the initialization done by avformat_network_init.
*)
-function guess_format(short_name: PAnsiChar;
- filename: PAnsiChar;
- mime_type: PAnsiChar): PAVOutputFormat;
- cdecl; external av__format; deprecated;
-
-function av_guess_format(short_name: PAnsiChar;
- filename: PAnsiChar;
- mime_type: PAnsiChar): PAVOutputFormat;
+function avformat_network_deinit(): cint;
cdecl; external av__format;
(**
- * Guess the codec ID based upon muxer and filename.
+ * If f is NULL, returns the first registered input format,
+ * if f is non-NULL, returns the next registered input format after f
+ * or NULL if f is the last one.
*)
-function av_guess_codec(fmt: PAVOutputFormat; short_name: PAnsiChar;
- filename: PAnsiChar; mime_type: PAnsiChar;
- type_: TCodecType): TCodecID;
- cdecl; external av__format;
+function av_iformat_next(f: PAVInputFormat): PAVInputFormat;
+ cdecl; external av__format;
+(**
+ * If f is NULL, returns the first registered output format,
+ * if f is non-NULL, returns the next registered input format after f
+ * or NULL if f is the last one.
+ *)
+function av_oformat_next(f: PAVOutputFormat): PAVOutputFormat;
+ cdecl; external av__format;
(**
- * Send a nice hexadecimal dump of a buffer to the specified file stream.
- *
- * @param f The file stream pointer where the dump should be sent to.
- * @param buf buffer
- * @param size buffer size
- *
- * @see av_hex_dump_log, av_pkt_dump, av_pkt_dump_log
+ * Allocate an AVFormatContext.
+ * Can be freed with av_free() but do not forget to free everything you
+ * explicitly allocated as well!
*)
-procedure av_hex_dump(f: PAVFile; buf: PByteArray; size: cint);
+function avformat_alloc_context(): PAVFormatContext;
cdecl; external av__format;
(**
- * Send a nice hexadecimal dump of a buffer to the log.
- *
- * @param avcl A pointer to an arbitrary struct of which the first field is a
- * pointer to an AVClass struct.
- * @param level The importance level of the message, lower values signifying
- * higher importance.
- * @param buf buffer
- * @param size buffer size
- *
- * @see av_hex_dump, av_pkt_dump, av_pkt_dump_log
+ * Free an AVFormatContext and all its streams.
+ * @param s context to free
*)
-procedure av_hex_dump_log(avcl: Pointer; level: cint; buf: PByteArray; size: cint);
+procedure avformat_free_context(s: PAVFormatContext);
cdecl; external av__format;
(**
- * Send a nice dump of a packet to the specified file stream.
+ * Get the AVClass for AVFormatContext. It can be used in combination with
+ * AV_OPT_SEARCH_FAKE_OBJ for examining options.
*
- * @param f The file stream pointer where the dump should be sent to.
- * @param pkt packet to dump
- * @param dump_payload True if the payload must be displayed, too.
+ * @see av_opt_find().
*)
-procedure av_pkt_dump(f: PAVFile; pkt: PAVPacket; dump_payload: cint);
+function avformat_get_class(): {const}PAVClass;
cdecl; external av__format;
(**
- * Send a nice dump of a packet to the log.
+ * Add a new stream to a media file.
*
- * @param avcl A pointer to an arbitrary struct of which the first field is a
- * pointer to an AVClass struct.
- * @param level The importance level of the message, lower values signifying
- * higher importance.
- * @param pkt packet to dump
- * @param dump_payload True if the payload must be displayed, too.
+ * When demuxing, it is called by the demuxer in read_header(). If the
+ * flag AVFMTCTX_NOHEADER is set in s.ctx_flags, then it may also
+ * be called in read_packet().
+ *
+ * When muxing, should be called by the user before avformat_write_header().
+ *
+ * @param c If non-NULL, the AVCodecContext corresponding to the new stream
+ * will be initialized to use this codec. This is needed for e.g. codec-specific
+ * defaults to be set, so codec should be provided if it is known.
+ *
+ * @return newly created stream or NULL on error.
*)
-procedure av_pkt_dump_log(avcl: Pointer; level: cint; pkt: PAVPacket; dump_payload: cint);
+function avformat_new_stream(s: PAVFormatContext; c: PAVCodec): PAVStream;
+ cdecl; external av__format;
+
+function av_new_program(s: PAVFormatContext; id: cint): PAVProgram;
cdecl; external av__format;
(**
- * Initialize libavformat and register all the muxers, demuxers and
- * protocols. If you do not call this function, then you can select
- * exactly which formats you want to support.
- *
- * @see av_register_input_format()
- * @see av_register_output_format()
- * @see av_register_protocol()
+ * @}
*)
-procedure av_register_all();
+
+{$IFDEF FF_API_GUESS_IMG2_CODEC}
+function av_guess_image2_codec(filename: {const} PAnsiChar): TCodecID;
+ cdecl; external av__format;
+{$ENDIF}
+
+{$IFDEF FF_API_PKT_DUMP}
+procedure av_pkt_dump(f: PAVFile; pkt: PAVPacket; dump_payload: cint); {deprecated}
cdecl; external av__format;
+procedure av_pkt_dump_log(avcl: Pointer; level: cint; pkt: PAVPacket; dump_payload: cint); {deprecated}
+ cdecl; external av__format;
+{$ENDIF}
+{$IFDEF FF_API_ALLOC_OUTPUT_CONTEXT}
(**
- * Get the CodecID for the given codec tag tag.
- * If no codec id is found returns CODEC_ID_NONE.
- *
- * @param tags list of supported codec_id-codec_tag pairs, as stored
- * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag
+ * @deprecated deprecated in favor of avformat_alloc_output_context2()
*)
-function av_codec_get_id(var tags: PAVCodecTag; tag: cuint): TCodecID;
+function avformat_alloc_output_context({const} format: PAnsiChar;
+ oformat: PAVOutputFormat;
+ {const} filename: PAnsiChar): PAVFormatContext;
cdecl; external av__format;
+{$ENDIF}
(**
- * Getsthe codec tag for the given codec id id.
- * If no codec tag is found returns 0.
+ * Allocate an AVFormatContext for an output format.
+ * avformat_free_context() can be used to free the context and
+ * everything allocated by the framework within it.
*
- * @param tags list of supported codec_id-codec_tag pairs, as stored
- * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag
+ * @param *ctx is set to the created format context, or to NULL in
+ * case of failure
+ * @param oformat format to use for allocating the context, if NULL
+ * format_name and filename are used instead
+ * @param format_name the name of output format to use for allocating the
+ * context, if NULL filename is used instead
+ * @param filename the name of the filename to use for allocating the
+ * context, may be NULL
+ * @return >= 0 in case of success, a negative AVERROR code in case of
+ * failure
*)
-function av_codec_get_tag(var tags: PAVCodecTag; id: TCodecID): cuint;
+function avformat_alloc_output_context2(ctx: PPAVFormatContext; oformat: PAVOutputFormat;
+ {const} format_name: PAnsiChar; {const} filename: PAnsiChar): cint;
cdecl; external av__format;
-(* media file input *)
+(**
+ * @addtogroup lavf_decoding
+ * @{
+ *)
(**
* Find AVInputFormat based on the short name of the input format.
@@ -1190,6 +1660,17 @@ function av_probe_input_format2(pd: PAVProbeData; is_opened: cint; score_max: PC
cdecl; external av__format;
(**
+ * Guess the file format.
+ *
+ * @param is_opened Whether the file is already opened; determines whether
+ * demuxers with or without AVFMT_NOFILE are probed.
+ * @param score_ret The score of the best detection.
+ *)
+function av_probe_input_format3(pd: PAVProbeData; is_opened: cint; score_ret: Pcint): PAVInputFormat;
+ cdecl; external av__format;
+
+{$IFDEF 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].
*)
@@ -1214,20 +1695,50 @@ function av_open_input_file(var ic_ptr: PAVFormatContext; filename: PAnsiChar;
fmt: PAVInputFormat; buf_size: cint;
ap: PAVFormatParameters): cint;
cdecl; external av__format;
+{$ENDIF}
(**
- * Allocate an AVFormatContext.
- * Can be freed with av_free() but do not forget to free everything you
- * explicitly allocated as well!
+ * Open an input stream and read the header. The codecs are not opened.
+ * The stream must be closed with av_close_input_file().
+ *
+ * @param ps Pointer to user-supplied AVFormatContext (allocated by avformat_alloc_context).
+ * May be a pointer to NULL, in which case an AVFormatContext is allocated by this
+ * function and written into ps.
+ * Note that a user-supplied AVFormatContext will be freed on failure.
+ * @param filename Name of the stream to open.
+ * @param fmt If non-NULL, this parameter forces a specific input format.
+ * Otherwise the format is autodetected.
+ * @param options A dictionary filled with AVFormatContext and demuxer-private options.
+ * On return this parameter will be destroyed and replaced with a dict containing
+ * options that were not found. May be NULL.
+ *
+ * @return 0 on success, a negative AVERROR on failure.
+ *
+ * @note If you want to use custom IO, preallocate the format context and set its pb field.
*)
-function avformat_alloc_context(): PAVFormatContext;
+function avformat_open_input(ps: {PPAVFormatContext} pointer; {const} filename: PAnsiChar; fmt: PAVInputFormat; options: {PPAVDictionary} pointer): cint;
cdecl; external av__format;
+function av_demuxer_open(ic: PAVFormatContext; ap: TAVFormatParameters): cint;
+ cdecl; external av__format;
+
+{$IFDEF FF_API_FORMAT_PARAMETERS}
(**
- * @deprecated Use avformat_alloc_context() instead.
+ * Read packets of a media file to get stream information. This
+ * is useful for file formats with no headers such as MPEG. This
+ * function also computes the real framerate in case of MPEG-2 repeat
+ * frame mode.
+ * The logical file position is not changed by this function;
+ * examined packets may be buffered for later processing.
+ *
+ * @param ic media file handle
+ * @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.
*)
-function av_alloc_format_context(): PAVFormatContext;
+function av_find_stream_info(ic: PAVFormatContext): cint; {deprecated}
cdecl; external av__format;
+{$ENDIF}
(**
* Read packets of a media file to get stream information. This
@@ -1238,11 +1749,64 @@ function av_alloc_format_context(): PAVFormatContext;
* examined packets may be buffered for later processing.
*
* @param ic media file handle
+ * @param options If non-NULL, an ic.nb_streams long array of pointers to
+ * dictionaries, where i-th member contains options for
+ * codec corresponding to i-th stream.
+ * On return each dictionary will be filled with options that were not found.
* @return >=0 if OK, AVERROR_xxx on error
+ *
+ * @note this function isn't guaranteed to open all the codecs, so
+ * options being non-empty at return is a perfectly normal behavior.
+ *
* @todo Let the user decide somehow what information is needed so that
* we do not waste time getting stuff the user does not need.
*)
-function av_find_stream_info(ic: PAVFormatContext): cint;
+function avformat_find_stream_info(ic: PAVFormatContext; options: {PPAVDictionary} pointer): cint;
+ cdecl; external av__format;
+
+(**
+ * Find the programs which belong to a given stream.
+ *
+ * @param ic media file handle
+ * @param last the last found program, the search will start after this
+ * program, or from the beginning if it is NULL
+ * @param s stream index
+ * @return the next program which belongs to s, NULL if no program is found or
+ * the last program is not among the programs of ic.
+ *)
+function av_find_program_from_stream(ic: PAVFormatContext; last: PAVProgram; s: cint): PAVProgram;
+ cdecl; external av__format;
+
+(**
+ * Find the "best" stream in the file.
+ * The best stream is determined according to various heuristics as the most
+ * likely to be what the user expects.
+ * If the decoder parameter is non-NULL, av_find_best_stream will find the
+ * default decoder for the stream's codec; streams for which no decoder can
+ * be found are ignored.
+ *
+ * @param ic media file handle
+ * @param type stream type: video, audio, subtitles, etc.
+ * @param wanted_stream_nb user-requested stream number,
+ * or -1 for automatic selection
+ * @param related_stream try to find a stream related (eg. in the same
+ * program) to this one, or -1 if none
+ * @param decoder_ret if non-NULL, returns the decoder for the
+ * selected stream
+ * @param flags flags; none are currently defined
+ * @return the non-negative stream number in case of success,
+ * AVERROR_STREAM_NOT_FOUND if no stream with the requested type
+ * could be found,
+ * AVERROR_DECODER_NOT_FOUND if streams were found but no decoder
+ * @note If av_find_best_stream returns successfully and decoder_ret is not
+ * NULL, then *decoder_ret is guaranteed to be set to a valid AVCodec.
+ *)
+function av_find_best_stream(ic: PAVFormatContext;
+ type_: TAVMediaType;
+ wanted_stream_nb: cint;
+ related_stream: cint;
+ decoder_ret: {PPAVCodec} pointer;
+ flags: cint): cint;
cdecl; external av__format;
(**
@@ -1260,11 +1824,16 @@ function av_read_packet(s: PAVFormatContext; var pkt: TAVPacket): cint;
(**
* Return the next frame of a stream.
+ * This function returns what is stored in the file, and does not validate
+ * that what is there are valid frames for the decoder. It will split what is
+ * stored in the file into frames and return one for each call. It will not
+ * omit invalid data between valid frames so as to give the decoder the maximum
+ * information possible for decoding.
*
* The returned packet is valid
* until the next av_read_frame() or until av_close_input_file() and
* must be freed with av_free_packet. For video, the packet contains
- * exactly one frame. For audio, it contains an cint number of
+ * exactly one frame. For audio, it contains an integer number of
* frames if each frame has a known fixed size (e.g. PCM or ADPCM
* data). If the audio frames have a variable size (e.g. MPEG audio),
* then it contains one frame.
@@ -1296,40 +1865,6 @@ function av_seek_frame(s: PAVFormatContext; stream_index: cint; timestamp: cint6
cdecl; external av__format;
(**
- * Seek to timestamp ts.
- * Seeking will be done so that the point from which all active streams
- * can be presented successfully will be closest to ts and within min/max_ts.
- * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL.
- *
- * If flags contain AVSEEK_FLAG_BYTE, then all timestamps are in byte and
- * are the file position (this may not be supported by all demuxers).
- * If flags contain AVSEEK_FLAG_FRAME then all timestamps are in frames
- * in the stream with stream_index (this may not be supported by all demuxers).
- * Otherwise all timestamps are in units of the stream selected by stream_index
- * or if stream_index is -1, in AV_TIME_BASE units.
- * If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as
- * keyframes (this may not be supported by all demuxers).
- *
- * @param stream_index index of the stream which is used as time base reference.
- * @param min_ts smallest acceptable timestamp
- * @param ts target timestamp
- * @param max_ts largest acceptable timestamp
- * @param flags flags
- * @return >=0 on success, error code otherwise
- *
- * @note This is part of the new seek API which is still under construction.
- * Thus do not use this yet. It may change at any time, do not expect
- * ABI compatibility yet!
- *)
-function avformat_seek_file(s: PAVFormatContext;
- stream_index: cint;
- min_ts: cint64;
- ts: cint64;
- max_ts: cint64;
- flags: cint): cint;
- cdecl; external av__format;
-
-(**
* Start playing a network-based stream (e.g. RTSP stream) at the
* current position.
*)
@@ -1344,22 +1879,39 @@ function av_read_play(s: PAVFormatContext): cint;
function av_read_pause(s: PAVFormatContext): cint;
cdecl; external av__format;
+{$IFDEF 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;
+{$ENDIF}
+{$IFDEF FF_API_CLOSE_INPUT_FILE}
(**
+ * @deprecated use avformat_close_input()
* Close a media file (but not its codecs).
*
* @param s media file handle
*)
procedure av_close_input_file(s: PAVFormatContext);
cdecl; external av__format;
+{$ENDIF}
(**
+ * Close an opened input AVFormatContext. Free it and all its contents
+ * and set *s to NULL.
+ *)
+procedure avformat_close_input(s: PPAVFormatContext);
+ cdecl; external av__format;
+(**
+ * @}
+ *)
+
+{$IFDEF FF_API_NEW_STREAM}
+(**
* Add a new stream to a media file.
*
* Can only be called in the read_header() function. If the flag
@@ -1371,39 +1923,16 @@ procedure av_close_input_file(s: PAVFormatContext);
*)
function av_new_stream(s: PAVFormatContext; id: cint): PAVStream;
cdecl; external av__format;
+{$ENDIF}
-function av_new_program(s: PAVFormatContext; id: cint): PAVProgram;
- cdecl; external av__format;
-
-(**
- * Add a new chapter.
- * This function is NOT part of the public API
- * and should ONLY be used by demuxers.
- *
- * @param s media file handle
- * @param id unique ID for this chapter
- * @param start chapter start time in time_base units
- * @param end chapter end time in time_base units
- * @param title chapter title
- *
- * @return AVChapter or NULL on error
- *)
-function ff_new_chapter(s: PAVFormatContext; id: cint; time_base: TAVRational;
- start, end_: cint64; title: {const} PAnsiChar): PAVChapter;
- cdecl; external av__format;
-
+{$IFDEF FF_API_SET_PTS_INFO}
(**
- * Set the pts for a given stream.
- *
- * @param s stream
- * @param pts_wrap_bits number of bits effectively used by the pts
- * (used for wrap control, 33 is the value for MPEG)
- * @param pts_num numerator to convert to seconds (MPEG: 1)
- * @param pts_den denominator to convert to seconds (MPEG: 90000)
+ * @deprecated this function is not supposed to be called outside of lavf
*)
procedure av_set_pts_info(s: PAVStream; pts_wrap_bits: cint;
pts_num: cuint; pts_den: cuint);
cdecl; external av__format;
+{$ENDIF}
const
AVSEEK_FLAG_BACKWARD = 1; ///< seek backward
@@ -1411,114 +1940,55 @@ const
AVSEEK_FLAG_ANY = 4; ///< seek to any frame, even non-keyframes
AVSEEK_FLAG_FRAME = 8;
-function av_find_default_stream_index(s: PAVFormatContext): cint;
- cdecl; external av__format;
-
-(**
- * Get the index for a specific timestamp.
- * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond
- * to the timestamp which is <= the requested one, if backward
- * is 0, then it will be >=
- * if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise
- * @return < 0 if no such timestamp could be found
- *)
-function av_index_search_timestamp(st: PAVStream; timestamp: cint64; flags: cint): cint;
- cdecl; external av__format;
-
-(**
- * Ensure the index uses less memory than the maximum specified in
- * AVFormatContext.max_index_size by discarding entries if it grows
- * too large.
- * This function is not part of the public API and should only be called
- * by demuxers.
- *)
-procedure ff_reduce_index(s: PAVFormatContext; stream_index: cint);
- cdecl; external av__format;
-
-(**
- * Add an index entry into a sorted list. Update the entry if the list
- * already contains it.
- *
- * @param timestamp timestamp in the timebase of the given stream
- *)
-function av_add_index_entry(st: PAVStream; pos: cint64; timestamp: cint64;
- size: cint; distance: cint; flags: cint): cint;
- cdecl; external av__format;
-
-(**
- * Perform a binary search using av_index_search_timestamp() and
- * AVInputFormat.read_timestamp().
- * This is not supposed to be called directly by a user application,
- * but by demuxers.
- * @param target_ts target timestamp in the time base of the given stream
- * @param stream_index stream number
- *)
+{$IFDEF FF_API_SEEK_PUBLIC}
function av_seek_frame_binary(s: PAVFormatContext; stream_index: cint;
- target_ts: cint64; flags: cint): cint;
+ target_ts: cint64; flags: cint): cint; {deprecated}
cdecl; external av__format;
-
-(**
- * Update cur_dts of all streams based on the given timestamp and AVStream.
- *
- * Stream ref_st unchanged, others set cur_dts in their native time base.
- * Only needed for timestamp wrapping or if (dts not set and pts!=dts).
- * @param timestamp new dts expressed in time_base of param ref_st
- * @param ref_st reference stream giving time_base of param timestamp
- *)
procedure av_update_cur_dts(s: PAVFormatContext; ref_st: PAVStream;
- timestamp: cint64);
+ timestamp: cint64); {deprecated}
cdecl; external av__format;
type
TReadTimestampFunc = function (pavfc: PAVFormatContext;
arg2: cint; arg3: Pint64; arg4: cint64): cint64; cdecl;
-(**
- * Perform a binary search using read_timestamp().
- * This is not supposed to be called directly by a user application,
- * but by demuxers.
- * @param target_ts target timestamp in the time base of the given stream
- * @param stream_index stream number
- *)
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;
+ read_timestamp: TReadTimestampFunc): cint64; {deprecated}
cdecl; external av__format;
+{$ENDIF}
+{$IFDEF FF_API_FORMAT_PARAMETERS}
(**
* media file output
*)
function av_set_parameters(s: PAVFormatContext; ap: PAVFormatParameters): cint;
cdecl; external av__format;
-
+{$ENDIF}
+
(**
- * Split a URL string into components.
+ * @addtogroup lavf_encoding
+ * @{
+ *)
+(**
+ * Allocate the stream private data and write the stream header to
+ * an output media file.
*
- * The pointers to buffers for storing individual components may be null,
- * in order to ignore that component. Buffers for components not found are
- * set to empty strings. If the port is not found, it is set to a negative
- * value.
+ * @param s Media file handle, must be allocated with avformat_alloc_context().
+ * Its oformat field must be set to the desired output format;
+ * Its pb field must be set to an already openened AVIOContext.
+ * @param options An AVDictionary filled with AVFormatContext and muxer-private options.
+ * On return this parameter will be destroyed and replaced with a dict containing
+ * options that were not found. May be NULL.
*
- * @param proto the buffer for the protocol
- * @param proto_size the size of the proto buffer
- * @param authorization the buffer for the authorization
- * @param authorization_size the size of the authorization buffer
- * @param hostname the buffer for the host name
- * @param hostname_size the size of the hostname buffer
- * @param port_ptr a pointer to store the port number in
- * @param path the buffer for the path
- * @param path_size the size of the path buffer
- * @param url the URL to split
+ * @return 0 on success, negative AVERROR on failure.
+ *
+ * @see av_opt_find, av_dict_set, avio_open, av_oformat_next.
*)
-procedure av_url_split(proto: PAnsiChar; proto_size: cint;
- authorization: PAnsiChar; authorization_size: cint;
- hostname: PAnsiChar; hostname_size: cint;
- port_ptr: Pcint;
- path: PAnsiChar; path_size: cint;
- {const} url: PAnsiChar);
+function avformat_write_header(s: PAVFormatContext; options: {PPAVDictionary} pointer): cint;
cdecl; external av__format;
(**
@@ -1528,23 +1998,21 @@ procedure av_url_split(proto: PAnsiChar; proto_size: cint;
* @param s media file handle
* @return 0 if OK, AVERROR_xxx on error
*)
-function av_write_header(s: PAVFormatContext): cint;
- cdecl; external av__format;
-
+{$IFDEF FF_API_FORMAT_PARAMETERS}
(**
- * Write a packet to an output media file.
- *
- * The packet shall contain one audio or video frame.
- * The packet must be correctly interleaved according to the container
- * specification, if not then av_interleaved_write_frame must be used.
+ * 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
- * @param pkt The packet, which contains the stream_index, buf/buf_size,
- * dts/pts, ...
- * @return < 0 on error, = 0 if OK, 1 if end of stream wanted
+ * @return 0 if OK, AVERROR_xxx on error
+ *
+ * @deprecated use avformat_write_header.
*)
-function av_write_frame(s: PAVFormatContext; var pkt: TAVPacket): cint;
+function av_write_header(s: PAVFormatContext): cint; {deprecated}
cdecl; external av__format;
+{$ENDIF}
(**
* Write a packet to an output media file ensuring correct interleaving.
@@ -1557,9 +2025,18 @@ function av_write_frame(s: PAVFormatContext; var pkt: TAVPacket): cint;
* demuxer level.
*
* @param s media file handle
- * @param pkt The packet, which contains the stream_index, buf/buf_size,
- * dts/pts, ...
- * @return < 0 on error, = 0 if OK, 1 if end of stream wanted
+ * @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
+ * @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
+ * index of the corresponding stream in @ref AVFormatContext.streams
+ * "s.streams".
+ * It is very strongly recommended that timing information (@ref AVPacket.pts
+ * "pts", @ref AVPacket.dts "dts" @ref AVPacket.duration "duration") is set to
+ * correct values.
+ *
+ * @return 0 on success, a negative AVERROR on error.
*)
function av_interleaved_write_frame(s: PAVFormatContext; var pkt: TAVPacket): cint;
cdecl; external av__format;
@@ -1584,22 +2061,6 @@ function av_interleave_packet_per_dts(s: PAVFormatContext; _out: PAVPacket;
cdecl; external av__format;
(**
- * Add packet to AVFormatContext->packet_buffer list, determining its
- * interleaved position using compare() function argument.
- *
- * This function is not part of the public API and should only be called
- * by muxers using their own interleave function.
- *)
-{
-procedure ff_interleave_add_packet(s: PAVFormatContext;
- pkt: PAVPacket;
- compare: function(para1: PAVFormatContext;
- para2: PAVPacket;
- para3: PAVPacket): cint);
- cdecl; external av__format;
-}
-
-(**
* Write the stream trailer to an output media file and free the
* file private data.
*
@@ -1611,83 +2072,227 @@ procedure ff_interleave_add_packet(s: PAVFormatContext;
function av_write_trailer(s: pAVFormatContext): cint;
cdecl; external av__format;
-procedure dump_format(ic: PAVFormatContext; index: cint; url: PAnsiChar;
- is_output: cint);
+(**
+ * Return the output format in the list of registered output formats
+ * which best matches the provided parameters, or return NULL if
+ * there is no match.
+ *
+ * @param short_name if non-NULL checks if short_name matches with the
+ * names of the registered formats
+ * @param filename if non-NULL checks if filename terminates with the
+ * extensions of the registered formats
+ * @param mime_type if non-NULL checks if mime_type matches with the
+ * MIME type of the registered formats
+ *)
+function av_guess_format(short_name: PAnsiChar;
+ filename: PAnsiChar;
+ mime_type: PAnsiChar): PAVOutputFormat;
cdecl; external av__format;
(**
- * Parse width and height out of string str.
- * @deprecated Use av_parse_video_frame_size instead.
+ * Guess the codec ID based upon muxer and filename.
*)
-function parse_image_size(width_ptr: PCint; height_ptr: PCint;
- str: PAnsiChar): cint;
- cdecl; external av__format; deprecated;
+function av_guess_codec(fmt: PAVOutputFormat; short_name: PAnsiChar;
+ filename: PAnsiChar; mime_type: PAnsiChar;
+ type_: TCodecType): TCodecID;
+ cdecl; external av__format;
(**
- * Convert framerate from a string to a fraction.
- * @deprecated Use av_parse_video_frame_rate instead.
+ * Get timing information for the data currently output.
+ * The exact meaning of "currently output" depends on the format.
+ * It is mostly relevant for devices that have an internal buffer and/or
+ * work in real time.
+ * @param s media file handle
+ * @param stream stream in the media file
+ * @param dts[out] DTS of the last packet output for the stream, in stream
+ * time_base units
+ * @param wall[out] absolute time when that packet whas output,
+ * in microsecond
+ * @return 0 if OK, AVERROR(ENOSYS) if the format does not support it
+ * Note: some formats or devices may not allow to measure dts and wall
+ * atomically.
*)
-function parse_frame_rate(frame_rate: PCint; frame_rate_base: PCint;
- arg: PByteArray): cint;
- cdecl; external av__format; deprecated;
+function av_get_output_timestamp(s: PAVFormatContext; stream: cint;
+ dts: Pcint64; wall: Pcint64): cint;
+ cdecl; external av__format;
+
(**
- * Parse datestr and return a corresponding number of microseconds.
- * @param datestr String representing a date or a duration.
- * - If a date the syntax is:
- * @code
- * now|{[{YYYY-MM-DD|YYYYMMDD}[T|t| ]]{{HH[:MM[:SS[.m...]]]}|{HH[MM[SS[.m...]]]}}[Z|z]}
- * @endcode
- * If the value is "now" it takes the current time.
- * Time is localtime unless Z is appended, in which case it is
- * interpreted as UTC.
- * If the year-month-day part is not specified it takes the current
- * year-month-day.
- * Returns the number of microseconds since 1st of January, 1970 up to
- * the time of the parsed date or INT64_MIN if datestr cannot be
- * successfully parsed.
- * - If a duration the syntax is:
- * @code
- * [-]HH[:MM[:SS[.m...]]]
- * [-]S+[.m...]
- * @endcode
- * @return the number of microseconds contained in a time interval
- * with the specified duration or INT64_MIN if datestr cannot be
- * successfully parsed.
- * @param duration Flag which tells how to interpret datestr, if
- * not zero datestr is interpreted as a duration, otherwise as a
- * date.
+ * @}
+ *)
+
+
+(**
+ * @defgroup lavf_misc Utility functions
+ * @ingroup libavf
+ * @{
+ *
+ * Miscelaneous utility functions related to both muxing and demuxing
+ * (or neither).
+ *)
+
+(**
+ * Send a nice hexadecimal dump of a buffer to the specified file stream.
+ *
+ * @param f The file stream pointer where the dump should be sent to.
+ * @param buf buffer
+ * @param size buffer size
+ *
+ * @see av_hex_dump_log, av_pkt_dump2, av_pkt_dump_log2
*)
-function parse_date(datestr: PAnsiChar; duration: cint): cint64;
+procedure av_hex_dump(f: PAVFile; buf: PByteArray; size: cint); {<-?FILE}
cdecl; external av__format;
(**
- * Get the current time in microseconds.
+ * Send a nice hexadecimal dump of a buffer to the log.
+ *
+ * @param avcl A pointer to an arbitrary struct of which the first field is a
+ * pointer to an AVClass struct.
+ * @param level The importance level of the message, lower values signifying
+ * higher importance.
+ * @param buf buffer
+ * @param size buffer size
+ *
+ * @see av_hex_dump, av_pkt_dump, av_pkt_dump_log
*)
-function av_gettime(): cint64;
+procedure av_hex_dump_log(avcl: Pointer; level: cint; buf: PByteArray; size: cint);
cdecl; external av__format;
-(* ffm-specific for ffserver *)
-const
- FFM_PACKET_SIZE = 4096;
+(**
+ * Send a nice dump of a packet to the specified file stream.
+ *
+ * @param f The file stream pointer where the dump should be sent to.
+ * @param pkt packet to dump
+ * @param dump_payload True if the payload must be displayed, too.
+ * @param st AVStream that the packet belongs to
+ *)
+procedure av_pkt_dump2(f: PAVFile; pkt: PAVPacket; dump_payload: cint; st: PAVStream);
+ cdecl; external av__format;
+
+(**
+ * Send a nice dump of a packet to the log.
+ *
+ * @param avcl A pointer to an arbitrary struct of which the first field is a
+ * pointer to an AVClass struct.
+ * @param level The importance level of the message, lower values signifying
+ * higher importance.
+ * @param pkt packet to dump
+ * @param dump_payload True if the payload must be displayed, too.
+ * @param st AVStream that the packet belongs to
+ *)
+procedure av_pkt_dump_log2(avcl: pointer; level: cint; pkt: PAVPacket; dump_payload: cint;
+ st: PAVStream);
+ cdecl; external av__format;
+
+(**
+ * Get the CodecID for the given codec tag tag.
+ * If no codec id is found returns CODEC_ID_NONE.
+ *
+ * @param tags list of supported codec_id-codec_tag pairs, as stored
+ * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag
+ *)
+function av_codec_get_id(var tags: PAVCodecTag; tag: cuint): TCodecID;
+ cdecl; external av__format;
+
+(**
+ * Getsthe codec tag for the given codec id id.
+ * If no codec tag is found returns 0.
+ *
+ * @param tags list of supported codec_id-codec_tag pairs, as stored
+ * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag
+ *)
+function av_codec_get_tag(var tags: PAVCodecTag; id: TCodecID): cuint;
+ cdecl; external av__format;
+
+function av_find_default_stream_index(s: PAVFormatContext): cint;
+ cdecl; external av__format;
-function ffm_read_write_index(fd: cint): cint64;
+(**
+ * Get the index for a specific timestamp.
+ * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond
+ * to the timestamp which is <= the requested one, if backward
+ * is 0, then it will be >=
+ * if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise
+ * @return < 0 if no such timestamp could be found
+ *)
+function av_index_search_timestamp(st: PAVStream; timestamp: cint64; flags: cint): cint;
cdecl; external av__format;
-function ffm_write_write_index(fd: cint; pos: cint64): cint;
+(**
+ * Add an index entry into a sorted list. Update the entry if the list
+ * already contains it.
+ *
+ * @param timestamp timestamp in the timebase of the given stream
+ *)
+function av_add_index_entry(st: PAVStream; pos: cint64; timestamp: cint64;
+ size: cint; distance: cint; flags: cint): cint;
cdecl; external av__format;
-procedure ffm_set_write_index(s: PAVFormatContext; pos: cint64; file_size: cint64);
+(**
+ * Split a URL string into components.
+ *
+ * The pointers to buffers for storing individual components may be null,
+ * in order to ignore that component. Buffers for components not found are
+ * set to empty strings. If the port is not found, it is set to a negative
+ * value.
+ *
+ * @param proto the buffer for the protocol
+ * @param proto_size the size of the proto buffer
+ * @param authorization the buffer for the authorization
+ * @param authorization_size the size of the authorization buffer
+ * @param hostname the buffer for the host name
+ * @param hostname_size the size of the hostname buffer
+ * @param port_ptr a pointer to store the port number in
+ * @param path the buffer for the path
+ * @param path_size the size of the path buffer
+ * @param url the URL to split
+ *)
+procedure av_url_split(proto: PAnsiChar; proto_size: cint;
+ authorization: PAnsiChar; authorization_size: cint;
+ hostname: PAnsiChar; hostname_size: cint;
+ port_ptr: Pcint;
+ path: PAnsiChar; path_size: cint;
+ {const} url: PAnsiChar);
cdecl; external av__format;
+{$IFDEF FF_API_DUMP_FORMAT}
(**
- * Attempt to find a specific tag in a URL.
+ * @deprecated Deprecated in favor of av_dump_format().
+ *)
+procedure dump_format(ic: PAVFormatContext; index: cint; url: PAnsiChar;
+ is_output: cint);
+ cdecl; external av__format;
+{$ENDIF}
+
+procedure av_dump_format(ic: PAVFormatContext; index: cint; url: PAnsiChar;
+ is_output: cint);
+ cdecl; external av__format;
+
+{$IFDEF FF_API_PARSE_DATE}
+(**
+ * Parse datestr and return a corresponding number of microseconds.
*
- * syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done.
- * Return 1 if found.
+ * @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;
+{$ENDIF}
+
+(**
+ * Get the current time in microseconds.
+ *)
+function av_gettime(): cint64;
+ cdecl; external av__format;
+
+{$IFDEF 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;
+{$ENDIF}
(**
* Return in 'buf' the path with '%d' replaced by a number.
@@ -1723,13 +2328,18 @@ function av_filename_number_test(filename: PAnsiChar): cint;
* all the contexts in the array (an AVCodecContext per RTP stream)
* must contain only one AVStream.
* @param n_files number of AVCodecContexts contained in ac
- * @param buff buffer where the SDP will be stored (must be allocated by
- * the caller)
+ * @param buf buffer where the SDP will be stored (must be allocated by
+ * the caller)
* @param size the size of the buffer
* @return 0 if OK, AVERROR_xxx on error
*)
+function av_sdp_create(ac: pointer; n_files: cint; buf: PAnsiChar; size: cint): cint;
+ cdecl; external av__format;
+
+{$IFDEF FF_API_SDP_CREATE}
function avf_sdp_create(ac: PPAVFormatContext; n_files: cint; buff: PByteArray; size: cint): cint;
cdecl; external av__format;
+{$ENDIF}
(**
* Return a positive value if the given filename has one of the given
@@ -1740,6 +2350,47 @@ function avf_sdp_create(ac: PPAVFormatContext; n_files: cint; buff: PByteArray;
function av_match_ext(filename: {const} Pchar; extensions: {const} Pchar): cint;
cdecl; external av__format;
+(**
+ * Test if the given container can store a codec.
+ *
+ * @param std_compliance standards compliance level, one of FF_COMPLIANCE_*
+ *
+ * @return 1 if codec with ID codec_id can be stored in ofmt, 0 if it cannot.
+ * A negative number if this information is not available.
+ *)
+function avformat_query_codec(ofmt: PAVOutputFormat; codec_id: TCodecID; std_compliance: cint): cint;
+ cdecl; external av__format;
+
+(**
+ * @defgroup riff_fourcc RIFF FourCCs
+ * @{
+ * Get the tables mapping RIFF FourCCs to libavcodec CodecIDs. The tables are
+ * meant to be passed to av_codec_get_id()/av_codec_get_tag() as in the
+ * following code:
+ * @code
+ * uint32_t tag = MKTAG('H', '2', '6', '4');
+ * const struct AVCodecTag *table[] = { avformat_get_riff_video_tags(), 0 };
+ * enum CodecID id = av_codec_get_id(table, tag);
+ * @endcode
+ *)
+(**
+ * @return the table mapping RIFF FourCCs for video to libavcodec CodecID.
+ *)
+function avformat_get_riff_video_tags(): {const} PAVCodecTag;
+ cdecl; external av__format;
+(**
+ * @return the table mapping RIFF FourCCs for audio to CodecID.
+ *)
+function avformat_get_riff_audio_tags(): {const} PAVCodecTag;
+ cdecl; external av__format;
+(**
+ * @}
+ *)
+
+(**
+ * @}
+ *)
+
implementation
end.
diff --git a/src/lib/ffmpeg-0.10/avio.pas b/src/lib/ffmpeg-0.10/avio.pas
index 426f5f75..30d82f82 100644
--- a/src/lib/ffmpeg-0.10/avio.pas
+++ b/src/lib/ffmpeg-0.10/avio.pas
@@ -96,9 +96,27 @@ const
type
TReadWriteFunc = function(opaque: Pointer; buf: PByteArray; buf_size: cint): cint; cdecl;
TSeekFunc = function(opaque: Pointer; offset: cint64; whence: cint): cint64; cdecl;
+ Tcallback = function(p: pointer): cint; cdecl;
type
(**
+ * Callback for checking whether to abort blocking functions.
+ * AVERROR_EXIT is returned in this case by the interrupted
+ * function. During blocking operations, callback is called with
+ * opaque as parameter. If the callback returns 1, the
+ * blocking operation will be aborted.
+ *
+ * No members can be added to this struct without a major bump, if
+ * new elements have been added after this struct in AVFormatContext
+ * or AVIOContext.
+ *)
+ PAVIOInterruptCB = ^TAVIOInterruptCB;
+ TAVIOInterruptCB = record
+ callback: Tcallback;
+ opaque: pointer;
+ end; (*TAVIOInterruptCB*)
+
+(**
* Bytestream IO Context.
* New fields can be added to the end with minor version bumps.
* Removal, reordering and changes to existing fields require a major
@@ -112,6 +130,21 @@ type
*)
PAVIOContext = ^TAVIOContext;
TAVIOContext = record
+{$IFNDEF FF_API_OLD_AVIO}
+ (**
+ * A class for private options.
+ *
+ * If this AVIOContext is created by avio_open2(), av_class is set and
+ * passes the options down to protocols.
+ *
+ * If this AVIOContext is manually allocated, then av_class may be set by
+ * the caller.
+ *
+ * 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}
buffer: PByteArray; (**< Start of the buffer. *)
buffer_size: cint; (**< Maximum buffer size *)
buf_ptr: PByteArray; (**< Current position in the buffer *)
@@ -151,6 +184,12 @@ type
* A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
*)
seekable: cint;
+
+ (**
+ * max filesize, used to limit allocations
+ * This field is internal to libavformat and access from outside is not allowed.
+ *)
+ maxsize: cint64;
end;
(* unbuffered I/O *)
@@ -169,9 +208,7 @@ type
PPURLContext = ^PURLContext;
PURLContext = ^TURLContext;
TURLContext = record
-{$IF FF_API_URL_CLASS}
av_class: {const} PAVClass; ///< information for av_log(). Set by url_open().
-{$ENDIF}
prot: PURLProtocol;
flags: cint;
is_streamed: cint; (**< true if streamed (no seek possible), default = false *)
@@ -179,6 +216,7 @@ type
priv_data: pointer;
filename: PAnsiChar; (**< specified URL *)
is_connected: cint;
+ interrupt_callback: TAVIOInterruptCB;
end;
(**
@@ -216,14 +254,14 @@ function url_poll(poll_table: PURLPollEntry; n: cint; timeout: cint): cint;
const
(**
- * @defgroup open_modes URL open modes
+ * @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 = 0; (**< read-only *)
- URL_WRONLY = 1; (**< write-only *)
- URL_RDWR = 2; (**< read-write *)
+ URL_RDONLY = 1; (**< read-only *)
+ URL_WRONLY = 2; (**< write-only *)
+ URL_RDWR = {(URL_RDONLY|URL_WRONLY)} 3; (**< read-write *)
(**
* @
*)
@@ -240,7 +278,7 @@ const
* Warning: non-blocking protocols is work-in-progress; this flag may be
* silently ignored.
*)
- URL_FLAG_NONBLOCK = 4;
+ URL_FLAG_NONBLOCK = 8;
type
PURLInterruptCB = ^TURLInterruptCB;
@@ -315,7 +353,8 @@ type
function init_put_byte(s: PAVIOContext;
buffer: PByteArray;
- buffer_size: cint; write_flag: cint;
+ buffer_size: cint;
+ write_flag: cint;
opaque: pointer;
read_packet: TReadWriteFunc;
write_packet: TReadWriteFunc;
@@ -501,13 +540,11 @@ function url_exist(url: {const} PAnsiChar): cint;
* one call to another. Thus you should not trust the returned value,
* unless you are sure that no other processes are accessing the
* checked resource.
- *
- * @note This function is slightly broken until next major bump
- * because of AVIO_RDONLY == 0. Don't use it until then.
*)
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
@@ -516,28 +553,8 @@ function avio_check(url: {const} PAnsiChar; flags: cint): cint;
*)
procedure avio_set_interrupt_cb(interrupt_cb: Pointer);
cdecl; external av__format;
-
-{$IF FF_API_REGISTER_PROTOCOL}
-{
-var
- first_protocol: PURLProtocol; cvar; external av__format;
-}
{$IFEND}
-{$IF FF_API_REGISTER_PROTOCOL}
-(**
- * @deprecated Use av_register_protocol() instead.
- *)
-function register_protocol(protocol: PURLProtocol): cint;
- cdecl; external av__format; deprecated;
-
-(**
- * @deprecated Use av_register_protocol2() instead.
- *)
-function av_register_protocol(protocol: PURLProtocol): cint;
- cdecl; external av__format; deprecated;
-{$ENDIF}
-
(**
* Allocate and initialize an AVIOContext for buffered I/O. It must be later
* freed with av_free().
@@ -728,32 +745,16 @@ function avio_get_str16le(pb: PAVIOContext; maxlen: cint; buf: PAnsiChar; buflen
function avio_get_str16be(pb: PAVIOContext; maxlen: cint; buf: PAnsiChar; buflen: cint): cint;
cdecl; external av__format;
-{$IF FF_API_URL_RESETBUF}
-(** Reset the buffer for reading or writing.
- * @note Will drop any data currently in the buffer without transmitting it.
- * @param flags URL_RDONLY to set up the buffer for reading, or URL_WRONLY
- * to set up the buffer for writing. *)
-function url_resetbuf(s: PAVIOContext; flags: cint): cint;
- cdecl; external av__format;
-{$ENDIF}
-
(**
- * @defgroup open_modes URL open modes
+ * @name URL open modes
* The flags argument to avio_open must be one of the following
* constants, optionally ORed with other flags.
- * @
+ * @{
*)
-
const
-{$IF LIBAVFORMAT_VERSION_MAJOR < 53}
- AVIO_RDONLY = 0; (**< read-only *)
- AVIO_WRONLY = 1; (**< write-only *)
- AVIO_RDWR = 2; (**< read-write *)
-{$ELSE}
- AVIO_RDONLY = 1; (**< read-only *)
- AVIO_WRONLY = 2; (**< write-only *)
- AVIO_RDWR = 4; (**< read-write *)
-{$ENDIF}
+ AVIO_FLAG_READ = 1; (**< read-only *)
+ AVIO_FLAG_WRITE = 2; (**< write-only *)
+ AVIO_FLAG_READ_WRITE = {(AVIO_FLAG_READ|AVIO_FLAG_WRITE)} 3; (**< read-write pseudo flag *)
(**
* @
*)
@@ -771,11 +772,7 @@ const
* silently ignored.
*)
const
-{$IF LIBAVFORMAT_VERSION_MAJOR < 53}
- AVIO_FLAG_NONBLOCK = 4;
-{$ELSE}
AVIO_FLAG_NONBLOCK = 8;
-{$ENDIF}
(**
* Create and initialize a AVIOContext for accessing the
@@ -794,6 +791,27 @@ function avio_open(var s: PAVIOContext; url: {const} PAnsiChar; flags: cint): ci
cdecl; external av__format;
(**
+ * Create and initialize a AVIOContext for accessing the
+ * resource indicated by url.
+ * @note When the resource indicated by url has been opened in
+ * read+write mode, the AVIOContext can be used only for writing.
+ *
+ * @param s Used to return the pointer to the created AVIOContext.
+ * In case of failure the pointed to value is set to NULL.
+ * @param flags flags which control how the resource indicated by url
+ * is to be opened
+ * @param int_cb an interrupt callback to be used at the protocols level
+ * @param options A dictionary filled with protocol-private options. On return
+ * this parameter will be destroyed and replaced with a dict containing options
+ * that were not found. May be NULL.
+ * @return 0 in case of success, a negative value corresponding to an
+ * AVERROR code in case of failure
+ *)
+function avio_open2(s: {PPAVIOContext} pointer; {const} url: PAnsiChar; flags: cint;
+ {const} int_cb: PAVIOInterruptCB; options: {PPAVDictionary} pointer): cint;
+ cdecl; external av__format;
+
+(**
* Close the resource accessed by the AVIOContext s and free it.
* This function can only be used if s was opened by avio_open().
*
@@ -823,11 +841,6 @@ function avio_open_dyn_buf(var s: PAVIOContext): cint;
function avio_close_dyn_buf(s: PAVIOContext; var pbuffer: Pcuint8): cint;
cdecl; external av__format;
-{$IF FF_API_UDP_GET_FILE}
-function udp_get_file_handle(h: PURLContext): cint;
- cdecl; external av__format;
-{$ENDIF}
-
(**
* Iterate through names of available protocols.
* @note it is recommanded to use av_protocol_next() instead of this
diff --git a/src/lib/ffmpeg-0.10/avutil.pas b/src/lib/ffmpeg-0.10/avutil.pas
index f50bef6e..0d9235e0 100644
--- a/src/lib/ffmpeg-0.10/avutil.pas
+++ b/src/lib/ffmpeg-0.10/avutil.pas
@@ -71,11 +71,11 @@ const
(* Check if linked versions are supported *)
{$IF (LIBAVUTIL_VERSION < LIBAVUTIL_MIN_VERSION)}
- {$MESSAGE Error 'Linked version of libavutil is too old!'}
+// {$MESSAGE Error 'Linked version of libavutil is too old!'}
{$IFEND}
{$IF (LIBAVUTIL_VERSION > LIBAVUTIL_MAX_VERSION)}
- {$MESSAGE Error 'Linked version of libavutil is not yet supported!'}
+// {$MESSAGE Error 'Linked version of libavutil is not yet supported!'}
{$IFEND}
(**
@@ -116,7 +116,7 @@ type
* Return a string describing the media_type enum, NULL if media_type
* is unknown.
*)
-function av_get_media_type_string(media_type: PAVMediaType): Pchar;
+function av_get_media_type_string(media_type: TAVMediaType): Pchar;
cdecl; external av__util;
const
@@ -184,6 +184,7 @@ function av_get_picture_type_char(pict_type: TAVPictureType): Pchar;
* Return x default pointer in case p is NULL.
*)
function av_x_if_null(p: {const} pointer; x: {const} pointer): pointer;
+ cdecl; external av__util;
{$INCLUDE libavutil/cpu.pas}
@@ -208,298 +209,17 @@ function av_x_if_null(p: {const} pointer; x: {const} pointer): pointer;
function MKTAG (a, b, c, d: AnsiChar): integer;
function MKBETAG(a, b, c, d: AnsiChar): integer;
-(* libavutil/mem.h *)
-
-(* memory handling functions *)
-
-(**
- * Allocate a block of size bytes with alignment suitable for all
- * memory accesses (including vectors if available on the CPU).
- * @param size Size in bytes for the memory block to be allocated.
- * @return Pointer to the allocated block, NULL if the block cannot
- * be allocated.
- * @see av_mallocz()
- *)
-function av_malloc(size: size_t): pointer;
- cdecl; external av__util; {av_malloc_attrib av_alloc_size(1)}
-
-(**
- * Allocate or reallocate a block of memory.
- * If ptr is NULL and size > 0, allocate a new block. If
- * size is zero, free the memory block pointed to by ptr.
- * @param size Size in bytes for the memory block to be allocated or
- * reallocated.
- * @param ptr Pointer to a memory block already allocated with
- * av_malloc(z)() or av_realloc() or NULL.
- * @return Pointer to a newly reallocated block or NULL if the block
- * cannot be allocated or the function is used to free the memory block.
- * @see av_fast_realloc()
- *)
-function av_realloc(ptr: pointer; size: size_t): pointer;
- cdecl; external av__util; {av_alloc_size(2)}
-
-(**
- * Allocate or reallocate a block of memory.
- * This function does the same thing as av_realloc, except:
- * - It takes two arguments and checks the result of the multiplication for
- * integer overflow.
- * - It frees the input block in case of failure, thus avoiding the memory
- * leak with the classic "buf = realloc(buf); if (!buf) return -1;".
- *)
-function av_realloc_f(ptr: pointer; nelem: size_t; elsize: size_t): pointer;
- cdecl; external av__util;
-
-(**
- * Free a memory block which has been allocated with av_malloc(z)() or
- * av_realloc().
- * @param ptr Pointer to the memory block which should be freed.
- * @note ptr = NULL is explicitly allowed.
- * @note It is recommended that you use av_freep() instead.
- * @see av_freep()
- *)
-procedure av_free(ptr: pointer);
- cdecl; external av__util;
-
-(**
- * Allocate a block of size bytes with alignment suitable for all
- * memory accesses (including vectors if available on the CPU) and
- * zeroes all the bytes of the block.
- * @param size Size in bytes for the memory block to be allocated.
- * @return Pointer to the allocated block, NULL if it cannot be allocated.
- * @see av_malloc()
- *)
-function av_mallocz(size: size_t): pointer;
- cdecl; external av__util; {av_malloc_attrib av_alloc_size(1)}
-
-(**
- * Allocate a block of nmemb * size bytes with alignment suitable for all
- * memory accesses (including vectors if available on the CPU) and
- * zero all the bytes of the block.
- * The allocation will fail if nmemb * size is greater than or equal
- * to INT_MAX.
- * @param nmemb
- * @param size
- * @return Pointer to the allocated block, NULL if it cannot be allocated.
- *)
-function av_calloc(nmemb: size_t; size: size_t): pointer;
- cdecl; external av__util; {av_malloc_attrib}
-
-(**
- * Duplicate the string s.
- * @param s string to be duplicated.
- * @return Pointer to a newly allocated string containing a
- * copy of s or NULL if the string cannot be allocated.
- *)
-function av_strdup({const} s: PAnsiChar): PAnsiChar;
- cdecl; external av__util; {av_malloc_attrib}
-
-(**
- * Free a memory block which has been allocated with av_malloc(z)() or
- * av_realloc() and set the pointer pointing to it to NULL.
- * @param ptr Pointer to the pointer to the memory block which should
- * be freed.
- * @see av_free()
- *)
-procedure av_freep (ptr: pointer);
- cdecl; external av__util;
-
-(**
- * Add an element to a dynamic array.
- *
- * @param tab_ptr Pointer to the array.
- * @param nb_ptr Pointer to the number of elements in the array.
- * @param elem Element to be added.
- *)
-procedure av_dynarray_add(tab_ptr: pointer; nb_ptr: PCint; elem: pointer);
- cdecl; external av__util;
-
-(**
- * Multiply two size_t values checking for overflow.
- * @return 0 if success, AVERROR(EINVAL) if overflow.
- *)
-function av_size_mult(a: size_t; b: size_t; r: ^size_t): cint;
-
-(* libavutil/log.h *)
-
-type
-(**
- * Describe the class of an AVClass context structure. That is an
- * arbitrary struct of which the first field is a pointer to an
- * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.).
- *)
- PAVClass = ^TAVClass;
- TAVClass = record
- (**
- * The name of the class; usually it is the same name as the
- * context structure type to which the AVClass is associated.
- *)
- class_name: PAnsiChar;
-
- (**
- * A pointer to a function which returns the name of a context
- * instance ctx associated with the class.
- *)
- item_name: function(): PAnsiChar; cdecl;
-
- (**
- * a pointer to the first option specified in the class if any or NULL
- *
- * @see av_set_default_options()
- *)
- option: PAVOption;
-
- (**
- * LIBAVUTIL_VERSION with which this structure was created.
- * This is used to allow fields to be added without requiring major
- * version bumps everywhere.
- *)
- version: cint;
-
- (**
- * Offset in the structure where log_level_offset is stored.
- * 0 means there is no such variable
- *)
- log_level_offset_offset: cint;
-
- (**
- * Offset in the structure where a pointer to the parent context for loging is stored.
- * for example a decoder that uses eval.c could pass its AVCodecContext to eval as such
- * parent context. And a av_log() implementation could then display the parent context
- * can be NULL of course
- *)
- parent_log_context_offset: cint;
-
- (**
- * Return next AVOptions-enabled child or NULL
- *)
- child_next: function(obj: pointer; prev: pointer): Pointer; cdecl;
-
- (**
- * Return an AVClass corresponding to next potential
- * AVOptions-enabled child.
- *
- * The difference between child_next and this is that
- * child_next iterates over _already existing_ objects, while
- * child_class_next iterates over _all possible_ children.
- *)
- child_class_next: function(prev: PAVClass): PAVClass; cdecl;
- end;
-
-const
- AV_LOG_QUIET = -8;
-
-(**
- * Something went really wrong and we will crash now.
- *)
- AV_LOG_PANIC = 0;
-
-(**
- * Something went wrong and recovery is not possible.
- * For example, no header was found for a format which depends
- * on headers or an illegal combination of parameters is used.
- *)
- AV_LOG_FATAL = 8;
-
-(**
- * Something went wrong and cannot losslessly be recovered.
- * However, not all future data is affected.
- *)
- AV_LOG_ERROR = 16;
-
-(**
- * Something somehow does not look correct. This may or may not
- * lead to problems. An example would be the use of '-vstrict -2'.
- *)
- AV_LOG_WARNING = 24;
-
- AV_LOG_INFO = 32;
- AV_LOG_VERBOSE = 40;
-
-(**
- * Stuff which is only useful for libav* developers.
- *)
- AV_LOG_DEBUG = 48;
-
-(**
- * 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
- * stderr. This behavior can be altered by setting a different av_vlog callback
- * function.
- *
- * @param avcl A pointer to an arbitrary struct of which the first field is a
- * pointer to an AVClass struct.
- * @param level The importance level of the message, lower values signifying
- * higher importance.
- * @param fmt The format string (printf-compatible) that specifies how
- * subsequent arguments are converted to output.
- * @see av_vlog
- *)
-
-{** to be translated if needed
-void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4);
-**}
-
-type
- va_list = pointer;
-
-procedure av_vlog(avcl: pointer; level: cint; fmt: {const} PAnsiChar; dummy: va_list);
- cdecl; external av__util;
-function av_log_get_level(): cint;
- cdecl; external av__util;
-procedure av_log_set_level(level: cint);
- cdecl; external av__util;
-
-{** to be translated if needed
-void av_log_set_callback(void (*)(void*, int, const char*, va_list));
-void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl);
-**}
-
-function av_default_item_name (ctx: pointer): PAnsiChar;
- cdecl; external av__util;
-
-(**
- * Format a line of log the same way as the default callback.
- * @param line buffer to receive the formated line
- * @param line_size size of the buffer
- * @param print_prefix used to store whether the prefix must be printed;
- * must point to a persistent integer initially set to 1
- *)
-procedure av_log_format_line(ptr: pointer; level: cint; fmt: {const} Pchar; vl: va_list;
- line: Pchar; line_size: cint; print_prefix: Pcint);
- cdecl; external av__util;
-
-(**
- * av_dlog macros
- * Useful to print debug messages that shouldn't get compiled in normally.
- *)
-(** to be translated if needed
-#ifdef DEBUG
-# define av_dlog(pctx, ...) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__)
-#else
-# define av_dlog(pctx, ...) do { if (0) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__); } while (0)
-#endif
-**)
-
-(**
- * Skip repeated messages, this requires the user app to use av_log() instead of
- * (f)printf as the 2 would otherwise interfere and lead to
- * "Last message repeated x times" messages below (f)printf messages with some
- * bad luck.
- * Also to receive the last, "last repeated" line if any, the user app must
- * call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end
- *)
-const
- AV_LOG_SKIP_REPEATED = 1;
-procedure av_log_set_flags(arg: cint);
- cdecl; external av__util;
-
implementation
(* To Be Implemented, March 2012 KMS *)
-function av_x_if_null(p: {const} pointer; x: {const} pointer): pointer;
-begin
- //return (void *)(intptr_t)(p ? p : x);
-end;
+//function av_x_if_null(p: {const} pointer; x: {const} pointer): pointer;
+//begin
+// If p = Nil Then
+// Result := p
+// Else
+// Result := x;
+// //return (void *)(intptr_t)(p ? p : x);
+//end;
(* libavutil/common.h *)
@@ -513,18 +233,23 @@ begin
Result := (ord(d) or (ord(c) shl 8) or (ord(b) shl 16) or (ord(a) shl 24));
end;
+type
+ Psize_t = ^size_t;
+
+function av_size_mult(a: size_t; b: size_t; r: Psize_t): size_t;
+ cdecl; external av__util;
(* To Be Implemented, March 2012 KMS *)
-function av_size_mult(a: size_t; b: size_t; r: ^size_t): cint;
-begin
- {
- size_t t = a * b;
- /* Hack inspired from glibc: only try the division if nelem and elsize
- * are both greater than sqrt(SIZE_MAX). */
- if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b)
- return AVERROR(EINVAL);
- *r = t;
- return 0;
-}
-end;
+//function av_size_mult(a: size_t; b: size_t; r: pointer): size_t;
+//begin
+// {
+// size_t t = a * b;
+// /* Hack inspired from glibc: only try the division if nelem and elsize
+// * are both greater than sqrt(SIZE_MAX). */
+// if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b)
+// return AVERROR(EINVAL);
+// *r = t;
+// return 0;
+//}
+//end;
end.
diff --git a/src/lib/ffmpeg-0.10/libavutil/dict.pas b/src/lib/ffmpeg-0.10/libavutil/dict.pas
index e2626e50..472168f1 100644
--- a/src/lib/ffmpeg-0.10/libavutil/dict.pas
+++ b/src/lib/ffmpeg-0.10/libavutil/dict.pas
@@ -27,13 +27,11 @@ const
AV_DICT_MATCH_CASE = 1;
AV_DICT_IGNORE_SUFFIX = 2;
AV_DICT_DONT_STRDUP_KEY = 4; (**< Take ownership of a key that's been
- allocated with av_malloc() and children. */
+ allocated with av_malloc() and children. *)
AV_DICT_DONT_STRDUP_VAL = 8; (**< Take ownership of a value that's been
- allocated with av_malloc() and chilren. */
- AV_DICT_DONT_OVERWRITE = 16; ///< Don't overwrite existing entries.
- AV_DICT_APPEND = 32; (**< If the entry already exists, append to it. Note that no
- delimiter is added, the strings are simply concatenated. *)
+ allocated with av_malloc() and chilren. *)
+ AV_DICT_DONT_OVERWRITE = 16; (**< Don't overwrite existing entries. *)
type
PAVDictionaryEntry = ^TAVDictionaryEntry;
diff --git a/src/lib/ffmpeg-0.10/libavutil/mem.pas b/src/lib/ffmpeg-0.10/libavutil/mem.pas
index d71dd3d3..d163d9df 100644
--- a/src/lib/ffmpeg-0.10/libavutil/mem.pas
+++ b/src/lib/ffmpeg-0.10/libavutil/mem.pas
@@ -38,22 +38,22 @@
* be allocated.
* @see av_mallocz()
*)
-function av_malloc(size: FF_INTERNAL_MEM_TYPE): pointer;
+function av_malloc(size: size_t): pointer;
cdecl; external av__util; {av_malloc_attrib av_alloc_size(1)}
(**
* Allocate or reallocate a block of memory.
* If ptr is NULL and size > 0, allocate a new block. If
* size is zero, free the memory block pointed to by ptr.
- * @param size Size in bytes for the memory block to be allocated or
- * reallocated.
* @param ptr Pointer to a memory block already allocated with
* av_malloc(z)() or av_realloc() or NULL.
+ * @param size Size in bytes for the memory block to be allocated or
+ * reallocated.
* @return Pointer to a newly reallocated block or NULL if the block
* cannot be allocated or the function is used to free the memory block.
* @see av_fast_realloc()
*)
-function av_realloc(ptr: pointer; size: FF_INTERNAL_MEM_TYPE): pointer;
+function av_realloc(ptr: pointer; size: size_t): pointer;
cdecl; external av__util; {av_alloc_size(2)}
(**
@@ -64,10 +64,8 @@ function av_realloc(ptr: pointer; size: FF_INTERNAL_MEM_TYPE): pointer;
* - It frees the input block in case of failure, thus avoiding the memory
* leak with the classic "buf = realloc(buf); if (!buf) return -1;".
*)
-{ available only in 0.8.5 - 0.8.10
function av_realloc_f(ptr: pointer; nelem: size_t; size: size_t): pointer;
cdecl; external av__util;
-}
(**
* Free a memory block which has been allocated with av_malloc(z)() or
@@ -88,7 +86,7 @@ procedure av_free(ptr: pointer);
* @return Pointer to the allocated block, NULL if it cannot be allocated.
* @see av_malloc()
*)
-function av_mallocz(size: FF_INTERNAL_MEM_TYPE): pointer;
+function av_mallocz(size: size_t): pointer;
cdecl; external av__util; {av_malloc_attrib av_alloc_size(1)}
(**
@@ -101,10 +99,8 @@ function av_mallocz(size: FF_INTERNAL_MEM_TYPE): pointer;
* @param size
* @return Pointer to the allocated block, NULL if it cannot be allocated.
*)
-(* available only in 0.8.5 - 0.8.10
function av_calloc(nmemb: size_t; size: size_t): pointer;
cdecl; external av__util; {av_malloc_attrib}
-*)
(**
* Duplicate the string s.
diff --git a/src/lib/ffmpeg-0.10/libavutil/opt.pas b/src/lib/ffmpeg-0.10/libavutil/opt.pas
index 61af0754..16bf0f26 100644
--- a/src/lib/ffmpeg-0.10/libavutil/opt.pas
+++ b/src/lib/ffmpeg-0.10/libavutil/opt.pas
@@ -23,205 +23,12 @@
* - Changes and updates by the UltraStar Deluxe Team
*
* Conversion of libavutil/opt.h
- * avutil version 51.34.101
+ * avutil version 51.9.1
*
*)
-(**
- * @defgroup avoptions AVOptions
- * @ingroup lavu_data
- * @{
- * AVOptions provide a generic system to declare options on arbitrary structs
- * ("objects"). An option can have a help text, a type and a range of possible
- * values. Options may then be enumerated, read and written to.
- *
- * @section avoptions_implement Implementing AVOptions
- * This section describes how to add AVOptions capabilities to a struct.
- *
- * All AVOptions-related information is stored in an AVClass. Therefore
- * the first member of the struct must be a pointer to an AVClass describing it.
- * The option field of the AVClass must be set to a NULL-terminated static array
- * of AVOptions. Each AVOption must have a non-empty name, a type, a default
- * value and for number-type AVOptions also a range of allowed values. It must
- * also declare an offset in bytes from the start of the struct, where the field
- * associated with this AVOption is located. Other fields in the AVOption struct
- * should also be set when applicable, but are not required.
- *
- * The following example illustrates an AVOptions-enabled struct:
- * @code
- * typedef struct test_struct {
- * AVClass *class;
- * int int_opt;
- * char *str_opt;
- * uint8_t *bin_opt;
- * int bin_len;
- * } test_struct;
- *
- * static const AVOption options[] = {
- * { "test_int", "This is a test option of int type.", offsetof(test_struct, int_opt),
- * AV_OPT_TYPE_INT, { -1 }, INT_MIN, INT_MAX },
- * { "test_str", "This is a test option of string type.", offsetof(test_struct, str_opt),
- * AV_OPT_TYPE_STRING },
- * { "test_bin", "This is a test option of binary type.", offsetof(test_struct, bin_opt),
- * AV_OPT_TYPE_BINARY },
- * { NULL },
- * };
- *
- * static const AVClass test_class = {
- * .class_name = "test class",
- * .item_name = av_default_item_name,
- * .option = options,
- * .version = LIBAVUTIL_VERSION_INT,
- * };
- * @endcode
- *
- * Next, when allocating your struct, you must ensure that the AVClass pointer
- * is set to the correct value. Then, av_opt_set_defaults() must be called to
- * initialize defaults. After that the struct is ready to be used with the
- * AVOptions API.
- *
- * When cleaning up, you may use the av_opt_free() function to automatically
- * free all the allocated string and binary options.
- *
- * Continuing with the above example:
- *
- * @code
- * test_struct *alloc_test_struct(void)
- * {
- * test_struct *ret = av_malloc(sizeof(*ret));
- * ret->class = &test_class;
- * av_opt_set_defaults(ret);
- * return ret;
- * }
- * void free_test_struct(test_struct **foo)
- * {
- * av_opt_free(*foo);
- * av_freep(foo);
- * }
- * @endcode
- *
- * @subsection avoptions_implement_nesting Nesting
- * It may happen that an AVOptions-enabled struct contains another
- * AVOptions-enabled struct as a member (e.g. AVCodecContext in
- * libavcodec exports generic options, while its priv_data field exports
- * codec-specific options). In such a case, it is possible to set up the
- * parent struct to export a child's options. To do that, simply
- * implement AVClass.child_next() and AVClass.child_class_next() in the
- * parent struct's AVClass.
- * Assuming that the test_struct from above now also contains a
- * child_struct field:
- *
- * @code
- * typedef struct child_struct {
- * AVClass *class;
- * int flags_opt;
- * } child_struct;
- * static const AVOption child_opts[] = {
- * { "test_flags", "This is a test option of flags type.",
- * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { 0 }, INT_MIN, INT_MAX },
- * { NULL },
- * };
- * static const AVClass child_class = {
- * .class_name = "child class",
- * .item_name = av_default_item_name,
- * .option = child_opts,
- * .version = LIBAVUTIL_VERSION_INT,
- * };
- *
- * void *child_next(void *obj, void *prev)
- * {
- * test_struct *t = obj;
- * if (!prev && t->child_struct)
- * return t->child_struct;
- * return NULL
- * }
- * const AVClass child_class_next(const AVClass *prev)
- * {
- * return prev ? NULL : &child_class;
- * }
- * @endcode
- * Putting child_next() and child_class_next() as defined above into
- * test_class will now make child_struct's options accessible through
- * test_struct (again, proper setup as described above needs to be done on
- * child_struct right after it is created).
- *
- * From the above example it might not be clear why both child_next()
- * and child_class_next() are needed. The distinction is that child_next()
- * iterates over actually existing objects, while child_class_next()
- * iterates over all possible child classes. E.g. if an AVCodecContext
- * was initialized to use a codec which has private options, then its
- * child_next() will return AVCodecContext.priv_data and finish
- * iterating. OTOH child_class_next() on AVCodecContext.av_class will
- * iterate over all available codecs with private options.
- *
- * @subsection avoptions_implement_named_constants Named constants
- * It is possible to create named constants for options. Simply set the unit
- * field of the option the constants should apply to to a string and
- * create the constants themselves as options of type AV_OPT_TYPE_CONST
- * with their unit field set to the same string.
- * Their default_val field should contain the value of the named
- * constant.
- * For example, to add some named constants for the test_flags option
- * above, put the following into the child_opts array:
- * @code
- * { "test_flags", "This is a test option of flags type.",
- * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { 0 }, INT_MIN, INT_MAX, "test_unit" },
- * { "flag1", "This is a flag with value 16", 0, AV_OPT_TYPE_CONST, { 16 }, 0, 0, "test_unit" },
- * @endcode
- *
- * @section avoptions_use Using AVOptions
- * This section deals with accessing options in an AVOptions-enabled struct.
- * Such structs in FFmpeg are e.g. AVCodecContext in libavcodec or
- * AVFormatContext in libavformat.
- *
- * @subsection avoptions_use_examine Examining AVOptions
- * The basic functions for examining options are av_opt_next(), which iterates
- * over all options defined for one object, and av_opt_find(), which searches
- * for an option with the given name.
- *
- * The situation is more complicated with nesting. An AVOptions-enabled struct
- * may have AVOptions-enabled children. Passing the AV_OPT_SEARCH_CHILDREN flag
- * to av_opt_find() will make the function search children recursively.
- *
- * For enumerating there are basically two cases. The first is when you want to
- * get all options that may potentially exist on the struct and its children
- * (e.g. when constructing documentation). In that case you should call
- * av_opt_child_class_next() recursively on the parent struct's AVClass. The
- * second case is when you have an already initialized struct with all its
- * children and you want to get all options that can be actually written or read
- * from it. In that case you should call av_opt_child_next() recursively (and
- * av_opt_next() on each result).
- *
- * @subsection avoptions_use_get_set Reading and writing AVOptions
- * When setting options, you often have a string read directly from the
- * user. In such a case, simply passing it to av_opt_set() is enough. For
- * non-string type options, av_opt_set() will parse the string according to the
- * option type.
- *
- * Similarly av_opt_get() will read any option type and convert it to a string
- * which will be returned. Do not forget that the string is allocated, so you
- * have to free it with av_free().
- *
- * In some cases it may be more convenient to put all options into an
- * AVDictionary and call av_opt_set_dict() on it. A specific case of this
- * are the format/codec open functions in lavf/lavc which take a dictionary
- * filled with option as a parameter. This allows to set some options
- * that cannot be set otherwise, since e.g. the input file format is not known
- * before the file is actually opened.
- *)
-
type
TAVOptionType = (
- AV_OPT_TYPE_FLAGS,
- AV_OPT_TYPE_INT,
- AV_OPT_TYPE_INT64,
- AV_OPT_TYPE_DOUBLE,
- AV_OPT_TYPE_FLOAT,
- AV_OPT_TYPE_STRING,
- AV_OPT_TYPE_RATIONAL,
- AV_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length
- AV_OPT_TYPE_CONST = 128
-{$IFDEF FF_API_OLD_AVOPTIONS}
FF_OPT_TYPE_FLAGS,
FF_OPT_TYPE_INT,
FF_OPT_TYPE_INT64,
@@ -231,7 +38,6 @@ type
FF_OPT_TYPE_RATIONAL,
FF_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length
FF_OPT_TYPE_CONST = 128
-{$ENDIF}
);
const
@@ -305,7 +111,6 @@ function av_find_opt(obj: Pointer; {const} name: {const} PAnsiChar; {const} unit
cdecl; external av__util; deprecated;
{$ENDIF}
-{$IFDEF FF_API_OLD_AVOPTIONS}
(**
* Set the field of obj with the given name to value.
*
@@ -324,33 +129,34 @@ function av_find_opt(obj: Pointer; {const} name: {const} PAnsiChar; {const} unit
* similarly, '-' unsets a flag.
* @param[out] o_out if non-NULL put here a pointer to the AVOption
* found
- * @param alloc this parameter is currently ignored
+ * @param alloc when 1 then the old value will be av_freed() and the
+ * new av_strduped()
+ * when 0 then no av_free() nor av_strdup() will be used
* @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(ENOENT) if no matching option exists
* AVERROR(ERANGE) if the value is out of range
* 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; deprecated;
+ cdecl; external av__util;
function av_set_double(obj: pointer; name: {const} PAnsiChar; n: cdouble): PAVOption;
- cdecl; external av__util; deprecated;
+ cdecl; external av__util;
function av_set_q(obj: pointer; name: {const} PAnsiChar; n: TAVRational): PAVOption;
- cdecl; external av__util; deprecated;
+ cdecl; external av__util;
function av_set_int(obj: pointer; name: {const} PAnsiChar; n: cint64): PAVOption;
- cdecl; external av__util; deprecated;
+ cdecl; external av__util;
function av_get_double(obj: pointer; name: {const} PAnsiChar; var o_out: {const} PAVOption): cdouble;
- cdecl; external av__util; deprecated;
+ cdecl; external av__util;
function av_get_q(obj: pointer; name: {const} PAnsiChar; var o_out: {const} PAVOption): TAVRational;
- cdecl; external av__util; deprecated;
+ cdecl; external av__util;
function av_get_int(obj: pointer; name: {const} PAnsiChar; var o_out: {const} PAVOption): cint64;
- cdecl; external av__util; deprecated;
+ cdecl; external av__util;
function av_get_string(obj: pointer; name: {const} PAnsiChar; var o_out: {const} PAVOption; buf: PAnsiChar; buf_len: cint): PAnsiChar;
- cdecl; external av__util; deprecated;
+ cdecl; external av__util;
function av_next_option(obj: pointer; last: {const} PAVOption): PAVOption;
- cdecl; external av__util; deprecated;
-{$ENDIF}
+ cdecl; external av__util;
(**
* Show the obj options.
@@ -364,18 +170,10 @@ 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;
-
-{$IFDEF FF_API_OLD_AVOPTIONS}
procedure av_opt_set_defaults2(s: Pointer; mask: cint; flags: cint);
- cdecl; external av__util; deprecated;
-{$ENDIF}
+ cdecl; external av__util;
(**
* Parse the key/value pairs list in opts. For each key/value pair
@@ -432,46 +230,9 @@ 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;
-(**
- * @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; {const} val: PAnsiChar; flags_out: Pcint): cint;
- cdecl; external av__util;
-function av_opt_eval_int (obj: pointer; o: {const} PAVOption; {const} val: PAnsiChar; int_out: Pcint): cint;
- cdecl; external av__util;
-function av_opt_eval_int64 (obj: pointer; o: {const} PAVOption; {const} val: PAnsiChar; int64_out: Pint64): cint;
- cdecl; external av__util;
-function av_opt_eval_float (obj: pointer; o: {const} PAVOption; {const} val: PAnsiChar; float_out: Pcfloat): cint;
- cdecl; external av__util;
-function av_opt_eval_double(obj: pointer; o: {const} PAVOption; {const} val: PAnsiChar; double_out: Pcdouble): cint;
- cdecl; external av__util;
-function av_opt_eval_q (obj: pointer; o: {const} PAVOption; {const} val: PAnsiChar; q_out: PAVRational): cint;
- cdecl; external av__util;
-(**
- * @}
- *)
-
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
@@ -494,140 +255,5 @@ 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; target_obj: pointer): 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): 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
- *)
-procedure av_opt_child_next(obj: pointer; prev: 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): 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: PAVRational; 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_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; var 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.
- *)
-(*
-procedure av_opt_ptr(avclass: {const} PAVClass; obj: pointer; name: {const} PAnsiChar);
- cdecl; external av__util;
-*)
diff --git a/src/lib/ffmpeg-0.10/libavutil/pixfmt.pas b/src/lib/ffmpeg-0.10/libavutil/pixfmt.pas
index 22f91b7d..552d4474 100644
--- a/src/lib/ffmpeg-0.10/libavutil/pixfmt.pas
+++ b/src/lib/ffmpeg-0.10/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.9.1
*
*)
diff --git a/src/lib/ffmpeg-0.10/libavutil/samplefmt.pas b/src/lib/ffmpeg-0.10/libavutil/samplefmt.pas
index 5e1207d7..3335fa2d 100644
--- a/src/lib/ffmpeg-0.10/libavutil/samplefmt.pas
+++ b/src/lib/ffmpeg-0.10/libavutil/samplefmt.pas
@@ -19,7 +19,7 @@
* This is a part of the Pascal port of ffmpeg.
*
* Conversion of libavutil/samplefmt.h
- * avutil version 51.34.101
+ * avutil version 50.43.0
*
*)