diff options
Diffstat (limited to '')
-rw-r--r-- | Game/Code/Classes/UAudioDecoder_FFMpeg.pas | 11 | ||||
-rw-r--r-- | Game/Code/Classes/UVideo.pas | 4 | ||||
-rw-r--r-- | Game/Code/lib/ffmpeg/acm_unit.pas | 197 | ||||
-rw-r--r-- | Game/Code/lib/ffmpeg/avcodec.pas | 5251 | ||||
-rw-r--r-- | Game/Code/lib/ffmpeg/avformat.pas | 1174 | ||||
-rw-r--r-- | Game/Code/lib/ffmpeg/avio.pas | 569 | ||||
-rw-r--r-- | Game/Code/lib/ffmpeg/avutil.pas | 354 | ||||
-rw-r--r-- | Game/Code/lib/ffmpeg/lazarustest.lpi | 226 | ||||
-rw-r--r-- | Game/Code/lib/ffmpeg/lazarustest.lpr | 30 | ||||
-rw-r--r-- | Game/Code/lib/ffmpeg/mathematics.pas | 41 | ||||
-rw-r--r-- | Game/Code/lib/ffmpeg/mmreg.pas | 1446 | ||||
-rw-r--r-- | Game/Code/lib/ffmpeg/opt.pas | 48 | ||||
-rw-r--r-- | Game/Code/lib/ffmpeg/rational.pas | 92 | ||||
-rw-r--r-- | Game/Code/lib/ffmpeg/swscale.pas | 414 | ||||
-rw-r--r-- | Game/Code/lib/ffmpeg/version.inc | 102 |
15 files changed, 5042 insertions, 4917 deletions
diff --git a/Game/Code/Classes/UAudioDecoder_FFMpeg.pas b/Game/Code/Classes/UAudioDecoder_FFMpeg.pas index 4cd6ec37..c705d603 100644 --- a/Game/Code/Classes/UAudioDecoder_FFMpeg.pas +++ b/Game/Code/Classes/UAudioDecoder_FFMpeg.pas @@ -45,7 +45,8 @@ uses {$ENDIF} UIni, UMain, - UThemes; + UThemes, + UConfig; type @@ -334,7 +335,7 @@ begin if(av_read_frame(stream.pFormatCtx, packet) < 0) then begin // check for end-of-file (eof is not an error) - {$IF (LIBAVFORMAT_MAJOR_VERSION >= 52)} + {$IF (LIBAVFORMAT_VERSION_MAJOR >= 52)} pbIOCtx := stream.pFormatCtx^.pb; {$ELSE} pbIOCtx := @stream.pFormatCtx^.pb; @@ -370,7 +371,7 @@ begin end else begin - av_free_packet(packet); + av_free_packet(@packet); end; end; @@ -428,7 +429,7 @@ begin if (pkt.data <> nil) then begin - av_free_packet(pkt); + av_free_packet(@pkt); end; if (packetQueue.quit) then @@ -739,7 +740,7 @@ begin while(pkt <> nil) do
begin
pkt1 := pkt^.next;
- av_free_packet(pkt^.pkt);
+ av_free_packet(@pkt^.pkt);
av_freep(pkt);
pkt := pkt1;
end;
diff --git a/Game/Code/Classes/UVideo.pas b/Game/Code/Classes/UVideo.pas index c30b271e..db7e3ffd 100644 --- a/Game/Code/Classes/UVideo.pas +++ b/Game/Code/Classes/UVideo.pas @@ -286,7 +286,7 @@ begin try // if AVPacket.data <> nil then - av_free_packet( AVPacket ); // JB-ffmpeg + av_free_packet( @AVPacket ); // JB-ffmpeg except // TODO : JB_FFMpeg ... why does this now AV sometimes ( or always !! ) end; @@ -308,7 +308,7 @@ begin // release internal packet structure created by av_read_frame try // if AVPacket.data <> nil then - av_free_packet( AVPacket ); // JB-ffmpeg + av_free_packet( @AVPacket ); // JB-ffmpeg except // TODO : JB_FFMpeg ... why does this now AV sometimes ( or always !! ) end; diff --git a/Game/Code/lib/ffmpeg/acm_unit.pas b/Game/Code/lib/ffmpeg/acm_unit.pas deleted file mode 100644 index 307fb479..00000000 --- a/Game/Code/lib/ffmpeg/acm_unit.pas +++ /dev/null @@ -1,197 +0,0 @@ -unit acm_unit;
-
-interface
-
-uses
- windows, mmsystem;
- (*
- ******************************************************************************
- * интерфейс к MS Audio Compression Manager
- ******************************************************************************
- *)
-type
- PWaveFilter = ^TWaveFilter;
- // Defined in mmreg.h
- WAVEFILTER = packed record
- cbStruct: DWORD; // Size of the filter in bytes
- dwFilterTag: DWORD; // filter type
- fdwFilter: DWORD; // Flags for the filter (Universal Dfns)
- dwReserved: array [0..4] of DWORD; // Reserved for system use
- end;
- TWaveFilter = WAVEFILTER;
-
- HACMDRIVERID__ = record
- Unused: Integer;
- end;
- {$EXTERNALSYM HACMDRIVERID__}
- HACMDRIVERID = ^HACMDRIVERID__;
- {$EXTERNALSYM HACMDRIVERID}
- PHACMDRIVERID = ^HACMDRIVERID;
- {$EXTERNALSYM PHACMDRIVERID}
- LPHACMDRIVERID = ^HACMDRIVERID;
- {$EXTERNALSYM LPHACMDRIVERID}
-
- HACMDRIVER__ = record
- Unused: Integer;
- end;
-
- {$EXTERNALSYM HACMDRIVER__}
- HACMDRIVER = ^HACMDRIVER__;
- {$EXTERNALSYM HACMDRIVER}
- PHACMDRIVER = ^HACMDRIVER;
- {$EXTERNALSYM PHACMDRIVER}
- LPHACMDRIVER = ^HACMDRIVER;
- {$EXTERNALSYM LPHACMDRIVER}
-
- HACMSTREAM__ = record
- Unused: Integer;
- end;
-
- {$EXTERNALSYM HACMSTREAM__}
- HACMSTREAM = ^HACMSTREAM__;
- {$EXTERNALSYM HACMSTREAM}
- PHACMSTREAM = ^HACMSTREAM;
- {$EXTERNALSYM PHACMSTREAM}
- LPHACMSTREAM = ^HACMSTREAM;
- {$EXTERNALSYM LPHACMSTREAM}
-
- PAcmStreamHeader = ^TAcmStreamHeader;
- ACMSTREAMHEADER = packed record
- cbStruct: DWORD;
- fdwStatus: DWORD;
- dwUser: DWORD;
- pbSrc: PBYTE;
- cbSrcLength: DWORD;
- cbSrcLengthUsed: DWORD;
- dwSrcUser: DWORD;
- pbDst: PBYTE;
- cbDstLength: DWORD;
- cbDstLengthUsed: DWORD;
- dwDstUser: DWORD;
- dwReservedDriver: array [0..10 - 1] of DWORD;
- end;
- {$EXTERNALSYM tACMSTREAMHEADER}
- TAcmStreamHeader = ACMSTREAMHEADER;
-
-const
- ACMSTREAMHEADER_STATUSF_DONE = $00010000;
- {$EXTERNALSYM ACMSTREAMHEADER_STATUSF_DONE}
- ACMSTREAMHEADER_STATUSF_PREPARED = $00020000;
- {$EXTERNALSYM ACMSTREAMHEADER_STATUSF_PREPARED}
- ACMSTREAMHEADER_STATUSF_INQUEUE = $00100000;
- {$EXTERNALSYM ACMSTREAMHEADER_STATUSF_INQUEUE}
-
-function acmStreamOpen(var phas: HACMSTREAM; had: HACMDRIVER; var pwfxSrc: TWAVEFORMATEX;
- var pwfxDst: TWAVEFORMATEX; pwfltr: PWAVEFILTER; dwCallback: DWORD; dwInstance: DWORD;
- fdwOpen: DWORD): MMRESULT; stdcall;
-{$EXTERNALSYM acmStreamOpen}
-
-const
- ACM_STREAMOPENF_QUERY = $00000001;
- {$EXTERNALSYM ACM_STREAMOPENF_QUERY}
- ACM_STREAMOPENF_ASYNC = $00000002;
- {$EXTERNALSYM ACM_STREAMOPENF_ASYNC}
- ACM_STREAMOPENF_NONREALTIME = $00000004;
- {$EXTERNALSYM ACM_STREAMOPENF_NONREALTIME}
-
-function acmStreamSize(has: HACMSTREAM; cbInput: DWORD; var pdwOutputBytes: DWORD;
- fdwSize: DWORD): MMRESULT; stdcall;
-{$EXTERNALSYM acmStreamSize}
-
-const
- ACM_STREAMSIZEF_SOURCE = $00000000;
- {$EXTERNALSYM ACM_STREAMSIZEF_SOURCE}
- ACM_STREAMSIZEF_DESTINATION = $00000001;
- {$EXTERNALSYM ACM_STREAMSIZEF_DESTINATION}
- ACM_STREAMSIZEF_QUERYMASK = $0000000F;
- {$EXTERNALSYM ACM_STREAMSIZEF_QUERYMASK}
-
-function acmStreamConvert(has: HACMSTREAM; var pash: TAcmStreamHeader;
- fdwConvert: DWORD): MMRESULT; stdcall;
-{$EXTERNALSYM acmStreamConvert}
-
-const
- ACM_STREAMCONVERTF_BLOCKALIGN = $00000004;
- {$EXTERNALSYM ACM_STREAMCONVERTF_BLOCKALIGN}
- ACM_STREAMCONVERTF_START = $00000010;
- {$EXTERNALSYM ACM_STREAMCONVERTF_START}
- ACM_STREAMCONVERTF_END = $00000020;
- {$EXTERNALSYM ACM_STREAMCONVERTF_END}
-
-function acmStreamPrepareHeader(has: HACMSTREAM; var pash: TAcmStreamHeader;
- fdwPrepare: DWORD): MMRESULT; stdcall;
-{$EXTERNALSYM acmStreamPrepareHeader}
-
-function acmStreamUnprepareHeader(has: HACMSTREAM; var pash: TAcmStreamHeader;
- fdwUnprepare: DWORD): MMRESULT; stdcall;
-{$EXTERNALSYM acmStreamUnprepareHeader}
-
-function acmStreamClose(has: HACMSTREAM; fdwClose: DWORD): MMRESULT; stdcall;
-{$EXTERNALSYM acmStreamClose}
- (*
- ******************************************************************************
- * интерфейс к MS Audio Compression Manager
- ******************************************************************************
- *)
-
-implementation
-
-const
- msacm32 = 'msacm32.dll';
-
-(*function acmGetVersion; external msacm32 name 'acmGetVersion';
-function acmMetrics; external msacm32 name 'acmMetrics';
-function acmDriverEnum; external msacm32 name 'acmDriverEnum';
-function acmDriverID; external msacm32 name 'acmDriverID';
-function acmDriverAddA; external msacm32 name 'acmDriverAddA';
-function acmDriverAddW; external msacm32 name 'acmDriverAddW';
-function acmDriverAdd; external msacm32 name 'acmDriverAddA';
-function acmDriverRemove; external msacm32 name 'acmDriverRemove';
-function acmDriverOpen; external msacm32 name 'acmDriverOpen';
-function acmDriverClose; external msacm32 name 'acmDriverClose';
-function acmDriverMessage; external msacm32 name 'acmDriverMessage';
-function acmDriverPriority; external msacm32 name 'acmDriverPriority';
-function acmDriverDetailsA; external msacm32 name 'acmDriverDetailsA';
-function acmDriverDetailsW; external msacm32 name 'acmDriverDetailsW';
-function acmDriverDetails; external msacm32 name 'acmDriverDetailsA';
-function acmFormatTagDetailsA; external msacm32 name 'acmFormatTagDetailsA';
-function acmFormatTagDetailsW; external msacm32 name 'acmFormatTagDetailsW';
-function acmFormatTagDetails; external msacm32 name 'acmFormatTagDetailsA';
-function acmFormatDetailsA; external msacm32 name 'acmFormatDetailsA';
-function acmFormatDetailsW; external msacm32 name 'acmFormatDetailsW';
-function acmFormatDetails; external msacm32 name 'acmFormatDetailsA';
-function acmFormatChooseA; external msacm32 name 'acmFormatChooseA';
-function acmFormatChooseW; external msacm32 name 'acmFormatChooseW';
-function acmFormatChoose; external msacm32 name 'acmFormatChooseA';
-function acmFormatEnumA; external msacm32 name 'acmFormatEnumA';
-function acmFormatEnumW; external msacm32 name 'acmFormatEnumW';
-function acmFormatEnum; external msacm32 name 'acmFormatEnumA';
-function acmFormatTagEnumA; external msacm32 name 'acmFormatTagEnumA';
-function acmFormatTagEnumW; external msacm32 name 'acmFormatTagEnumW';
-function acmFormatTagEnum; external msacm32 name 'acmFormatTagEnumA';
-function acmFormatSuggest; external msacm32 name 'acmFormatSuggest';
-function acmFilterTagDetailsA; external msacm32 name 'acmFilterTagDetailsA';
-function acmFilterTagDetailsW; external msacm32 name 'acmFilterTagDetailsW';
-function acmFilterTagDetails; external msacm32 name 'acmFilterTagDetailsA';
-function acmFilterTagEnumA; external msacm32 name 'acmFilterTagEnumA';
-function acmFilterTagEnumW; external msacm32 name 'acmFilterTagEnumW';
-function acmFilterTagEnum; external msacm32 name 'acmFilterTagEnumA';
-function acmFilterDetailsA; external msacm32 name 'acmFilterDetailsA';
-function acmFilterDetailsW; external msacm32 name 'acmFilterDetailsW';
-function acmFilterDetails; external msacm32 name 'acmFilterDetailsA';
-function acmFilterEnumA; external msacm32 name 'acmFilterEnumA';
-function acmFilterEnumW; external msacm32 name 'acmFilterEnumW';
-function acmFilterEnum; external msacm32 name 'acmFilterEnumA';
-function acmFilterChooseA; external msacm32 name 'acmFilterChooseA';
-function acmFilterChooseW; external msacm32 name 'acmFilterChooseW';
-function acmFilterChoose; external msacm32 name 'acmFilterChooseA'; *)
-function acmStreamOpen; external msacm32 name 'acmStreamOpen';
-function acmStreamClose; external msacm32 name 'acmStreamClose';
-function acmStreamSize; external msacm32 name 'acmStreamSize';
-//function acmStreamReset; external msacm32 name 'acmStreamReset';
-//function acmStreamMessage; external msacm32 name 'acmStreamMessage';
-function acmStreamConvert; external msacm32 name 'acmStreamConvert';
-function acmStreamPrepareHeader; external msacm32 name 'acmStreamPrepareHeader';
-function acmStreamUnprepareHeader; external msacm32 name 'acmStreamUnprepareHeader';
-
-end.
diff --git a/Game/Code/lib/ffmpeg/avcodec.pas b/Game/Code/lib/ffmpeg/avcodec.pas index f5646fd8..dffe284e 100644 --- a/Game/Code/lib/ffmpeg/avcodec.pas +++ b/Game/Code/lib/ffmpeg/avcodec.pas @@ -1,2034 +1,3217 @@ - (*
- * copyright (c) 2001 Fabrice Bellard
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *)
-
-(* This is a part of Pascal porting of ffmpeg. Originally by Victor Zinetz for Delphi and Free Pascal on Windows.
-For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT
-in the source codes *)
-
-unit avcodec;
-
-{$IFDEF FPC}
- {$IFDEF LINUX}
- {$LINKLIB libavutil}
- {$LINKLIB libavcodec}
- {$ENDIF}
-
- {$MODE DELPHI } (* CAT *)
- {$PACKENUM 4} (* every enum type variables uses 4 bytes, CAT *)
- {$PACKRECORDS C} (* GCC compatible, Record Packing, CAT *)
-{$ENDIF}
-
-interface
-
-uses
- avutil, rational, opt; // CAT
-
-{$I version.inc}
-
-const
- AV_NOPTS_VALUE: int64 = $8000000000000000;
- AV_TIME_BASE = 1000000;
- AV_TIME_BASE_Q : TAVRational = (num:1; den:AV_TIME_BASE); (* added by CAT *)
-
-type
- TCodecID = (
- CODEC_ID_NONE, CODEC_ID_MPEG1VIDEO,
- CODEC_ID_MPEG2VIDEO, //* prefered ID for MPEG Video 1 or 2 decoding */
- CODEC_ID_MPEG2VIDEO_XVMC, CODEC_ID_H261, CODEC_ID_H263, CODEC_ID_RV10,
- CODEC_ID_RV20, CODEC_ID_MJPEG, CODEC_ID_MJPEGB, CODEC_ID_LJPEG,
- CODEC_ID_SP5X, CODEC_ID_JPEGLS, CODEC_ID_MPEG4, CODEC_ID_RAWVIDEO,
- CODEC_ID_MSMPEG4V1, CODEC_ID_MSMPEG4V2, CODEC_ID_MSMPEG4V3,
- CODEC_ID_WMV1, CODEC_ID_WMV2, CODEC_ID_H263P,
- CODEC_ID_H263I, CODEC_ID_FLV1, CODEC_ID_SVQ1, CODEC_ID_SVQ3,
- CODEC_ID_DVVIDEO, CODEC_ID_HUFFYUV, CODEC_ID_CYUV, CODEC_ID_H264,
- CODEC_ID_INDEO3, CODEC_ID_VP3, CODEC_ID_THEORA, CODEC_ID_ASV1,
- CODEC_ID_ASV2, CODEC_ID_FFV1, CODEC_ID_4XM, CODEC_ID_VCR1,
- CODEC_ID_CLJR, CODEC_ID_MDEC, CODEC_ID_ROQ, CODEC_ID_INTERPLAY_VIDEO,
- CODEC_ID_XAN_WC3, CODEC_ID_XAN_WC4, CODEC_ID_RPZA, CODEC_ID_CINEPAK,
- CODEC_ID_WS_VQA, CODEC_ID_MSRLE, CODEC_ID_MSVIDEO1, CODEC_ID_IDCIN,
- CODEC_ID_8BPS, CODEC_ID_SMC, CODEC_ID_FLIC, CODEC_ID_TRUEMOTION1,
- CODEC_ID_VMDVIDEO, CODEC_ID_MSZH, CODEC_ID_ZLIB, CODEC_ID_QTRLE,
- CODEC_ID_SNOW, CODEC_ID_TSCC, CODEC_ID_ULTI, CODEC_ID_QDRAW,
- CODEC_ID_VIXL, CODEC_ID_QPEG, CODEC_ID_XVID, CODEC_ID_PNG,
- CODEC_ID_PPM, CODEC_ID_PBM, CODEC_ID_PGM, CODEC_ID_PGMYUV,
- CODEC_ID_PAM, CODEC_ID_FFVHUFF, CODEC_ID_RV30, CODEC_ID_RV40,
- CODEC_ID_VC1, CODEC_ID_WMV3, CODEC_ID_LOCO, CODEC_ID_WNV1,
- CODEC_ID_AASC, CODEC_ID_INDEO2, CODEC_ID_FRAPS, CODEC_ID_TRUEMOTION2,
- CODEC_ID_BMP, CODEC_ID_CSCD, CODEC_ID_MMVIDEO, CODEC_ID_ZMBV,
- CODEC_ID_AVS, CODEC_ID_SMACKVIDEO, CODEC_ID_NUV, CODEC_ID_KMVC,
- CODEC_ID_FLASHSV, CODEC_ID_CAVS, CODEC_ID_JPEG2000, CODEC_ID_VMNC,
- CODEC_ID_VP5, CODEC_ID_VP6, CODEC_ID_VP6F,
-
- //* various pcm "codecs" */
- CODEC_ID_PCM_S16LE= $10000, CODEC_ID_PCM_S16BE, CODEC_ID_PCM_U16LE,
- CODEC_ID_PCM_U16BE, CODEC_ID_PCM_S8, CODEC_ID_PCM_U8, CODEC_ID_PCM_MULAW,
- CODEC_ID_PCM_ALAW, CODEC_ID_PCM_S32LE, CODEC_ID_PCM_S32BE, CODEC_ID_PCM_U32LE,
- CODEC_ID_PCM_U32BE, CODEC_ID_PCM_S24LE, CODEC_ID_PCM_S24BE, CODEC_ID_PCM_U24LE,
- CODEC_ID_PCM_U24BE, CODEC_ID_PCM_S24DAUD,
- //* various adpcm codecs */
- CODEC_ID_ADPCM_IMA_QT= $11000, CODEC_ID_ADPCM_IMA_WAV, CODEC_ID_ADPCM_IMA_DK3,
- CODEC_ID_ADPCM_IMA_DK4, CODEC_ID_ADPCM_IMA_WS, CODEC_ID_ADPCM_IMA_SMJPEG,
- CODEC_ID_ADPCM_MS, CODEC_ID_ADPCM_4XM, CODEC_ID_ADPCM_XA, CODEC_ID_ADPCM_ADX,
- CODEC_ID_ADPCM_EA, CODEC_ID_ADPCM_G726, CODEC_ID_ADPCM_CT, CODEC_ID_ADPCM_SWF,
- CODEC_ID_ADPCM_YAMAHA, CODEC_ID_ADPCM_SBPRO_4, CODEC_ID_ADPCM_SBPRO_3,
- CODEC_ID_ADPCM_SBPRO_2,
- //* AMR */
- CODEC_ID_AMR_NB= $12000, CODEC_ID_AMR_WB,
- //* RealAudio codecs*/
- CODEC_ID_RA_144= $13000, CODEC_ID_RA_288,
- //* various DPCM codecs */
- CODEC_ID_ROQ_DPCM= $14000, CODEC_ID_INTERPLAY_DPCM, CODEC_ID_XAN_DPCM,
- CODEC_ID_SOL_DPCM, CODEC_ID_MP2= $15000,
- CODEC_ID_MP3, //* prefered ID for MPEG Audio layer 1, 2 or3 decoding */
- CODEC_ID_AAC, CODEC_ID_MPEG4AAC, CODEC_ID_AC3, CODEC_ID_DTS, CODEC_ID_VORBIS,
- CODEC_ID_DVAUDIO, CODEC_ID_WMAV1, CODEC_ID_WMAV2, CODEC_ID_MACE3,
- CODEC_ID_MACE6, CODEC_ID_VMDAUDIO, CODEC_ID_SONIC, CODEC_ID_SONIC_LS,
- CODEC_ID_FLAC, CODEC_ID_MP3ADU, CODEC_ID_MP3ON4, CODEC_ID_SHORTEN,
- CODEC_ID_ALAC, CODEC_ID_WESTWOOD_SND1, CODEC_ID_GSM, CODEC_ID_QDM2,
- CODEC_ID_COOK, CODEC_ID_TRUESPEECH, CODEC_ID_TTA, CODEC_ID_SMACKAUDIO,
- CODEC_ID_QCELP, CODEC_ID_WAVPACK,
- //* subtitle codecs */
- CODEC_ID_DVD_SUBTITLE= $17000, CODEC_ID_DVB_SUBTITLE,
-
- CODEC_ID_MPEG2TS= $20000 //* _FAKE_ codec to indicate a raw MPEG2 transport
- // stream (only used by libavformat) */
- );
-
-//* CODEC_ID_MP3LAME is absolete */
-const
- CODEC_ID_MP3LAME = CODEC_ID_MP3;
-
- AVPALETTE_SIZE = 1024;
- AVPALETTE_COUNT = 256;
-
-type
- TCodecType = (
- CODEC_TYPE_UNKNOWN = -1,
- CODEC_TYPE_VIDEO,
- CODEC_TYPE_AUDIO,
- CODEC_TYPE_DATA,
- CODEC_TYPE_SUBTITLE,
- CODEC_TYPE_NB (* CAT#3 *)
- );
-
-//* currently unused, may be used if 24/32 bits samples ever supported */
-//* all in native endian */
- TSampleFormat = (
- SAMPLE_FMT_NONE = -1,
- SAMPLE_FMT_U8, ///< unsigned 8 bits
- SAMPLE_FMT_S16, ///< signed 16 bits
- SAMPLE_FMT_S24, ///< signed 24 bits
- SAMPLE_FMT_S32, ///< signed 32 bits
- SAMPLE_FMT_FLT ///< float
- );
-
-const
-//* in bytes */
- AVCODEC_MAX_AUDIO_FRAME_SIZE = 192000; // 1 second of 48khz 32bit audio
-
-(**
- * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
- * this is mainly needed because some optimized bitstream readers read
- * 32 or 64 bit at once and could read over the end<br>
- * Note, if the first 23 bits of the additional bytes are not 0 then damaged
- * MPEG bitstreams could cause overread and segfault
- *)
- FF_INPUT_BUFFER_PADDING_SIZE = 8;
-
-(**
- * minimum encoding buffer size.
- * used to avoid some checks during header writing
- *)
- FF_MIN_BUFFER_SIZE = 16384;
-
-type
-//* motion estimation type, EPZS by default */
- TMotion_Est_ID = (
- ME_ZERO = 1,
- ME_FULL,
- ME_LOG,
- ME_PHODS,
- ME_EPZS,
- ME_X1,
- ME_HEX,
- ME_UMH,
- ME_ITER
- );
-
- TAVDiscard = (
-//we leave some space between them for extensions (drop some keyframes for intra only or drop just some bidir frames)
- AVDISCARD_NONE = -16, ///< discard nothing
- AVDISCARD_DEFAULT= 0, ///< discard useless packets like 0 size packets in avi
- AVDISCARD_NONREF = 8, ///< discard all non reference
- AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames
- AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes
- AVDISCARD_ALL = 48, ///< discard all
- AVDISCARD_FUCK = $FFFFFF
- );
-
- PRcOverride = ^TRcOverride;
- TRcOverride = record {16}
- start_frame: integer;
- end_frame: integer;
- qscale: integer; // if this is 0 then quality_factor will be used instead
- quality_factor: single;
- end;
-
-const
- FF_MAX_B_FRAMES = 16;
-
-(* encoding support
- these flags can be passed in AVCodecContext.flags before initing
- Note: not everything is supported yet.
-*)
-
- CODEC_FLAG_QSCALE = $0002; ///< use fixed qscale
- CODEC_FLAG_4MV = $0004; ///< 4 MV per MB allowed / Advanced prediction for H263
- CODEC_FLAG_QPEL = $0010; ///< use qpel MC
- CODEC_FLAG_GMC = $0020; ///< use GMC
- CODEC_FLAG_MV0 = $0040; ///< always try a MB with MV=<0,0>
- CODEC_FLAG_PART = $0080; ///< use data partitioning
-//* parent program gurantees that the input for b-frame containing streams is not written to
-// for at least s->max_b_frames+1 frames, if this is not set than the input will be copied */
- CODEC_FLAG_INPUT_PRESERVED = $0100;
- CODEC_FLAG_PASS1 = $0200; ///< use internal 2pass ratecontrol in first pass mode
- CODEC_FLAG_PASS2 = $0400; ///< use internal 2pass ratecontrol in second pass mode
- CODEC_FLAG_EXTERN_HUFF = $1000; ///< use external huffman table (for mjpeg)
- CODEC_FLAG_GRAY = $2000; ///< only decode/encode grayscale
- CODEC_FLAG_EMU_EDGE = $4000; ///< don't draw edges
- CODEC_FLAG_PSNR = $8000; ///< error[?] variables will be set during encoding
- CODEC_FLAG_TRUNCATED = $00010000; //** input bitstream might be truncated at a random location instead
- // of only at frame boundaries */
- CODEC_FLAG_NORMALIZE_AQP = $00020000; ///< normalize adaptive quantization
- CODEC_FLAG_INTERLACED_DCT = $00040000; ///< use interlaced dct
- CODEC_FLAG_LOW_DELAY = $00080000; ///< force low delay
- CODEC_FLAG_ALT_SCAN = $00100000; ///< use alternate scan
- CODEC_FLAG_TRELLIS_QUANT = $00200000; ///< use trellis quantization
- CODEC_FLAG_GLOBAL_HEADER = $00400000; ///< place global headers in extradata instead of every keyframe
- CODEC_FLAG_BITEXACT = $00800000; ///< use only bitexact stuff (except (i)dct)
-//* Fx : Flag for h263+ extra options */
- CODEC_FLAG_H263P_AIC = $01000000; ///< H263 Advanced intra coding / MPEG4 AC prediction (remove this)
- CODEC_FLAG_AC_PRED = $01000000; ///< H263 Advanced intra coding / MPEG4 AC prediction
- CODEC_FLAG_H263P_UMV = $02000000; ///< Unlimited motion vector
- CODEC_FLAG_CBP_RD = $04000000; ///< use rate distortion optimization for cbp
- CODEC_FLAG_QP_RD = $08000000; ///< use rate distortion optimization for qp selectioon
- CODEC_FLAG_H263P_AIV = $00000008; ///< H263 Alternative inter vlc
- CODEC_FLAG_OBMC = $00000001; ///< OBMC
- CODEC_FLAG_LOOP_FILTER = $00000800; ///< loop filter
- CODEC_FLAG_H263P_SLICE_STRUCT = $10000000;
- CODEC_FLAG_INTERLACED_ME = $20000000; ///< interlaced motion estimation
- CODEC_FLAG_SVCD_SCAN_OFFSET = $40000000; ///< will reserve space for SVCD scan offset user data
- CODEC_FLAG_CLOSED_GOP = $80000000;
- CODEC_FLAG2_FAST = $00000001; ///< allow non spec compliant speedup tricks
- CODEC_FLAG2_STRICT_GOP = $00000002; ///< strictly enforce GOP size
- CODEC_FLAG2_NO_OUTPUT = $00000004; ///< skip bitstream encoding
- CODEC_FLAG2_LOCAL_HEADER = $00000008; ///< place global headers at every keyframe instead of in extradata
- CODEC_FLAG2_BPYRAMID = $00000010; ///< H.264 allow b-frames to be used as references
- CODEC_FLAG2_WPRED = $00000020; ///< H.264 weighted biprediction for b-frames
- CODEC_FLAG2_MIXED_REFS = $00000040; ///< H.264 multiple references per partition
- CODEC_FLAG2_8X8DCT = $00000080; ///< H.264 high profile 8x8 transform
- CODEC_FLAG2_FASTPSKIP = $00000100; ///< H.264 fast pskip
- CODEC_FLAG2_AUD = $00000200; ///< H.264 access unit delimiters
- CODEC_FLAG2_BRDO = $00000400; ///< b-frame rate-distortion optimization
- CODEC_FLAG2_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)
-
-(* Unsupported options :
- * Syntax Arithmetic coding (SAC)
- * Reference Picture Selection
- * Independant Segment Decoding */
-/* /Fx */
-/* codec capabilities *)
-
-const
- CODEC_CAP_DRAW_HORIZ_BAND = $001; ///< decoder can use draw_horiz_band callback
-(**
- * Codec uses get_buffer() for allocating buffers.
- * direct rendering method 1 *)
- CODEC_CAP_DR1 = $002;
-(* if 'parse_only' field is true, then avcodec_parse_frame() can be used *)
- CODEC_CAP_PARSE_ONLY = $004;
- CODEC_CAP_TRUNCATED = $008;
-//* codec can export data for HW decoding (XvMC) */
- CODEC_CAP_HWACCEL = $010;
-
-(**
- * 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 *)
- CODEC_CAP_DELAY = $0020;
-(**
- * Codec can be fed a final frame with a smaller size.
- * This can be used to prevent truncation of the last audio samples. *)
- CODEC_CAP_SMALL_LAST_FRAME = $0040;
-
-//the following defines may change, don't expect compatibility if you use them
- MB_TYPE_INTRA4x4 = $001;
- MB_TYPE_INTRA16x16 = $002; //FIXME h264 specific
- MB_TYPE_INTRA_PCM = $004; //FIXME h264 specific
- MB_TYPE_16x16 = $008;
- MB_TYPE_16x8 = $010;
- MB_TYPE_8x16 = $020;
- MB_TYPE_8x8 = $040;
- MB_TYPE_INTERLACED = $080;
- MB_TYPE_DIRECT2 = $100; //FIXME
- MB_TYPE_ACPRED = $200;
- MB_TYPE_GMC = $400;
- MB_TYPE_SKIP = $800;
- MB_TYPE_P0L0 = $1000;
- MB_TYPE_P1L0 = $2000;
- MB_TYPE_P0L1 = $4000;
- MB_TYPE_P1L1 = $8000;
- MB_TYPE_L0 = (MB_TYPE_P0L0 or MB_TYPE_P1L0);
- MB_TYPE_L1 = (MB_TYPE_P0L1 or MB_TYPE_P1L1);
- MB_TYPE_L0L1 = (MB_TYPE_L0 or MB_TYPE_L1);
- MB_TYPE_QUANT = $0010000;
- MB_TYPE_CBP = $0020000;
-//Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)
-
-type
-(**
- * Pan Scan area.
- * this specifies the area which should be displayed. Note there may be multiple such areas for one frame *)
- PAVPanScan = ^TAVPanScan;
- TAVPanScan = record {24}
- (*** id.
- * - encoding: set by user.
- * - decoding: set by lavc *)
- id: integer;
-
- (*** width and height in 1/16 pel
- * - encoding: set by user.
- * - decoding: set by lavc *)
- width: integer;
- height: integer;
-
- (*** position of the top left corner in 1/16 pel for up to 3 fields/frames.
- * - encoding: set by user.
- * - decoding: set by lavc *)
- position: array [0..2] of array [0..1] of smallint;
- end;
-
-const
- FF_QSCALE_TYPE_MPEG1 = 0;
- FF_QSCALE_TYPE_MPEG2 = 1;
-
- FF_BUFFER_TYPE_INTERNAL = 1;
- FF_BUFFER_TYPE_USER = 2; ///< Direct rendering buffers (image is (de)allocated by user)
- 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
-
-
- FF_I_TYPE = 1; // Intra
- FF_P_TYPE = 2; // Predicted
- FF_B_TYPE = 3; // Bi-dir predicted
- FF_S_TYPE = 4; // S(GMC)-VOP MPEG4
- FF_SI_TYPE = 5;
- FF_SP_TYPE = 6;
-
- FF_BUFFER_HINTS_VALID = $01; // Buffer hints value is meaningful (if 0 ignore)
- FF_BUFFER_HINTS_READABLE = $02; // Codec will read from buffer
- FF_BUFFER_HINTS_PRESERVE = $04; // User must not alter buffer content
- FF_BUFFER_HINTS_REUSABLE = $08; // Codec will reuse the buffer (update)
-
-type
- (*** Audio Video Frame. *)
- PAVFrame = ^TAVFrame;
- TAVFrame = record {200}
- (*** pointer to the picture planes.
- * this might be different from the first allocated byte *)
- data: array [0..3] of pbyte;
- linesize: array [0..3] of integer;
- (*** pointer to the first allocated byte of the picture. can be used in get_buffer/release_buffer
- * this isn't used by lavc unless the default get/release_buffer() is used*)
- base: array [0..3] of pbyte;
- (*** 1 -> keyframe, 0-> not *)
- key_frame: integer;
- (*** picture type of the frame, see ?_TYPE below.*)
- pict_type: integer;
- (*** presentation timestamp in time_base units (time when frame should be shown to user)
- * if AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed*)
- pts: int64;
- (*** picture number in bitstream order.*)
- coded_picture_number: integer;
- (*** picture number in display order.*)
- display_picture_number: integer;
- (*** quality (between 1 (good) and FF_LAMBDA_MAX (bad)) *)
- quality: integer;
- (*** buffer age (1->was last buffer and dint change, 2->..., ...).*)
- age: integer;
- (*** is this picture used as reference*)
- reference: integer;
- (*** QP table*)
- qscale_table: pchar;
- (*** QP store stride*)
- qstride: integer;
- (*** mbskip_table[mb]>=1 if MB didnt change*)
- mbskip_table: pbyte;
- (**
- * Motion vector table.
- * @code
- * example:
- * int mv_sample_log2= 4 - motion_subsample_log2;
- * int mb_width= (width+15)>>4;
- * int mv_stride= (mb_width << mv_sample_log2) + 1;
- * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y];
- * @endcode
- * - encoding: set by user
- * - decoding: set by lavc *)
- motion_val: array [0..1] of pointer;
- (*** Macroblock type table
- * mb_type_base + mb_width + 2 *)
- mb_type: PCardinal;
- (*** log2 of the size of the block which a single vector in motion_val represents:
- * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)*)
- motion_subsample_log2: byte;
- (*** for some private data of the user*)
- opaque: pointer;
- (*** error*)
- error: array [0..3] of int64;
- (*** type of the buffer (to keep track of who has to dealloc data[*])
- * Note: user allocated (direct rendering) & internal buffers can not coexist currently*)
- _type: integer;
- (*** when decoding, this signal how much the picture must be delayed.
- * extra_delay = repeat_pict / (2*fps)*)
- repeat_pict: integer;
- qscale_type: integer;
- (*** The content of the picture is interlaced.*)
- interlaced_frame: integer;
- (*** if the content is interlaced, is top field displayed first.*)
- top_field_first: integer;
- (*** Pan scan.*)
- pan_scan: PAVPanScan;
- (*** tell user application that palette has changed from previous frame.*)
- palette_has_changed: integer;
- (*** Codec suggestion on buffer type if != 0
- * - decoding: set by lavc (before get_buffer() call))*)
- buffer_hints: integer;
- (*** DCT coeffitients*)
- dct_coeff: PsmallInt;
- (*** Motion referece frame index*)
- ref_index: array [0..1] of pshortint;
- end;
-
-const
- DEFAULT_FRAME_RATE_BASE = 1001000;
-
- FF_BUG_AUTODETECT = 1; ///< autodetection
- FF_BUG_OLD_MSMPEG4 = 2;
- FF_BUG_XVID_ILACE = 4;
- FF_BUG_UMP4 = 8;
- FF_BUG_NO_PADDING = 16;
- FF_BUG_AMV = 32;
- FF_BUG_AC_VLC = 0; ///< will be removed, libavcodec can now handle these non compliant files by default
- FF_BUG_QPEL_CHROMA = 64;
- FF_BUG_STD_QPEL = 128;
- FF_BUG_QPEL_CHROMA2 = 256;
- FF_BUG_DIRECT_BLOCKSIZE = 512;
- FF_BUG_EDGE = 1024;
- FF_BUG_HPEL_CHROMA = 2048;
- FF_BUG_DC_CLIP = 4096;
- FF_BUG_MS = 8192; ///< workaround various bugs in microsofts broken decoders
-
- FF_COMPLIANCE_VERY_STRICT = 2; ///< strictly conform to a 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;
- FF_COMPLIANCE_INOFFICIAL = -1; ///< allow inofficial extensions
- FF_COMPLIANCE_EXPERIMENTAL = -2; ///< allow non standarized experimental things
-
- FF_ER_CAREFUL = 1;
- FF_ER_COMPLIANT = 2;
- FF_ER_AGGRESSIVE = 3;
- FF_ER_VERY_AGGRESSIVE = 4;
-
- FF_DCT_AUTO = 0;
- FF_DCT_FASTINT = 1;
- FF_DCT_INT = 2;
- FF_DCT_MMX = 3;
- FF_DCT_MLIB = 4;
- FF_DCT_ALTIVEC = 5;
- FF_DCT_FAAN = 6;
-
- FF_IDCT_AUTO = 0;
- FF_IDCT_INT = 1;
- FF_IDCT_SIMPLE = 2;
- FF_IDCT_SIMPLEMMX = 3;
- FF_IDCT_LIBMPEG2MMX = 4;
- FF_IDCT_PS2 = 5;
- FF_IDCT_MLIB = 6;
- FF_IDCT_ARM = 7;
- FF_IDCT_ALTIVEC = 8;
- FF_IDCT_SH4 = 9;
- FF_IDCT_SIMPLEARM = 10;
- FF_IDCT_H264 = 11;
- FF_IDCT_VP3 = 12;
- FF_IDCT_IPP = 13;
- FF_IDCT_XVIDMMX = 14;
-
- FF_EC_GUESS_MVS = 1;
- FF_EC_DEBLOCK = 2;
-
- FF_MM_FORCE = $80000000; (* force usage of selected flags (OR) *)
- (* lower 16 bits - CPU features *)
-
- FF_MM_MMX = $0001; (* standard MMX *)
- FF_MM_3DNOW = $0004; (* AMD 3DNOW *)
- FF_MM_MMXEXT = $0002; (* SSE integer functions or AMD MMX ext *)
- FF_MM_SSE = $0008; (* SSE functions *)
- FF_MM_SSE2 = $0010; (* PIV SSE2 functions *)
- FF_MM_3DNOWEXT = $0020; (* AMD 3DNowExt *)
- FF_MM_IWMMXT = $0100; (* XScale IWMMXT *)
-
- FF_PRED_LEFT = 0;
- FF_PRED_PLANE = 1;
- FF_PRED_MEDIAN = 2;
-
- FF_DEBUG_PICT_INFO = 1;
- FF_DEBUG_RC = 2;
- FF_DEBUG_BITSTREAM = 4;
- FF_DEBUG_MB_TYPE = 8;
- FF_DEBUG_QP = 16;
- FF_DEBUG_MV = 32;
- FF_DEBUG_DCT_COEFF = $00000040;
- FF_DEBUG_SKIP = $00000080;
- FF_DEBUG_STARTCODE = $00000100;
- FF_DEBUG_PTS = $00000200;
- FF_DEBUG_ER = $00000400;
- FF_DEBUG_MMCO = $00000800;
- FF_DEBUG_BUGS = $00001000;
- FF_DEBUG_VIS_QP = $00002000;
- FF_DEBUG_VIS_MB_TYPE = $00004000;
-
- FF_DEBUG_VIS_MV_P_FOR = $00000001; //visualize forward predicted MVs of P frames
- FF_DEBUG_VIS_MV_B_FOR = $00000002; //visualize forward predicted MVs of B frames
- FF_DEBUG_VIS_MV_B_BACK = $00000004; //visualize backward predicted MVs of B frames
-
- FF_CMP_SAD = 0;
- FF_CMP_SSE = 1;
- FF_CMP_SATD = 2;
- FF_CMP_DCT = 3;
- FF_CMP_PSNR = 4;
- FF_CMP_BIT = 5;
- FF_CMP_RD = 6;
- FF_CMP_ZERO = 7;
- FF_CMP_VSAD = 8;
- FF_CMP_VSSE = 9;
- FF_CMP_NSSE = 10;
- FF_CMP_W53 = 11;
- FF_CMP_W97 = 12;
- FF_CMP_DCTMAX = 13;
- FF_CMP_CHROMA = 256;
-
- FF_DTG_AFD_SAME = 8;
- FF_DTG_AFD_4_3 = 9;
- FF_DTG_AFD_16_9 = 10;
- FF_DTG_AFD_14_9 = 11;
- FF_DTG_AFD_4_3_SP_14_9 = 13;
- FF_DTG_AFD_16_9_SP_14_9 = 14;
- FF_DTG_AFD_SP_4_3 = 15;
-
- FF_DEFAULT_QUANT_BIAS = 999999;
-
- FF_LAMBDA_SHIFT = 7;
- FF_LAMBDA_SCALE = (1 shl FF_LAMBDA_SHIFT);
- FF_QP2LAMBDA = 118; ///< factor to convert from H.263 QP to lambda
- FF_LAMBDA_MAX = (256 * 128 - 1);
-
- FF_QUALITY_SCALE = FF_LAMBDA_SCALE; //FIXME maybe remove
-
- FF_CODER_TYPE_VLC = 0;
- FF_CODER_TYPE_AC = 1;
-
- SLICE_FLAG_CODED_ORDER = $0001; ///< draw_horiz_band() is called in coded order instead of display
- SLICE_FLAG_ALLOW_FIELD = $0002; ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
- SLICE_FLAG_ALLOW_PLANE = $0004; ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
-
- FF_MB_DECISION_SIMPLE = 0; ///< uses mb_cmp
- FF_MB_DECISION_BITS = 1; ///< chooses the one which needs the fewest bits
- FF_MB_DECISION_RD = 2; ///< rate distoration
-
- FF_AA_AUTO = 0;
- FF_AA_FASTINT = 1; //not implemented yet
- FF_AA_INT = 2;
- FF_AA_FLOAT = 3;
-
- FF_PROFILE_UNKNOWN = -99;
-
- FF_LEVEL_UNKNOWN = -99;
-
- X264_PART_I4X4 = $001; (* Analyse i4x4 *)
- X264_PART_I8X8 = $002; (* Analyse i8x8 (requires 8x8 transform) *)
- X264_PART_P8X8 = $010; (* Analyse p16x8, p8x16 and p8x8 *)
- X264_PART_P4X4 = $020; (* Analyse p8x4, p4x8, p4x4 *)
- X264_PART_B8X8 = $100; (* Analyse b16x8, b8x16 and b8x8 *)
-
-type
- PAVClass = ^TAVClass;
- PAVCodecContext = ^TAVCodecContext;
- PAVCodec = ^TAVCodec;
- PAVPaletteControl = ^TAVPaletteControl;
-
- TAVclass = record {12}
- class_name: pchar;
- (* actually passing a pointer to an AVCodecContext
- or AVFormatContext, which begin with an AVClass.
- Needed because av_log is in libavcodec and has no visibility
- of AVIn/OutputFormat *)
- item_name: function (): pchar; cdecl;
- option: PAVOption;
- end;
-
- TAVCodecContext = record {720}
- (*** Info on struct for av_log
- * - set by avcodec_alloc_context *)
- av_class: PAVClass;
- (*** the average bitrate.
- * - encoding: set by user. unused for constant quantizer encoding
- * - decoding: set by lavc. 0 or some bitrate if this info is available in the stream *)
- bit_rate: integer;
- (*** number of bits the bitstream is allowed to diverge from the reference.
- * the reference can be CBR (for CBR pass1) or VBR (for pass2)
- * - encoding: set by user. unused for constant quantizer encoding
- * - decoding: unused *)
- bit_rate_tolerance: integer;
- (*** CODEC_FLAG_*.
- * - encoding: set by user.
- * - decoding: set by user. *)
- flags: integer;
- (*** some codecs needs additionnal format info. It is stored here
- * - encoding: set by user.
- * - decoding: set by lavc. (FIXME is this ok?) *)
- sub_id: integer;
-
- (**
- * motion estimation algorithm used for video coding.
- * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex),
- * 8 (umh), 9 (iter) [7, 8 are x264 specific, 9 is snow specific]
- * - encoding: MUST be set by user.
- * - decoding: unused *)
- me_method: integer;
-
- (**
- * some codecs need / can use extra-data like huffman tables.
- * mjpeg: huffman tables
- * rv10: additional flags
- * mpeg4: global headers (they can be in the bitstream or here)
- * the allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger
- * then extradata_size to avoid prolems if its read with the bitstream reader
- * the bytewise contents of extradata must not depend on the architecture or cpu endianness
- * - encoding: set/allocated/freed by lavc.
- * - decoding: set/allocated/freed by user.
- *)
- extradata: pbyte;
- extradata_size: integer;
-
- (**
- * this is the fundamental unit of time (in seconds) in terms
- * of which frame timestamps are represented. for fixed-fps content,
- * timebase should be 1/framerate and timestamp increments should be
- * identically 1.
- * - encoding: MUST be set by user
- * - decoding: set by lavc. *)
- time_base: TAVRational;
-
- (* video only *)
- (*** picture width / height.
- * - encoding: MUST be set by user.
- * - decoding: set by lavc.
- * Note, for compatibility its possible to set this instead of
- * coded_width/height before decoding *)
- width, height: integer;
- (*** the number of pictures in a group of pitures, or 0 for intra_only.
- * - encoding: set by user.
- * - decoding: unused *)
- gop_size: integer;
- (*** pixel format, see PIX_FMT_xxx.
- * - encoding: set by user.
- * - decoding: set by lavc. *)
- pix_fmt: TAVPixelFormat;
- (*** Frame rate emulation. If not zero lower layer (i.e. format handler)
- * has to read frames at native frame rate.
- * - encoding: set by user.
- * - decoding: unused. *)
- rate_emu: integer;
- (*** if non NULL, 'draw_horiz_band' is called by the libavcodec
- * decoder to draw an horizontal band. It improve cache usage. Not
- * all codecs can do that. You must check the codec capabilities
- * before
- * - encoding: unused
- * - decoding: set by user.
- * @param height the height of the slice
- * @param y the y position of the slice
- * @param type 1->top field, 2->bottom field, 3->frame
- * @param offset offset into the AVFrame.data from which the slice should be read *)
- draw_horiz_band: procedure (s: PAVCodecContext;
- const src: PAVFrame; offset: PInteger;
- y: integer; _type: integer; height: integer); cdecl;
-
- (* audio only *)
- sample_rate: integer; ///< samples per sec
- channels: integer;
- (*** audio sample format.
- * - encoding: set by user.
- * - decoding: set by lavc. *)
- sample_fmt: TSampleFormat; ///< sample format, currenly unused
-
- (* the following data should not be initialized *)
- (*** samples per packet. initialized when calling 'init' *)
- frame_size: integer;
- frame_number: integer; ///< audio or video frame number
- real_pict_num: integer; ///< returns the real picture number of previous encoded frame
-
- (*** number of frames the decoded output will be delayed relative to
- * the encoded input.
- * - encoding: set by lavc.
- * - decoding: unused *)
- delay: integer;
-
- (* - encoding parameters *)
- qcompress: single; ///< amount of qscale change between easy & hard scenes (0.0-1.0)
- qblur: single; ///< amount of qscale smoothing over time (0.0-1.0)
-
- (*** minimum quantizer.
- * - encoding: set by user.
- * - decoding: unused *)
- qmin: integer;
-
- (*** maximum quantizer.
- * - encoding: set by user.
- * - decoding: unused *)
- qmax: integer;
-
- (*** maximum quantizer difference etween frames.
- * - encoding: set by user.
- * - decoding: unused *)
- max_qdiff: integer;
-
- (*** maximum number of b frames between non b frames.
- * note: the output will be delayed by max_b_frames+1 relative to the input
- * - encoding: set by user.
- * - decoding: unused *)
- max_b_frames: integer;
-
- (*** qscale factor between ip and b frames.
- * - encoding: set by user.
- * - decoding: unused *)
- b_quant_factor: single;
-
- (** obsolete FIXME remove *)
- rc_strategy: integer;
- b_frame_strategy: integer;
-
- (*** hurry up amount.
- * deprecated in favor of skip_idct and skip_frame
- * - encoding: unused
- * - decoding: set by user. 1-> skip b frames, 2-> skip idct/dequant too, 5-> skip everything except header *)
- hurry_up: integer;
-
- codec: PAVCodec;
-
- priv_data: pointer;
-
- (* unused, FIXME remove*)
- rtp_mode: integer;
-
- rtp_payload_size: integer; (* The size of the RTP payload: the coder will *)
- (* do it's best to deliver a chunk with size *)
- (* below rtp_payload_size, the chunk will start *)
- (* with a start code on some codecs like H.263 *)
- (* This doesn't take account of any particular *)
- (* headers inside the transmited RTP payload *)
-
-
- (* The RTP callback: This function is called *)
- (* every time the encoder has a packet to send *)
- (* Depends on the encoder if the data starts *)
- (* with a Start Code (it should) H.263 does. *)
- (* mb_nb contains the number of macroblocks *)
- (* encoded in the RTP payload *)
- rtp_callback: procedure (avctx: PAVCodecContext; data: pointer;
- size: integer; mb_nb: integer); cdecl;
-
- (* statistics, used for 2-pass encoding *)
- mv_bits: integer;
- header_bits: integer;
- i_tex_bits: integer;
- p_tex_bits: integer;
- i_count: integer;
- p_count: integer;
- skip_count: integer;
- misc_bits: integer;
-
- (*** number of bits used for the previously encoded frame.
- * - encoding: set by lavc
- * - decoding: unused *)
- frame_bits: integer;
-
- (*** private data of the user, can be used to carry app specific stuff.
- * - encoding: set by user
- * - decoding: set by user *)
- opaque: pointer;
-
- codec_name: array [0..31] of char;
- codec_type: TCodecType; (* see CODEC_TYPE_xxx *)
- codec_id: TCodecID; (* see CODEC_ID_xxx *)
-
- (*** fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
- * this is used to workaround some encoder bugs
- * - encoding: set by user, if not then the default based on codec_id will be used
- * - decoding: set by user, will be converted to upper case by lavc during init *)
- codec_tag: cardinal; // можно array [0..3] of char - тогда видно FOURCC
-// codec_tag: array [0..3] of char;
-
- (*** workaround bugs in encoders which sometimes cannot be detected automatically.
- * - encoding: set by user
- * - decoding: set by user *)
- workaround_bugs: integer;
-
- (*** luma single coeff elimination threshold.
- * - encoding: set by user
- * - decoding: unused *)
- luma_elim_threshold: integer;
-
- (*** chroma single coeff elimination threshold.
- * - encoding: set by user
- * - decoding: unused *)
- chroma_elim_threshold: integer;
-
- (*** strictly follow the std (MPEG4, ...).
- * - encoding: set by user
- * - decoding: unused *)
- strict_std_compliance: integer;
-
- (*** qscale offset between ip and b frames.
- * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
- * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
- * - encoding: set by user.
- * - decoding: unused *)
- b_quant_offset: single;
-
- (*** error resilience higher values will detect more errors but may missdetect
- * some more or less valid parts as errors.
- * - encoding: unused
- * - decoding: set by user *)
- error_resilience: integer;
-
- (*** 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 lavc
- * avcodec_align_dimensions() should be used to find the required width and
- * height, as they normally need to be rounded up to the next multiple of 16
- * - encoding: unused
- * - decoding: set by lavc, user can override *)
- get_buffer: function (c: PAVCodecContext; pic: PAVFrame): integer; cdecl;
-
- (*** called to release buffers which where allocated with get_buffer.
- * a released buffer can be reused in get_buffer()
- * pic.data[*] must be set to NULL
- * - encoding: unused
- * - decoding: set by lavc, user can override *)
- release_buffer: procedure (c: PAVCodecContext; pic: PAVFrame); cdecl;
-
- (*** if 1 the stream has a 1 frame delay during decoding.
- * - encoding: set by lavc
- * - decoding: set by lavc *)
- has_b_frames: integer;
-
- (*** number of bytes per packet if constant and known or 0
- * used by some WAV based audio codecs *)
- block_align: integer;
-
- parse_only: integer; (* - decoding only: if true, only parsing is done
- (function avcodec_parse_frame()). The frame
- data is returned. Only MPEG codecs support this now. *)
-
- (*** 0-> h263 quant 1-> mpeg quant.
- * - encoding: set by user.
- * - decoding: unused *)
- mpeg_quant: integer;
-
- (*** pass1 encoding statistics output buffer.
- * - encoding: set by lavc
- * - decoding: unused *)
- stats_out: pchar;
-
- (*** pass2 encoding statistics input buffer.
- * concatenated stuff from stats_out of pass1 should be placed here
- * - encoding: allocated/set/freed by user
- * - decoding: unused *)
- stats_in: pchar;
-
- (*** ratecontrol qmin qmax limiting method.
- * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax
- * - encoding: set by user.
- * - decoding: unused *)
- rc_qsquish: single;
-
- rc_qmod_amp: single;
- rc_qmod_freq: integer;
-
- (*** ratecontrol override, see RcOverride.
- * - encoding: allocated/set/freed by user.
- * - decoding: unused *)
- rc_override: PRcOverride;
- rc_override_count: integer;
-
- (*** rate control equation.
- * - encoding: set by user
- * - decoding: unused *)
- rc_eq: pchar;
-
- (*** maximum bitrate.
- * - encoding: set by user.
- * - decoding: unused *)
- rc_max_rate: integer;
-
- (*** minimum bitrate.
- * - encoding: set by user.
- * - decoding: unused *)
- rc_min_rate: integer;
-
- (*** decoder bitstream buffer size.
- * - encoding: set by user.
- * - decoding: unused *)
- rc_buffer_size: integer;
- rc_buffer_aggressivity: single;
-
- (*** qscale factor between p and i frames.
- * if > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset)
- * if < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset)
- * - encoding: set by user.
- * - decoding: unused *)
- i_quant_factor: single;
-
- (*** qscale offset between p and i frames.
- * - encoding: set by user.
- * - decoding: unused *)
- i_quant_offset: single;
-
- (*** initial complexity for pass1 ratecontrol.
- * - encoding: set by user.
- * - decoding: unused *)
- rc_initial_cplx: single;
-
- (*** dct algorithm, see FF_DCT_* below.
- * - encoding: set by user
- * - decoding: unused *)
- dct_algo: integer;
-
- (*** luminance masking (0-> disabled).
- * - encoding: set by user
- * - decoding: unused *)
- lumi_masking: single;
-
- (*** temporary complexity masking (0-> disabled).
- * - encoding: set by user
- * - decoding: unused *)
- temporal_cplx_masking: single;
-
- (*** spatial complexity masking (0-> disabled).
- * - encoding: set by user
- * - decoding: unused *)
- spatial_cplx_masking: single;
-
- (** * p block masking (0-> disabled).
- * - encoding: set by user
- * - decoding: unused *)
- p_masking: single;
-
- (*** darkness masking (0-> disabled).
- * - encoding: set by user
- * - decoding: unused *)
- dark_masking: single;
-
- (* for binary compatibility *)
- unused: integer;
-
- (*** idct algorithm, see FF_IDCT_* below.
- * - encoding: set by user
- * - decoding: set by user *)
- idct_algo: integer;
-
- (*** slice count.
- * - encoding: set by lavc
- * - decoding: set by user (or 0) *)
- slice_count: integer;
-
- (*** slice offsets in the frame in bytes.
- * - encoding: set/allocated by lavc
- * - decoding: set/allocated by user (or NULL) *)
- slice_offset: Pinteger;
-
- (*** error concealment flags.
- * - encoding: unused
- * - decoding: set by user *)
- error_concealment: integer;
-
- (*** dsp_mask could be add used to disable unwanted CPU features
- * CPU features (i.e. MMX, SSE. ...)
- *
- * with FORCE flag you may instead enable given CPU features
- * (Dangerous: usable in case of misdetection, improper usage however will
- * result into program crash) *)
- dsp_mask: cardinal;
-
- (*** bits per sample/pixel from the demuxer (needed for huffyuv).
- * - encoding: set by lavc
- * - decoding: set by user *)
- bits_per_sample: integer;
-
- (*** prediction method (needed for huffyuv).
- * - encoding: set by user
- * - decoding: unused *)
- prediction_method: integer;
-
- (*** sample aspect ratio (0 if unknown).
- * numerator and denominator must be relative prime and smaller then 256 for some video standards
- * - encoding: set by user.
- * - decoding: set by lavc. *)
- sample_aspect_ratio: TAVRational;
-
- (*** the picture in the bitstream.
- * - encoding: set by lavc
- * - decoding: set by lavc *)
- coded_frame: PAVFrame;
-
- (*** debug.
- * - encoding: set by user.
- * - decoding: set by user. *)
- debug: integer;
-
- (*** debug.
- * - encoding: set by user.
- * - decoding: set by user. *)
- debug_mv: integer;
-
- (** error.
- * - encoding: set by lavc if flags&CODEC_FLAG_PSNR
- * - decoding: unused *)
- error: array [0..3] of int64;
-
- (*** minimum MB quantizer.
- * - encoding: unused
- * - decoding: unused *)
- mb_qmin: integer;
-
- (*** maximum MB quantizer.
- * - encoding: unused
- * - decoding: unused *)
- mb_qmax: integer;
-
- (*** motion estimation compare function.
- * - encoding: set by user.
- * - decoding: unused *)
- me_cmp: integer;
-
- (*** subpixel motion estimation compare function.
- * - encoding: set by user.
- * - decoding: unused *)
- me_sub_cmp: integer;
- (*** macroblock compare function (not supported yet).
- * - encoding: set by user.
- * - decoding: unused *)
- mb_cmp: integer;
- (*** interlaced dct compare function
- * - encoding: set by user.
- * - decoding: unused *)
- ildct_cmp: integer;
- (*** ME diamond size & shape.
- * - encoding: set by user.
- * - decoding: unused *)
- dia_size: integer;
-
- (*** amount of previous MV predictors (2a+1 x 2a+1 square).
- * - encoding: set by user.
- * - decoding: unused *)
- last_predictor_count: integer;
-
- (*** pre pass for motion estimation.
- * - encoding: set by user.
- * - decoding: unused *)
- pre_me: integer;
-
- (*** motion estimation pre pass compare function.
- * - encoding: set by user.
- * - decoding: unused *)
- me_pre_cmp: integer;
-
- (*** ME pre pass diamond size & shape.
- * - encoding: set by user.
- * - decoding: unused *)
- pre_dia_size: integer;
-
- (*** subpel ME quality.
- * - encoding: set by user.
- * - decoding: unused *)
- me_subpel_quality: integer;
-
- (*** callback to negotiate the pixelFormat.
- * @param fmt is the list of formats which are supported by the codec,
- * its terminated by -1 as 0 is a valid format, the formats are ordered by quality
- * the first is allways the native one
- * @return the choosen format
- * - encoding: unused
- * - decoding: set by user, if not set then the native format will always be choosen
- *)
- get_format: function (s: PAVCodecContext; const fmt: PAVPixelFormat): TAVPixelFormat; cdecl;
-
- (*** DTG active format information (additionnal aspect ratio
- * information only used in DVB MPEG2 transport streams). 0 if
- * not set.
- * - encoding: unused.
- * - decoding: set by decoder *)
- dtg_active_format: integer;
-
- (*** Maximum motion estimation search range in subpel units.
- * if 0 then no limit
- * - encoding: set by user.
- * - decoding: unused. *)
- me_range: integer;
-
- (*** intra quantizer bias.
- * - encoding: set by user.
- * - decoding: unused *)
- intra_quant_bias: integer;
-
- (*** inter quantizer bias.
- * - encoding: set by user.
- * - decoding: unused *)
- inter_quant_bias: integer;
-
- (*** color table ID.
- * - encoding: unused.
- * - decoding: which clrtable should be used for 8bit RGB images
- * table have to be stored somewhere FIXME *)
- color_table_id: integer;
-
- (*** internal_buffer count.
- * Don't touch, used by lavc default_get_buffer() *)
- internal_buffer_count: integer;
-
- (*** internal_buffers.
- * Don't touch, used by lavc default_get_buffer() *)
- internal_buffer: pointer;
-
- (*** global quality for codecs which cannot change it per frame.
- * this should be proportional to MPEG1/2/4 qscale.
- * - encoding: set by user.
- * - decoding: unused *)
- global_quality: integer;
-
- (*** coder type
- * - encoding: set by user.
- * - decoding: unused *)
- coder_type: integer;
-
- (*** context model
- * - encoding: set by user.
- * - decoding: unused *)
- context_model: integer;
-
- (*** slice flags
- * - encoding: unused
- * - decoding: set by user. *)
- slice_flags: integer;
-
- (*** XVideo Motion Acceleration
- * - encoding: forbidden
- * - decoding: set by decoder *)
- xvmc_acceleration: integer;
-
- (*** macroblock decision mode
- * - encoding: set by user.
- * - decoding: unused *)
- mb_decision: integer;
-
- (*** custom intra quantization matrix
- * - encoding: set by user, can be NULL
- * - decoding: set by lavc *)
- intra_matrix: Pword;
-
- (*** custom inter quantization matrix
- * - encoding: set by user, can be NULL
- * - decoding: set by lavc *)
- inter_matrix: Pword;
-
- (*** fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
- * this is used to workaround some encoder bugs
- * - encoding: unused
- * - decoding: set by user, will be converted to upper case by lavc during init *)
- stream_codec_tag: array [0..3] of char; //cardinal;
-
- (*** scene change detection threshold.
- * 0 is default, larger means fewer detected scene changes
- * - encoding: set by user.
- * - decoding: unused *)
- scenechange_threshold: integer;
-
- (*** minimum lagrange multipler
- * - encoding: set by user.
- * - decoding: unused *)
- lmin: integer;
-
- (*** maximum lagrange multipler
- * - encoding: set by user.
- * - decoding: unused *)
- lmax: integer;
-
- (*** Palette control structure
- * - encoding: ??? (no palette-enabled encoder yet)
- * - decoding: set by user. *)
- palctrl: PAVPaletteControl;
-
- (*** noise reduction strength
- * - encoding: set by user.
- * - decoding: unused *)
- noise_reduction: integer;
-
- (*** called at the beginning of a frame to get cr buffer for it.
- * buffer type (size, hints) must be the same. lavc won't check it.
- * lavc will pass previous buffer in pic, function should return
- * same buffer or new buffer with old frame "painted" into it.
- * if pic.data[0] == NULL must behave like get_buffer().
- * - encoding: unused
- * - decoding: set by lavc, user can override *)
- reget_buffer: function (c: PAVCodecContext; pic: PAVFrame): integer; cdecl;
-
- (*** number of bits which should be loaded into the rc buffer before decoding starts
- * - encoding: set by user.
- * - decoding: unused *)
- rc_initial_buffer_occupancy: integer;
- inter_threshold: integer;
-
- (*** CODEC_FLAG2_*.
- * - encoding: set by user.
- * - decoding: set by user. *)
- flags2: integer;
-
- (*** simulates errors in the bitstream to test error concealment.
- * - encoding: set by user.
- * - decoding: unused. *)
- error_rate: integer;
-
- (*** MP3 antialias algorithm, see FF_AA_* below.
- * - encoding: unused
- * - decoding: set by user *)
- antialias_algo: integer;
-
- (*** Quantizer noise shaping.
- * - encoding: set by user
- * - decoding: unused *)
- quantizer_noise_shaping: integer;
-
- (*** Thread count.
- * is used to decide how many independant tasks should be passed to execute()
- * - encoding: set by user
- * - decoding: set by user *)
- thread_count: integer;
-
- (*** the codec may call this to execute several independant things. it will return only after
- * finishing all tasks, the user may replace this with some multithreaded implementation, the
- * default implementation will execute the parts serially
- * @param count the number of things to execute
- * - encoding: set by lavc, user can override
- * - decoding: set by lavc, user can override *)
- execute: function (c: PAVCodecContext; func: pointer; arg: PPointer; ret: PInteger; count: integer): integer; cdecl;
-
- (*** Thread opaque.
- * can be used by execute() to store some per AVCodecContext stuff.
- * - encoding: set by execute()
- * - decoding: set by execute() *)
- thread_opaque: pointer;
-
- (*** Motion estimation threshold. under which no motion estimation is
- * performed, but instead the user specified motion vectors are used
- * - encoding: set by user
- * - decoding: unused *)
- me_threshold: integer;
-
- (*** Macroblock threshold. under which the user specified macroblock types will be used
- * - encoding: set by user
- * - decoding: unused *)
- mb_threshold: integer;
-
- (*** precision of the intra dc coefficient - 8.
- * - encoding: set by user
- * - decoding: unused *)
- intra_dc_precision: integer;
-
- (*** noise vs. sse weight for the nsse comparsion function.
- * - encoding: set by user
- * - decoding: unused *)
- nsse_weight: integer;
-
- (*** number of macroblock rows at the top which are skipped.
- * - encoding: unused
- * - decoding: set by user *)
- skip_top: integer;
-
- (*** number of macroblock rows at the bottom which are skipped.
- * - encoding: unused
- * - decoding: set by user *)
- skip_bottom: integer;
-
- (*** profile
- * - encoding: set by user
- * - decoding: set by lavc *)
- profile: integer;
-
- (*** level
- * - encoding: set by user
- * - decoding: set by lavc *)
- level: integer;
-
- (*** low resolution decoding. 1-> 1/2 size, 2->1/4 size
- * - encoding: unused
- * - decoding: set by user *)
- lowres: integer;
-
- (*** bitsream width / height. may be different from width/height if lowres
- * or other things are used
- * - encoding: unused
- * - decoding: set by user before init if known, codec should override / dynamically change if needed *)
- coded_width, coded_height: integer;
-
- (*** frame skip threshold
- * - encoding: set by user
- * - decoding: unused *)
- frame_skip_threshold: integer;
-
- (*** frame skip factor
- * - encoding: set by user
- * - decoding: unused *)
- frame_skip_factor: integer;
-
- (*** frame skip exponent
- * - encoding: set by user
- * - decoding: unused *)
- frame_skip_exp: integer;
-
- (*** frame skip comparission function
- * - encoding: set by user.
- * - decoding: unused *)
- frame_skip_cmp: integer;
-
- (*** border processing masking. raises the quantizer for mbs on the borders
- * of the picture.
- * - encoding: set by user
- * - decoding: unused *)
- border_masking: single;
-
- (*** minimum MB lagrange multipler.
- * - encoding: set by user.
- * - decoding: unused *)
- mb_lmin: integer;
-
- (*** maximum MB lagrange multipler.
- * - encoding: set by user.
- * - decoding: unused *)
- mb_lmax: integer;
-
- (***
- * - encoding: set by user.
- * - decoding: unused *)
- me_penalty_compensation: integer;
-
- (***
- * - encoding: unused
- * - decoding: set by user. *)
- skip_loop_filter: TAVDiscard;
-
- (** *
- * - encoding: unused
- * - decoding: set by user. *)
- skip_idct: TAVDiscard;
-
- (** *
- * - encoding: unused
- * - decoding: set by user. *)
- skip_frame: TAVDiscard;
-
- (** *
- * - encoding: set by user.
- * - decoding: unused *)
- bidir_refine: integer;
-
- (** *
- * - encoding: set by user.
- * - decoding: unused *)
- brd_scale: integer;
-
- (**
- * constant rate factor - quality-based VBR - values ~correspond to qps
- * - encoding: set by user.
- * - decoding: unused *)
- crf: integer;
-
- (**
- * constant quantization parameter rate control method
- * - encoding: set by user.
- * - decoding: unused *)
- cqp: integer;
-
- (**
- * minimum gop size
- * - encoding: set by user.
- * - decoding: unused *)
- keyint_min: integer;
-
- (**
- * number of reference frames
- * - encoding: set by user.
- * - decoding: unused *)
- refs: integer;
-
- (**
- * chroma qp offset from luma
- * - encoding: set by user.
- * - decoding: unused *)
- chromaoffset: integer;
-
- (**
- * influences how often b-frames are used
- * - encoding: set by user.
- * - decoding: unused *)
- bframebias: integer;
-
- (**
- * trellis RD quantization
- * - encoding: set by user.
- * - decoding: unused *)
- trellis: integer;
-
- (**
- * reduce fluctuations in qp (before curve compression)
- * - encoding: set by user.
- * - decoding: unused *)
- complexityblur: single;
-
- (**
- * in-loop deblocking filter alphac0 parameter
- * alpha is in the range -6...6
- * - encoding: set by user.
- * - decoding: unused *)
- deblockalpha: integer;
-
- (**
- * in-loop deblocking filter beta parameter
- * beta is in the range -6...6
- * - encoding: set by user.
- * - decoding: unused *)
- deblockbeta: integer;
-
- (**
- * macroblock subpartition sizes to consider - p8x8, p4x4, b8x8, i8x8, i4x4
- * - encoding: set by user.
- * - decoding: unused *)
- partitions: integer;
-
- (**
- * direct mv prediction mode - 0 (none), 1 (spatial), 2 (temporal)
- * - encoding: set by user.
- * - decoding: unused *)
- directpred: integer;
-
- (**
- * audio cutoff bandwidth (0 means "automatic") . Currently used only by FAAC
- * - encoding: set by user.
- * - decoding: unused *)
- cutoff: integer;
-
- (**
- * multiplied by qscale for each frame and added to scene_change_score
- * - encoding: set by user.
- * - decoding: unused *)
- scenechange_factor: integer;
-
- (** *
- * note: value depends upon the compare functin used for fullpel ME
- * - encoding: set by user.
- * - decoding: unused *)
- mv0_threshold: integer;
-
- (**
- * adjusts sensitivity of b_frame_strategy 1
- * - encoding: set by user.
- * - decoding: unused *)
- b_sensitivity: integer;
-
- (**
- * - encoding: set by user.
- * - decoding: unused *)
- compression_level: integer;
-
- (**
- * sets whether to use LPC mode - used by FLAC encoder
- * - encoding: set by user.
- * - decoding: unused. *)
- use_lpc: integer;
-
- (**
- * LPC coefficient precision - used by FLAC encoder
- * - encoding: set by user.
- * - decoding: unused. *)
- lpc_coeff_precision: integer;
-
- (**
- * - encoding: set by user.
- * - decoding: unused. *)
- min_prediction_order: integer;
-
- (**
- * - encoding: set by user.
- * - decoding: unused. *)
- max_prediction_order: integer;
-
- (**
- * search method for selecting prediction order
- * - encoding: set by user.
- * - decoding: unused. *)
- prediction_order_method: integer;
-
- (**
- * - encoding: set by user.
- * - decoding: unused. *)
- min_partition_order: integer;
-
- (**
- * - encoding: set by user.
- * - decoding: unused. *)
- max_partition_order: integer;
- end;
-
-(**
- * AVCodec.
- *)
- TAVCodec = record
- name: pchar;
- _type: TCodecType;
- id: TCodecID;
- priv_data_size: integer;
- init: function (avctx: PAVCodecContext): integer; cdecl; (* typo corretion by the Creative CAT *)
- encode: function (avctx: PAVCodecContext; buf: pchar; buf_size: integer; data: pointer): integer; cdecl;
- close: function (avctx: PAVCodecContext): integer; cdecl;
- decode: function (avctx: PAVCodecContext; outdata: pointer; outdata_size: PInteger;
- buf: pchar; buf_size: integer): integer; cdecl;
- capabilities: integer;
-// todo: check this ->
-// void *dummy; // FIXME remove next time we break binary compatibility
- next: PAVCodec;
- flush: procedure (avctx: PAVCodecContext); cdecl;
- supported_framerates: PAVRational; ///array of supported framerates, or NULL if any, array is terminated by {0,0}
- pix_fmts: PAVPixelFormat; ///array of supported pixel formats, or NULL if unknown, array is terminanted by -1
- end;
-
-(**
- * four components are given, that's all.
- * the last component is alpha
- *)
- PAVPicture = ^TAVPicture;
- TAVPicture = record
- data: array [0..3] of pchar;
- linesize: array [0..3] of integer; ///< number of bytes per line
- end;
-
-(**
- * AVPaletteControl
- * This structure defines a method for communicating palette changes
- * between and demuxer and a decoder.
- * this is totally broken, palette changes should be sent as AVPackets
- *)
- TAVPaletteControl = record
- (* demuxer sets this to 1 to indicate the palette has changed;
- * decoder resets to 0 *)
- palette_changed: integer;
-
- (* 4-byte ARGB palette entries, stored in native byte order; note that
- * the individual palette components should be on a 8-bit scale; if
- * the palette data comes from a IBM VGA native format, the component
- * data is probably 6 bits in size and needs to be scaled *)
- palette: array [0..AVPALETTE_COUNT - 1] of cardinal;
- end;
-
- PAVSubtitleRect = ^TAVSubtitleRect;
- TAVSubtitleRect = record
- x: word;
- y: word;
- w: word;
- h: word;
- nb_colors: word;
- linesize: integer;
- rgba_palette: PCardinal;
- bitmap: pchar;
- end;
-
- PAVSubtitle = ^TAVSubtitle;
- TAVSubtitle = record {20}
- format: word; (* 0 = graphics *)
- start_display_time: cardinal; (* relative to packet pts, in ms *)
- end_display_time: cardinal; (* relative to packet pts, in ms *)
- num_rects: cardinal;
- rects: PAVSubtitleRect;
- end;
-
-
-(* resample.c *)
-
- PReSampleContext = pointer;
- PAVResampleContext = pointer;
- PImgReSampleContext = pointer;
-
-function audio_resample_init (output_channels: integer; input_channels: integer;
- output_rate: integer; input_rate: integer): PReSampleContext;
- cdecl; external av__codec;
-
-function audio_resample (s: PReSampleContext; output: PWord; input: PWord; nb_samples: integer): integer;
- cdecl; external av__codec;
-
-procedure audio_resample_close (s: PReSampleContext);
- cdecl; external av__codec;
-
-
-function av_resample_init (out_rate: integer; in_rate: integer; filter_length: integer;
- log2_phase_count: integer; linear: integer; cutoff: double): PAVResampleContext;
- cdecl; external av__codec;
-
-function av_resample (c: PAVResampleContext; dst: PWord; src: PWord; consumed: PInteger;
- src_size: integer; dst_size: integer; update_ctx: integer): integer;
- cdecl; external av__codec;
-
-procedure av_resample_compensate (c: PAVResampleContext; sample_delta: integer;
- compensation_distance: integer);
- cdecl; external av__codec;
-
-procedure av_resample_close (c: PAVResampleContext);
- cdecl; external av__codec;
-
-
-(* YUV420 format is assumed ! *)
-
- function img_resample_init (output_width: integer; output_height: integer;
- input_width: integer; input_height: integer): PImgReSampleContext;
- cdecl; external av__codec;
-
- function img_resample_full_init (owidth: integer; oheight: integer;
- iwidth: integer; iheight: integer;
- topBand: integer; bottomBand: integer;
- leftBand: integer; rightBand: integer;
- padtop: integer; padbottom: integer;
- padleft: integer; padright: integer): PImgReSampleContext;
- cdecl; external av__codec;
-
- procedure img_resample (s: PImgReSampleContext; output: PAVPicture; const input: PAVPicture);
- cdecl; external av__codec;
-
- procedure img_resample_close (s: PImgReSampleContext);
- cdecl; external av__codec;
-
-(**
- * Allocate memory for a picture. Call avpicture_free to free it.
- *
- * @param picture the picture to be filled in.
- * @param pix_fmt the format of the picture.
- * @param width the width of the picture.
- * @param height the height of the picture.
- * @return 0 if successful, -1 if not.
- *)
- function avpicture_alloc (picture: PAVPicture; pix_fmt: TAVPixelFormat;
- width: integer; height: integer): integer;
- cdecl; external av__codec;
-
-
-(* Free a picture previously allocated by avpicture_alloc. *)
- procedure avpicture_free (picture: PAVPicture);
- cdecl; external av__codec;
-
- function avpicture_fill (picture: PAVPicture; ptr: pointer;
- pix_fmt: TAVPixelFormat; width: integer; height: integer): integer;
- cdecl; external av__codec;
-
- function avpicture_layout (const src: PAVPicture; pix_fmt: TAVPixelFormat;
- width: integer; height: integer;
- dest: pchar; dest_size: integer): integer;
- cdecl; external av__codec;
-
- function avpicture_get_size (pix_fmt: TAVPixelFormat; width: integer; height: integer): integer;
- cdecl; external av__codec;
-
- procedure avcodec_get_chroma_sub_sample (pix_fmt: TAVPixelFormat; h_shift: Pinteger; v_shift: pinteger);
- cdecl; external av__codec;
-
- function avcodec_get_pix_fmt_name(pix_fmt: TAVPixelFormat): pchar;
- cdecl; external av__codec;
-
- procedure avcodec_set_dimensions(s: PAVCodecContext; width: integer; height: integer);
- cdecl; external av__codec;
-
- function avcodec_get_pix_fmt(const name: pchar): TAVPixelFormat;
- cdecl; external av__codec;
-
- function avcodec_pix_fmt_to_codec_tag(p: TAVPixelFormat): cardinal;
- cdecl; external av__codec;
-
- function avcodec_get_pix_fmt_loss (dst_pix_fmt: TAVPixelFormat; src_pix_fmt: TAVPixelFormat;
- has_alpha: integer): integer;
- cdecl; external av__codec;
-
- function avcodec_find_best_pix_fmt (pix_fmt_mask: integer; src_pix_fmt: TAVPixelFormat;
- has_alpha: integer; loss_ptr: pinteger): integer;
- cdecl; external av__codec;
-
- function img_get_alpha_info (const src: PAVPicture;
- pix_fmt: TAVPixelFormat;
- width: integer; height: integer): integer;
- cdecl; external av__codec;
-
-
-(* convert among pixel formats *)
- function img_convert (dst: PAVPicture; dst_pix_fmt: TAVPixelFormat;
- const src: PAVPicture; pix_fmt: TAVPixelFormat;
- width: integer; height: integer): integer;
- cdecl; external av__codec;
-
-(* deinterlace a picture *)
- function avpicture_deinterlace (dst: PAVPicture; const src: PAVPicture;
- pix_fmt: TAVPixelFormat; width: integer; height: integer): integer;
- cdecl; external av__codec;
-
-(* returns LIBAVCODEC_VERSION_INT constant *)
- function avcodec_version (): cardinal;
- cdecl; external av__codec;
-
-(* returns LIBAVCODEC_BUILD constant *)
- function avcodec_build (): cardinal;
- cdecl; external av__codec;
-
- procedure avcodec_init ();
- cdecl; external av__codec;
-
- procedure register_avcodec (format: PAVCodec);
- cdecl; external av__codec;
-
- function avcodec_find_encoder (id: TCodecID): PAVCodec;
- cdecl; external av__codec;
- function avcodec_find_encoder_by_name (name: pchar): PAVCodec;
- cdecl; external av__codec;
- function avcodec_find_decoder(id: TCodecID): PAVCodec;
- cdecl; external av__codec;
- function avcodec_find_decoder_by_name (name: pchar): PAVCodec;
- cdecl; external av__codec;
- procedure avcodec_string(buf: pchar; buf_size: integer; enc: PAVCodecContext; encode: integer);
- cdecl; external av__codec;
-
- procedure avcodec_get_context_defaults (s: PAVCodecContext);
- cdecl; external av__codec;
- function avcodec_alloc_context : PAVCodecContext;
- cdecl; external av__codec;
-(* favourite of The Creative CAT
- function avcodec_alloc_context (): PAVCodecContext;
- cdecl; external av__codec; *)
- procedure avcodec_get_frame_defaults (pic: PAVFrame);
- cdecl; external av__codec;
- function avcodec_alloc_frame : PAVFrame;
- cdecl; external av__codec;
-(* favourite of The Creative CAT
- function avcodec_alloc_frame (): PAVFrame;
- cdecl; external av__codec; *)
-
- function avcodec_default_get_buffer (s: PAVCodecContext; pic: PAVFrame): integer;
- cdecl; external av__codec;
- procedure avcodec_default_release_buffer (s: PAVCodecContext; pic: PAVFrame);
- cdecl; external av__codec;
- function avcodec_default_reget_buffer (s: PAVCodecContext; pic: PAVFrame): integer;
- cdecl; external av__codec;
- procedure avcodec_align_dimensions(s: PAVCodecContext; width: Pinteger; height: PInteger);
- cdecl; external av__codec;
- function avcodec_check_dimensions (av_log_ctx: pointer; w: cardinal; h: cardinal): integer;
- cdecl; external av__codec;
- function avcodec_default_get_format(s: PAVCodecContext; const fmt: PAVPixelFormat): TAVPixelFormat;
- cdecl; external av__codec;
-
- function avcodec_thread_init (s: PAVCodecContext; thread_count: integer): integer;
- cdecl; external av__codec;
- procedure avcodec_thread_free (s: PAVCodecContext);
- cdecl; external av__codec;
- function avcodec_thread_execute (s: PAVCodecContext; func: pointer; arg: PPointer; ret: Pinteger; count: integer): integer;
- cdecl; external av__codec;
- function avcodec_default_execute (s: PAVCodecContext; func: pointer; arg: PPointer; ret: Pinteger; count: integer): integer;
- cdecl; external av__codec;
-
-
-//FIXME func typedef
-
-(**
- * opens / inits the AVCodecContext.
- * not thread save!
- *)
- function avcodec_open (avctx: PAVCodecContext; codec: PAVCodec): integer;
- cdecl; external av__codec;
-
-
-(**
- * Decode an audio frame.
- *
- * @param avctx the codec context.
- * @param samples output buffer, 16 byte aligned
- * @param frame_size_ptr the output buffer size in bytes, zero if no frame could be compressed
- * @param buf input buffer, 16 byte aligned
- * @param buf_size the input buffer size
- * @return 0 if successful, -1 if not.
- *)
-
-(** This comment was added by the Creative CAT. frame_size_ptr was changed to
- variable refference.
-
- * @deprecated Use avcodec_decode_audio2() instead.
- *)
-
- function avcodec_decode_audio (avctx: PAVCodecContext; samples: Pword;
- var frame_size_ptr: integer;
- buf: pchar; buf_size: integer): integer;
- cdecl; external av__codec;
-(* decode a frame.
- * @param buf bitstream buffer, must be FF_INPUT_BUFFER_PADDING_SIZE larger then the actual read bytes
- * because some optimized bitstream readers read 32 or 64 bit at once and could read over the end
- * @param buf_size the size of the buffer in bytes
- * @param got_picture_ptr zero if no frame could be decompressed, Otherwise, it is non zero
- * @return -1 if error, otherwise return the number of
- * bytes used. *)
-
- function avcodec_decode_audio2(avctx : PAVCodecContext; samples : PWord;
- var frame_size_ptr : integer;
- buf: pchar; buf_size: integer): integer;
- cdecl; external av__codec;
-(* Added by The Creative CAT
-/**
- * Decodes a video frame from \p buf into \p picture.
- * The avcodec_decode_video() function decodes a video frame from the input
- * buffer \p buf of size \p buf_size. To decode it, it makes use of the
- * video codec which was coupled with \p avctx using avcodec_open(). The
- * resulting decoded frame is stored in \p picture.
- *
- * @warning The input buffer must be \c FF_INPUT_BUFFER_PADDING_SIZE larger than
- * the actual read bytes because some optimized bitstream readers read 32 or 64
- * bits at once and could read over the end.
- *
- * @warning The end of the input buffer \p buf should be set to 0 to ensure that
- * no overreading happens for damaged MPEG streams.
- *
- * @note You might have to align the input buffer \p buf and output buffer \p
- * 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
- * it will work but it will have an impact on performance. In practice, the
- * bitstream should have 4 byte alignment at minimum and all sample data should
- * be 16 byte aligned unless the CPU doesn't need it (AltiVec and SSE do). If
- * the linesize is not a multiple of 16 then there's no sense in aligning the
- * start of the buffer to 16.
- *
- * @param avctx the codec context
- * @param[out] picture The AVFrame in which the decoded video frame will be stored.
- * @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.
- */
-*)
-
- function avcodec_decode_video (avctx: PAVCodecContext; picture: PAVFrame;
- var got_picture_ptr: integer; (* favour of The Creative CAT *)
- buf: PByte; buf_size: integer): integer;
- cdecl; external av__codec;
-
- function avcodec_decode_subtitle (avctx: PAVCodecContext; sub: PAVSubtitle;
- got_sub_ptr: pinteger;
- const buf: pchar; buf_size: integer): integer;
- cdecl; external av__codec;
- function avcodec_parse_frame (avctx: PAVCodecContext; pdata: PPointer;
- data_size_ptr: pinteger;
- buf: pchar; buf_size: integer): integer;
- cdecl; external av__codec;
-
- function avcodec_encode_audio (avctx: PAVCodecContext; buf: PByte;
- buf_size: integer; const samples: PWord): integer;
- cdecl; external av__codec;
-
- (* avcodec_encode_video: -1 if error *)
- (* type of the second argument is changed by The Creative CAT *)
- function avcodec_encode_video (avctx: PAVCodecContext; buf: PByte;
- buf_size: integer; pict: PAVFrame): integer;
- cdecl; external av__codec;
- function avcodec_encode_subtitle (avctx: PAVCodecContext; buf: pchar;
- buf_size: integer; const sub: PAVSubtitle): integer;
- cdecl; external av__codec;
- function avcodec_close (avctx: PAVCodecContext): integer;
- cdecl; external av__codec;
-
- procedure avcodec_register_all ();
- cdecl; external av__codec;
-
- procedure avcodec_flush_buffers (avctx: PAVCodecContext);
- cdecl; external av__codec;
- procedure avcodec_default_free_buffers (s: PAVCodecContext);
- cdecl; external av__codec;
-
-(* misc usefull functions *)
-
-(**
- * returns a single letter to describe the picture type
- *)
- function av_get_pict_type_char (pict_type: integer): char;
- cdecl; external av__codec;
-
-
-(**
- * returns codec bits per sample
- *)
-function av_get_bits_per_sample (codec_id: TCodecID): integer;
- cdecl; external av__codec;
-
-const
- AV_PARSER_PTS_NB = 4;
- PARSER_FLAG_COMPLETE_FRAMES = $0001;
-
-type
- PAVCodecParserContext = ^TAVCodecParserContext;
- PAVCodecParser = ^TAVCodecParser;
-
- TAVCodecParserContext = record
- priv_data: pointer;
- parser: PAVCodecParser;
- frame_offset: int64; (* offset of the current frame *)
- cur_offset: int64; (* current offset (incremented by each av_parser_parse()) *)
- last_frame_offset: int64; (* offset of the last frame *)
- (* video info *)
- pict_type: integer; (* XXX: put it back in AVCodecContext *)
- repeat_pict: integer; (* XXX: put it back in AVCodecContext *)
- pts: int64; (* pts of the current frame *)
- dts: int64; (* dts of the current frame *)
-
- (* private data *)
- last_pts: int64;
- last_dts: int64;
- fetch_timestamp: integer;
-
- cur_frame_start_index: integer;
- cur_frame_offset: array [0..AV_PARSER_PTS_NB - 1] of int64;
- cur_frame_pts: array [0..AV_PARSER_PTS_NB - 1] of int64;
- cur_frame_dts: array [0..AV_PARSER_PTS_NB - 1] of int64;
-
- flags: integer;
- end;
-
- TAVCodecParser = record
- codec_ids: array [0..4] of integer; (* several codec IDs are permitted *)
- priv_data_size: integer;
- parser_init: function (s: PAVCodecParserContext): integer; cdecl;
- parser_parse: function (s: PAVCodecParserContext; avctx: PAVCodecContext;
- poutbuf: PPointer; poutbuf_size: PInteger;
- const buf: pchar; buf_size: integer): integer; cdecl;
- parser_close: procedure (s: PAVCodecParserContext); cdecl;
- split: function (avctx: PAVCodecContext; const buf: pchar;
- buf_size: integer): integer; cdecl;
- next: PAVCodecParser;
- end;
-
- procedure av_register_codec_parser (parser: PAVCodecParser);
- cdecl; external av__codec;
-
- function av_parser_init (codec_id: integer): PAVCodecParserContext;
- cdecl; external av__codec;
-
- function av_parser_parse (s: PAVCodecParserContext;
- avctx: PAVCodecContext;
- poutbuf: PPointer; poutbuf_size: pinteger;
- const buf: pchar; buf_size: integer;
- pts: int64; dts: int64): integer;
- cdecl; external av__codec;
- function av_parser_change (s: PAVCodecParserContext;
- avctx: PAVCodecContext;
- poutbuf: PPointer; poutbuf_size: PInteger;
- const buf: pchar; buf_size: integer; keyframe: integer): integer;
- cdecl; external av__codec;
- procedure av_parser_close (s: PAVCodecParserContext);
- cdecl; external av__codec;
-
-type
- PAVBitStreamFilterContext = ^TAVBitStreamFilterContext;
- PAVBitStreamFilter = ^TAVBitStreamFilter;
-
- TAVBitStreamFilterContext = record
- priv_data: pointer;
- filter: PAVBitStreamFilter;
- parser: PAVCodecParserContext;
- next: PAVBitStreamFilterContext;
- end;
-
- TAVBitStreamFilter = record
- name: pchar;
- priv_data_size: integer;
- filter: function (bsfc: PAVBitStreamFilterContext;
- avctx: PAVCodecContext; args: pchar;
- poutbuf: PPointer; poutbuf_size: PInteger;
- buf: PByte; buf_size: integer; keyframe: integer): integer; cdecl;
- next: PAVBitStreamFilter;
- end;
-
-procedure av_register_bitstream_filter (bsf: PAVBitStreamFilter);
- cdecl; external av__codec;
-
-function av_bitstream_filter_init (name: pchar): PAVBitStreamFilterContext;
- cdecl; external av__codec;
-
-function av_bitstream_filter_filter (bsfc: PAVBitStreamFilterContext;
- avctx: PAVCodecContext; args: pchar;
- poutbuf: PPointer; poutbuf_size: PInteger;
- buf: PByte; buf_size: integer; keyframe: integer): integer;
- cdecl; external av__codec;
-procedure av_bitstream_filter_close (bsf: PAVBitStreamFilterContext);
- cdecl; external av__codec;
-
-
-(* memory *)
- procedure av_fast_realloc (ptr: pointer; size: PCardinal; min_size: Cardinal);
- cdecl; external av__codec;
-(* for static data only *)
-(* call av_free_static to release all staticaly allocated tables *)
- procedure av_free_static ();
- cdecl; external av__codec;
-
- procedure av_mallocz_static(size: cardinal);
- cdecl; external av__codec;
-
- procedure av_realloc_static(ptr: pointer; size: Cardinal);
- cdecl; external av__codec;
-
- procedure img_copy (dst: PAVPicture; const src: PAVPicture;
- pix_fmt: TAVPixelFormat; width: integer; height: integer);
- cdecl; external av__codec;
-
- function img_crop (dst: PAVPicture; const src: PAVPicture;
- pix_fmt: TAVPixelFormat; top_band, left_band: integer): integer;
- cdecl; external av__codec;
-
- function img_pad (dst: PAVPicture; const src: PAVPicture; height, width: integer;
- pix_fmt: TAVPixelFormat; padtop, padbottom, padleft, padright: integer;
- color: PInteger): integer;
- cdecl; external av__codec;
-
-implementation
-
-end.
+(* + * copyright (c) 2001 Fabrice Bellard + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + *) + +(* This is a part of Pascal porting of ffmpeg. + * Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes *) + +// Min. version: 51.16.0 +// Max. version: 51.49.0, Revision: 11352 + +unit avcodec; + +{$IFDEF FPC} + {$MODE DELPHI } + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +interface + +uses + avutil, + rational, + opt, + UConfig; + +const + (* Max. supported version by this header *) + LIBAVCODEC_MAX_VERSION_MAJOR = 51; + LIBAVCODEC_MAX_VERSION_MINOR = 49; + LIBAVCODEC_MAX_VERSION_RELEASE = 0; + LIBAVCODEC_MAX_VERSION = (LIBAVCODEC_MAX_VERSION_MAJOR * VERSION_MAJOR) + + (LIBAVCODEC_MAX_VERSION_MINOR * VERSION_MINOR) + + (LIBAVCODEC_MAX_VERSION_RELEASE * VERSION_RELEASE); + +(* Check if linked version is supported *) +{$IF (LIBAVCODEC_VERSION > LIBAVCODEC_MAX_VERSION)} + {$MESSAGE Warn 'Linked version of libavcodec may be unsupported!'} +{$IFEND} + +const + AV_NOPTS_VALUE: int64 = $8000000000000000; + AV_TIME_BASE = 1000000; + AV_TIME_BASE_Q : TAVRational = (num:1; den:AV_TIME_BASE); (* added by CAT *) + +(** + * Identifies the syntax and semantics of the bitstream. + * The principle is roughly: + * Two decoders with the same ID can decode the same streams. + * Two encoders with the same ID can encode compatible streams. + * There may be slight deviations from the principle due to implementation + * details. + * + * If you add a codec ID to this list, add it so that + * 1. no value of a existing codec ID changes (that would break ABI), + * 2. it is as close as possible to similar codecs. + *) +type + TCodecID = ( + CODEC_ID_NONE, + CODEC_ID_MPEG1VIDEO, + CODEC_ID_MPEG2VIDEO, //* prefered ID for MPEG Video 1/2 decoding */ + CODEC_ID_MPEG2VIDEO_XVMC, + CODEC_ID_H261, + CODEC_ID_H263, + CODEC_ID_RV10, + CODEC_ID_RV20, + CODEC_ID_MJPEG, + CODEC_ID_MJPEGB, + CODEC_ID_LJPEG, + CODEC_ID_SP5X, + CODEC_ID_JPEGLS, + CODEC_ID_MPEG4, + CODEC_ID_RAWVIDEO, + CODEC_ID_MSMPEG4V1, + CODEC_ID_MSMPEG4V2, + CODEC_ID_MSMPEG4V3, + CODEC_ID_WMV1, + CODEC_ID_WMV2, + CODEC_ID_H263P, + CODEC_ID_H263I, + CODEC_ID_FLV1, + CODEC_ID_SVQ1, + CODEC_ID_SVQ3, + CODEC_ID_DVVIDEO, + CODEC_ID_HUFFYUV, + CODEC_ID_CYUV, + CODEC_ID_H264, + CODEC_ID_INDEO3, + CODEC_ID_VP3, + CODEC_ID_THEORA, + CODEC_ID_ASV1, + CODEC_ID_ASV2, + CODEC_ID_FFV1, + CODEC_ID_4XM, + CODEC_ID_VCR1, + CODEC_ID_CLJR, + CODEC_ID_MDEC, + CODEC_ID_ROQ, + CODEC_ID_INTERPLAY_VIDEO, + CODEC_ID_XAN_WC3, + CODEC_ID_XAN_WC4, + CODEC_ID_RPZA, + CODEC_ID_CINEPAK, + CODEC_ID_WS_VQA, + CODEC_ID_MSRLE, + CODEC_ID_MSVIDEO1, + CODEC_ID_IDCIN, + CODEC_ID_8BPS, + CODEC_ID_SMC, + CODEC_ID_FLIC, + CODEC_ID_TRUEMOTION1, + CODEC_ID_VMDVIDEO, + CODEC_ID_MSZH, + CODEC_ID_ZLIB, + CODEC_ID_QTRLE, + CODEC_ID_SNOW, + CODEC_ID_TSCC, + CODEC_ID_ULTI, + CODEC_ID_QDRAW, + CODEC_ID_VIXL, + CODEC_ID_QPEG, + CODEC_ID_XVID, + CODEC_ID_PNG, + CODEC_ID_PPM, + CODEC_ID_PBM, + CODEC_ID_PGM, + CODEC_ID_PGMYUV, + CODEC_ID_PAM, + CODEC_ID_FFVHUFF, + CODEC_ID_RV30, + CODEC_ID_RV40, + CODEC_ID_VC1, + CODEC_ID_WMV3, + CODEC_ID_LOCO, + CODEC_ID_WNV1, + CODEC_ID_AASC, + CODEC_ID_INDEO2, + CODEC_ID_FRAPS, + CODEC_ID_TRUEMOTION2, + CODEC_ID_BMP, + CODEC_ID_CSCD, + CODEC_ID_MMVIDEO, + CODEC_ID_ZMBV, + CODEC_ID_AVS, + CODEC_ID_SMACKVIDEO, + CODEC_ID_NUV, + CODEC_ID_KMVC, + CODEC_ID_FLASHSV, + CODEC_ID_CAVS, + CODEC_ID_JPEG2000, + CODEC_ID_VMNC, + CODEC_ID_VP5, + CODEC_ID_VP6, + CODEC_ID_VP6F, + CODEC_ID_TARGA, + CODEC_ID_DSICINVIDEO, + CODEC_ID_TIERTEXSEQVIDEO, + CODEC_ID_TIFF, + CODEC_ID_GIF, + CODEC_ID_FFH264, + CODEC_ID_DXA, + CODEC_ID_DNXHD, + CODEC_ID_THP, + CODEC_ID_SGI, + CODEC_ID_C93, + CODEC_ID_BETHSOFTVID, + CODEC_ID_PTX, + CODEC_ID_TXD, + CODEC_ID_VP6A, + CODEC_ID_AMV, + CODEC_ID_VB, + CODEC_ID_PCX, + CODEC_ID_SUNRAST, + + //* various PCM "codecs" */ + CODEC_ID_PCM_S16LE= $10000, + CODEC_ID_PCM_S16BE, + CODEC_ID_PCM_U16LE, + CODEC_ID_PCM_U16BE, + CODEC_ID_PCM_S8, + CODEC_ID_PCM_U8, + CODEC_ID_PCM_MULAW, + CODEC_ID_PCM_ALAW, + CODEC_ID_PCM_S32LE, + CODEC_ID_PCM_S32BE, + CODEC_ID_PCM_U32LE, + CODEC_ID_PCM_U32BE, + CODEC_ID_PCM_S24LE, + CODEC_ID_PCM_S24BE, + CODEC_ID_PCM_U24LE, + CODEC_ID_PCM_U24BE, + CODEC_ID_PCM_S24DAUD, + CODEC_ID_PCM_ZORK, + CODEC_ID_PCM_S16LE_PLANAR, + + //* various ADPCM codecs */ + CODEC_ID_ADPCM_IMA_QT= $11000, + CODEC_ID_ADPCM_IMA_WAV, + CODEC_ID_ADPCM_IMA_DK3, + CODEC_ID_ADPCM_IMA_DK4, + CODEC_ID_ADPCM_IMA_WS, + CODEC_ID_ADPCM_IMA_SMJPEG, + CODEC_ID_ADPCM_MS, + CODEC_ID_ADPCM_4XM, + CODEC_ID_ADPCM_XA, + CODEC_ID_ADPCM_ADX, + CODEC_ID_ADPCM_EA, + CODEC_ID_ADPCM_G726, + CODEC_ID_ADPCM_CT, + CODEC_ID_ADPCM_SWF, + CODEC_ID_ADPCM_YAMAHA, + CODEC_ID_ADPCM_SBPRO_4, + CODEC_ID_ADPCM_SBPRO_3, + CODEC_ID_ADPCM_SBPRO_2, + CODEC_ID_ADPCM_THP, + CODEC_ID_ADPCM_IMA_AMV, + CODEC_ID_ADPCM_EA_R1, + CODEC_ID_ADPCM_EA_R3, + CODEC_ID_ADPCM_EA_R2, + CODEC_ID_ADPCM_IMA_EA_SEAD, + CODEC_ID_ADPCM_IMA_EA_EACS, + CODEC_ID_ADPCM_EA_XAS, + + //* AMR */ + CODEC_ID_AMR_NB= $12000, + CODEC_ID_AMR_WB, + + //* RealAudio codecs*/ + CODEC_ID_RA_144= $13000, + CODEC_ID_RA_288, + + //* various DPCM codecs */ + CODEC_ID_ROQ_DPCM= $14000, + CODEC_ID_INTERPLAY_DPCM, + CODEC_ID_XAN_DPCM, + CODEC_ID_SOL_DPCM, + + CODEC_ID_MP2= $15000, + CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 + CODEC_ID_AAC, + {$IF LIBAVCODEC_VERSION < 52000000} // 52.0.0 + _CODEC_ID_MPEG4AAC, // will be redefined to CODEC_ID_AAC below + {$IFEND} + CODEC_ID_AC3, + CODEC_ID_DTS, + CODEC_ID_VORBIS, + CODEC_ID_DVAUDIO, + CODEC_ID_WMAV1, + CODEC_ID_WMAV2, + CODEC_ID_MACE3, + CODEC_ID_MACE6, + CODEC_ID_VMDAUDIO, + CODEC_ID_SONIC, + CODEC_ID_SONIC_LS, + CODEC_ID_FLAC, + CODEC_ID_MP3ADU, + CODEC_ID_MP3ON4, + CODEC_ID_SHORTEN, + CODEC_ID_ALAC, + CODEC_ID_WESTWOOD_SND1, + CODEC_ID_GSM, ///< as in Berlin toast format + CODEC_ID_QDM2, + CODEC_ID_COOK, + CODEC_ID_TRUESPEECH, + CODEC_ID_TTA, + CODEC_ID_SMACKAUDIO, + CODEC_ID_QCELP, + CODEC_ID_WAVPACK, + CODEC_ID_DSICINAUDIO, + CODEC_ID_IMC, + CODEC_ID_MUSEPACK7, + CODEC_ID_MLP, + CODEC_ID_GSM_MS, { as found in WAV } + CODEC_ID_ATRAC3, + CODEC_ID_VOXWARE, + CODEC_ID_APE, + CODEC_ID_NELLYMOSER, + CODEC_ID_MUSEPACK8, + + //* subtitle codecs */ + CODEC_ID_DVD_SUBTITLE= $17000, + CODEC_ID_DVB_SUBTITLE, + CODEC_ID_TEXT, ///< raw UTF-8 text + CODEC_ID_XSUB, + CODEC_ID_SSA, + + CODEC_ID_MPEG2TS= $20000, {*< _FAKE_ codec to indicate a raw MPEG-2 TS + * stream (only used by libavformat) *} + __CODEC_ID_4BYTE = $FFFFF // ensure 4-byte enum + ); + +{* CODEC_ID_MP3LAME is obsolete *} +const + {$IF LIBAVCODEC_VERSION < 52000000} // 52.0.0 + CODEC_ID_MP3LAME = CODEC_ID_MP3; + CODEC_ID_MPEG4AAC = CODEC_ID_AAC; + {$IFEND} + +type + TCodecType = ( + CODEC_TYPE_UNKNOWN = -1, + CODEC_TYPE_VIDEO, + CODEC_TYPE_AUDIO, + CODEC_TYPE_DATA, + CODEC_TYPE_SUBTITLE, + CODEC_TYPE_NB + ); + +{** + * currently unused, may be used if 24/32 bits samples ever supported */ + * all in native endian + *} +type + TSampleFormat = ( + SAMPLE_FMT_NONE = -1, + SAMPLE_FMT_U8, ///< unsigned 8 bits + SAMPLE_FMT_S16, ///< signed 16 bits + SAMPLE_FMT_S24, ///< signed 24 bits + SAMPLE_FMT_S32, ///< signed 32 bits + SAMPLE_FMT_FLT ///< float + ); + +const + {* in bytes *} + AVCODEC_MAX_AUDIO_FRAME_SIZE = 192000; // 1 second of 48khz 32bit audio + +{** + * Required number of additionally allocated bytes at the end of the input bitstream for decoding. + * This is mainly needed because some optimized bitstream readers read + * 32 or 64 bit at once and could read over the end.<br> + * Note: If the first 23 bits of the additional bytes are not 0, then damaged + * MPEG bitstreams could cause overread and segfault. + *} + FF_INPUT_BUFFER_PADDING_SIZE = 8; + +{** + * minimum encoding buffer size. + * Used to avoid some checks during header writing. + *} + FF_MIN_BUFFER_SIZE = 16384; + +type +{* + * motion estimation type. + *} + TMotion_Est_ID = ( + ME_ZERO = 1, ///< no search, that is use 0,0 vector whenever one is needed + ME_FULL, + ME_LOG, + ME_PHODS, + ME_EPZS, ///< enhanced predictive zonal search + ME_X1, ///< reserved for experiments + ME_HEX, ///< hexagon based search + ME_UMH, ///< uneven multi-hexagon search + ME_ITER ///< iterative search + ); + + TAVDiscard = ( + {* We leave some space between them for extensions (drop some + * keyframes for intra-only or drop just some bidir frames). *} + AVDISCARD_NONE =-16, ///< discard nothing + AVDISCARD_DEFAULT= 0, ///< discard useless packets like 0 size packets in avi + AVDISCARD_NONREF = 8, ///< discard all non reference + AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames + AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes + AVDISCARD_ALL = 48 ///< discard all + ); + + PRcOverride = ^TRcOverride; + TRcOverride = record {16} + start_frame: integer; + end_frame: integer; + qscale: integer; // if this is 0 then quality_factor will be used instead + quality_factor: single; + end; + +const + FF_MAX_B_FRAMES = 16; + +{* encoding support + These flags can be passed in AVCodecContext.flags before initialization. + Note: Not everything is supported yet. +*} + + CODEC_FLAG_QSCALE = $0002; ///< Use fixed qscale. + CODEC_FLAG_4MV = $0004; ///< 4 MV per MB allowed / advanced prediction for H263. + CODEC_FLAG_QPEL = $0010; ///< use qpel MC. + CODEC_FLAG_GMC = $0020; ///< use GMC. + CODEC_FLAG_MV0 = $0040; ///< always try a MB with MV=<0,0>. + CODEC_FLAG_PART = $0080; ///< Use data partitioning. + {** + * The parent program guarantees that the input for B-frames containing + * streams is not written to for at least s->max_b_frames+1 frames, if + * this is not set the input will be copied. + *} + CODEC_FLAG_INPUT_PRESERVED = $0100; + CODEC_FLAG_PASS1 = $0200; ///< use internal 2pass ratecontrol in first pass mode + CODEC_FLAG_PASS2 = $0400; ///< use internal 2pass ratecontrol in second pass mode + CODEC_FLAG_EXTERN_HUFF = $1000; ///< use external huffman table (for mjpeg) + CODEC_FLAG_GRAY = $2000; ///< only decode/encode grayscale + CODEC_FLAG_EMU_EDGE = $4000; ///< don't draw edges + CODEC_FLAG_PSNR = $8000; ///< error[?] variables will be set during encoding + CODEC_FLAG_TRUNCATED = $00010000; //** input bitstream might be truncated at a random location instead + // of only at frame boundaries */ + CODEC_FLAG_NORMALIZE_AQP = $00020000; ///< normalize adaptive quantization + CODEC_FLAG_INTERLACED_DCT = $00040000; ///< use interlaced dct + CODEC_FLAG_LOW_DELAY = $00080000; ///< force low delay + CODEC_FLAG_ALT_SCAN = $00100000; ///< use alternate scan + CODEC_FLAG_TRELLIS_QUANT = $00200000; ///< use trellis quantization + CODEC_FLAG_GLOBAL_HEADER = $00400000; ///< place global headers in extradata instead of every keyframe + CODEC_FLAG_BITEXACT = $00800000; ///< use only bitexact stuff (except (i)dct) + {* Fx : Flag for h263+ extra options *} + {$IF LIBAVCODEC_VERSION < 52000000} // 52.0.0 + CODEC_FLAG_H263P_AIC = $01000000; ///< H263 Advanced intra coding / MPEG4 AC prediction (remove this) + {$IFEND} + CODEC_FLAG_AC_PRED = $01000000; ///< H263 Advanced intra coding / MPEG4 AC prediction + CODEC_FLAG_H263P_UMV = $02000000; ///< Unlimited motion vector + CODEC_FLAG_CBP_RD = $04000000; ///< use rate distortion optimization for cbp + CODEC_FLAG_QP_RD = $08000000; ///< use rate distortion optimization for qp selectioon + CODEC_FLAG_H263P_AIV = $00000008; ///< H263 Alternative inter vlc + CODEC_FLAG_OBMC = $00000001; ///< OBMC + CODEC_FLAG_LOOP_FILTER = $00000800; ///< loop filter + CODEC_FLAG_H263P_SLICE_STRUCT = $10000000; + CODEC_FLAG_INTERLACED_ME = $20000000; ///< interlaced motion estimation + CODEC_FLAG_SVCD_SCAN_OFFSET = $40000000; ///< will reserve space for SVCD scan offset user data + CODEC_FLAG_CLOSED_GOP = $80000000; + CODEC_FLAG2_FAST = $00000001; ///< allow non spec compliant speedup tricks + CODEC_FLAG2_STRICT_GOP = $00000002; ///< strictly enforce GOP size + CODEC_FLAG2_NO_OUTPUT = $00000004; ///< skip bitstream encoding + CODEC_FLAG2_LOCAL_HEADER = $00000008; ///< place global headers at every keyframe instead of in extradata + CODEC_FLAG2_BPYRAMID = $00000010; ///< H.264 allow b-frames to be used as references + CODEC_FLAG2_WPRED = $00000020; ///< H.264 weighted biprediction for b-frames + CODEC_FLAG2_MIXED_REFS = $00000040; ///< H.264 multiple references per partition + CODEC_FLAG2_8X8DCT = $00000080; ///< H.264 high profile 8x8 transform + CODEC_FLAG2_FASTPSKIP = $00000100; ///< H.264 fast pskip + CODEC_FLAG2_AUD = $00000200; ///< H.264 access unit delimiters + CODEC_FLAG2_BRDO = $00000400; ///< b-frame rate-distortion optimization + CODEC_FLAG2_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. + +(* Unsupported options : + * Syntax Arithmetic coding (SAC) + * Reference Picture Selection + * Independant Segment Decoding *) +(* /Fx *) +(* codec capabilities *) + +const + CODEC_CAP_DRAW_HORIZ_BAND = $0001; ///< decoder can use draw_horiz_band callback + (** + * Codec uses get_buffer() for allocating buffers. + * direct rendering method 1 + *) + CODEC_CAP_DR1 = $0002; + (* if 'parse_only' field is true, then avcodec_parse_frame() can be used *) + CODEC_CAP_PARSE_ONLY = $0004; + 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 + *) + CODEC_CAP_DELAY = $0020; + (** + * Codec can be fed a final frame with a smaller size. + * This can be used to prevent truncation of the last audio samples. + *) + CODEC_CAP_SMALL_LAST_FRAME = $0040; + + //the following defines may change, don't expect compatibility if you use them + MB_TYPE_INTRA4x4 = $001; + MB_TYPE_INTRA16x16 = $002; //FIXME h264 specific + MB_TYPE_INTRA_PCM = $004; //FIXME h264 specific + MB_TYPE_16x16 = $008; + MB_TYPE_16x8 = $010; + MB_TYPE_8x16 = $020; + MB_TYPE_8x8 = $040; + MB_TYPE_INTERLACED = $080; + MB_TYPE_DIRECT2 = $100; //FIXME + MB_TYPE_ACPRED = $200; + MB_TYPE_GMC = $400; + MB_TYPE_SKIP = $800; + MB_TYPE_P0L0 = $1000; + MB_TYPE_P1L0 = $2000; + MB_TYPE_P0L1 = $4000; + MB_TYPE_P1L1 = $8000; + MB_TYPE_L0 = (MB_TYPE_P0L0 or MB_TYPE_P1L0); + MB_TYPE_L1 = (MB_TYPE_P0L1 or MB_TYPE_P1L1); + MB_TYPE_L0L1 = (MB_TYPE_L0 or MB_TYPE_L1); + MB_TYPE_QUANT = $0010000; + MB_TYPE_CBP = $0020000; + //Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...) + +type +(** + * Pan Scan area. + * This specifies the area which should be displayed. + * Note there may be multiple such areas for one frame. + *) + PAVPanScan = ^TAVPanScan; + TAVPanScan = record {24} + (*** id. + * - encoding: set by user. + * - decoding: set by libavcodec. *) + id: integer; + + (*** width and height in 1/16 pel + * - encoding: set by user. + * - decoding: set by libavcodec. *) + width: integer; + height: integer; + + (*** position of the top left corner in 1/16 pel for up to 3 fields/frames. + * - encoding: set by user. + * - decoding: set by libavcodec. *) + position: array [0..2] of array [0..1] of smallint; + end; + +const + FF_QSCALE_TYPE_MPEG1 = 0; + FF_QSCALE_TYPE_MPEG2 = 1; + FF_QSCALE_TYPE_H264 = 2; + + FF_BUFFER_TYPE_INTERNAL = 1; + FF_BUFFER_TYPE_USER = 2; ///< Direct rendering buffers (image is (de)allocated by user) + 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. + + + FF_I_TYPE = 1; // Intra + FF_P_TYPE = 2; // Predicted + FF_B_TYPE = 3; // Bi-dir predicted + FF_S_TYPE = 4; // S(GMC)-VOP MPEG4 + FF_SI_TYPE = 5; + FF_SP_TYPE = 6; + + FF_BUFFER_HINTS_VALID = $01; // Buffer hints value is meaningful (if 0 ignore) + FF_BUFFER_HINTS_READABLE = $02; // Codec will read from buffer + FF_BUFFER_HINTS_PRESERVE = $04; // User must not alter buffer content + FF_BUFFER_HINTS_REUSABLE = $08; // Codec will reuse the buffer (update) + +type + {** + * 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*. + *} + PAVFrame = ^TAVFrame; + TAVFrame = record {200} + (** + * pointer to the picture planes. + * This might be different from the first allocated byte + * - encoding: + * - decoding: + *) + data: array [0..3] of pbyte; + linesize: array [0..3] of integer; + (** + * 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; + (** + * 1 -> keyframe, 0-> not + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + key_frame: integer; + (** + * Picture type of the frame, see ?_TYPE below. + * - encoding: Set by libavcodec. for coded_picture (and set by user for input). + * - decoding: Set by libavcodec. + *) + pict_type: integer; + (** + * presentation timestamp in time_base units (time when frame should be shown to user) + * If AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed. + * - encoding: MUST be set by user. + * - decoding: Set by libavcodec. + *) + pts: int64; + (**\ + * picture number in bitstream order + * - encoding: set by + * - decoding: Set by libavcodec. + *) + coded_picture_number: integer; + (** + * picture number in display order + * - encoding: set by + * - decoding: Set by libavcodec. + *) + display_picture_number: integer; + (** + * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) + * - encoding: Set by libavcodec. for coded_picture (and set by user for input). + * - decoding: Set by libavcodec. + *) + quality: integer; + (** + * 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(). + *) + age: integer; + (** + * is this picture used as reference + * - encoding: unused + * - decoding: Set by libavcodec. (before get_buffer() call)). + *) + reference: integer; + (** + * QP table + * - encoding: unused + * - decoding: Set by libavcodec. + *) + qscale_table: PShortint; + (** + * QP store stride + * - encoding: unused + * - decoding: Set by libavcodec. + *) + qstride: integer; + (** + * mbskip_table[mb]>=1 if MB didn't change + * stride= mb_width = (width+15)>>4 + * - encoding: unused + * - decoding: Set by libavcodec. + *) + mbskip_table: pbyte; + (** + * motion vector table + * @code + * example: + * int mv_sample_log2= 4 - motion_subsample_log2; + * int mb_width= (width+15)>>4; + * int mv_stride= (mb_width << mv_sample_log2) + 1; + * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y]; + * @endcode + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + //int16_t (*motion_val[2])[2]; + motion_val: array [0..1] of pointer; + (** + * macroblock type table + * mb_type_base + mb_width + 2 + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + mb_type: PCardinal; + (** + * log2 of the size of the block which a single vector in motion_val represents: + * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2) + * - encoding: unused + * - decoding: Set by libavcodec. + *) + motion_subsample_log2: byte; + (** + * for some private data of the user + * - encoding: unused + * - decoding: Set by user. + *) + opaque: pointer; + (** + * error + * - encoding: Set by libavcodec. if flags&CODEC_FLAG_PSNR. + * - decoding: unused + *) + error: array [0..3] of uint64; + (** + * type of the buffer (to keep track of who has to deallocate data[*]) + * - encoding: Set by the one who allocates it. + * - decoding: Set by the one who allocates it. + * Note: User allocated (direct rendering) & internal buffers cannot coexist currently. + *) + type_: integer; + (** + * When decoding, this signals how much the picture must be delayed. + * extra_delay = repeat_pict / (2*fps) + * - encoding: unused + * - decoding: Set by libavcodec. + *) + repeat_pict: integer; + (** + * + *) + qscale_type: integer; + (** + * The content of the picture is interlaced. + * - encoding: Set by user. + * - decoding: Set by libavcodec. (default 0) + *) + interlaced_frame: integer; + (** + * If the content is interlaced, is top field displayed first. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + top_field_first: integer; + (** + * Pan scan. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + pan_scan: PAVPanScan; + (** + * Tell user application that palette has changed from previous frame. + * - encoding: ??? (no palette-enabled encoder yet) + * - decoding: Set by libavcodec. (default 0). + *) + palette_has_changed: integer; + (** + * codec suggestion on buffer type if != 0 + * - encoding: unused + * - decoding: Set by libavcodec. (before get_buffer() call)). + *) + buffer_hints: integer; + (** + * DCT coefficients + * - encoding: unused + * - decoding: Set by libavcodec. + *) + dct_coeff: PsmallInt; + (** + * motion referece frame index + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + ref_index: array [0..1] of PShortint; + end; + +const + DEFAULT_FRAME_RATE_BASE = 1001000; + + FF_ASPECT_EXTENDED = 15; + + FF_RC_STRATEGY_XVID = 1; + + FF_BUG_AUTODETECT = 1; ///< autodetection + FF_BUG_OLD_MSMPEG4 = 2; + FF_BUG_XVID_ILACE = 4; + FF_BUG_UMP4 = 8; + FF_BUG_NO_PADDING = 16; + FF_BUG_AMV = 32; + FF_BUG_AC_VLC = 0; ///< will be removed, libavcodec can now handle these non compliant files by default + FF_BUG_QPEL_CHROMA = 64; + FF_BUG_STD_QPEL = 128; + FF_BUG_QPEL_CHROMA2 = 256; + FF_BUG_DIRECT_BLOCKSIZE = 512; + FF_BUG_EDGE = 1024; + FF_BUG_HPEL_CHROMA = 2048; + FF_BUG_DC_CLIP = 4096; + FF_BUG_MS = 8192; ///< workaround various bugs in microsofts broken decoders + //FF_BUG_FAKE_SCALABILITY = 16 //Autodetection should work 100%. + + FF_COMPLIANCE_VERY_STRICT = 2; ///< strictly conform to a 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; + FF_COMPLIANCE_INOFFICIAL = -1; ///< allow inofficial extensions + FF_COMPLIANCE_EXPERIMENTAL = -2; ///< allow non standarized experimental things + + FF_ER_CAREFUL = 1; + FF_ER_COMPLIANT = 2; + FF_ER_AGGRESSIVE = 3; + FF_ER_VERY_AGGRESSIVE = 4; + + FF_DCT_AUTO = 0; + FF_DCT_FASTINT = 1; + FF_DCT_INT = 2; + FF_DCT_MMX = 3; + FF_DCT_MLIB = 4; + FF_DCT_ALTIVEC = 5; + FF_DCT_FAAN = 6; + + FF_IDCT_AUTO = 0; + FF_IDCT_INT = 1; + FF_IDCT_SIMPLE = 2; + FF_IDCT_SIMPLEMMX = 3; + FF_IDCT_LIBMPEG2MMX = 4; + FF_IDCT_PS2 = 5; + FF_IDCT_MLIB = 6; + FF_IDCT_ARM = 7; + FF_IDCT_ALTIVEC = 8; + FF_IDCT_SH4 = 9; + FF_IDCT_SIMPLEARM = 10; + FF_IDCT_H264 = 11; + FF_IDCT_VP3 = 12; + FF_IDCT_IPP = 13; + FF_IDCT_XVIDMMX = 14; + FF_IDCT_CAVS = 15; + FF_IDCT_SIMPLEARMV5TE= 16; + FF_IDCT_SIMPLEARMV6 = 17; + FF_IDCT_SIMPLEVIS = 18; + FF_IDCT_WMV2 = 19; + + FF_EC_GUESS_MVS = 1; + FF_EC_DEBLOCK = 2; + + FF_MM_FORCE = $80000000; (* force usage of selected flags (OR) *) + (* lower 16 bits - CPU features *) + FF_MM_MMX = $0001; ///< standard MMX + FF_MM_3DNOW = $0004; ///< AMD 3DNOW + FF_MM_MMXEXT = $0002; ///< SSE integer functions or AMD MMX ext + FF_MM_SSE = $0008; ///< SSE functions + FF_MM_SSE2 = $0010; ///< PIV SSE2 functions + FF_MM_3DNOWEXT = $0020; ///< AMD 3DNowExt + FF_MM_SSE3 = $0040; ///< Prescott SSE3 functions + FF_MM_SSSE3 = $0080; ///< Conroe SSSE3 functions + FF_MM_IWMMXT = $0100; ///< XScale IWMMXT + + FF_PRED_LEFT = 0; + FF_PRED_PLANE = 1; + FF_PRED_MEDIAN = 2; + + FF_DEBUG_PICT_INFO = 1; + FF_DEBUG_RC = 2; + FF_DEBUG_BITSTREAM = 4; + FF_DEBUG_MB_TYPE = 8; + FF_DEBUG_QP = 16; + FF_DEBUG_MV = 32; + FF_DEBUG_DCT_COEFF = $00000040; + FF_DEBUG_SKIP = $00000080; + FF_DEBUG_STARTCODE = $00000100; + FF_DEBUG_PTS = $00000200; + FF_DEBUG_ER = $00000400; + FF_DEBUG_MMCO = $00000800; + FF_DEBUG_BUGS = $00001000; + FF_DEBUG_VIS_QP = $00002000; + FF_DEBUG_VIS_MB_TYPE = $00004000; + + FF_DEBUG_VIS_MV_P_FOR = $00000001; //visualize forward predicted MVs of P frames + FF_DEBUG_VIS_MV_B_FOR = $00000002; //visualize forward predicted MVs of B frames + FF_DEBUG_VIS_MV_B_BACK = $00000004; //visualize backward predicted MVs of B frames + + FF_CMP_SAD = 0; + FF_CMP_SSE = 1; + FF_CMP_SATD = 2; + FF_CMP_DCT = 3; + FF_CMP_PSNR = 4; + FF_CMP_BIT = 5; + FF_CMP_RD = 6; + FF_CMP_ZERO = 7; + FF_CMP_VSAD = 8; + FF_CMP_VSSE = 9; + FF_CMP_NSSE = 10; + FF_CMP_W53 = 11; + FF_CMP_W97 = 12; + FF_CMP_DCTMAX = 13; + FF_CMP_DCT264 = 14; + FF_CMP_CHROMA = 256; + + FF_DTG_AFD_SAME = 8; + FF_DTG_AFD_4_3 = 9; + FF_DTG_AFD_16_9 = 10; + FF_DTG_AFD_14_9 = 11; + FF_DTG_AFD_4_3_SP_14_9 = 13; + FF_DTG_AFD_16_9_SP_14_9 = 14; + FF_DTG_AFD_SP_4_3 = 15; + + FF_DEFAULT_QUANT_BIAS = 999999; + + FF_LAMBDA_SHIFT = 7; + FF_LAMBDA_SCALE = (1 shl FF_LAMBDA_SHIFT); + FF_QP2LAMBDA = 118; ///< factor to convert from H.263 QP to lambda + FF_LAMBDA_MAX = (256 * 128 - 1); + + FF_QUALITY_SCALE = FF_LAMBDA_SCALE; //FIXME maybe remove + + FF_CODER_TYPE_VLC = 0; + FF_CODER_TYPE_AC = 1; + FF_CODER_TYPE_RAW = 2; + FF_CODER_TYPE_RLE = 3; + FF_CODER_TYPE_DEFLATE = 4; + + SLICE_FLAG_CODED_ORDER = $0001; ///< draw_horiz_band() is called in coded order instead of display + SLICE_FLAG_ALLOW_FIELD = $0002; ///< allow draw_horiz_band() with field slices (MPEG2 field pics) + SLICE_FLAG_ALLOW_PLANE = $0004; ///< allow draw_horiz_band() with 1 component at a time (SVQ1) + + FF_MB_DECISION_SIMPLE = 0; ///< uses mb_cmp + FF_MB_DECISION_BITS = 1; ///< chooses the one which needs the fewest bits + FF_MB_DECISION_RD = 2; ///< rate distoration + + FF_AA_AUTO = 0; + FF_AA_FASTINT = 1; //not implemented yet + FF_AA_INT = 2; + FF_AA_FLOAT = 3; + + FF_PROFILE_UNKNOWN = -99; + FF_PROFILE_AAC_MAIN = 0; + FF_PROFILE_AAC_LOW = 1; + FF_PROFILE_AAC_SSR = 2; + FF_PROFILE_AAC_LTP = 3; + + FF_LEVEL_UNKNOWN = -99; + + X264_PART_I4X4 = $001; (* Analyse i4x4 *) + X264_PART_I8X8 = $002; (* Analyse i8x8 (requires 8x8 transform) *) + X264_PART_P8X8 = $010; (* Analyse p16x8, p8x16 and p8x8 *) + X264_PART_P4X4 = $020; (* Analyse p8x4, p4x8, p4x4 *) + X264_PART_B8X8 = $100; (* Analyse b16x8, b8x16 and b8x8 *) + + FF_COMPRESSION_DEFAULT = -1; + +const + AVPALETTE_SIZE = 1024; + AVPALETTE_COUNT = 256; + +type +(** + * AVPaletteControl + * This structure defines a method for communicating palette changes + * between and demuxer and a decoder. + * + * @deprecated Use AVPacket to send palette changes instead. + * This is totally broken. + *) + PAVPaletteControl = ^TAVPaletteControl; + TAVPaletteControl = record + (* demuxer sets this to 1 to indicate the palette has changed; + * decoder resets to 0 *) + palette_changed: integer; + + (* 4-byte ARGB palette entries, stored in native byte order; note that + * the individual palette components should be on a 8-bit scale; if + * the palette data comes from a IBM VGA native format, the component + * data is probably 6 bits in size and needs to be scaled *) + palette: array [0..AVPALETTE_COUNT - 1] of cardinal; + end; {deprecated;} + +type + PAVClass = ^TAVClass; + PAVCodecContext = ^TAVCodecContext; + + PAVCodec = ^TAVCodec; + + // int[4] + PQuadIntArray = ^TQuadIntArray; + TQuadIntArray = array[0..3] of integer; + // int (*func)(struct AVCodecContext *c2, void *arg) + TExecuteFunc = function(c2: PAVCodecContext; arg: Pointer): integer; cdecl; + + TAVClass = record {12} + class_name: pchar; + (* actually passing a pointer to an AVCodecContext + or AVFormatContext, which begin with an AVClass. + Needed because av_log is in libavcodec and has no visibility + of AVIn/OutputFormat *) + item_name: function (): pchar; cdecl; + option: PAVOption; + end; + + (** + * 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. + * sizeof(AVCodecContext) must not be used outside libav*. + *) + TAVCodecContext = record {720} + (** + * information on struct for av_log + * - set by avcodec_alloc_context + *) + av_class: PAVClass; + (** + * the average bitrate + * - encoding: Set by user; unused for constant quantizer encoding. + * - decoding: Set by libavcodec. 0 or some bitrate if this info is available in the stream. + *) + bit_rate: integer; + + (** + * number of bits the bitstream is allowed to diverge from the reference. + * the reference can be CBR (for CBR pass1) or VBR (for pass2) + * - encoding: Set by user; unused for constant quantizer encoding. + * - decoding: unused + *) + bit_rate_tolerance: integer; + + (** + * CODEC_FLAG_*. + * - encoding: Set by user. + * - decoding: Set by user. + *) + flags: integer; + + (** + * 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. + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. (FIXME: Is this OK?) + *) + sub_id: integer; + + (** + * Motion estimation algorithm used for video coding. + * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex), + * 8 (umh), 9 (iter) [7, 8 are x264 specific, 9 is snow specific] + * - encoding: MUST be set by user. + * - decoding: unused + *) + me_method: integer; + + (** + * some codecs need / can use extradata like Huffman tables. + * mjpeg: Huffman tables + * rv10: additional flags + * mpeg4: global headers (they can be in the bitstream or here) + * The allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger + * than extradata_size to avoid prolems if it is read with the bitstream reader. + * The bytewise contents of extradata must not depend on the architecture or CPU endianness. + * - encoding: Set/allocated/freed by libavcodec. + * - decoding: Set/allocated/freed by user. + *) + extradata: pbyte; + extradata_size: integer; + + (** + * This is the fundamental unit of time (in seconds) in terms + * of which frame timestamps are represented. For fixed-fps content, + * timebase should be 1/framerate and timestamp increments should be + * identically 1. + * - encoding: MUST be set by user. + * - decoding: Set by libavcodec. + *) + time_base: TAVRational; + + (* video only *) + (** + * picture width / height. + * - encoding: MUST be set by user. + * - decoding: Set by libavcodec. + * Note: For compatibility it is possible to set this instead of + * coded_width/height before decoding. + *) + width, height: integer; + + (** + * the number of pictures in a group of pictures, or 0 for intra_only + * - encoding: Set by user. + * - decoding: unused + *) + gop_size: integer; + + (** + * Pixel format, see PIX_FMT_xxx. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + pix_fmt: TAVPixelFormat; + + (** + * 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: integer; + + (** + * If non NULL, 'draw_horiz_band' is called by the libavcodec + * decoder to draw a horizontal band. It improves cache usage. Not + * all codecs can do that. You must check the codec capabilities + * beforehand. + * - encoding: unused + * - decoding: Set by user. + * @param height the height of the slice + * @param y the y position of the slice + * @param type 1->top field, 2->bottom field, 3->frame + * @param offset offset into the AVFrame.data from which the slice should be read + *) + draw_horiz_band: procedure (s: PAVCodecContext; + {const} src: PAVFrame; offset: PQuadIntArray; + y: integer; type_: integer; height: integer); cdecl; + + (* audio only *) + sample_rate: integer; ///< samples per second + channels: integer; + + (** + * audio sample format + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + sample_fmt: TSampleFormat; ///< sample format, currenly unused + + (* The following data should not be initialized. *) + (** + * Samples per packet, initialized when calling 'init'. + *) + frame_size: integer; + frame_number: integer; ///< audio or video frame number + real_pict_num: integer; ///< returns the real picture number of previous encoded frame + + (** + * Number of frames the decoded output will be delayed relative to + * the encoded input. + * - encoding: Set by libavcodec. + * - decoding: unused + *) + delay: integer; + + (* - encoding parameters *) + qcompress: single; ///< amount of qscale change between easy & hard scenes (0.0-1.0) + qblur: single; ///< amount of qscale smoothing over time (0.0-1.0) + + (** + * minimum quantizer + * - encoding: Set by user. + * - decoding: unused + *) + qmin: integer; + + (** + * maximum quantizer + * - encoding: Set by user. + * - decoding: unused + *) + qmax: integer; + + (** + * maximum quantizer difference between frames + * - encoding: Set by user. + * - decoding: unused + *) + max_qdiff: integer; + + (** + * maximum number of B-frames between non-B-frames + * Note: The output will be delayed by max_b_frames+1 relative to the input. + * - encoding: Set by user. + * - decoding: unused + *) + max_b_frames: integer; + + (** + * qscale factor between IP and B-frames + * - encoding: Set by user. + * - decoding: unused + *) + b_quant_factor: single; + + (** obsolete FIXME remove *) + rc_strategy: integer; + + b_frame_strategy: integer; + + (** + * 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: integer; + + codec: PAVCodec; + + priv_data: pointer; + + {$IF LIBAVCODEC_VERSION < 52000000} // 52.0.0 + (* unused, FIXME remove*) + rtp_mode: integer; + {$IFEND} + + rtp_payload_size: integer; (* The size of the RTP payload: the coder will *) + (* do it's best to deliver a chunk with size *) + (* below rtp_payload_size, the chunk will start *) + (* with a start code on some codecs like H.263 *) + (* This doesn't take account of any particular *) + (* headers inside the transmited RTP payload *) + + + (* The RTP callback: This function is called *) + (* every time the encoder has a packet to send *) + (* Depends on the encoder if the data starts *) + (* with a Start Code (it should) H.263 does. *) + (* mb_nb contains the number of macroblocks *) + (* encoded in the RTP payload *) + rtp_callback: procedure (avctx: PAVCodecContext; data: pointer; + size: integer; mb_nb: integer); cdecl; + + (* statistics, used for 2-pass encoding *) + mv_bits: integer; + header_bits: integer; + i_tex_bits: integer; + p_tex_bits: integer; + i_count: integer; + p_count: integer; + skip_count: integer; + misc_bits: integer; + + (** + * number of bits used for the previously encoded frame + * - encoding: Set by libavcodec. + * - decoding: unused + *) + frame_bits: integer; + + (** + * Private data of the user, can be used to carry app specific stuff. + * - encoding: Set by user. + * - decoding: Set by user. + *) + opaque: pointer; + + codec_name: array [0..31] of char; + codec_type: TCodecType; (* see CODEC_TYPE_xxx *) + codec_id: TCodecID; (* see CODEC_ID_xxx *) + + (** + * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). + * This is used to work around some encoder bugs. + * A demuxer should set this to what is stored in the field used to identify the codec. + * If there are multiple such fields in a container then the demuxer should choose the one + * which maximizes the information about the used codec. + * If the codec tag field in a container is larger then 32 bits then the demuxer should + * remap the longer ID to 32 bits with a table or other structure. Alternatively a new + * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated + * first. + * - encoding: Set by user, if not then the default based on codec_id will be used. + * - decoding: Set by user, will be converted to uppercase by libavcodec during init. + *) + codec_tag: cardinal; // можно array [0..3] of char - тогда видно FOURCC + + (** + * Work around bugs in encoders which sometimes cannot be detected automatically. + * - encoding: Set by user + * - decoding: Set by user + *) + workaround_bugs: integer; + + (** + * luma single coefficient elimination threshold + * - encoding: Set by user. + * - decoding: unused + *) + luma_elim_threshold: integer; + + (** + * chroma single coeff elimination threshold + * - encoding: Set by user. + * - decoding: unused + *) + chroma_elim_threshold: integer; + + (** + * strictly follow the standard (MPEG4, ...). + * - encoding: Set by user. + * - decoding: unused + *) + strict_std_compliance: integer; + + (** + * qscale offset between IP and B-frames + * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset). + * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). + * - encoding: Set by user. + * - decoding: unused + *) + b_quant_offset: single; + + (** + * Error resilience; higher values will detect more errors but may + * misdetect some more or less valid parts as errors. + * - encoding: unused + * - decoding: Set by user. + *) + error_resilience: integer; + + (** + * 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_dimensions() should be used to find the required width and + * height, as they normally need to be rounded up to the next multiple of 16. + * - encoding: unused + * - decoding: Set by libavcodec., user can override. + *) + get_buffer: function (c: PAVCodecContext; pic: PAVFrame): integer; cdecl; + + (** + * Called to release buffers which where allocated with get_buffer. + * A released buffer can be reused in get_buffer(). + * pic.data[*] must be set to NULL. + * - encoding: unused + * - decoding: Set by libavcodec., user can override. + *) + release_buffer: procedure (c: PAVCodecContext; pic: PAVFrame); cdecl; + + (** + * If 1 the stream has a 1 frame delay during decoding. + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + has_b_frames: integer; + + (** + * number of bytes per packet if constant and known or 0 + * Used by some WAV based audio codecs. + *) + block_align: integer; + + parse_only: integer; (* - decoding only: if true, only parsing is done + (function avcodec_parse_frame()). The frame + data is returned. Only MPEG codecs support this now. *) + + (** + * 0-> h263 quant 1-> mpeg quant + * - encoding: Set by user. + * - decoding: unused + *) + mpeg_quant: integer; + + (** + * pass1 encoding statistics output buffer + * - encoding: Set by libavcodec. + * - decoding: unused + *) + stats_out: pchar; + + (** + * pass2 encoding statistics input buffer + * Concatenated stuff from stats_out of pass1 should be placed here. + * - encoding: Allocated/set/freed by user. + * - decoding: unused + *) + stats_in: pchar; + + (** + * ratecontrol qmin qmax limiting method + * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax. + * - encoding: Set by user. + * - decoding: unused + *) + rc_qsquish: single; + + rc_qmod_amp: single; + rc_qmod_freq: integer; + + (** + * ratecontrol override, see RcOverride + * - encoding: Allocated/set/freed by user. + * - decoding: unused + *) + rc_override: PRcOverride; + rc_override_count: integer; + + (** + * rate control equation + * - encoding: Set by user + * - decoding: unused + *) + rc_eq: pchar; + + (** + * maximum bitrate + * - encoding: Set by user. + * - decoding: unused + *) + rc_max_rate: integer; + + (** + * minimum bitrate + * - encoding: Set by user. + * - decoding: unused + *) + rc_min_rate: integer; + + (** + * decoder bitstream buffer size + * - encoding: Set by user. + * - decoding: unused + *) + rc_buffer_size: integer; + rc_buffer_aggressivity: single; + + (** + * qscale factor between P and I-frames + * If > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset). + * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). + * - encoding: Set by user. + * - decoding: unused + *) + i_quant_factor: single; + + (** + * qscale offset between P and I-frames + * - encoding: Set by user. + * - decoding: unused + *) + i_quant_offset: single; + + (** + * initial complexity for pass1 ratecontrol + * - encoding: Set by user. + * - decoding: unused + *) + rc_initial_cplx: single; + + (** + * DCT algorithm, see FF_DCT_* below + * - encoding: Set by user. + * - decoding: unused + *) + dct_algo: integer; + + (** + * luminance masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + lumi_masking: single; + + (** + * temporary complexity masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + temporal_cplx_masking: single; + + (** + * spatial complexity masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + spatial_cplx_masking: single; + + (** + * p block masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + p_masking: single; + + (** + * darkness masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + dark_masking: single; + + {$IF LIBAVCODEC_VERSION < 52000000} // 52.0.0 + (* for binary compatibility *) + unused: integer; + {$IFEND} + + (** + * IDCT algorithm, see FF_IDCT_* below. + * - encoding: Set by user. + * - decoding: Set by user. + *) + idct_algo: integer; + + (** + * slice count + * - encoding: Set by libavcodec. + * - decoding: Set by user (or 0). + *) + slice_count: integer; + + (** + * slice offsets in the frame in bytes + * - encoding: Set/allocated by libavcodec. + * - decoding: Set/allocated by user (or NULL). + *) + slice_offset: Pinteger; + + (** + * error concealment flags + * - encoding: unused + * - decoding: Set by user. + *) + error_concealment: integer; + + (** + * dsp_mask could be add used to disable unwanted CPU features + * CPU features (i.e. MMX, SSE. ...) + * + * With the FORCE flag you may instead enable given CPU features. + * (Dangerous: Usable in case of misdetection, improper usage however will + * result into program crash.) + *) + dsp_mask: cardinal; + + (** + * bits per sample/pixel from the demuxer (needed for huffyuv). + * - encoding: Set by libavcodec. + * - decoding: Set by user. + *) + bits_per_sample: integer; + + (** + * prediction method (needed for huffyuv) + * - encoding: Set by user. + * - decoding: unused + *) + prediction_method: integer; + + (** + * sample aspect ratio (0 if unknown) + * Numerator and denominator must be relatively prime and smaller than 256 for some video standards. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + sample_aspect_ratio: TAVRational; + + (** + * the picture in the bitstream + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + coded_frame: PAVFrame; + + (** + * debug + * - encoding: Set by user. + * - decoding: Set by user. + *) + debug: integer; + + (** + * debug + * - encoding: Set by user. + * - decoding: Set by user. + *) + debug_mv: integer; + + (** + * error + * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR. + * - decoding: unused + *) + error: array [0..3] of uint64; + + (** + * minimum MB quantizer + * - encoding: unused + * - decoding: unused + *) + mb_qmin: integer; + + (** + * maximum MB quantizer + * - encoding: unused + * - decoding: unused + *) + mb_qmax: integer; + + (** + * motion estimation comparison function + * - encoding: Set by user. + * - decoding: unused + *) + me_cmp: integer; + + (** + * subpixel motion estimation comparison function + * - encoding: Set by user. + * - decoding: unused + *) + me_sub_cmp: integer; + (** + * macroblock comparison function (not supported yet) + * - encoding: Set by user. + * - decoding: unused + *) + mb_cmp: integer; + (** + * interlaced DCT comparison function + * - encoding: Set by user. + * - decoding: unused + *) + ildct_cmp: integer; + + (** + * ME diamond size & shape + * - encoding: Set by user. + * - decoding: unused + *) + dia_size: integer; + + (** + * amount of previous MV predictors (2a+1 x 2a+1 square) + * - encoding: Set by user. + * - decoding: unused + *) + last_predictor_count: integer; + + (** + * prepass for motion estimation + * - encoding: Set by user. + * - decoding: unused + *) + pre_me: integer; + + (** + * motion estimation prepass comparison function + * - encoding: Set by user. + * - decoding: unused + *) + me_pre_cmp: integer; + + (** + * ME prepass diamond size & shape + * - encoding: Set by user. + * - decoding: unused + *) + pre_dia_size: integer; + + (** + * subpel ME quality + * - encoding: Set by user. + * - decoding: unused + *) + me_subpel_quality: integer; + + (** + * callback to negotiate the pixelFormat + * @param fmt is the list of formats which are supported by the codec, + * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality. + * The first is always the native one. + * @return the chosen format + * - encoding: unused + * - decoding: Set by user, if not set the native format will be chosen. + *) + get_format: function (s: PAVCodecContext; {const} fmt: PAVPixelFormat): TAVPixelFormat; cdecl; + + (** + * DTG active format information (additional aspect ratio + * information only used in DVB MPEG-2 transport streams) + * 0 if not set. + * + * - encoding: unused + * - decoding: Set by decoder. + *) + dtg_active_format: integer; + + (** + * maximum motion estimation search range in subpel units + * If 0 then no limit. + * + * - encoding: Set by user. + * - decoding: unused + *) + me_range: integer; + + (** + * intra quantizer bias + * - encoding: Set by user. + * - decoding: unused + *) + intra_quant_bias: integer; + + (** + * inter quantizer bias + * - encoding: Set by user. + * - decoding: unused + *) + inter_quant_bias: integer; + + (** + * color table ID + * - encoding: unused + * - decoding: Which clrtable should be used for 8bit RGB images. + * Tables have to be stored somewhere. FIXME + *) + color_table_id: integer; + + (** + * internal_buffer count + * Don't touch, used by libavcodec default_get_buffer(). + *) + internal_buffer_count: integer; + + (** + * internal_buffers + * Don't touch, used by libavcodec default_get_buffer(). + *) + internal_buffer: pointer; + + (** + * Global quality for codecs which cannot change it per frame. + * This should be proportional to MPEG-1/2/4 qscale. + * - encoding: Set by user. + * - decoding: unused + *) + global_quality: integer; + + (** + * coder type + * - encoding: Set by user. + * - decoding: unused + *) + coder_type: integer; + + (** + * context model + * - encoding: Set by user. + * - decoding: unused + *) + context_model: integer; + + { + (** + * + * - encoding: unused + * - decoding: Set by user. + *) + realloc: function (s: PAVCodecContext; buf: Pbyte; buf_size: integer): Pbyte; cdecl; + } + + (** + * slice flags + * - encoding: unused + * - decoding: Set by user. + *) + slice_flags: integer; + + (** + * XVideo Motion Acceleration + * - encoding: forbidden + * - decoding: set by decoder + *) + xvmc_acceleration: integer; + + (** + * macroblock decision mode + * - encoding: Set by user. + * - decoding: unused + *) + mb_decision: integer; + + (** + * custom intra quantization matrix + * - encoding: Set by user, can be NULL. + * - decoding: Set by libavcodec. + *) + intra_matrix: Pword; + + (** + * custom inter quantization matrix + * - encoding: Set by user, can be NULL. + * - decoding: Set by libavcodec. + *) + inter_matrix: Pword; + + (** + * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). + * This is used to work around some encoder bugs. + * - encoding: unused + * - decoding: Set by user, will be converted to uppercase by libavcodec during init. + *) + stream_codec_tag: array [0..3] of char; //cardinal; + + (** + * scene change detection threshold + * 0 is default, larger means fewer detected scene changes. + * - encoding: Set by user. + * - decoding: unused + *) + scenechange_threshold: integer; + + (** + * minimum Lagrange multipler + * - encoding: Set by user. + * - decoding: unused + *) + lmin: integer; + + (** + * maximum Lagrange multipler + * - encoding: Set by user. + * - decoding: unused + *) + lmax: integer; + + (** + * palette control structure + * - encoding: ??? (no palette-enabled encoder yet) + * - decoding: Set by user. + *) + palctrl: PAVPaletteControl; + + (** + * noise reduction strength + * - encoding: Set by user. + * - decoding: unused + *) + noise_reduction: integer; + + (** + * Called at the beginning of a frame to get cr buffer for it. + * Buffer type (size, hints) must be the same. libavcodec won't check it. + * libavcodec will pass previous buffer in pic, function should return + * same buffer or new buffer with old frame "painted" into it. + * If pic.data[0] == NULL must behave like get_buffer(). + * - encoding: unused + * - decoding: Set by libavcodec., user can override + *) + reget_buffer: function (c: PAVCodecContext; pic: PAVFrame): integer; cdecl; + + (** + * Number of bits which should be loaded into the rc buffer before decoding starts. + * - encoding: Set by user. + * - decoding: unused + *) + rc_initial_buffer_occupancy: integer; + + (** + * + * - encoding: Set by user. + * - decoding: unused + *) + inter_threshold: integer; + + (** + * CODEC_FLAG2_* + * - encoding: Set by user. + * - decoding: Set by user. + *) + flags2: integer; + + (** + * Simulates errors in the bitstream to test error concealment. + * - encoding: Set by user. + * - decoding: unused + *) + error_rate: integer; + + (** + * MP3 antialias algorithm, see FF_AA_* below. + * - encoding: unused + * - decoding: Set by user. + *) + antialias_algo: integer; + + (** + * quantizer noise shaping + * - encoding: Set by user. + * - decoding: unused + *) + quantizer_noise_shaping: integer; + + (** + * thread count + * is used to decide how many independent tasks should be passed to execute() + * - encoding: Set by user. + * - decoding: Set by user. + *) + thread_count: integer; + + (** + * The codec may call this to execute several independent things. + * It will return only after finishing all tasks. + * The user may replace this with some multithreaded implementation, + * the default implementation will execute the parts serially. + * @param count the number of things to execute + * - encoding: Set by libavcodec, user can override. + * - decoding: Set by libavcodec, user can override. + *) + execute: function (c: PAVCodecContext; func: TExecuteFunc; arg: PPointer; ret: PInteger; count: integer): integer; cdecl; + + (** + * thread opaque + * Can be used by execute() to store some per AVCodecContext stuff. + * - encoding: set by execute() + * - decoding: set by execute() + *) + thread_opaque: pointer; + + (** + * Motion estimation threshold below which no motion estimation is + * performed, but instead the user specified motion vectors are used. + * + * - encoding: Set by user. + * - decoding: unused + *) + me_threshold: integer; + + (** + * Macroblock threshold below which the user specified macroblock types will be used. + * - encoding: Set by user. + * - decoding: unused + *) + mb_threshold: integer; + + (** + * precision of the intra DC coefficient - 8 + * - encoding: Set by user. + * - decoding: unused + *) + intra_dc_precision: integer; + + (** + * noise vs. sse weight for the nsse comparsion function + * - encoding: Set by user. + * - decoding: unused + *) + nsse_weight: integer; + + (** + * Number of macroblock rows at the top which are skipped. + * - encoding: unused + * - decoding: Set by user. + *) + skip_top: integer; + + (** + * Number of macroblock rows at the bottom which are skipped. + * - encoding: unused + * - decoding: Set by user. + *) + skip_bottom: integer; + + (** + * profile + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + profile: integer; + + (** + * level + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + level: integer; + + (** + * low resolution decoding, 1-> 1/2 size, 2->1/4 size + * - encoding: unused + * - decoding: Set by user. + *) + lowres: integer; + + (** + * Bitstream width / height, may be different from width/height if lowres + * or other things are used. + * - encoding: unused + * - decoding: Set by user before init if known. Codec should override / dynamically change if needed. + *) + coded_width, coded_height: integer; + + (** + * frame skip threshold + * - encoding: Set by user. + * - decoding: unused + *) + frame_skip_threshold: integer; + + (** + * frame skip factor + * - encoding: Set by user. + * - decoding: unused + *) + frame_skip_factor: integer; + + (** + * frame skip exponent + * - encoding: Set by user. + * - decoding: unused + *) + frame_skip_exp: integer; + + (** + * frame skip comparison function + * - encoding: Set by user. + * - decoding: unused + *) + frame_skip_cmp: integer; + + (** + * Border processing masking, raises the quantizer for mbs on the borders + * of the picture. + * - encoding: Set by user. + * - decoding: unused + *) + border_masking: single; + + (** + * minimum MB lagrange multipler + * - encoding: Set by user. + * - decoding: unused + *) + mb_lmin: integer; + + (** + * maximum MB lagrange multipler + * - encoding: Set by user. + * - decoding: unused + *) + mb_lmax: integer; + + (** + * + * - encoding: Set by user. + * - decoding: unused + *) + me_penalty_compensation: integer; + + (** + * + * - encoding: unused + * - decoding: Set by user. + *) + skip_loop_filter: TAVDiscard; + + (** + * + * - encoding: unused + * - decoding: Set by user. + *) + skip_idct: TAVDiscard; + + (** + * + * - encoding: unused + * - decoding: Set by user. + *) + skip_frame: TAVDiscard; + + (** + * + * - encoding: Set by user. + * - decoding: unused + *) + bidir_refine: integer; + + (** + * + * - encoding: Set by user. + * - decoding: unused + *) + brd_scale: integer; + + (** + * constant rate factor - quality-based VBR - values ~correspond to qps + * - encoding: Set by user. + * - decoding: unused + *) + {$IF LIBAVCODEC_VERSION >= 51021000} // 51.21.0 + crf: single; + {$ELSE} + crf: integer; + {$IFEND} + + (** + * constant quantization parameter rate control method + * - encoding: Set by user. + * - decoding: unused + *) + cqp: integer; + + (** + * minimum GOP size + * - encoding: Set by user. + * - decoding: unused + *) + keyint_min: integer; + + (** + * number of reference frames + * - encoding: Set by user. + * - decoding: unused + *) + refs: integer; + + (** + * chroma qp offset from luma + * - encoding: Set by user. + * - decoding: unused + *) + chromaoffset: integer; + + (** + * Influences how often B-frames are used. + * - encoding: Set by user. + * - decoding: unused + *) + bframebias: integer; + + (** + * trellis RD quantization + * - encoding: Set by user. + * - decoding: unused + *) + trellis: integer; + + (** + * Reduce fluctuations in qp (before curve compression). + * - encoding: Set by user. + * - decoding: unused + *) + complexityblur: single; + + (** + * in-loop deblocking filter alphac0 parameter + * alpha is in the range -6...6 + * - encoding: Set by user. + * - decoding: unused + *) + deblockalpha: integer; + + (** + * in-loop deblocking filter beta parameter + * beta is in the range -6...6 + * - encoding: Set by user. + * - decoding: unused + *) + deblockbeta: integer; + + (** + * macroblock subpartition sizes to consider - p8x8, p4x4, b8x8, i8x8, i4x4 + * - encoding: Set by user. + * - decoding: unused + *) + partitions: integer; + + (** + * direct MV prediction mode - 0 (none), 1 (spatial), 2 (temporal) + * - encoding: Set by user. + * - decoding: unused + *) + directpred: integer; + + (** + * Audio cutoff bandwidth (0 means "automatic") + * - encoding: Set by user. + * - decoding: unused + *) + cutoff: integer; + + (** + * Multiplied by qscale for each frame and added to scene_change_score. + * - encoding: Set by user. + * - decoding: unused + *) + scenechange_factor: integer; + + (** + * + * Note: Value depends upon the compare function used for fullpel ME. + * - encoding: Set by user. + * - decoding: unused + *) + mv0_threshold: integer; + + (** + * Adjusts sensitivity of b_frame_strategy 1. + * - encoding: Set by user. + * - decoding: unused + *) + b_sensitivity: integer; + + (** + * - encoding: Set by user. + * - decoding: unused + *) + compression_level: integer; + + (** + * Sets whether to use LPC mode - used by FLAC encoder. + * - encoding: Set by user. + * - decoding: unused + *) + use_lpc: integer; + + (** + * LPC coefficient precision - used by FLAC encoder + * - encoding: Set by user. + * - decoding: unused + *) + lpc_coeff_precision: integer; + + (** + * - encoding: Set by user. + * - decoding: unused + *) + min_prediction_order: integer; + + (** + * - encoding: Set by user. + * - decoding: unused + *) + max_prediction_order: integer; + + (** + * search method for selecting prediction order + * - encoding: Set by user. + * - decoding: unused + *) + prediction_order_method: integer; + + (** + * - encoding: Set by user. + * - decoding: unused + *) + min_partition_order: integer; + + (** + * - encoding: Set by user. + * - decoding: unused + *) + max_partition_order: integer; + + {$IF LIBAVCODEC_VERSION >= 51026000} // 51.26.0 + (** + * GOP timecode frame start number, in non drop frame format + * - encoding: Set by user. + * - decoding: unused + *) + timecode_frame_start: int64; + {$IFEND} + + {$IF LIBAVCODEC_VERSION >= 51042000} // 51.42.0 + (** + * Decoder should decode to this many channels if it can (0 for default) + * - encoding: unused + * - decoding: Set by user. + *) + request_channels: integer; + {$IFEND} + + {$IF LIBAVCODEC_VERSION > 51049000} // > 51.49.0 + (** + * 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: Single; + {$IFEND} + end; + +(** + * AVCodec. + *) + TAVCodec = record + name: pchar; + type_: TCodecType; + id: TCodecID; + priv_data_size: integer; + init: function (avctx: PAVCodecContext): integer; cdecl; (* typo corretion by the Creative CAT *) + encode: function (avctx: PAVCodecContext; buf: pchar; buf_size: integer; data: pointer): integer; cdecl; + close: function (avctx: PAVCodecContext): integer; cdecl; + decode: function (avctx: PAVCodecContext; outdata: pointer; outdata_size: PInteger; + buf: pchar; buf_size: integer): integer; cdecl; + capabilities: integer; + next: PAVCodec; + flush: procedure (avctx: PAVCodecContext); cdecl; + {const} supported_framerates: PAVRational; ///array of supported framerates, or NULL if any, array is terminated by {0,0} + {const} pix_fmts: PAVPixelFormat; ///array of supported pixel formats, or NULL if unknown, array is terminanted by -1 + end; + +(** + * four components are given, that's all. + * the last component is alpha + *) + PAVPicture = ^TAVPicture; + TAVPicture = record + data: array [0..3] of pchar; + linesize: array [0..3] of integer; ///< number of bytes per line + end; + +type + PAVSubtitleRect = ^TAVSubtitleRect; + TAVSubtitleRect = record + x: word; + y: word; + w: word; + h: word; + nb_colors: word; + linesize: integer; + rgba_palette: PCardinal; + bitmap: pchar; + end; + + PAVSubtitle = ^TAVSubtitle; + TAVSubtitle = record {20} + format: word; (* 0 = graphics *) + start_display_time: cardinal; (* relative to packet pts, in ms *) + end_display_time: cardinal; (* relative to packet pts, in ms *) + num_rects: cardinal; + rects: PAVSubtitleRect; + end; + + +(* resample.c *) + + PReSampleContext = pointer; + PAVResampleContext = pointer; + PImgReSampleContext = pointer; + +function audio_resample_init (output_channels: integer; input_channels: integer; + output_rate: integer; input_rate: integer): PReSampleContext; + cdecl; external av__codec; + +function audio_resample (s: PReSampleContext; output: PSmallint; input: PSmallint; nb_samples: integer): integer; + cdecl; external av__codec; + +procedure audio_resample_close (s: PReSampleContext); + cdecl; external av__codec; + + +function av_resample_init (out_rate: integer; in_rate: integer; filter_length: integer; + log2_phase_count: integer; linear: integer; cutoff: double): PAVResampleContext; + cdecl; external av__codec; + +function av_resample (c: PAVResampleContext; dst: PSmallint; src: PSmallint; consumed: PInteger; + src_size: integer; dst_size: integer; update_ctx: integer): integer; + cdecl; external av__codec; + +procedure av_resample_compensate (c: PAVResampleContext; sample_delta: integer; + compensation_distance: integer); + cdecl; external av__codec; + +procedure av_resample_close (c: PAVResampleContext); + cdecl; external av__codec; + + +{$IF LIBAVCODEC_VERSION < 52000000} // 52.0.0 +(* YUV420 format is assumed ! *) + +(** + * @deprecated Use the software scaler (swscale) instead. + *) +function img_resample_init (output_width: integer; output_height: integer; + input_width: integer; input_height: integer): PImgReSampleContext; + cdecl; external av__codec; deprecated; + +(** + * @deprecated Use the software scaler (swscale) instead. + *) +function img_resample_full_init (owidth: integer; oheight: integer; + iwidth: integer; iheight: integer; + topBand: integer; bottomBand: integer; + leftBand: integer; rightBand: integer; + padtop: integer; padbottom: integer; + padleft: integer; padright: integer): PImgReSampleContext; + cdecl; external av__codec; deprecated; + +(** + * @deprecated Use the software scaler (swscale) instead. + *) +procedure img_resample (s: PImgReSampleContext; output: PAVPicture; {const} input: PAVPicture); + cdecl; external av__codec; deprecated; + +(** + * @deprecated Use the software scaler (swscale) instead. + *) +procedure img_resample_close (s: PImgReSampleContext); + cdecl; external av__codec; deprecated; + +{$IFEND} + +(** + * Allocate memory for a picture. Call avpicture_free to free it. + * + * @param picture the picture to be filled in. + * @param pix_fmt the format of the picture. + * @param width the width of the picture. + * @param height the height of the picture. + * @return Zero if successful, a negative value if not. + *) +function avpicture_alloc (picture: PAVPicture; pix_fmt: TAVPixelFormat; + width: integer; height: integer): integer; + cdecl; external av__codec; + +(** + * Free a picture previously allocated by avpicture_alloc(). + * + * @param picture the AVPicture to be freed + *) +procedure avpicture_free (picture: PAVPicture); + cdecl; external av__codec; + +(** + * Fill in the AVPicture fields. + * The fields of the given AVPicture are filled in by using the 'ptr' address + * which points to the image data buffer. Depending on the specified picture + * format, one or multiple image data pointers and line sizes will be set. + * If a planar format is specified, several pointers will be set pointing to + * the different picture planes and the line sizes of the different planes + * will be stored in the lines_sizes array. + * + * @param picture AVPicture whose fields are to be filled in + * @param ptr Buffer which will contain or contains the actual image data + * @param pix_fmt The format in which the picture data is stored. + * @param width the width of the image in pixels + * @param height the height of the image in pixels + * @return size of the image data in bytes + *) +function avpicture_fill (picture: PAVPicture; ptr: pointer; + pix_fmt: TAVPixelFormat; width: integer; height: integer): integer; + cdecl; external av__codec; + +function avpicture_layout ({const} src: PAVPicture; pix_fmt: TAVPixelFormat; + width: integer; height: integer; + dest: pchar; dest_size: integer): integer; + cdecl; external av__codec; + +(** + * Calculate the size in bytes that a picture of the given width and height + * would occupy if stored in the given picture format. + * + * @param pix_fmt the given picture format + * @param width the width of the image + * @param height the height of the image + * @return Image data size in bytes + *) +function avpicture_get_size (pix_fmt: TAVPixelFormat; width: integer; height: integer): integer; + cdecl; external av__codec; + +procedure avcodec_get_chroma_sub_sample (pix_fmt: TAVPixelFormat; h_shift: Pinteger; v_shift: pinteger); + cdecl; external av__codec; + +function avcodec_get_pix_fmt_name(pix_fmt: TAVPixelFormat): pchar; + cdecl; external av__codec; + +procedure avcodec_set_dimensions(s: PAVCodecContext; width: integer; height: integer); + cdecl; external av__codec; + +function avcodec_get_pix_fmt(const name: pchar): TAVPixelFormat; + cdecl; external av__codec; + +function avcodec_pix_fmt_to_codec_tag(p: TAVPixelFormat): cardinal; + cdecl; external av__codec; + +const + FF_LOSS_RESOLUTION = $0001; {**< loss due to resolution change *} + FF_LOSS_DEPTH = $0002; {**< loss due to color depth change *} + FF_LOSS_COLORSPACE = $0004; {**< loss due to color space conversion *} + FF_LOSS_ALPHA = $0008; {**< loss of alpha bits *} + FF_LOSS_COLORQUANT = $0010; {**< loss due to color quantization *} + FF_LOSS_CHROMA = $0020; {**< loss of chroma (e.g. RGB to gray conversion) *} + +(** + * Computes what kind of losses will occur when converting from one specific + * pixel format to another. + * When converting from one pixel format to another, information loss may occur. + * For example, when converting from RGB24 to GRAY, the color information will + * be lost. Similarly, other losses occur when converting from some formats to + * other formats. These losses can involve loss of chroma, but also loss of + * resolution, loss of color depth, loss due to the color space conversion, loss + * of the alpha bits or loss due to color quantization. + * avcodec_get_fix_fmt_loss() informs you about the various types of losses + * which will occur when converting from one pixel format to another. + * + * @param[in] dst_pix_fmt destination pixel format + * @param[in] src_pix_fmt source pixel format + * @param[in] has_alpha Whether the source pixel format alpha channel is used. + * @return Combination of flags informing you what kind of losses will occur. + *) +function avcodec_get_pix_fmt_loss (dst_pix_fmt: TAVPixelFormat; src_pix_fmt: TAVPixelFormat; + has_alpha: integer): integer; + cdecl; external av__codec; + +(** + * Finds the best pixel format to convert to given a certain source pixel + * format. When converting from one pixel format to another, information loss + * may occur. For example, when converting from RGB24 to GRAY, the color + * information will be lost. Similarly, other losses occur when converting from + * some formats to other formats. avcodec_find_best_pix_fmt() searches which of + * the given pixel formats should be used to suffer the least amount of loss. + * The pixel formats from which it chooses one, are determined by the + * \p pix_fmt_mask parameter. + * + * @code + * src_pix_fmt = PIX_FMT_YUV420P; + * pix_fmt_mask = (1 << PIX_FMT_YUV422P) || (1 << PIX_FMT_RGB24); + * dst_pix_fmt = avcodec_find_best_pix_fmt(pix_fmt_mask, src_pix_fmt, alpha, &loss); + * @endcode + * + * @param[in] pix_fmt_mask bitmask determining which pixel format to choose from + * @param[in] src_pix_fmt source pixel format + * @param[in] has_alpha Whether the source pixel format alpha channel is used. + * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur. + * @return The best pixel format to convert to or -1 if none was found. + *) +function avcodec_find_best_pix_fmt (pix_fmt_mask: integer; src_pix_fmt: TAVPixelFormat; + has_alpha: integer; loss_ptr: pinteger): integer; + cdecl; external av__codec; + +{$IF LIBAVCODEC_VERSION >= 51041000} // 51.41.0 +(** + * Print in buf the string corresponding to the pixel format with + * number pix_fmt, or an header if pix_fmt is negative. + * + * @param[in] buf the buffer where to write the string + * @param[in] buf_size the size of buf + * @param[in] pix_fmt the number of the pixel format to print the corresponding info string, or + * a negative value to print the corresponding header. + * Meaningful values for obtaining a pixel format info vary from 0 to PIX_FMT_NB -1. + *) +procedure avcodec_pix_fmt_string (buf: PChar; buf_size: integer; pix_fmt: integer); + cdecl; external av__codec; +{$IFEND} + +const + FF_ALPHA_TRANSP = $0001; {* image has some totally transparent pixels *} + FF_ALPHA_SEMI_TRANSP = $0002; {* image has some transparent pixels *} + +(** + * Tell if an image really has transparent alpha values. + * @return ored mask of FF_ALPHA_xxx constants + *) +function img_get_alpha_info ({const} src: PAVPicture; + pix_fmt: TAVPixelFormat; + width: integer; height: integer): integer; + cdecl; external av__codec; + +{$IF LIBAVCODEC_VERSION < 52000000} // 52.0.0 +(** + * convert among pixel formats + * @deprecated Use the software scaler (swscale) instead. + *) +function img_convert (dst: PAVPicture; dst_pix_fmt: TAVPixelFormat; + const src: PAVPicture; pix_fmt: TAVPixelFormat; + width: integer; height: integer): integer; + cdecl; external av__codec; deprecated; +{$IFEND} + +(* deinterlace a picture *) +(* deinterlace - if not supported return -1 *) +function avpicture_deinterlace (dst: PAVPicture; const src: PAVPicture; + pix_fmt: TAVPixelFormat; width: integer; height: integer): integer; + cdecl; external av__codec; + +{* external high level API *} + +{$IF LIBAVCODEC_VERSION < 52000000} // 52.0.0 +{ +var + first_avcodec: PAVCodec; external av__codec; +} +{$IFEND} + +{$IF LIBAVCODEC_VERSION >= 51049000} // 51.49.0 +function av_codec_next(c: PAVCodec): PAVCodec; + cdecl; external av__codec; +{$IFEND} + +(* returns LIBAVCODEC_VERSION_INT constant *) +function avcodec_version (): cardinal; + cdecl; external av__codec; + +(* returns LIBAVCODEC_BUILD constant *) +function avcodec_build (): cardinal; + cdecl; external av__codec; + +(** + * Initializes libavcodec. + * + * @warning This function \e must be called before any other libavcodec + * function. + *) +procedure avcodec_init (); + cdecl; external av__codec; + +procedure register_avcodec (format: PAVCodec); + cdecl; external av__codec; + +(** + * Finds a registered encoder with a matching codec ID. + * + * @param id CodecID of the requested encoder + * @return An encoder if one was found, NULL otherwise. + *) +function avcodec_find_encoder (id: TCodecID): PAVCodec; + cdecl; external av__codec; + +(** + * Finds a registered encoder with the specified name. + * + * @param name name of the requested encoder + * @return An encoder if one was found, NULL otherwise. + *) +function avcodec_find_encoder_by_name (name: pchar): PAVCodec; + cdecl; external av__codec; + +(** + * Finds a registered decoder with a matching codec ID. + * + * @param id CodecID of the requested decoder + * @return A decoder if one was found, NULL otherwise. + *) +function avcodec_find_decoder(id: TCodecID): PAVCodec; + cdecl; external av__codec; + +(** + * Finds a registered decoder with the specified name. + * + * @param name name of the requested decoder + * @return A decoder if one was found, NULL otherwise. + *) +function avcodec_find_decoder_by_name (name: pchar): PAVCodec; + cdecl; external av__codec; +procedure avcodec_string(buf: pchar; buf_size: integer; enc: PAVCodecContext; encode: integer); + cdecl; external av__codec; + +(** + * Sets the fields of the given AVCodecContext to default values. + * + * @param s The AVCodecContext of which the fields should be set to default values. + *) +procedure avcodec_get_context_defaults (s: PAVCodecContext); + cdecl; external av__codec; + +{$IF LIBAVCODEC_VERSION >= 51039000} // 51.39.0 +(** 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: TCodecType); + cdecl; external av__codec; +{$IFEND} + +(** + * Allocates an AVCodecContext and sets its fields to default values. The + * resulting struct can be deallocated by simply calling av_free(). + * + * @return An AVCodecContext filled with default values or NULL on failure. + * @see avcodec_get_context_defaults + *) +function avcodec_alloc_context(): PAVCodecContext; + cdecl; external av__codec; + +{$IF LIBAVCODEC_VERSION >= 51039000} // 51.39.0 +(** 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: TCodecType): PAVCodecContext; + cdecl; external av__codec; +{$IFEND} + +(** + * Sets the fields of the given AVFrame to default values. + * + * @param pic The AVFrame of which the fields should be set to default values. + *) +procedure avcodec_get_frame_defaults (pic: PAVFrame); + cdecl; external av__codec; + +(** + * Allocates an AVFrame and sets its fields to default values. The resulting + * struct can be deallocated by simply calling av_free(). + * + * @return An AVFrame filled with default values or NULL on failure. + * @see avcodec_get_frame_defaults + *) +function avcodec_alloc_frame(): PAVFrame; + cdecl; external av__codec; + +function avcodec_default_get_buffer (s: PAVCodecContext; pic: PAVFrame): integer; + cdecl; external av__codec; +procedure avcodec_default_release_buffer (s: PAVCodecContext; pic: PAVFrame); + cdecl; external av__codec; +function avcodec_default_reget_buffer (s: PAVCodecContext; pic: PAVFrame): integer; + cdecl; external av__codec; +procedure avcodec_align_dimensions(s: PAVCodecContext; width: Pinteger; height: PInteger); + cdecl; external av__codec; + +(** + * Checks if the given dimension of a picture is valid, meaning that all + * bytes of the picture can be addressed with a signed int. + * + * @param[in] w Width of the picture. + * @param[in] h Height of the picture. + * @return Zero if valid, a negative value if invalid. + *) +function avcodec_check_dimensions (av_log_ctx: pointer; w: cardinal; h: cardinal): integer; + cdecl; external av__codec; +function avcodec_default_get_format(s: PAVCodecContext; const fmt: PAVPixelFormat): TAVPixelFormat; + cdecl; external av__codec; + +function avcodec_thread_init (s: PAVCodecContext; thread_count: integer): integer; + cdecl; external av__codec; +procedure avcodec_thread_free (s: PAVCodecContext); + cdecl; external av__codec; +function avcodec_thread_execute (s: PAVCodecContext; func: TExecuteFunc; arg: PPointer; ret: Pinteger; count: integer): integer; + cdecl; external av__codec; +function avcodec_default_execute (s: PAVCodecContext; func: TExecuteFunc; arg: PPointer; ret: Pinteger; count: integer): integer; + cdecl; external av__codec; +//FIXME func typedef + +(** + * Initializes the AVCodecContext to use the given AVCodec. Prior to using this + * function the context has to be allocated. + * + * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), + * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for + * retrieving a codec. + * + * @warning This function is not thread safe! + * + * @code + * avcodec_register_all(); + * codec = avcodec_find_decoder(CODEC_ID_H264); + * if (!codec) + * exit(1); + * + * context = avcodec_alloc_context(); + * + * if (avcodec_open(context, codec) < 0) + * exit(1); + * @endcode + * + * @param avctx The context which will be set up to use the given codec. + * @param codec The codec to use within the context. + * @return zero on success, a negative value on error + * @see avcodec_alloc_context, avcodec_find_decoder, avcodec_find_encoder + *) +function avcodec_open (avctx: PAVCodecContext; codec: PAVCodec): integer; + cdecl; external av__codec; + +(** + * @deprecated Use avcodec_decode_audio2() instead. + *) +function avcodec_decode_audio (avctx: PAVCodecContext; samples: Pword; + var frame_size_ptr: integer; + buf: pchar; buf_size: integer): integer; + cdecl; external av__codec; + +{$IF LIBAVCODEC_VERSION >= 51030000} // 51.30.0 +(** + * Decodes an audio frame from \p buf into \p samples. + * The avcodec_decode_audio2() function decodes an audio frame from the input + * buffer \p buf of size \p buf_size. To decode it, it makes use of the + * audio codec which was coupled with \p avctx using avcodec_open(). The + * resulting decoded frame is stored in output buffer \p samples. If no frame + * could be decompressed, \p frame_size_ptr is zero. Otherwise, it is the + * decompressed frame size in \e bytes. + * + * @warning You \e must set \p frame_size_ptr to the allocated size of the + * output buffer before calling avcodec_decode_audio2(). + * + * @warning The input buffer must be \c FF_INPUT_BUFFER_PADDING_SIZE larger than + * the actual read bytes because some optimized bitstream readers read 32 or 64 + * bits at once and could read over the end. + * + * @warning The end of the input buffer \p buf should be set to 0 to ensure that + * no overreading happens for damaged MPEG streams. + * + * @note You might have to align the input buffer \p buf and output buffer \p + * 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 + * it will work but it will have an impact on performance. In practice, the + * bitstream should have 4 byte alignment at minimum and all sample data should + * be 16 byte aligned unless the CPU doesn't need it (AltiVec and SSE do). If + * the linesize is not a multiple of 16 then there's no sense in aligning the + * start of the buffer to 16. + * + * @param avctx the codec context + * @param[out] samples the output buffer + * @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. + *) +function avcodec_decode_audio2(avctx : PAVCodecContext; samples : PSmallint; + var frame_size_ptr : integer; + buf: pchar; buf_size: integer): integer; + cdecl; external av__codec; +{$IFEND} + +(** + * Decodes a video frame from \p buf into \p picture. + * The avcodec_decode_video() function decodes a video frame from the input + * buffer \p buf of size \p buf_size. To decode it, it makes use of the + * video codec which was coupled with \p avctx using avcodec_open(). The + * resulting decoded frame is stored in \p picture. + * + * @warning The input buffer must be \c FF_INPUT_BUFFER_PADDING_SIZE larger than + * the actual read bytes because some optimized bitstream readers read 32 or 64 + * bits at once and could read over the end. + * + * @warning The end of the input buffer \p buf should be set to 0 to ensure that + * no overreading happens for damaged MPEG streams. + * + * @note You might have to align the input buffer \p buf and output buffer \p + * 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 + * it will work but it will have an impact on performance. In practice, the + * bitstream should have 4 byte alignment at minimum and all sample data should + * be 16 byte aligned unless the CPU doesn't need it (AltiVec and SSE do). If + * the linesize is not a multiple of 16 then there's no sense in aligning the + * start of the buffer to 16. + * + * @param avctx the codec context + * @param[out] picture The AVFrame in which the decoded video frame will be stored. + * @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. + *) +function avcodec_decode_video (avctx: PAVCodecContext; picture: PAVFrame; + var got_picture_ptr: integer; + buf: PByte; buf_size: integer): integer; + cdecl; external av__codec; + +(* Decode a subtitle message. Return -1 if error, otherwise return the + * number of bytes used. If no subtitle could be decompressed, + * got_sub_ptr is zero. Otherwise, the subtitle is stored in *sub. *) +function avcodec_decode_subtitle (avctx: PAVCodecContext; sub: PAVSubtitle; + var got_sub_ptr: integer; + {const} buf: pchar; buf_size: integer): integer; + cdecl; external av__codec; +function avcodec_parse_frame (avctx: PAVCodecContext; pdata: PPointer; + data_size_ptr: pinteger; + buf: pchar; buf_size: integer): integer; + cdecl; external av__codec; + +(** + * Encodes an audio frame from \p samples into \p buf. + * The avcodec_encode_audio() function encodes an audio frame from the input + * buffer \p samples. To encode it, it makes use of the audio codec which was + * coupled with \p avctx using avcodec_open(). The resulting encoded frame is + * stored in output buffer \p buf. + * + * @note The output buffer should be at least \c FF_MIN_BUFFER_SIZE bytes large. + * + * @param avctx the codec context + * @param[out] buf the output buffer + * @param[in] buf_size the output buffer size + * @param[in] samples the input buffer containing the samples + * The number of samples read from this buffer is frame_size*channels, + * both of which are defined in \p avctx. + * @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: integer; {const} samples: PWord): integer; + cdecl; external av__codec; + +(** + * Encodes a video frame from \p pict into \p buf. + * The avcodec_encode_video() function encodes a video frame from the input + * \p pict. To encode it, it makes use of the video codec which was coupled with + * \p avctx using avcodec_open(). The resulting encoded bytes representing the + * frame are stored in the output buffer \p buf. The input picture should be + * stored using a specific format, namely \c avctx.pix_fmt. + * + * @param avctx the codec context + * @param[out] buf the output buffer for the bitstream of encoded frame + * @param[in] buf_size the size of the output buffer in bytes + * @param[in] pict the input picture to encode + * @return On error a negative value is returned, on success zero or the number + * of bytes used from the input buffer. + *) +function avcodec_encode_video (avctx: PAVCodecContext; buf: PByte; + buf_size: integer; pict: PAVFrame): integer; + cdecl; external av__codec; +function avcodec_encode_subtitle (avctx: PAVCodecContext; buf: pchar; + buf_size: integer; {const} sub: PAVSubtitle): integer; + cdecl; external av__codec; + +function avcodec_close (avctx: PAVCodecContext): integer; + cdecl; external av__codec; + +procedure avcodec_register_all (); + cdecl; external av__codec; + +(** + * Flush buffers, should be called when seeking or when switching to a different stream. + *) +procedure avcodec_flush_buffers (avctx: PAVCodecContext); + cdecl; external av__codec; + +procedure avcodec_default_free_buffers (s: PAVCodecContext); + cdecl; external av__codec; + +(* misc useful functions *) + +(** + * Returns a single letter to describe the given picture type \p pict_type. + * + * @param[in] pict_type the picture type + * @return A single character representing the picture type. + *) +function av_get_pict_type_char (pict_type: integer): char; + cdecl; external av__codec; + +(** + * Returns codec bits per sample. + * + * @param[in] codec_id the codec + * @return Number of bits per sample or zero if unknown for the given codec. + *) +function av_get_bits_per_sample (codec_id: TCodecID): integer; + cdecl; external av__codec; + +{$IF LIBAVCODEC_VERSION >= 51041000} // 51.41.0 +(** + * Returns sample format bits per sample. + * + * @param[in] sample_fmt the sample format + * @return Number of bits per sample or zero if unknown for the given sample format. + *) +function av_get_bits_per_sample_format(sample_fmt: TSampleFormat): integer; + cdecl; external av__codec; +{$IFEND} + +const + AV_PARSER_PTS_NB = 4; + PARSER_FLAG_COMPLETE_FRAMES = $0001; + +type + {* frame parsing *} + PAVCodecParserContext = ^TAVCodecParserContext; + PAVCodecParser = ^TAVCodecParser; + + TAVCodecParserContext = record + priv_data: pointer; + parser: PAVCodecParser; + frame_offset: int64; (* offset of the current frame *) + cur_offset: int64; (* current offset (incremented by each av_parser_parse()) *) + last_frame_offset: int64; (* offset of the last frame *) + (* video info *) + pict_type: integer; (* XXX: put it back in AVCodecContext *) + repeat_pict: integer; (* XXX: put it back in AVCodecContext *) + pts: int64; (* pts of the current frame *) + dts: int64; (* dts of the current frame *) + + (* private data *) + last_pts: int64; + last_dts: int64; + fetch_timestamp: integer; + + cur_frame_start_index: integer; + cur_frame_offset: array [0..AV_PARSER_PTS_NB - 1] of int64; + cur_frame_pts: array [0..AV_PARSER_PTS_NB - 1] of int64; + cur_frame_dts: array [0..AV_PARSER_PTS_NB - 1] of int64; + + flags: integer; + + {$IF LIBAVCODEC_VERSION >= 51040003} // 51.40.3 + offset: int64; ///< byte offset from starting packet start + last_offset: int64; + {$IFEND} + end; + + TAVCodecParser = record + codec_ids: array [0..4] of integer; (* several codec IDs are permitted *) + priv_data_size: integer; + parser_init: function (s: PAVCodecParserContext): integer; cdecl; + parser_parse: function (s: PAVCodecParserContext; avctx: PAVCodecContext; + {const} poutbuf: PPointer; poutbuf_size: PInteger; + {const} buf: pchar; buf_size: integer): integer; cdecl; + parser_close: procedure (s: PAVCodecParserContext); cdecl; + split: function (avctx: PAVCodecContext; {const} buf: pchar; + buf_size: integer): integer; cdecl; + next: PAVCodecParser; + end; + + +{$IF LIBAVCODEC_VERSION < 52000000} // 52.0.0 +{ +var + av_first_parser: PAVCodecParser; external av__codec; +} +{$IFEND} + +{$IF LIBAVCODEC_VERSION >= 51049000} // 51.49.0 +function av_parser_next(c: PAVCodecParser): PAVCodecParser; + cdecl; external av__codec; +{$IFEND} + +procedure av_register_codec_parser (parser: PAVCodecParser); + cdecl; external av__codec; + +function av_parser_init (codec_id: integer): PAVCodecParserContext; + cdecl; external av__codec; + +function av_parser_parse (s: PAVCodecParserContext; + avctx: PAVCodecContext; + poutbuf: PPointer; poutbuf_size: pinteger; + const buf: pchar; buf_size: integer; + pts: int64; dts: int64): integer; + cdecl; external av__codec; +function av_parser_change (s: PAVCodecParserContext; + avctx: PAVCodecContext; + poutbuf: PPointer; poutbuf_size: PInteger; + const buf: pchar; buf_size: integer; keyframe: integer): integer; + cdecl; external av__codec; +procedure av_parser_close (s: PAVCodecParserContext); + cdecl; external av__codec; + +type + PAVBitStreamFilterContext = ^TAVBitStreamFilterContext; + PAVBitStreamFilter = ^TAVBitStreamFilter; + + TAVBitStreamFilterContext = record + priv_data: pointer; + filter: PAVBitStreamFilter; + parser: PAVCodecParserContext; + next: PAVBitStreamFilterContext; + end; + + TAVBitStreamFilter = record + name: pchar; + priv_data_size: integer; + filter: function (bsfc: PAVBitStreamFilterContext; + avctx: PAVCodecContext; args: pchar; + poutbuf: PPointer; poutbuf_size: PInteger; + buf: PByte; buf_size: integer; keyframe: integer): integer; cdecl; + {$IF LIBAVCODEC_VERSION >= 51043000} // 51.43.0 + close: procedure (bsfc: PAVBitStreamFilterContext); + {$IFEND} + next: PAVBitStreamFilter; + end; + +procedure av_register_bitstream_filter (bsf: PAVBitStreamFilter); + cdecl; external av__codec; + +function av_bitstream_filter_init (name: pchar): PAVBitStreamFilterContext; + cdecl; external av__codec; + +function av_bitstream_filter_filter (bsfc: PAVBitStreamFilterContext; + avctx: PAVCodecContext; args: pchar; + poutbuf: PPointer; poutbuf_size: PInteger; + buf: PByte; buf_size: integer; keyframe: integer): integer; + cdecl; external av__codec; +procedure av_bitstream_filter_close (bsf: PAVBitStreamFilterContext); + cdecl; external av__codec; + +{$IF LIBAVCODEC_VERSION >= 51049000} // 51.49.0 +function av_bitstream_filter_next(f: PAVBitStreamFilter): PAVBitStreamFilter; + cdecl; external av__codec; +{$IFEND} + +(* memory *) + +(** + * Reallocates the given block if it is not large enough, otherwise it + * does nothing. + * + * @see av_realloc + *) +procedure av_fast_realloc (ptr: pointer; size: PCardinal; min_size: Cardinal); + cdecl; external av__codec; + +(* for static data only *) + +(** + * Frees all static arrays and resets their pointers to 0. + * Call this function to release all statically allocated tables. + * + * @deprecated. Code which uses av_free_static is broken/misdesigned + * and should correctly use static arrays + * + *) +procedure av_free_static (); + cdecl; external av__codec; deprecated; + +(** + * Allocation of static arrays. + * + * @warning Do not use for normal allocation. + * + * @param[in] size The amount of memory you need in bytes. + * @return block of memory of the requested size + * @deprecated. Code which uses av_mallocz_static is broken/misdesigned + * and should correctly use static arrays + *) +procedure av_mallocz_static(size: cardinal); + cdecl; external av__codec; deprecated; + +{$IF LIBAVCODEC_VERSION < 51035000} // 51.35.0 +procedure av_realloc_static(ptr: pointer; size: Cardinal); + cdecl; external av__codec; +{$IFEND} + +{$IF LIBAVCODEC_VERSION >= 51039000} // 51.39.0 +(** + * Copy image 'src' to 'dst'. + *) +procedure av_picture_copy(dst: PAVPicture; {const} src: PAVPicture; + pix_fmt: integer; width: integer; height: integer); + cdecl; external av__codec; + +(** + * Crop image top and left side. + *) +function av_picture_crop(dst: PAVPicture; {const} src: PAVPicture; + pix_fmt: integer; top_band: integer; left_band: integer): integer; + cdecl; external av__codec; + +(** + * Pad image. + *) +function av_picture_pad(dst: PAVPicture; {const} src: PAVPicture; height: integer; width: integer; pix_fmt: integer; + padtop: integer; padbottom: integer; padleft: integer; padright: integer; color: PInteger): integer; + cdecl; external av__codec; +{$IFEND} + +{$IF LIBAVCODEC_VERSION < 52000000} // 52.0.0 +(** + * @deprecated Use the software scaler (swscale) instead. + *) +procedure img_copy (dst: PAVPicture; const src: PAVPicture; + pix_fmt: TAVPixelFormat; width: integer; height: integer); + cdecl; external av__codec; deprecated; + +(** + * @deprecated Use the software scaler (swscale) instead. + *) +function img_crop (dst: PAVPicture; const src: PAVPicture; + pix_fmt: TAVPixelFormat; top_band, left_band: integer): integer; + cdecl; external av__codec; deprecated; + +(** + * @deprecated Use the software scaler (swscale) instead. + *) +function img_pad (dst: PAVPicture; const src: PAVPicture; height, width: integer; + pix_fmt: TAVPixelFormat; padtop, padbottom, padleft, padright: integer; + color: PInteger): integer; + cdecl; external av__codec; deprecated; +{$IFEND} + +function av_xiphlacing(s: PByte; v: Cardinal): Cardinal; + cdecl; external av__codec; + +{$IF LIBAVCODEC_VERSION >= 51041000} // 51.41.0 +(** + * Parses \p str and put in \p width_ptr and \p height_ptr the detected values. + * + * @return 0 in case of a successful parsing, a negative value otherwise + * @param[in] str the string to parse: it has to be a string in the format + * <width>x<height> or a valid video frame size abbreviation. + * @param[in,out] width_ptr pointer to the variable which will contain the detected + * frame width value + * @param[in,out] height_ptr pointer to the variable which will contain the detected + * frame height value + *) +function av_parse_video_frame_size(width_ptr: PInteger; height_ptr: PInteger; {const} str: PChar): integer; + cdecl; external av__codec; + +(** + * Parses \p str and put in \p frame_rate the detected values. + * + * @return 0 in case of a successful parsing, a negative value otherwise + * @param[in] str the string to parse: it has to be a string in the format + * <frame_rate_nom>/<frame_rate_den>, a float number or a valid video rate abbreviation + * @param[in,out] frame_rate pointer to the AVRational which will contain the detected + * frame rate + *) +function av_parse_video_frame_rate(frame_rate: PAVRational; {const} str: PChar): integer; + cdecl; external av__codec; +{$IFEND} + +(* +{* error handling *} +#if EINVAL > 0 +#define AVERROR(e) (-(e)) {**< Returns a negative error code from a POSIX error code, to return from library functions. *} +#define AVUNERROR(e) (-(e)) {**< Returns a POSIX error code from a library function error return value. *} +#else +{* Some platforms have E* and errno already negated. *} +#define AVERROR(e) (e) +#define AVUNERROR(e) (e) +#endif + +const + AVERROR_UNKNOWN AVERROR(EINVAL) {**< unknown error *} + AVERROR_IO AVERROR(EIO) {**< I/O error *} + AVERROR_NUMEXPECTED AVERROR(EDOM) {**< Number syntax expected in filename. *} + AVERROR_INVALIDDATA AVERROR(EINVAL) {**< invalid data found *} + AVERROR_NOMEM AVERROR(ENOMEM) {**< not enough memory *} + AVERROR_NOFMT AVERROR(EILSEQ) {**< unknown format *} + AVERROR_NOTSUPP AVERROR(ENOSYS) {**< Operation not supported. *} + AVERROR_NOENT AVERROR(ENOENT) {**< No such file or directory. *} + AVERROR_PATCHWELCOME -MKTAG('P','A','W','E') {**< Not yet implemented in FFmpeg. Patches welcome. *} +*) + +const + AVERROR_UNKNOWN =(-1); (* unknown error *) + AVERROR_IO =(-2); (* i/o error *) + AVERROR_NUMEXPECTED =(-3); (* number syntax expected in filename *) + AVERROR_INVALIDDATA =(-4); (* invalid data found *) + AVERROR_NOMEM =(-5); (* not enough memory *) + AVERROR_NOFMT =(-6); (* unknown format *) + AVERROR_NOTSUPP =(-7); (* operation not supported *) + +implementation + +end. diff --git a/Game/Code/lib/ffmpeg/avformat.pas b/Game/Code/lib/ffmpeg/avformat.pas index bcd7861c..41d964bb 100644 --- a/Game/Code/lib/ffmpeg/avformat.pas +++ b/Game/Code/lib/ffmpeg/avformat.pas @@ -1,188 +1,298 @@ - (* +(* * copyright (c) 2001 Fabrice Bellard * - * This library is free software; you can redistribute it and/or + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. + * version 2.1 of the License, or (at your option) any later version. * - * This library is distributed in the hope that it will be useful, + * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software + * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - *) + *) (* This is a part of Pascal porting of ffmpeg. Originally by Victor Zinetz for Delphi and Free Pascal on Windows. -For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT -in the source codes *) + * For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes *) + +// Min. version: 50.5.0 +// Max. version: 52.5.0, Revision: 11574 unit avformat; {$IFDEF FPC} - {$IFDEF LINUX} - {$LINKLIB libavutil} - {$LINKLIB libavformat} - {$ENDIF} - - {$MODE DELPHI } (* CAT *) - {$PACKENUM 4} (* every enum type variables uses 4 bytes, CAT *) - {$PACKRECORDS C} (* GCC compatible, Record Packing, CAT *) + {$MODE DELPHI } + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) {$ENDIF} interface uses avcodec, + avutil, avio, rational, - avutil; (* CAT *) - -{$I version.inc} + UConfig; const - MAXINT64 = $7fffffffffffffff; - MININT64 = $8000000000000000; + (* Max. supported version by this header *) + LIBAVFORMAT_MAX_VERSION_MAJOR = 52; + LIBAVFORMAT_MAX_VERSION_MINOR = 5; + LIBAVFORMAT_MAX_VERSION_RELEASE = 0; + LIBAVFORMAT_MAX_VERSION = (LIBAVFORMAT_MAX_VERSION_MAJOR * VERSION_MAJOR) + + (LIBAVFORMAT_MAX_VERSION_MINOR * VERSION_MINOR) + + (LIBAVFORMAT_MAX_VERSION_RELEASE * VERSION_RELEASE); + +(* Check if linked versions are supported *) +{$IF (LIBAVFORMAT_VERSION > LIBAVFORMAT_MAX_VERSION)} + {$MESSAGE Warn 'Linked version of libavformat may be unsupported!'} +{$IFEND} + +type + PAVFile = Pointer; +(* packet functions *) + +type + PAVPacket = ^TAVPacket; + TAVPacket = record + pts: int64; ///< presentation time stamp in time_base units + dts: int64; ///< decompression time stamp in time_base units + data: PByte; + size: integer; + stream_index: integer; + flags: integer; + duration: integer; ///< presentation duration in time_base units (0 if not available) + destruct: procedure (p: PAVPacket); cdecl; + priv: pointer; + pos: int64; ///< byte position in stream, -1 if unknown + end; +const PKT_FLAG_KEY = $0001; +procedure av_destruct_packet_nofree (var pkt: TAVPacket); + cdecl; external av__format; + +(** + * Default packet destructor. + *) +procedure av_destruct_packet (var pkt: TAVPacket); + cdecl; external av__format; + +(** + * Initialize optional fields of a packet to default values. + * + * @param pkt packet + *) +procedure av_init_packet (var pkt: TAVPacket); +{$IF LIBAVFORMAT_VERSION >= 51012002} // 51.12.2 + cdecl; external av__format; +{$IFEND} + +(** + * Allocate the payload of a packet and initialize its fields to default values. + * + * @param pkt packet + * @param size wanted payload size + * @return 0 if OK. AVERROR_xxx otherwise. + *) +function av_new_packet(var pkt: TAVPacket; size: integer): integer; + cdecl; external av__format; + +(** + * Allocate and read the payload of a packet and initialize its fields to default values. + * + * @param pkt packet + * @param size wanted payload size + * @return >0 (read size) if OK. AVERROR_xxx otherwise. + *) +function av_get_packet (s: PByteIOContext; var pkt: TAVPacket; size: integer): integer; + cdecl; external av__format; + +(** + * @warning This is a hack - the packet memory allocation stuff is broken. The + * packet is allocated if it was not really allocated + *) +function av_dup_packet (pkt: PAVPacket): integer; + cdecl; external av__format; + +(** + * Free a packet + * + * @param pkt packet to free + *) +procedure av_free_packet (pkt: PAVPacket); inline; + +(*************************************************) +(* fractional numbers for exact pts handling *) + +type + (** + * the exact value of the fractional number is: 'val + num / den'. + * num is assumed to be such as 0 <= num < den + * @deprecated Use AVRational instead + *) + PAVFrac = ^TAVFrac; + TAVFrac = record + val, num, den: int64; + end; {deprecated} + (*************************************************) (* input/output formats *) +type + (* this structure contains the data a format has to probe a file *) + TAVProbeData = record + filename: pchar; + buf: pchar; + buf_size: integer; + end; + +const AVPROBE_SCORE_MAX = 100; ///< max 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 - AVFMT_NOFILE = $0001; - AVFMT_NEEDNUMBER = $0002; (**< needs '%d' in filename *) - AVFMT_SHOW_IDS = $0008; (**< show format stream IDs numbers *) - AVFMT_RAWPICTURE = $0020; (**< format wants AVPicture structure for + //! demuxer will use url_fopen, 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 *) + AVFMT_RAWPICTURE = $0020; (**< format wants AVPicture structure for raw picture data *) - AVFMT_GLOBALHEADER = $0040; (**< format wants global header *) - AVFMT_NOTIMESTAMPS = $0080; (**< format does not need / have any timestamps *) + AVFMT_GLOBALHEADER = $0040; (**< format wants global header *) + AVFMT_NOTIMESTAMPS = $0080; (**< format does not need / have any timestamps *) AVFMT_GENERIC_INDEX = $0100; (**< use generic index building code *) + // used by AVIndexEntry AVINDEX_KEYFRAME = $0001; - MAX_REORDER_DELAY = 4; - AVFMTCTX_NOHEADER = $0001; (**< signal that no header is present (streams are added dynamically) *) MAX_STREAMS = 20; + AVFMT_NOOUTPUTLOOP = -1; AVFMT_INFINITEOUTPUTLOOP = 0; AVFMT_FLAG_GENPTS = $0001; ///< generate pts if missing even if it requires parsing future frames AVFMT_FLAG_IGNIDX = $0002; ///< ignore index AVFMT_FLAG_NONBLOCK = $0004; ///< do not block when reading packets from input + // used by AVStream + MAX_REORDER_DELAY = 4; + + // used by TAVProgram + AV_PROGRAM_RUNNING = 1; + type - HFILE = THandle; /// (* CAT *) - int = integer; + PPAVCodecTag = ^PAVCodecTag; + PAVCodecTag = Pointer; - PAVPacket = ^TAVPacket; - PAVImageFormat = ^TAVImageFormat; + PPAVFormatContext = ^PAVFormatContext; PAVFormatContext = ^TAVFormatContext; + PAVFormatParameters = ^TAVFormatParameters; + PAVOutputFormat = ^TAVOutputFormat; PAVProbeData = ^TAVProbeData; + PAVInputFormat = ^TAVInputFormat; PAVIndexEntry = ^TAVIndexEntry; + PAVStream = ^TAVStream; PAVPacketList = ^TAVPacketList; - PAVImageInfo = ^TAVImageInfo; - TAVPacket = record {56} - pts: int64; ///< presentation time stamp in time_base units - dts: int64; ///< decompression time stamp in time_base units - data: PByte; - size: integer; - stream_index: integer; - flags: integer; - duration: integer; ///< presentation duration in time_base units (0 if not available) - destruct: procedure (p: PAVPacket); cdecl; (* This cannot be var : TAVPacket. - because TAVPacket is not completely defined yet *) - priv: pointer; - pos: int64 ///< byte position in stream, -1 if unknown - end; - -(*************************************************) -(* fractional numbers for exact pts handling *) - -(* the exact value of the fractional number is: 'val + num / den'. num - is assumed to be such as 0 <= num < den *) - PAVFrac = ^TAVFrac; - TAVFrac = record - val, num, den: int64; - end; + PPAVProgram = ^PAVProgram; + PAVProgram = ^TAVProgram; -(* this structure contains the data a format has to probe a file *) - TAVProbeData = record {12} - filename: pchar; - buf: pchar; - buf_size: integer; - end; + {$IF LIBAVFORMAT_VERSION < 51006000} // 51.6.0 + PAVImageFormat = ^TAVImageFormat; + PAVImageInfo = ^TAVImageInfo; + {$IFEND} - TAVFormatParameters = record {56} - time_base: TAVRational; (* 8 bytes *) + TAVFormatParameters = record + time_base: TAVRational; sample_rate: integer; channels: integer; width: integer; height: integer; pix_fmt: TAVPixelFormat; -{ image_format: PAVImageFormat; (* 4 bytes *)} (* CAT#3 *) + {$IF LIBAVFORMAT_VERSION < 51006000} // 51.6.0 + image_format: PAVImageFormat; + {$IFEND} channel: integer; (* used to select dv channel *) + {$IF LIBAVFORMAT_VERSION_MAJOR < 52} device: pchar; (* video, audio or DV device, if LIBAVFORMAT_VERSION_INT < (52<<16) *) + {$IFEND} standard: pchar; (* tv standard, NTSC, PAL, SECAM *) -// int mpeg2ts_raw:1; (* force raw MPEG2 transport stream output, if possible *) -// int mpeg2ts_compute_pcr:1; (* compute exact PCR for each transport -// stream packet (only meaningful if -// mpeg2ts_raw is TRUE *) -// int initial_pause:1; (* do not begin to play the stream -// immediately (RTSP only) *) -// int prealloced_context:1; - dummy: byte; + { Delphi does not support bit fields -> use bf_flags instead + int mpeg2ts_raw:1; (* force raw MPEG2 transport stream output, if possible *) + int mpeg2ts_compute_pcr:1; (* compute exact PCR for each transport + stream packet (only meaningful if + mpeg2ts_raw is TRUE *) + int initial_pause:1; (* do not begin to play the stream + immediately (RTSP only) *) + int prealloced_context:1; + } + bf_flags: byte; // 0:mpeg2ts_raw/1:mpeg2ts_compute_pcr/2:initial_pause/3:prealloced_context + {$IF LIBAVFORMAT_VERSION_MAJOR < 53} video_codec_id: TCodecID; audio_codec_id: TCodecID; + {$IFEND} end; - TAVOutputFormat = record {56} + TAVOutputFormat = record name: pchar; long_name: pchar; mime_type: pchar; - extensions: pchar; (* comma separated extensions *) + extensions: pchar; (*< comma separated filename extensions *) (* size of private data so that it can be allocated in the wrapper *) priv_data_size: integer; (* output support *) audio_codec: TCodecID; (* default audio codec *) video_codec: TCodecID; (* default video codec *) write_header: function (c: PAVFormatContext): integer; cdecl; - write_packet: function (c: PAVFormatContext; var pkt: TAVPacket): integer; cdecl; (* CAT#2 *) + write_packet: function (c: PAVFormatContext; pkt: PAVPacket): integer; cdecl; write_trailer: function (c: PAVFormatContext): integer; cdecl; (* can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER *) flags: integer; (* currently only used to set pixel format if not YUV420P *) set_parameters: function (c: PAVFormatContext; f: PAVFormatParameters): integer; cdecl; - interleave_packet: function (s: PAVFormatContext; _out: PAVPacket; _in: PAVPacket; flush: integer): integer; cdecl; + interleave_packet: function (s: PAVFormatContext; out_: PAVPacket; in_: PAVPacket; flush: integer): integer; cdecl; + {$IF LIBAVFORMAT_VERSION >= 51008000} // 51.8.0 (** * list of supported codec_id-codec_tag pairs, ordered by "better choice first" * the arrays are all CODEC_ID_NONE terminated *) - //const struct AVCodecTag **codec_tag; + codec_tag: {const} PPAVCodecTag; + {$IFEND} + + {$IF LIBAVFORMAT_VERSION >= 51012002} // 51.12.2 + subtitle_codec: TCodecID; (**< default subtitle codec *) + {$IFEND} (* private fields *) next: PAVOutputFormat; end; - TAVInputFormat = record {60} + TAVInputFormat = record name: pchar; long_name: pchar; (* size of private data so that it can be allocated in the wrapper *) priv_data_size: integer; - (* tell if a given file has a chance of being parsing by this format *) + (** + * Tell if a given file has a chance of being parsed by this format. + * The buffer provided is guaranteed to be AVPROBE_PADDING_SIZE bytes + * big so you do not have to check for that unless you need more. + *) read_probe: function (p: PAVProbeData): integer; cdecl; (* read the format header and initialize the AVFormatContext structure. Return 0 if OK. 'ap' if non NULL contains @@ -196,16 +306,22 @@ type (* close the stream. The AVFormatContext and AVStreams are not freed by this function *) read_close: function (c: PAVFormatContext): integer; cdecl; - (*** seek to a given timestamp relative to the frames in + (** + * seek to a given timestamp relative to the frames in * stream component stream_index * @param stream_index must not be -1 * @param flags selects which direction should be preferred if no exact - * match is available *) + * match is available + * @return >= 0 on success (but not necessarily the new offset) + *) read_seek: function (c: PAVFormatContext; stream_index: integer; timestamp: int64; flags: integer): integer; cdecl; - (*** gets the next timestamp in AV_TIME_BASE units. *) + (** + * gets the next timestamp in stream[stream_index].time_base units. + * @return the timestamp or AV_NOPTS_VALUE if an error occured + *) read_timestamp: function (s: PAVFormatContext; stream_index: integer; - pos: pint64; pos_limit: int64): integer; cdecl; + pos: pint64; pos_limit: int64): int64; cdecl; (* can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER *) flags: integer; (* if extensions are defined, then no probe is done. You should @@ -221,7 +337,9 @@ type (* pause playing - only meaningful if using a network based format (RTSP) *) read_pause: function (c: PAVFormatContext): integer; cdecl; - //const struct AVCodecTag **codec_tag; + {$IF LIBAVFORMAT_VERSION >= 51008000} // 51.8.0 + codec_tag: {const} PPAVCodecTag; + {$IFEND} (* private fields *) next: PAVInputFormat; @@ -232,55 +350,84 @@ type AVSTREAM_PARSE_FULL, (**< full parsing and repack *) AVSTREAM_PARSE_HEADERS, (**< only parse headers, don't repack *) AVSTREAM_PARSE_TIMESTAMPS (**< full parsing and interpolation of timestamps for frames not starting on packet boundary *) - ); + ); - TAVIndexEntry = record {24} + TAVIndexEntry = record pos: int64; timestamp: int64; -(* the following 2 flags indicate that the next/prev keyframe is known, and scaning for it isnt needed *) - flags: integer; -// int flags:2; -// int size:30; //Yeah, trying to keep the size of this small to reduce memory requirements (it is 24 vs 32 byte due to possible 8byte align). + { 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 byte due to possible 8byte align). + } + flags_size: cardinal; // 0..1: flags, 2..31: size min_distance: integer; (* min distance between this and the previous keyframe, used to avoid unneeded searching *) end; - TAVStream = record {168} - index: integer; (* stream index in AVFormatContext *) {4-4} - id: integer; (* format specific stream id *) {4-8} - codec: PAVCodecContext; (* codec context *) {4-12} - (*** real base frame rate of the stream. - * for example if the timebase is 1/90000 and all frames have either - * approximately 3600 or 1800 timer ticks then r_frame_rate will be 50/1 *) - r_frame_rate: TAVRational; {4*2=8-20} - priv_data: pointer; {4-24} + (** + * Stream 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. + * sizeof(AVStream) must not be used outside libav*. + *) + TAVStream = record + index: integer; (* stream index in AVFormatContext *) + id: integer; (* format specific stream id *) + codec: PAVCodecContext; (* codec context *) + (** + * Real base frame rate of the stream. + * This is the lowest frame rate with which all timestamps can be + * represented accurately (it is the least common multiple of all + * frame rates in the stream), Note, this value is just a guess! + * For example if the timebase is 1/90000 and all frames have either + * approximately 3600 or 1800 timer ticks then r_frame_rate will be 50/1. + *) + r_frame_rate: TAVRational; + priv_data: pointer; + (* internal data used in av_find_stream_info() *) - codec_info_duration: int64; (* #if LIBAVFORMAT_VERSION_INT < (52<<16) *) {8-32} - codec_info_nb_frames: integer; (* #if LIBAVFORMAT_VERSION_INT < (52<<16) *) {4-38} - (* encoding: PTS generation when outputing stream *) - pts: TAVFrac; {8*3=24-62} - - (*** this is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. for fixed-fps content, - * timebase should be 1/framerate and timestamp increments should be - * identically 1. *) - time_base: TAVRational; {4*2=8-70} - pts_wrap_bits: integer; (* number of bits in pts (used for wrapping control) *) {4-74} + first_dts: int64; + {$IF LIBAVFORMAT_VERSION_MAJOR < 52} + codec_info_nb_frames: integer; + {$IFEND} + + (** encoding: PTS generation when outputing stream *) + pts: TAVFrac; + (** + * This is the fundamental unit of time (in seconds) in terms + * of which frame timestamps are represented. For fixed-fps content, + * timebase should be 1/frame rate and timestamp increments should be + * identically 1. + *) + time_base: TAVRational; + pts_wrap_bits: integer; (* number of bits in pts (used for wrapping control) *) (* ffmpeg.c private use *) - stream_copy: integer; (* if TRUE, just copy stream *) {4-78} - discard: TAVDiscard; ///< selects which packets can be discarded at will and dont need to be demuxed {4-82} + stream_copy: integer; (**< if set, just copy stream *) + discard: TAVDiscard; ///< selects which packets can be discarded at will and dont need to be demuxed //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: single; {4-86} - (* decoding: position of the first frame of the component, in AV_TIME_BASE fractional seconds. *) - start_time: int64; {8-92} - (* decoding: duration of the stream, in stream time base. *) - duration: int64; {8-100} + quality: single; + (** + * Decoding: pts of the first frame of the stream, 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). + * @note The ASF header does NOT contain a correct start_time the ASF + * demuxer must NOT set this. + *) + start_time: int64; + (** + * Decoding: duration of the stream, in stream time base. + * If a source file does not specify a duration, but does specify + * a bitrate, this value will be estimates from bit rate and file size. + *) + duration: int64; - language: array [0..3] of char; (* ISO 639 3-letter language code (empty string if undefined) *)(* 101 th byte - 1 base *) {4-104} + language: array [0..3] of char; (* ISO 639 3-letter language code (empty string if undefined) *) (* av_read_frame() support *) - need_parsing: TAVStreamParseType;//CAT#3 ///< 1->full parsing needed, 2->only parse headers dont repack + need_parsing: TAVStreamParseType; parser: PAVCodecParserContext; cur_dts: int64; @@ -289,27 +436,35 @@ type (* av_seek_frame() support *) index_entries: PAVIndexEntry; (* only used if the format does not support seeking natively *) nb_index_entries: integer; - index_entries_allocated_size: cardinal; (* CAT#3 *) + index_entries_allocated_size: cardinal; nb_frames: int64; ///< number of frames in this stream if known or 0 + {$IF LIBAVFORMAT_VERSION >= 50006000} // 50.6.0 pts_buffer: array [0..MAX_REORDER_DELAY] of int64 + {$IFEND} end; -(* format I/O context *) - TAVFormatContext = record {3960} + (** + * 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*. + *) + TAVFormatContext = record av_class: PAVClass; (* set by av_alloc_format_context *) (* can only be iformat or oformat, not both at the same time *) iformat: PAVInputFormat; oformat: PAVOutputFormat; priv_data: pointer; - {$IF (LIBAVFORMAT_MAJOR_VERSION >= 52)} + {$IF LIBAVFORMAT_VERSION_MAJOR >= 52} pb: PByteIOContext; {$ELSE} pb: TByteIOContext; {$IFEND} - nb_streams: cardinal; (* CAT#3 *) + nb_streams: cardinal; streams: array [0..MAX_STREAMS - 1] of PAVStream; filename: array [0..1023] of char; (* input or output filename *) (* stream info *) @@ -365,37 +520,97 @@ type flags: integer; loop_input: integer; + + {$IF LIBAVFORMAT_VERSION >= 50006000} // 50.6.0 (* decoding: size of data to probe; encoding unused *) probesize: cardinal; + {$IFEND} + {$IF LIBAVFORMAT_VERSION >= 51009000} // 51.9.0 (** * maximum duration in AV_TIME_BASE units over which the input should be analyzed in av_find_stream_info() *) max_analyze_duration: integer; key: pbyte; - keylen : integer + keylen : integer; + {$IFEND} + + {$IF LIBAVFORMAT_VERSION >= 51014000} // 51.14.0 + nb_programs: cardinal; + programs: PPAVProgram; + {$IFEND} + + {$IF LIBAVFORMAT_VERSION >= 52003000} // 52.3.0 + (** + * Forced video codec_id. + * demuxing: set by user + *) + video_codec_id: TCodecID; + (** + * Forced audio codec_id. + * demuxing: set by user + *) + audio_codec_id: TCodecID; + (** + * Forced subtitle codec_id. + * demuxing: set by user + *) + subtitle_codec_id: TCodecID; + {$IFEND} + + {$IF LIBAVFORMAT_VERSION >= 52004000} // 52.4.0 + (** + * Maximum amount of memory in bytes to use per stream for the index. + * If the needed index exceeds this size entries will be discarded as + * needed to maintain a smaller size. This can lead to slower or less + * accurate seeking (depends on demuxer). + * Demuxers for which a full in memory index is mandatory will ignore + * this. + * muxing : unused + * demuxing: set by user + *) + max_index_size: cardinal; + {$IFEND} end; - TAVPacketList = record {64} + (** + * 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 : integer; + provider_name : PChar; ///< Network name for DVB streams + name : PChar; ///< Service name for DVB streams + flags : integer; + discard : TAVDiscard; ///< selects which program to discard and which to feed to the caller + {$IF LIBAVFORMAT_VERSION >= 51016000} // 51.16.0 + stream_index : PCardinal; + nb_stream_indexes : PCardinal; + {$IFEND} + end; + + TAVPacketList = record pkt: TAVPacket; next: PAVPacketList; end; -(* still image support *) - PAVInputImageContext = pointer; // attribute_deprecated; -// PAVInputImageContext = pointer; //AVInputImageContext attribute_deprecated; +{$IF LIBAVFORMAT_VERSION < 51006000} // 51.6.0 + (* still image support *) + PAVInputImageContext = pointer; {deprecated} -(* still image support *) - TAVImageInfo = record {48} + (* still image support *) + TAVImageInfo = record pix_fmt: TAVPixelFormat; (* requested pixel format *) width: integer; (* requested width *) height: integer; (* requested height *) interleaved: integer; (* image is interleaved (e.g. interleaved GIF) *) pict: TAVPicture; (* returned allocated image *) - end; + end; {deprecated} - TAVImageFormat = record {32} + TAVImageFormat = record name: pchar; extensions: pchar; (* tell if a given file has a chance of being parsing by this format *) @@ -410,134 +625,212 @@ type img_write: function (b: PByteIOContext; i: PAVImageInfo): integer; cdecl; flags: integer; next: PAVImageFormat; - end; - -procedure av_destruct_packet_nofree (var pkt: TAVPacket); (* CAT#2 *) - cdecl; external av__format; -procedure av_destruct_packet (var pkt: TAVPacket); (* CAT#2 *) - cdecl; external av__format; - -(* initialize optional fields of a packet *) -procedure av_init_packet (var pkt: TAVPacket); (* CAT#2 *) - -function av_new_packet(var pkt: TAVPacket; size: integer): integer; (* CAT#2 *) - cdecl; external av__format; - -function av_get_packet (s: PByteIOContext; var pkt: TAVPacket; size: integer): integer; (* CAT#2 *) - cdecl; external av__format; - -function av_dup_packet (pkt: PAVPacket): integer; - cdecl; external av__format; - -(** * Free a packet - * - * @param pkt packet to free *) -procedure av_free_packet (var pkt: TAVPacket); (* CAT#2 *) + end; {deprecated} procedure av_register_image_format (img_fmt: PAVImageFormat); - cdecl; external av__format; + cdecl; external av__format; deprecated; function av_probe_image_format (pd: PAVProbeData): PAVImageFormat; - cdecl; external av__format; + cdecl; external av__format; deprecated; function guess_image_format (filename: pchar): PAVImageFormat; - cdecl; external av__format; - -function av_guess_image2_codec(filename: pchar): TCodecID; - cdecl; external av__format; + cdecl; external av__format; deprecated; function av_read_image (pb: PByteIOContext; filename: pchar; fmt: PAVImageFormat; alloc_cb: pointer; opaque: pointer): integer; - cdecl; external av__format; + cdecl; external av__format; deprecated; function av_write_image(pb: PByteIOContext; fmt: PAVImageFormat; img: PAVImageInfo): integer; + cdecl; external av__format; deprecated; +{$IFEND} + +{$IF LIBAVFORMAT_VERSION_MAJOR < 53} +{ +var + first_iformat: PAVInputFormat; external av__format; + first_oformat: PAVOutputFormat; external av__format; +} +{$IFEND} + +{$IF LIBAVFORMAT_VERSION >= 52003000} // 52.3.0 +function av_iformat_next(f: PAVInputFormat): PAVInputFormat; + cdecl; external av__format; +function av_oformat_next(f: PAVOutputFormat): PAVOutputFormat; + cdecl; external av__format; +{$IFEND} + +function av_guess_image2_codec({const} filename: PChar): TCodecID; cdecl; external av__format; (* XXX: use automatic init with either ELF sections or C file parser *) (* modules *) -//#include "rtp.h" +(* utils.c *) +procedure av_register_input_format (format: PAVInputFormat); + cdecl; external av__format; -//#include "rtsp.h" +procedure av_register_output_format (format: PAVOutputFormat); + cdecl; external av__format; -(* utils.c *) - procedure av_register_input_format (format: PAVInputFormat); - cdecl; external av__format; +function guess_stream_format (short_name: pchar; filename: pchar; mime_type: pchar): PAVOutputFormat; + cdecl; external av__format; - procedure av_register_output_format (format: PAVOutputFormat); - cdecl; external av__format; +function guess_format(short_name: pchar; filename: pchar; mime_type: pchar): PAVOutputFormat; + cdecl; external av__format; - function guess_stream_format (short_name: pchar; filename: pchar; mime_type: pchar): PAVOutputFormat; - cdecl; external av__format; +(** + * Guesses the codec id based upon muxer and filename. + *) +function av_guess_codec(fmt: PAVOutputFormat; short_name: pchar; + filename: pchar; mime_type: pchar; type_: TCodecType): TCodecID; + cdecl; external av__format; - function guess_format(short_name: pchar; filename: pchar; mime_type: pchar): 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 + *) +procedure av_hex_dump (f: PAVFile; buf: pchar; size: integer); + cdecl; external av__format; - function av_guess_codec(fmt: PAVOutputFormat; short_name: pchar; - filename: pchar; mime_type: pchar; _type: TCodecType): TCodecID; - cdecl; external av__format; +{$IF LIBAVFORMAT_VERSION >= 51011000} // 51.11.0 +(** + * 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 + *) +procedure av_hex_dump_log(avcl: Pointer; level: integer; buf: PChar; size: integer); + cdecl; external av__format; +{$IFEND} - procedure av_hex_dump (f: HFILE; buf: pchar; size: integer); - cdecl; external av__format; - procedure av_pkt_dump(f: HFILE; var pkt: TAVPacket; dump_payload: integer); (* CAT#2 *) - cdecl; external av__format; +(** + * 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 + *) +procedure av_pkt_dump(f: PAVFile; pkt: PAVPacket; dump_payload: integer); + cdecl; external av__format; - procedure av_register_all (); - cdecl; external av__format; +{$IF LIBAVFORMAT_VERSION >= 51011000} // 51.11.0 +(** + * 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 + *) +procedure av_pkt_dump_log(avcl: Pointer; level: integer; pkt: PAVPacket; dump_payload: integer); + cdecl; external av__format; +{$IFEND} +procedure av_register_all (); + cdecl; external av__format; + +{$IF LIBAVFORMAT_VERSION >= 51008000} // 51.8.0 +(** codec tag <-> codec id *) +function av_codec_get_id(var tags: PAVCodecTag; tag: cardinal): TCodecID; + cdecl; external av__format; +function av_codec_get_tag(var tags: PAVCodecTag; id: TCodecID): cardinal; + cdecl; external av__format; +{$IFEND} (* media file input *) - function av_find_input_format (short_name: pchar): PAVInputFormat; - cdecl; external av__format; - function av_probe_input_format (pd: PAVProbeData; is_opened: integer): PAVInputFormat; - cdecl; external av__format; - function av_open_input_stream (ic_ptr: PAVFormatContext; - pb: PByteIOContext; filename: pchar; - fmt: PAVInputFormat; ap: PAVFormatParameters): integer; - cdecl; external av__format; -(*** Open a media file as input. The codec are not opened. Only the file + +(** + * finds AVInputFormat based on input format's short name. + *) +function av_find_input_format (short_name: pchar): PAVInputFormat; + cdecl; external av__format; + +(** + * Guess file format. + * + * @param is_opened whether the file is already opened, determines whether + * demuxers with or without AVFMT_NOFILE are probed + *) +function av_probe_input_format (pd: PAVProbeData; is_opened: integer): PAVInputFormat; + cdecl; external av__format; + +(** + * Allocates all the structures needed to read an input stream. + * This does not open the needed codecs for decoding the stream[s]. + *) +function av_open_input_stream (ic_ptr: PAVFormatContext; + pb: PByteIOContext; filename: pchar; + fmt: PAVInputFormat; ap: PAVFormatParameters): integer; + cdecl; external av__format; + +(** + * Open a media file as input. The codecs are not opened. Only the file * header (if present) is read. * * @param ic_ptr the opened media file handle is put here * @param filename filename to open. * @param fmt if non NULL, force the file format to use * @param buf_size optional buffer size (zero if default is OK) - * @param ap additionnal parameters needed when opening the file (NULL if default) - * @return 0 if OK. AVERROR_xxx otherwise. *) - - function av_open_input_file (var ic_ptr: PAVFormatContext; filename: pchar; - fmt: PAVInputFormat; buf_size: integer; - ap: PAVFormatParameters): integer; - cdecl; external av__format; + * @param ap additional parameters needed when opening the file (NULL if default) + * @return 0 if OK. AVERROR_xxx otherwise. + *) +function av_open_input_file (var ic_ptr: PAVFormatContext; filename: pchar; + fmt: PAVInputFormat; buf_size: integer; + ap: PAVFormatParameters): integer; + cdecl; external av__format; - (* no av_open for output, so applications will need this: *) - function av_alloc_format_context (): PAVFormatContext; - cdecl; external av__format; +(** + * Allocate an AVFormatContext. + * Can be freed with av_free() but do not forget to free everything you + * explicitly allocated as well! + *) +function av_alloc_format_context (): PAVFormatContext; + cdecl; external av__format; -const - AVERROR_UNKNOWN =(-1); (* unknown error *) - AVERROR_IO =(-2); (* i/o error *) - AVERROR_NUMEXPECTED =(-3); (* number syntax expected in filename *) - AVERROR_INVALIDDATA =(-4); (* invalid data found *) - AVERROR_NOMEM =(-5); (* not enough memory *) - AVERROR_NOFMT =(-6); (* unknown format *) - AVERROR_NOTSUPP =(-7); (* operation not supported *) - -(*** Read the beginning of a media file to get stream information. This +(** + * 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 compute the real frame rate in case of mpeg2 repeat + * function also computes the real frame rate in case of mpeg2 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 if error. - * @todo let user decide somehow what information is needed so we dont waste time geting stuff the user doesnt need *) + * @todo Let user decide somehow what information is needed so we do not waste time getting stuff the user does not need. + *) +function av_find_stream_info (ic: PAVFormatContext): integer; + cdecl; external av__format; - function av_find_stream_info (ic: PAVFormatContext): integer; - cdecl; external av__format; - function av_read_packet (s: PAVFormatContext; var pkt: TAVPacket): integer; (* CAT#2 *) - cdecl; external av__format; -(*** Return the next frame of a stream. +(** + * Read a transport packet from a media file. + * + * This function is obsolete and should never be used. + * Use av_read_frame() instead. + * + * @param s media file handle + * @param pkt is filled + * @return 0 if OK. AVERROR_xxx if error. + *) +function av_read_packet (s: PAVFormatContext; var pkt: TAVPacket): integer; + cdecl; external av__format; + +(** + * Return the next frame of a stream. * * The returned packet is valid * until the next av_read_frame() or until av_close_input_file() and @@ -548,132 +841,371 @@ const * then it contains one frame. * * pkt->pts, pkt->dts and pkt->duration are always set to correct - * values in AV_TIME_BASE unit (and guessed if the format cannot + * values in AVStream.timebase units (and guessed if the format cannot * provided them). pkt->pts can be AV_NOPTS_VALUE if the video format * has B frames, so it is better to rely on pkt->dts if you do not * decompress the payload. * - * @return 0 if OK, < 0 if error or end of file. *) + * @return 0 if OK, < 0 if error or end of file. + *) +function av_read_frame (s: PAVFormatContext; var pkt: TAVPacket): integer; (* CAT#2 *) + cdecl; external av__format; - function av_read_frame (s: PAVFormatContext; var pkt: TAVPacket): integer; (* CAT#2 *) - cdecl; external av__format; - function av_seek_frame (s: PAVFormatContext; stream_index: integer; timestamp: int64; flags: integer): integer; - cdecl; external av__format; - function av_read_play (s: PAVFormatContext): integer; - cdecl; external av__format; - function av_read_pause (s: PAVFormatContext): integer; - cdecl; external av__format; - procedure av_close_input_file (s: PAVFormatContext); - cdecl; external av__format; - function av_new_stream (s: PAVFormatContext; id: integer): PAVStream; - cdecl; external av__format; - procedure av_set_pts_info (s: PAVStream; pts_wrap_bits: integer; - pts_num: integer; pts_den: integer); - cdecl; external av__format; +(** + * Seek to the key frame at timestamp. + * 'timestamp' in 'stream_index'. + * @param stream_index If stream_index is (-1), a default + * stream is selected, and timestamp is automatically converted + * from AV_TIME_BASE units to the stream specific time_base. + * @param timestamp timestamp in AVStream.time_base units + * or if there is no stream specified then in AV_TIME_BASE units + * @param flags flags which select direction and seeking mode + * @return >= 0 on success + *) +function av_seek_frame (s: PAVFormatContext; stream_index: integer; timestamp: int64; flags: integer): integer; + cdecl; external av__format; + +(** + * start playing a network based stream (e.g. RTSP stream) at the + * current position + *) +function av_read_play (s: PAVFormatContext): integer; + cdecl; external av__format; + +(** + * Pause a network based stream (e.g. RTSP stream). + * + * Use av_read_play() to resume it. + *) +function av_read_pause (s: PAVFormatContext): integer; + cdecl; external av__format; + +{$IF LIBAVFORMAT_VERSION >= 52003000} // 52.3.0 +(** + * Free a AVFormatContext allocated by av_open_input_stream. + * @param s context to free + *) +procedure av_close_input_stream(AVFormatContext *s); + cdecl; external av__format; +{$IFEND} + +(** + * Close a media file (but not its codecs). + * + * @param s media file handle + *) +procedure av_close_input_file (s: PAVFormatContext); + cdecl; external av__format; + +(** + * Add a new stream to a media file. + * + * Can only be called in the read_header() function. If the flag + * AVFMTCTX_NOHEADER is in the format context, then new streams + * can be added in read_packet too. + * + * @param s media file handle + * @param id file format dependent stream id + *) +function av_new_stream (s: PAVFormatContext; id: integer): PAVStream; + cdecl; external av__format; +{$IF LIBAVFORMAT_VERSION >= 51014000} // 51.14.0 +function av_new_program(s: PAVFormatContext; id: integer): PAVProgram; + cdecl; external av__format; +{$IFEND} + +(** + * 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) + *) +procedure av_set_pts_info (s: PAVStream; pts_wrap_bits: integer; + pts_num: integer; pts_den: integer); + cdecl; external av__format; const - AVSEEK_FLAG_BACKWARD =1; ///< seek backward - AVSEEK_FLAG_BYTE =2; ///< seeking based on position in bytes - AVSEEK_FLAG_ANY =4; ///< seek to any frame, even non keyframes + AVSEEK_FLAG_BACKWARD = 1; ///< seek backward + AVSEEK_FLAG_BYTE = 2; ///< seeking based on position in bytes + AVSEEK_FLAG_ANY = 4; ///< seek to any frame, even non keyframes - function av_find_default_stream_index (s: PAVFormatContext): integer; - cdecl; external av__format; - function av_index_search_timestamp (st: PAVStream; timestamp: int64; flags: integer): integer; - cdecl; external av__format; - function av_add_index_entry (st: PAVStream; pos: int64; timestamp: int64; - distance: integer; flags: integer): integer; - cdecl; external av__format; - function av_seek_frame_binary (s: PAVFormatContext; stream_index: integer; - target_ts: int64; flags: integer): integer; - cdecl; external av__format; +function av_find_default_stream_index (s: PAVFormatContext): integer; + cdecl; external av__format; - procedure av_update_cur_dts (s: PAVFormatContext; ref_st: PAVStream; - timestamp: int64); - cdecl; external av__format; +(** + * Gets 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: int64; flags: integer): integer; + cdecl; external av__format; -(* media file output *) - function av_set_parameters (s: PAVFormatContext; ap: PAVFormatParameters): integer; - cdecl; external av__format; +{$IF LIBAVFORMAT_VERSION >= 52004000} // 52.4.0 +(** + * Ensures 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: integer); + cdecl; external av__format; +{$IFEND} - function av_write_header (s: PAVFormatContext): integer; - cdecl; external av__format; +(** + * Add a index entry into a sorted list updateing if it is already there. + * + * @param timestamp timestamp in the timebase of the given stream + *) +function av_add_index_entry (st: PAVStream; pos: int64; timestamp: int64; + distance: integer; flags: integer): integer; + cdecl; external av__format; - function av_write_frame(s: PAVFormatContext; var pkt: TAVPacket): integer; - cdecl; external av__format; (* CAT#2 *) +(** + * Does a binary search using av_index_search_timestamp() and AVCodec.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_seek_frame_binary (s: PAVFormatContext; stream_index: integer; + target_ts: int64; flags: integer): integer; + cdecl; external av__format; - function av_interleaved_write_frame (s: PAVFormatContext; var pkt: TAVPacket): integer; - cdecl; external av__format; (* CAT#2 *) - function av_interleave_packet_per_dts(s: PAVFormatContext; _out: PAVPacket; - pkt: PAVPacket; flush: integer): integer; - cdecl; external av__format; - function av_write_trailer(s: pAVFormatContext): integer; - cdecl; external av__format; +(** + * Updates cur_dts of all streams based on given timestamp and AVStream. + * + * Stream ref_st unchanged, others set cur_dts in their native timebase + * 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: int64); + cdecl; external av__format; - procedure dump_format(ic: PAVFormatContext; index: integer; url: pchar; - is_output: integer); - cdecl; external av__format; +{$IF LIBAVFORMAT_VERSION >= 51007000} // 51.7.0 +type + TReadTimestampFunc = function (pavfc: PAVFormatContext; + arg2: integer; arg3: Pint64; arg4: int64): int64; cdecl; + +(** + * Does 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: integer; target_ts: int64; + pos_min: int64; pos_max: int64; pos_limit: int64; ts_min: int64; ts_max: int64; + flags: integer; ts_ret: Pint64; read_timestamp: TReadTimestampFunc): int64; + cdecl; external av__format; +{$IFEND} - function parse_image_size(width_ptr: PInteger; height_ptr: PInteger; str: pchar): integer; - cdecl; external av__format; - function parse_frame_rate (frame_rate: PInteger; frame_rate_base: PInteger; arg: pchar): integer; - cdecl; external av__format; - function parse_date(datestr: pchar; duration: integer): int64; - cdecl; external av__format; - function av_gettime (): int64; - cdecl; external av__format; +(* media file output *) +function av_set_parameters (s: PAVFormatContext; ap: PAVFormatParameters): integer; + cdecl; external av__format; -(* ffm specific for ffserver *) -const - FFM_PACKET_SIZE = 4096; +(** + * Allocate the stream private data and write the stream header to an + * output media file. + * + * @param s media file handle + * @return 0 if OK. AVERROR_xxx if error. + *) +function av_write_header (s: PAVFormatContext): integer; + cdecl; external av__format; - function ffm_read_write_index (fd: integer): int64; - cdecl; external av__format; +(** + * 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 + * + * @param s media file handle + * @param pkt the packet, which contains the stream_index, buf/buf_size, dts/pts, ... + * @return < 0 if error, = 0 if OK, 1 if end of stream wanted. + *) +function av_write_frame(s: PAVFormatContext; var pkt: TAVPacket): integer; + cdecl; external av__format; (* CAT#2 *) + +(** + * Writes a packet to an output media file ensuring correct interleaving. + * + * The packet must contain one audio or video frame. + * If the packets are already correctly interleaved the application should + * call av_write_frame() instead as it is slightly faster. It is also important + * to keep in mind that completely non-interleaved input will need huge amounts + * of memory to interleave with this, so it is preferable to interleave at the + * demuxer level. + * + * @param s media file handle + * @param pkt the packet, which contains the stream_index, buf/buf_size, dts/pts, ... + * @return < 0 if error, = 0 if OK, 1 if end of stream wanted. + *) +function av_interleaved_write_frame (s: PAVFormatContext; var pkt: TAVPacket): integer; + cdecl; external av__format; (* CAT#2 *) + +(** + * Interleave a packet per DTS in an output media file. + * + * Packets with pkt->destruct == av_destruct_packet will be freed inside this function, + * so they cannot be used after it, note calling av_free_packet() on them is still safe. + * + * @param s media file handle + * @param out the interleaved packet will be output here + * @param in the input packet + * @param flush 1 if no further packets are available as input and all + * remaining packets should be output + * @return 1 if a packet was output, 0 if no packet could be output, + * < 0 if an error occured + *) +function av_interleave_packet_per_dts(s: PAVFormatContext; _out: PAVPacket; + pkt: PAVPacket; flush: integer): integer; + cdecl; external av__format; - procedure ffm_write_write_index(fd: integer; pos: int64); - cdecl; external av__format; +(** + * @brief Write the stream trailer to an output media file and + * free the file private data. + * + * @param s media file handle + * @return 0 if OK. AVERROR_xxx if error. + *) +function av_write_trailer(s: pAVFormatContext): integer; + cdecl; external av__format; - procedure ffm_set_write_index (s: PAVFormatContext; pos: int64; file_size: int64); - cdecl; external av__format; +procedure dump_format(ic: PAVFormatContext; index: integer; url: pchar; + is_output: integer); + cdecl; external av__format; - function find_info_tag (arg: pchar; arg_size: integer; tag1: pchar; info: pchar): integer; - cdecl; external av__format; +(** + * parses width and height out of string str. + * @deprecated Use av_parse_video_frame_size instead. + *) +function parse_image_size(width_ptr: PInteger; height_ptr: PInteger; str: pchar): integer; + cdecl; external av__format; deprecated; + +(** + * Converts frame rate from string to a fraction. + * @deprecated Use av_parse_video_frame_rate instead. + *) +function parse_frame_rate (frame_rate: PInteger; frame_rate_base: PInteger; arg: pchar): integer; + cdecl; external av__format; deprecated; + +(** + * Parses \p datestr and returns a corresponding number of microseconds. + * @param datestr String representing a date or a duration. + * - If a date the syntax is: + * @code + * [{YYYY-MM-DD|YYYYMMDD}]{T| }{HH[:MM[:SS[.m...]]][Z]|HH[MM[SS[.m...]]][Z]} + * @endcode + * Time is localtime unless Z is appended, in which case it is + * interpreted as UTC. + * If the year-month-day part isn't 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 \p datestr cannot be + * successfully parsed. + * - If a duration the syntax is: + * @code + * [-]HH[:MM[:SS[.m...]]] + * [-]S+[.m...] + * @endcode + * Returns the number of microseconds contained in a time interval + * with the specified duration or INT64_MIN if \p datestr cannot be + * successfully parsed. + * @param duration Flag which tells how to interpret \p datestr, if + * not zero \p datestr is interpreted as a duration, otherwise as a + * date. + *) +function parse_date(datestr: pchar; duration: integer): int64; + cdecl; external av__format; - function get_frame_filename(buf: pchar; buf_size: integer; - path: pchar; number: integer): integer; - cdecl; external av__format; - function filename_number_test (filename: pchar): integer; - cdecl; external av__format; +function av_gettime (): int64; + cdecl; external av__format; +(* ffm specific for ffserver *) +const + FFM_PACKET_SIZE = 4096; -(* grab specific *) - function video_grab_init (): integer; - cdecl; external av__format; - function audio_init (): integer; - cdecl; external av__format; +function ffm_read_write_index (fd: integer): int64; + cdecl; external av__format; -(* DV1394 *) - function dv1394_init (): integer; - cdecl; external av__format; - function dc1394_init (): integer; - cdecl; external av__format; +procedure ffm_write_write_index(fd: integer; pos: int64); + cdecl; external av__format; - function strstart(str: pchar; val: pchar; ptr: PPointer): integer; - cdecl; external av__format; - function stristart(str: pchar; val: pchar; ptr: PPointer): integer; - cdecl; external av__format; - procedure pstrcpy(buf: pchar; buf_size: integer; str: pchar); - cdecl; external av__format; - function pstrcat(buf: pchar; buf_size: integer; s: pchar): pchar; - cdecl; external av__format; +procedure ffm_set_write_index (s: PAVFormatContext; pos: int64; file_size: int64); + cdecl; external av__format; - procedure __dynarray_add (tab_ptr: PPointer; nb_ptr: PInteger; elem: cardinal); - cdecl; external av__format; +(** + * Attempts to find a specific tag in a URL. + * + * syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done. + * Return 1 if found. + *) +function find_info_tag (arg: pchar; arg_size: integer; tag1: pchar; info: pchar): integer; + cdecl; external av__format; + +(** + * Returns in 'buf' the path with '%d' replaced by number. + * Also handles the '%0nd' format where 'n' is the total number + * of digits and '%%'. + * + * @param buf destination buffer + * @param buf_size destination buffer size + * @param path numbered sequence string + * @param number frame number + * @return 0 if OK, -1 if format error. + *) +function av_get_frame_filename(buf: pchar; buf_size: integer; + path: pchar; number: integer): integer; + cdecl; external av__format + {$IF LIBAVFORMAT_VERSION <= 50006000} // 50.6.0 + name 'get_frame_filename' + {$IFEND}; + +(** + * Check whether filename actually is a numbered sequence generator. + * + * @param filename possible numbered sequence string + * @return 1 if a valid numbered sequence string, 0 otherwise. + *) +function av_filename_number_test(filename: pchar): integer; + cdecl; external av__format + {$IF LIBAVFORMAT_VERSION <= 50006000} // 50.6.0 + name 'filename_number_test' + {$IFEND}; + +{$IF LIBAVFORMAT_VERSION >= 51012002} // 51.12.2 +(** + * Generate an SDP for an RTP session. + * + * @param ac array of AVFormatContexts describing the RTP streams. If the + * array is composed by only one context, such context can contain + * multiple AVStreams (one AVStream per RTP stream). Otherwise, + * 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 size the size of the buffer + * @return 0 if OK. AVERROR_xxx if error. + *) +function avf_sdp_create(ac: PPAVFormatContext; n_files: integer; buff: PChar; size: integer): integer; + cdecl; external av__format; +{$IFEND} implementation -procedure av_init_packet (var pkt: TAVPacket); (* CAT#2 + bug fix *) +{$IF LIBAVFORMAT_VERSION < 51012002} // 51.12.2 +procedure av_init_packet (var pkt: TAVPacket); begin with pkt do begin pts := AV_NOPTS_VALUE; @@ -685,12 +1217,12 @@ begin destruct := @av_destruct_packet_nofree end end; +{$IFEND} -procedure av_free_packet (var pkt: TAVPacket); (* CAT#2 *) +procedure av_free_packet (pkt: PAVPacket); begin - if @pkt.destruct <> nil then pkt.destruct (@pkt) -{ if (pkt <> nil) and (@pkt^.destruct <> nil) then - pkt^.destruct (pkt)} + if ((pkt <> nil) and (@pkt^.destruct <> nil)) then + pkt^.destruct(pkt); end; end. diff --git a/Game/Code/lib/ffmpeg/avio.pas b/Game/Code/lib/ffmpeg/avio.pas index fa65b6fa..d316d2b2 100644 --- a/Game/Code/lib/ffmpeg/avio.pas +++ b/Game/Code/lib/ffmpeg/avio.pas @@ -1,58 +1,85 @@ - (* +(* * unbuffered io for ffmpeg system * copyright (c) 2001 Fabrice Bellard * - * This library is free software; you can redistribute it and/or + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. + * version 2.1 of the License, or (at your option) any later version. * - * This library is distributed in the hope that it will be useful, + * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software + * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - *) + *) (* This is a part of Pascal porting of ffmpeg. Originally by Victor Zinetz for Delphi and Free Pascal on Windows. For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT in the source codes *) +// Revision: 11295 + unit avio; + {$IFDEF FPC} - {$MODE DELPHI } (* CAT *) - {$PACKENUM 4} (* every enum type variables uses 4 bytes, CAT *) - {$PACKRECORDS C} (* GCC compatible, Record Packing, CAT *) + {$MODE DELPHI } + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) {$ENDIF} -interface (* Widows unit is deleted by CAT *) +interface + +uses + UConfig; -{$I version.inc} +(* output byte stream handling *) + +type + TOffset = int64; + +(* unbuffered I/O *) const URL_RDONLY = 0; URL_WRONLY = 1; URL_RDWR = 2; -(* output byte stream handling *) + (** + * Passing this as the "whence" parameter to a seek function causes it to + * return the filesize without seeking anywhere. Supporting this is optional. + * If it is not supported then the seek function will return <0. + *) + AVSEEK_SIZE = $10000; type - offset_t = int64; - int = integer; + TURLInterruptCB = function (): integer; cdecl; -(* unbuffered I/O *) +type PURLProtocol = ^TURLProtocol; + + (** + * URL Context. + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * sizeof(URLContext) must not be used outside libav*. + *) PURLContext = ^TURLContext; TURLContext = record prot: PURLProtocol; - flags: int; - is_streamed: int; //* true if streamed (no seek possible), default = false */ - max_packet_size: int; //* if non zero, the stream is packetized with this max packet size */ + flags: integer; + is_streamed: integer; (**< true if streamed (no seek possible), default = false *) + max_packet_size: integer; (**< if non zero, the stream is packetized with this max packet size *) priv_data: pointer; - filename: array [0..0] of char; (* specified filename *) + filename: PChar; (**< specified filename *) end; PURLPollEntry = ^TURLPollEntry; @@ -64,14 +91,32 @@ type TURLProtocol = record name: pchar; - url_open: function (h: PURLContext; const filename: pchar; flags: integer): integer; cdecl; + url_open: function (h: PURLContext; {const} filename: pchar; flags: integer): integer; cdecl; url_read: function (h: PURLContext; buf: pchar; size: integer): integer; cdecl; url_write: function (h: PURLContext; buf: pchar; size: integer): integer; cdecl; - url_seek: function (h: PURLContext; pos: int64; whence: integer): int64; cdecl; + url_seek: function (h: PURLContext; pos: TOffset; whence: integer): TOffset; cdecl; url_close: function (h: PURLContext): integer; cdecl; next: PURLProtocol; + {$IF (LIBAVFORMAT_VERSION >= 52001000) and (LIBAVFORMAT_VERSION < 52004000)} // 52.1.0 .. 52.4.0 + url_read_play: function (h: PURLContext): integer; + url_read_pause: function (h: PURLContext): integer; + {$IFEND} + {$IF LIBAVFORMAT_VERSION >= 52004000} // 52.4.0 + url_read_pause: function (h: PURLContext; pause: integer): integer; cdecl; + {$IFEND} + {$IF LIBAVFORMAT_VERSION >= 52001000} // 52.1.0 + url_read_seek: function (h: PURLContext; + stream_index: integer; timestamp: int64; flags: integer): TOffset; cdecl; + {$IFEND} end; + (** + * 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 + * version bump. + * sizeof(ByteIOContext) must not be used outside libav*. + *) PByteIOContext = ^TByteIOContext; TByteIOContext = record buffer: pchar; @@ -81,8 +126,8 @@ type opaque: pointer; read_packet: function (opaque: pointer; buf: pchar; buf_size: integer): integer; cdecl; write_packet: function (opaque: pointer; buf: pchar; buf_size: integer): integer; cdecl; - seek: function (opaque: pointer; offset: int64; whence: integer): int64; cdecl; - pos: int64; (* position in the file of the current buffer *) + seek: function (opaque: pointer; offset: TOffset; whence: integer): TOffset; cdecl; + pos: TOffset; (* position in the file of the current buffer *) must_flush: integer; (* true if the next seek should flush *) eof_reached: integer; (* true if eof reached *) write_flag: integer; (* true if open for writing *) @@ -90,153 +135,347 @@ type max_packet_size: integer; checksum: longword; checksum_ptr: pchar; - update_checksum: function (checksum: cardinal; const buf: pchar; size: cardinal): LongWord; cdecl; + update_checksum: function (checksum: Longword; {const} buf: pchar; size: cardinal): Longword; cdecl; error: integer; ///< contains the error code or 0 if no error happened + {$IF (LIBAVFORMAT_VERSION >= 52001000) and (LIBAVFORMAT_VERSION < 52004000)} // 52.1.0 .. 52.4.0 + read_play: function(opaque: Pointer): integer; cdecl; + read_pause: function(opaque: Pointer): integer; cdecl; + {$IFEND} + {$IF LIBAVFORMAT_VERSION >= 52004000} // 52.4.0 + read_pause: function(opaque: Pointer; pause: integer): integer; cdecl; + {$IFEND} + {$IF LIBAVFORMAT_VERSION >= 52001000} // 52.1.0 + read_seek: function(opaque: Pointer; + stream_index: integer; timestamp: int64; flags: integer): TOffset; cdecl; + {$IFEND} end; - function url_open(h: PPointer; const filename: pchar; flags: integer): integer; - cdecl; external av__format; - function url_read (h: PURLContext; buf: pchar; size: integer): integer; - cdecl; external av__format; - function url_write (h: PURLContext; buf: pchar; size: integer): integer; - cdecl; external av__format; - function url_seek (h: PURLContext; pos: int64; whence: integer): int64; - cdecl; external av__format; - function url_close (h: PURLContext): integer; - cdecl; external av__format; - function url_exist(const filename: pchar): integer; - cdecl; external av__format; - function url_filesize (h: PURLContext): int64; - cdecl; external av__format; - function url_get_max_packet_size(h: PURLContext): integer; - cdecl; external av__format; - procedure url_get_filename(h: PURLContext; buf: pchar; buf_size: integer); - cdecl; external av__format; - -(* the callback is called in blocking functions to test regulary if - asynchronous interruption is needed. -EINTR is returned in this - case by the interrupted function. 'NULL' means no interrupt - callback is given. *) - procedure url_set_interrupt_cb (interrupt_cb: pinteger); - cdecl; external av__format; +function url_open(h: PPointer; {const} filename: pchar; flags: integer): integer; + cdecl; external av__format; +function url_read (h: PURLContext; buf: pchar; size: integer): integer; + cdecl; external av__format; +function url_write (h: PURLContext; buf: pchar; size: integer): integer; + cdecl; external av__format; +function url_seek (h: PURLContext; pos: TOffset; whence: integer): TOffset; + cdecl; external av__format; +function url_close (h: PURLContext): integer; + cdecl; external av__format; +function url_exist(const filename: pchar): integer; + cdecl; external av__format; +function url_filesize (h: PURLContext): TOffset; + cdecl; external av__format; + +(** + * Return the maximum packet size associated to packetized file + * handle. If the file is not packetized (stream like HTTP or file on + * disk), then 0 is returned. + * + * @param h file handle + * @return maximum packet size in bytes + *) +function url_get_max_packet_size(h: PURLContext): integer; + cdecl; external av__format; +procedure url_get_filename(h: PURLContext; buf: pchar; buf_size: integer); + cdecl; external av__format; + +(** + * The callback is called in blocking functions to test regulary if + * asynchronous interruption is needed. AVERROR(EINTR) is returned + * in this case by the interrupted function. 'NULL' means no interrupt + * callback is given. + *) +procedure url_set_interrupt_cb (interrupt_cb: TURLInterruptCB); + cdecl; external av__format; (* not implemented *) -//int url_poll(URLPollEntry *poll_table, int n, int timeout); - - function register_protocol (protocol: PURLProtocol): integer; - cdecl; external av__format; - - function init_put_byte(s: PByteIOContext; - buffer: pchar; - buffer_size: integer; write_flag: integer; - opaque: pointer; - read_packet: pointer; //int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), - write_packet: pointer; //int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), - seek: pointer //offset_t (*seek)(void *opaque, offset_t offset, int whence) - ): integer; - cdecl; external av__format; - procedure put_byte(s: PByteIOContext; b: integer); - cdecl; external av__format; - procedure put_buffer (s: PByteIOContext; const buf: pchar; size: integer); - cdecl; external av__format; - procedure put_le64(s: PByteIOContext; val: int64); - cdecl; external av__format; - procedure put_be64(s: PByteIOContext; val: int64); - cdecl; external av__format; - procedure put_le32(s: PByteIOContext; val: cardinal); - cdecl; external av__format; - procedure put_be32(s: PByteIOContext; val: cardinal); - cdecl; external av__format; - procedure put_be24(s: PByteIOContext; val: cardinal); - cdecl; external av__format; - procedure put_le16(s: PByteIOContext; val: cardinal); - cdecl; external av__format; - procedure put_be16(s: PByteIOContext; val: cardinal); - cdecl; external av__format; - procedure put_tag(s: PByteIOContext; const tag: pchar); - cdecl; external av__format; - - procedure put_strz(s: PByteIOContext; const buf: pchar); - cdecl; external av__format; - - function url_fseek(s: PByteIOContext; offset: int64; whence: integer): int64; - cdecl; external av__format; - procedure url_fskip(s: PByteIOContext; offset: int64); - cdecl; external av__format; - function url_ftell(s: PByteIOContext): int64; - cdecl; external av__format; - function url_fsize(s: PByteIOContext): int64; - cdecl; external av__format; - function url_feof(s: PByteIOContext): integer; - cdecl; external av__format; - function url_ferror(s: PByteIOContext): integer; - cdecl; external av__format; - - procedure put_flush_packet (s: PByteIOContext); - cdecl; external av__format; - function get_buffer(s: PByteIOContext; buf: pchar; size: integer): integer; - cdecl; external av__format; - function get_partial_buffer(s: PByteIOContext; buf: pchar; size: integer): integer; - cdecl; external av__format; - function get_byte(s: PByteIOContext): integer; - cdecl; external av__format; - function get_le32(s: PByteIOContext): cardinal; - cdecl; external av__format; - function get_le64(s: PByteIOContext): int64; - cdecl; external av__format; - function get_le16(s: PByteIOContext): cardinal; - cdecl; external av__format; - - function get_strz(s: PByteIOContext; buf: pchar; maxlen: integer): pchar; - cdecl; external av__format; - function get_be16(s: PByteIOContext): cardinal; - cdecl; external av__format; - function get_be24(s: PByteIOContext): cardinal; - cdecl; external av__format; - function get_be32(s: PByteIOContext): cardinal; - cdecl; external av__format; - function get_be64(s: PByteIOContext): int64; - cdecl; external av__format; - - function url_is_streamed(s: PByteIOContext): integer; - - function url_fdopen (s: PByteIOContext; h: PURLContext): integer; - cdecl; external av__format; - function url_setbufsize (s: PByteIOContext; buf_size: integer): integer; - cdecl; external av__format; - function url_fopen(s: PByteIOContext; const filename: pchar; flags: integer): integer; - cdecl; external av__format; - function url_fclose(s: PByteIOContext): integer; - cdecl; external av__format; - - function url_fileno(s: PByteIOContext): PURLContext; - cdecl; external av__format; - function url_fget_max_packet_size (s: PByteIOContext): integer; - cdecl; external av__format; - function url_open_buf(s: PByteIOContext; buf: pchar; buf_size: integer; flags: integer): integer; - cdecl; external av__format; - function url_close_buf(s: PByteIOContext): integer; - cdecl; external av__format; - - function url_open_dyn_buf(s: PByteIOContext): integer; - cdecl; external av__format; - function url_open_dyn_packet_buf(s: PByteIOContext; max_packet_size: integer): integer; - cdecl; external av__format; - function url_close_dyn_buf(s: PByteIOContext; pbuffer:PPointer): integer; - cdecl; external av__format; - - function get_checksum(s: PByteIOContext): cardinal; - cdecl; external av__format; - - procedure init_checksum (s: PByteIOContext; update_checksum: pointer; checksum: cardinal); - cdecl; external av__format; - - function udp_set_remote_url(h: PURLContext; const uri: pchar): integer; - cdecl; external av__format; - function udp_get_local_port(h: PURLContext): integer; - cdecl; external av__format; - function udp_get_file_handle(h: PURLContext): integer; - cdecl; external av__format; +function url_poll(poll_table: PURLPollEntry; n: integer; timeout: integer): integer; + cdecl; external av__format; + +{$IF LIBAVFORMAT_VERSION >= 52004000} // 52.4.0 +(** + * Pause and resume playing - only meaningful if using a network streaming + * protocol (e.g. MMS). + * @param pause 1 for pause, 0 for resume + *) +function av_url_read_pause(h: PURLContext; pause: integer): integer; +{$IFEND} + +{$IF LIBAVFORMAT_VERSION >= 52001000} // 52.1.0 +(** + * Seek to a given timestamp relative to some component stream. + * Only meaningful if using a network streaming protocol (e.g. MMS.). + * @param stream_index The stream index that the timestamp is relative to. + * If stream_index is (-1) the timestamp should be in AV_TIME_BASE + * units from the beginning of the presentation. + * If a stream_index >= 0 is used and the protocol does not support + * seeking based on component streams, the call will fail with ENOTSUP. + * @param timestamp timestamp in AVStream.time_base units + * or if there is no stream specified then in AV_TIME_BASE units. + * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE + * and AVSEEK_FLAG_ANY. The protocol may silently ignore + * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will + * fail with ENOTSUP if used and not supported. + * @return >= 0 on success + * @see AVInputFormat::read_seek + *) +function av_url_read_seek(h: PURLContext; + stream_index: integer; timestamp: int64; flags: integer): TOffset; + cdecl; external av__format; +{$IFEND} + +{ +var + first_protocol: PURLProtocol; external av__format; + url_interrupt_cb: PURLInterruptCB; external av__format; +} + +{$IF LIBAVFORMAT_VERSION >= 52002000} // 52.2.0 +function av_protocol_next(p: PURLProtocol): PURLProtocol; + cdecl; external av__format; +{$IFEND} + +function register_protocol (protocol: PURLProtocol): integer; + cdecl; external av__format; + +type + TReadWriteFunc = function (opaque: Pointer; buf: PChar; buf_size: integer): integer; cdecl; + TSeekFunc = function (opaque: Pointer; offset: TOffset; whence: integer): TOffset; cdecl; + +function init_put_byte(s: PByteIOContext; + buffer: pchar; + buffer_size: integer; write_flag: integer; + opaque: pointer; + read_packet: TReadWriteFunc; + write_packet: TReadWriteFunc; + seek: TSeekFunc): integer; + cdecl; external av__format; +{$IF LIBAVFORMAT_VERSION >= 52004000} // 52.4.0 +function av_alloc_put_byte( + buffer: PChar; + buffer_size: integer; + write_flag: integer; + opaque: Pointer; + read_packet: TReadWriteFunc, + write_packet: TReadWriteFunc, + seek: TSeekFunc): PByteIOContext; + cdecl; external av__format; +{$IFEND} + +procedure put_byte(s: PByteIOContext; b: integer); + cdecl; external av__format; +procedure put_buffer (s: PByteIOContext; {const} buf: pchar; size: integer); + cdecl; external av__format; +procedure put_le64(s: PByteIOContext; val: int64); + cdecl; external av__format; +procedure put_be64(s: PByteIOContext; val: int64); + cdecl; external av__format; +procedure put_le32(s: PByteIOContext; val: cardinal); + cdecl; external av__format; +procedure put_be32(s: PByteIOContext; val: cardinal); + cdecl; external av__format; +procedure put_le24(s: PByteIOContext; val: cardinal); + cdecl; external av__format; +procedure put_be24(s: PByteIOContext; val: cardinal); + cdecl; external av__format; +procedure put_le16(s: PByteIOContext; val: cardinal); + cdecl; external av__format; +procedure put_be16(s: PByteIOContext; val: cardinal); + cdecl; external av__format; +procedure put_tag(s: PByteIOContext; {const} tag: pchar); + cdecl; external av__format; + +procedure put_strz(s: PByteIOContext; {const} buf: pchar); + cdecl; external av__format; + +function url_fseek(s: PByteIOContext; offset: TOffset; whence: integer): TOffset; + cdecl; external av__format; +procedure url_fskip(s: PByteIOContext; offset: TOffset); + cdecl; external av__format; +function url_ftell(s: PByteIOContext): TOffset; + cdecl; external av__format; +function url_fsize(s: PByteIOContext): TOffset; + cdecl; external av__format; +function url_feof(s: PByteIOContext): integer; + cdecl; external av__format; +function url_ferror(s: PByteIOContext): integer; + cdecl; external av__format; + +{$IF LIBAVFORMAT_VERSION >= 52004000} // 52.4.0 +function av_url_read_fpause(h: PByteIOContext; pause: integer): integer; + cdecl; external av__format; +{$IFEND} +{$IF LIBAVFORMAT_VERSION >= 52001000} // 52.1.0 +function av_url_read_fseek(h: PByteIOContext; + stream_index: integer; timestamp: int64; flags: integer): TOffset; + cdecl; external av__format; +{$IFEND} + +const + URL_EOF = -1; +(** @note return URL_EOF (-1) if EOF *) +function url_fgetc(s: PByteIOContext): integer; + cdecl; external av__format; + +(** @warning currently size is limited *) +function url_fprintf(s: PByteIOContext; {const} fmt: PChar; args: array of const): integer; + cdecl; external av__format; + +(** @note unlike fgets, the EOL character is not returned and a whole + line is parsed. return NULL if first char read was EOF *) +function url_fgets(s: PByteIOContext; buf: PChar; buf_size: integer): PChar; + cdecl; external av__format; + +procedure put_flush_packet (s: PByteIOContext); + cdecl; external av__format; + +function get_buffer(s: PByteIOContext; buf: pchar; size: integer): integer; + cdecl; external av__format; +function get_partial_buffer(s: PByteIOContext; buf: pchar; size: integer): integer; + cdecl; external av__format; + +(** @note return 0 if EOF, so you cannot use it if EOF handling is + necessary *) +function get_byte(s: PByteIOContext): integer; + cdecl; external av__format; +function get_le24(s: PByteIOContext): cardinal; + cdecl; external av__format; +function get_le32(s: PByteIOContext): cardinal; + cdecl; external av__format; +function get_le64(s: PByteIOContext): uint64; + cdecl; external av__format; +function get_le16(s: PByteIOContext): cardinal; + cdecl; external av__format; + +function get_strz(s: PByteIOContext; buf: pchar; maxlen: integer): pchar; + cdecl; external av__format; +function get_be16(s: PByteIOContext): cardinal; + cdecl; external av__format; +function get_be24(s: PByteIOContext): cardinal; + cdecl; external av__format; +function get_be32(s: PByteIOContext): cardinal; + cdecl; external av__format; +function get_be64(s: PByteIOContext): uint64; + cdecl; external av__format; + +{$IF LIBAVFORMAT_VERSION >= 51017001} // 51.17.1 +function ff_get_v(bc: PByteIOContext): uint64; + cdecl; external av__format; +{$IFEND} + +function url_is_streamed(s: PByteIOContext): integer; inline; + +(** @note when opened as read/write, the buffers are only used for + writing *) +{$IF LIBAVFORMAT_VERSION >= 52000000} // 52.0.0 +function url_fdopen (var s: PByteIOContext; h: PURLContext): integer; +{$ELSE} +function url_fdopen (s: PByteIOContext; h: PURLContext): integer; +{$IFEND} + cdecl; external av__format; + +(** @warning must be called before any I/O *) +function url_setbufsize (s: PByteIOContext; buf_size: integer): integer; + cdecl; external av__format; + +{$IF LIBAVFORMAT_VERSION >= 51015000} // 51.15.0 +(** 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: PByteIOContext; flags: integer): integer; + cdecl; external av__format; +{$IFEND} + +(** @note when opened as read/write, the buffers are only used for + writing *) +{$IF LIBAVFORMAT_VERSION >= 52000000} // 52.0.0 +function url_fopen(var s: PByteIOContext; const filename: pchar; flags: integer): integer; +{$ELSE} +function url_fopen(s: PByteIOContext; const filename: pchar; flags: integer): integer; +{$IFEND} + cdecl; external av__format; +function url_fclose(s: PByteIOContext): integer; + cdecl; external av__format; +function url_fileno(s: PByteIOContext): PURLContext; + cdecl; external av__format; + +(** + * Return the maximum packet size associated to packetized buffered file + * handle. If the file is not packetized (stream like http or file on + * disk), then 0 is returned. + * + * @param s buffered file handle + * @return maximum packet size in bytes + *) +function url_fget_max_packet_size (s: PByteIOContext): integer; + cdecl; external av__format; + +{$IF LIBAVFORMAT_VERSION >= 52000000} // 52.0.0 +function url_open_buf(var s: PByteIOContext; buf: pchar; buf_size: integer; flags: integer): integer; +{$ELSE} +function url_open_buf(s: PByteIOContext; buf: pchar; buf_size: integer; flags: integer): integer; +{$IFEND} + cdecl; external av__format; + +(** return the written or read size *) +function url_close_buf(s: PByteIOContext): integer; + cdecl; external av__format; + +(** + * Open a write only memory stream. + * + * @param s new IO context + * @return zero if no error. + *) +{$IF LIBAVFORMAT_VERSION >= 52000000} // 52.0.0 +function url_open_dyn_buf(var s: PByteIOContext): integer; +{$ELSE} +function url_open_dyn_buf(s: PByteIOContext): integer; +{$IFEND} + cdecl; external av__format; + +(** + * Open a write only packetized memory stream with a maximum packet + * size of 'max_packet_size'. The stream is stored in a memory buffer + * with a big endian 4 byte header giving the packet size in bytes. + * + * @param s new IO context + * @param max_packet_size maximum packet size (must be > 0) + * @return zero if no error. + *) +{$IF LIBAVFORMAT_VERSION >= 52000000} // 52.0.0 +function url_open_dyn_packet_buf(var s: PByteIOContext; max_packet_size: integer): integer; +{$ELSE} +function url_open_dyn_packet_buf(s: PByteIOContext; max_packet_size: integer): integer; +{$IFEND} + cdecl; external av__format; + +(** + * Return the written size and a pointer to the buffer. The buffer + * must be freed with av_free(). + * @param s IO context + * @param pbuffer pointer to a byte buffer + * @return the length of the byte buffer + *) +function url_close_dyn_buf(s: PByteIOContext; pbuffer:PPointer): integer; + cdecl; external av__format; + +{$IF LIBAVFORMAT_VERSION >= 51017001} // 51.17.1 +function ff_crc04C11DB7_update(checksum: longword; {const} buf: PChar; len: cardinal): longword; + cdecl; external av__format; +{$IFEND} +function get_checksum(s: PByteIOContext): cardinal; + cdecl; external av__format; +procedure init_checksum (s: PByteIOContext; update_checksum: pointer; checksum: cardinal); + cdecl; external av__format; + +(* udp.c *) +function udp_set_remote_url(h: PURLContext; {const} uri: pchar): integer; + cdecl; external av__format; +function udp_get_local_port(h: PURLContext): integer; + cdecl; external av__format; +function udp_get_file_handle(h: PURLContext): integer; + cdecl; external av__format; implementation diff --git a/Game/Code/lib/ffmpeg/avutil.pas b/Game/Code/lib/ffmpeg/avutil.pas index 48c5f4c2..d50a7871 100644 --- a/Game/Code/lib/ffmpeg/avutil.pas +++ b/Game/Code/lib/ffmpeg/avutil.pas @@ -1,135 +1,219 @@ - (*
- * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *)
-(* This is a part of Pascal porting of ffmpeg. Originally by Victor Zinetz for Delphi and Free Pascal on Windows.
-For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT
-in the source codes *)
-
-unit avutil;
-{$IFDEF FPC}
- {$MODE DELPHI}
- {$PACKENUM 4} (* every enum type variables uses 4 bytes, CAT *)
- {$PACKRECORDS C} (* GCC compatible, Record Packing, CAT *)
-{$ENDIF}
-
-interface
-
-{$I version.inc}
-
-type
-(**
- * Pixel format. Notes:
- *
- * PIX_FMT_RGB32 is handled in an endian-specific manner. A RGBA
- * color is put together as:
- * (A << 24) | (R << 16) | (G << 8) | B
- * This is stored as BGRA on little endian CPU architectures and ARGB on
- * big endian CPUs.
- *
- * When the pixel format is palettized RGB (PIX_FMT_PAL8), the palettized
- * image data is stored in AVFrame.data[0]. The palette is transported in
- * AVFrame.data[1] and, is 1024 bytes long (256 4-byte entries) and is
- * formatted the same as in PIX_FMT_RGB32 described above (i.e., it is
- * also endian-specific). Note also that the individual RGB palette
- * components stored in AVFrame.data[1] should be in the range 0..255.
- * This is important as many custom PAL8 video codecs that were designed
- * to run on the IBM VGA graphics adapter use 6-bit palette components.
- *)
-
- PAVPixelFormat = ^TAVPixelFormat;
- TAVPixelFormat = (
- PIX_FMT_NONE= -1,
- PIX_FMT_YUV420P, ///< Planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
- PIX_FMT_YUYV422, ///< Packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
- PIX_FMT_RGB24, ///< Packed RGB 8:8:8, 24bpp, RGBRGB...
- PIX_FMT_BGR24, ///< Packed RGB 8:8:8, 24bpp, BGRBGR...
- PIX_FMT_YUV422P, ///< Planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
- PIX_FMT_YUV444P, ///< Planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
- PIX_FMT_RGB32, ///< Packed RGB 8:8:8, 32bpp, (msb)8A 8R 8G 8B(lsb), in cpu endianness
- PIX_FMT_YUV410P, ///< Planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
- PIX_FMT_YUV411P, ///< Planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
- PIX_FMT_RGB565, ///< Packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), in cpu endianness
- PIX_FMT_RGB555, ///< Packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), in cpu endianness most significant bit to 1
- PIX_FMT_GRAY8, ///< Y , 8bpp
- PIX_FMT_MONOWHITE, ///< Y , 1bpp, 1 is white
- PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black
- PIX_FMT_PAL8, ///< 8 bit with PIX_FMT_RGB32 palette
- PIX_FMT_YUVJ420P, ///< Planar YUV 4:2:0, 12bpp, full scale (jpeg)
- PIX_FMT_YUVJ422P, ///< Planar YUV 4:2:2, 16bpp, full scale (jpeg)
- PIX_FMT_YUVJ444P, ///< Planar YUV 4:4:4, 24bpp, full scale (jpeg)
- PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing(xvmc_render.h)
- PIX_FMT_XVMC_MPEG2_IDCT,
- PIX_FMT_UYVY422, ///< Packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
- PIX_FMT_UYYVYY411, ///< Packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3
- PIX_FMT_BGR32, ///< Packed RGB 8:8:8, 32bpp, (msb)8A 8B 8G 8R(lsb), in cpu endianness
- PIX_FMT_BGR565, ///< Packed RGB 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), in cpu endianness
- PIX_FMT_BGR555, ///< Packed RGB 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), in cpu endianness most significant bit to 1
- PIX_FMT_BGR8, ///< Packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb)
- PIX_FMT_BGR4, ///< Packed RGB 1:2:1, 4bpp, (msb)1B 2G 1R(lsb)
- PIX_FMT_BGR4_BYTE, ///< Packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb)
- PIX_FMT_RGB8, ///< Packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb)
- PIX_FMT_RGB4, ///< Packed RGB 1:2:1, 4bpp, (msb)2R 3G 3B(lsb)
- PIX_FMT_RGB4_BYTE, ///< Packed RGB 1:2:1, 8bpp, (msb)2R 3G 3B(lsb)
- PIX_FMT_NV12, ///< Planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 for UV
- PIX_FMT_NV21, ///< as above, but U and V bytes are swapped
-
- PIX_FMT_RGB32_1, ///< Packed RGB 8:8:8, 32bpp, (msb)8R 8G 8B 8A(lsb), in cpu endianness
- PIX_FMT_BGR32_1, ///< Packed RGB 8:8:8, 32bpp, (msb)8B 8G 8R 8A(lsb), in cpu endianness
-
- PIX_FMT_NB, ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions
- PIX_FMT_FACKED = $FFFFF
- );
-
-const
-{$ifdef WORDS_BIGENDIAN}
- PIX_FMT_RGBA = PIX_FMT_RGB32_1;
- PIX_FMT_BGRA = PIX_FMT_BGR32_1;
- PIX_FMT_ARGB = PIX_FMT_RGB32;
- PIX_FMT_ABGR = PIX_FMT_BGR32;
-{$else}
- PIX_FMT_RGBA = PIX_FMT_BGR32;
- PIX_FMT_BGRA = PIX_FMT_RGB32;
- PIX_FMT_ARGB = PIX_FMT_BGR32_1;
- PIX_FMT_ABGR = PIX_FMT_RGB32_1;
-{$endif}
-
- PIX_FMT_UYVY411 = PIX_FMT_UYYVYY411;
- PIX_FMT_RGBA32 = PIX_FMT_RGB32;
- PIX_FMT_YUV422 = PIX_FMT_YUYV422;
-
-(* memory *)
-function av_malloc (size: cardinal): pointer;
- cdecl; external av__util;
-
-function av_realloc (ptr: pointer; size: cardinal): pointer;
- cdecl; external av__util;
-
-procedure av_free (ptr: pointer);
- cdecl; external av__util;
-
-function av_mallocz (size: cardinal): pointer;
- cdecl; external av__util;
-
-function av_strdup(const s: pchar): pchar;
- cdecl; external av__util;
-
-procedure av_freep (ptr: pointer);
- cdecl; external av__util;
-
-implementation
-
-end.
+(* + * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + *) + +(* This is a part of Pascal porting of ffmpeg. + * Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes *) + +// Min. version: ? +// Max. version: 49.6.0, Revision: 11207 + +unit avutil; + +{$IFDEF FPC} + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +interface + +uses + mathematics, + rational, + UConfig; + +const + (* Max. supported version by this header *) + LIBAVUTIL_MAX_VERSION_MAJOR = 49; + LIBAVUTIL_MAX_VERSION_MINOR = 6; + LIBAVUTIL_MAX_VERSION_RELEASE = 0; + LIBAVUTIL_MAX_VERSION = (LIBAVUTIL_MAX_VERSION_MAJOR * VERSION_MAJOR) + + (LIBAVUTIL_MAX_VERSION_MINOR * VERSION_MINOR) + + (LIBAVUTIL_MAX_VERSION_RELEASE * VERSION_RELEASE); + +(* Check if linked versions are supported *) +{$IF (LIBAVUTIL_VERSION > LIBAVUTIL_MAX_VERSION)} + {$MESSAGE Warn 'Linked version of libavutil may be unsupported!'} +{$IFEND} + +type +(** + * Pixel format. Notes: + * + * PIX_FMT_RGB32 is handled in an endian-specific manner. A RGBA + * color is put together as: + * (A << 24) | (R << 16) | (G << 8) | B + * This is stored as BGRA on little endian CPU architectures and ARGB on + * big endian CPUs. + * + * When the pixel format is palettized RGB (PIX_FMT_PAL8), the palettized + * image data is stored in AVFrame.data[0]. The palette is transported in + * AVFrame.data[1] and, is 1024 bytes long (256 4-byte entries) and is + * formatted the same as in PIX_FMT_RGB32 described above (i.e., it is + * also endian-specific). Note also that the individual RGB palette + * components stored in AVFrame.data[1] should be in the range 0..255. + * This is important as many custom PAL8 video codecs that were designed + * to run on the IBM VGA graphics adapter use 6-bit palette components. + *) + + PAVPixelFormat = ^TAVPixelFormat; + TAVPixelFormat = ( + PIX_FMT_NONE= -1, + PIX_FMT_YUV420P, ///< Planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) + PIX_FMT_YUYV422, ///< Packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr + PIX_FMT_RGB24, ///< Packed RGB 8:8:8, 24bpp, RGBRGB... + PIX_FMT_BGR24, ///< Packed RGB 8:8:8, 24bpp, BGRBGR... + PIX_FMT_YUV422P, ///< Planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) + PIX_FMT_YUV444P, ///< Planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) + PIX_FMT_RGB32, ///< Packed RGB 8:8:8, 32bpp, (msb)8A 8R 8G 8B(lsb), in cpu endianness + PIX_FMT_YUV410P, ///< Planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) + PIX_FMT_YUV411P, ///< Planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) + PIX_FMT_RGB565, ///< Packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), in cpu endianness + PIX_FMT_RGB555, ///< Packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), in cpu endianness most significant bit to 1 + PIX_FMT_GRAY8, ///< Y , 8bpp + PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black + PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white + PIX_FMT_PAL8, ///< 8 bit with PIX_FMT_RGB32 palette + PIX_FMT_YUVJ420P, ///< Planar YUV 4:2:0, 12bpp, full scale (jpeg) + PIX_FMT_YUVJ422P, ///< Planar YUV 4:2:2, 16bpp, full scale (jpeg) + PIX_FMT_YUVJ444P, ///< Planar YUV 4:4:4, 24bpp, full scale (jpeg) + PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing(xvmc_render.h) + PIX_FMT_XVMC_MPEG2_IDCT, + PIX_FMT_UYVY422, ///< Packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 + PIX_FMT_UYYVYY411, ///< Packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 + PIX_FMT_BGR32, ///< Packed RGB 8:8:8, 32bpp, (msb)8A 8B 8G 8R(lsb), in cpu endianness + PIX_FMT_BGR565, ///< Packed RGB 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), in cpu endianness + PIX_FMT_BGR555, ///< Packed RGB 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), in cpu endianness most significant bit to 1 + PIX_FMT_BGR8, ///< Packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) + PIX_FMT_BGR4, ///< Packed RGB 1:2:1, 4bpp, (msb)1B 2G 1R(lsb) + PIX_FMT_BGR4_BYTE, ///< Packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) + PIX_FMT_RGB8, ///< Packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) + PIX_FMT_RGB4, ///< Packed RGB 1:2:1, 4bpp, (msb)2R 3G 3B(lsb) + PIX_FMT_RGB4_BYTE, ///< Packed RGB 1:2:1, 8bpp, (msb)2R 3G 3B(lsb) + PIX_FMT_NV12, ///< Planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 for UV + PIX_FMT_NV21, ///< as above, but U and V bytes are swapped + + PIX_FMT_RGB32_1, ///< Packed RGB 8:8:8, 32bpp, (msb)8R 8G 8B 8A(lsb), in cpu endianness + PIX_FMT_BGR32_1, ///< Packed RGB 8:8:8, 32bpp, (msb)8B 8G 8R 8A(lsb), in cpu endianness + + PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian + PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian + PIX_FMT_YUV440P, ///< Planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples) + PIX_FMT_YUVJ440P, ///< Planar YUV 4:4:0 full scale (jpeg) + PIX_FMT_YUVA420P, ///< Planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples) + PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions + ); + +const +{$ifdef WORDS_BIGENDIAN} + PIX_FMT_RGBA = PIX_FMT_RGB32_1; + PIX_FMT_BGRA = PIX_FMT_BGR32_1; + PIX_FMT_ARGB = PIX_FMT_RGB32; + PIX_FMT_ABGR = PIX_FMT_BGR32; + PIX_FMT_GRAY16 = PIX_FMT_GRAY16BE; +{$else} + PIX_FMT_RGBA = PIX_FMT_BGR32; + PIX_FMT_BGRA = PIX_FMT_RGB32; + PIX_FMT_ARGB = PIX_FMT_BGR32_1; + PIX_FMT_ABGR = PIX_FMT_RGB32_1; + PIX_FMT_GRAY16 = PIX_FMT_GRAY16LE; +{$endif} + +{$IF LIBAVUTIL_VERSION_MAJOR < 50} // 50.0.0 + PIX_FMT_UYVY411 = PIX_FMT_UYYVYY411; + PIX_FMT_RGBA32 = PIX_FMT_RGB32; + PIX_FMT_YUV422 = PIX_FMT_YUYV422; +{$IFEND} + +(* mem.h *) + +(** + * Allocate a block of \p 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 it cannot allocate + * it. + * @see av_mallocz() + *) +function av_malloc (size: cardinal): pointer; + cdecl; external av__util; + +(** + * Allocate or reallocate a block of memory. + * If \p ptr is NULL and \p size > 0, allocate a new block. If \p + * size is zero, free the memory block pointed by \p 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 it cannot + * reallocate or the function is used to free the memory block. + * @see av_fast_realloc() + *) +function av_realloc (ptr: pointer; size: cardinal): 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 \p size bytes with alignment suitable for all + * memory accesses (including vectors if available on the CPU) and + * set to 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 allocate + * it. + * @see av_malloc() + *) +function av_mallocz (size: cardinal): pointer; + cdecl; external av__util; + +(** + * Duplicate the string \p s. + * @param s String to be duplicated. + * @return Pointer to a newly allocated string containing a + * copy of \p s or NULL if it cannot be allocated. + *) +function av_strdup({const} s: pchar): pchar; + cdecl; external av__util; + +(** + * Free a memory block which has been allocated with av_malloc(z)() or + * av_realloc() and set to NULL the pointer to it. + * @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; + +implementation + +end. diff --git a/Game/Code/lib/ffmpeg/lazarustest.lpi b/Game/Code/lib/ffmpeg/lazarustest.lpi deleted file mode 100644 index 6ba93830..00000000 --- a/Game/Code/lib/ffmpeg/lazarustest.lpi +++ /dev/null @@ -1,226 +0,0 @@ -<?xml version="1.0"?> -<CONFIG> - <ProjectOptions> - <PathDelim Value="/"/> - <Version Value="5"/> - <General> - <MainUnit Value="0"/> - <IconPath Value="./"/> - <TargetFileExt Value=".exe"/> - <ActiveEditorIndexAtStart Value="0"/> - </General> - <VersionInfo> - <ProjectVersion Value=""/> - <Language Value=""/> - <CharSet Value=""/> - </VersionInfo> - <PublishOptions> - <Version Value="2"/> - <IgnoreBinaries Value="False"/> - <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> - <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> - </PublishOptions> - <RunParams> - <local> - <FormatVersion Value="1"/> - <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> - </local> - </RunParams> - <Units Count="6"> - <Unit0> - <Filename Value="lazarustest.lpr"/> - <IsPartOfProject Value="True"/> - <UnitName Value="lazarustest"/> - <CursorPos X="94" Y="30"/> - <TopLine Value="1"/> - <EditorIndex Value="0"/> - <UsageCount Value="23"/> - <Loaded Value="True"/> - </Unit0> - <Unit1> - <Filename Value="delphi/bass.pas"/> - <UnitName Value="Bass"/> - <CursorPos X="12" Y="539"/> - <TopLine Value="589"/> - <UsageCount Value="10"/> - </Unit1> - <Unit2> - <Filename Value="avformat.pas"/> - <UnitName Value="avformat"/> - <CursorPos X="8" Y="40"/> - <TopLine Value="1"/> - <EditorIndex Value="2"/> - <UsageCount Value="11"/> - <Loaded Value="True"/> - </Unit2> - <Unit3> - <Filename Value="avcodec.pas"/> - <UnitName Value="avcodec"/> - <CursorPos X="13" Y="34"/> - <TopLine Value="12"/> - <EditorIndex Value="3"/> - <UsageCount Value="12"/> - <Loaded Value="True"/> - </Unit3> - <Unit4> - <Filename Value="avio.pas"/> - <UnitName Value="avio"/> - <CursorPos X="1" Y="1"/> - <TopLine Value="1"/> - <EditorIndex Value="4"/> - <UsageCount Value="12"/> - <Loaded Value="True"/> - </Unit4> - <Unit5> - <Filename Value="avutil.pas"/> - <UnitName Value="avutil"/> - <CursorPos X="5" Y="28"/> - <TopLine Value="1"/> - <EditorIndex Value="1"/> - <UsageCount Value="11"/> - <Loaded Value="True"/> - </Unit5> - </Units> - <JumpHistory Count="30" HistoryIndex="29"> - <Position1> - <Filename Value="avcodec.pas"/> - <Caret Line="433" Column="65" TopLine="411"/> - </Position1> - <Position2> - <Filename Value="avcodec.pas"/> - <Caret Line="577" Column="30" TopLine="555"/> - </Position2> - <Position3> - <Filename Value="avcodec.pas"/> - <Caret Line="578" Column="23" TopLine="556"/> - </Position3> - <Position4> - <Filename Value="avcodec.pas"/> - <Caret Line="583" Column="48" TopLine="561"/> - </Position4> - <Position5> - <Filename Value="avcodec.pas"/> - <Caret Line="585" Column="39" TopLine="563"/> - </Position5> - <Position6> - <Filename Value="avcodec.pas"/> - <Caret Line="591" Column="11" TopLine="569"/> - </Position6> - <Position7> - <Filename Value="avcodec.pas"/> - <Caret Line="593" Column="24" TopLine="571"/> - </Position7> - <Position8> - <Filename Value="avcodec.pas"/> - <Caret Line="664" Column="68" TopLine="642"/> - </Position8> - <Position9> - <Filename Value="avcodec.pas"/> - <Caret Line="674" Column="44" TopLine="652"/> - </Position9> - <Position10> - <Filename Value="avcodec.pas"/> - <Caret Line="738" Column="20" TopLine="716"/> - </Position10> - <Position11> - <Filename Value="avcodec.pas"/> - <Caret Line="759" Column="45" TopLine="737"/> - </Position11> - <Position12> - <Filename Value="avcodec.pas"/> - <Caret Line="828" Column="15" TopLine="806"/> - </Position12> - <Position13> - <Filename Value="avcodec.pas"/> - <Caret Line="832" Column="38" TopLine="810"/> - </Position13> - <Position14> - <Filename Value="avcodec.pas"/> - <Caret Line="839" Column="43" TopLine="817"/> - </Position14> - <Position15> - <Filename Value="avcodec.pas"/> - <Caret Line="851" Column="41" TopLine="829"/> - </Position15> - <Position16> - <Filename Value="avcodec.pas"/> - <Caret Line="1085" Column="38" TopLine="1063"/> - </Position16> - <Position17> - <Filename Value="avcodec.pas"/> - <Caret Line="1204" Column="40" TopLine="1182"/> - </Position17> - <Position18> - <Filename Value="avcodec.pas"/> - <Caret Line="1244" Column="35" TopLine="1222"/> - </Position18> - <Position19> - <Filename Value="avcodec.pas"/> - <Caret Line="1247" Column="58" TopLine="1225"/> - </Position19> - <Position20> - <Filename Value="avcodec.pas"/> - <Caret Line="32" Column="15" TopLine="1"/> - </Position20> - <Position21> - <Filename Value="avcodec.pas"/> - <Caret Line="34" Column="15" TopLine="12"/> - </Position21> - <Position22> - <Filename Value="avcodec.pas"/> - <Caret Line="1" Column="1" TopLine="1"/> - </Position22> - <Position23> - <Filename Value="avcodec.pas"/> - <Caret Line="32" Column="15" TopLine="10"/> - </Position23> - <Position24> - <Filename Value="avformat.pas"/> - <Caret Line="37" Column="15" TopLine="1"/> - </Position24> - <Position25> - <Filename Value="avformat.pas"/> - <Caret Line="39" Column="15" TopLine="17"/> - </Position25> - <Position26> - <Filename Value="avformat.pas"/> - <Caret Line="361" Column="58" TopLine="339"/> - </Position26> - <Position27> - <Filename Value="avformat.pas"/> - <Caret Line="373" Column="51" TopLine="281"/> - </Position27> - <Position28> - <Filename Value="lazarustest.lpr"/> - <Caret Line="25" Column="27" TopLine="1"/> - </Position28> - <Position29> - <Filename Value="lazarustest.lpr"/> - <Caret Line="26" Column="1" TopLine="1"/> - </Position29> - <Position30> - <Filename Value="lazarustest.lpr"/> - <Caret Line="1" Column="1" TopLine="1"/> - </Position30> - </JumpHistory> - </ProjectOptions> - <CompilerOptions> - <Version Value="5"/> - <CodeGeneration> - <Generate Value="Faster"/> - </CodeGeneration> - <Other> - <CompilerPath Value="$(CompPath)"/> - </Other> - </CompilerOptions> - <Debugging> - <Exceptions Count="2"> - <Item1> - <Name Value="ECodetoolError"/> - </Item1> - <Item2> - <Name Value="EFOpenError"/> - </Item2> - </Exceptions> - </Debugging> -</CONFIG> diff --git a/Game/Code/lib/ffmpeg/lazarustest.lpr b/Game/Code/lib/ffmpeg/lazarustest.lpr deleted file mode 100644 index 10b59b9c..00000000 --- a/Game/Code/lib/ffmpeg/lazarustest.lpr +++ /dev/null @@ -1,30 +0,0 @@ -program lazarustest; - -{$MODE Delphi} - -uses - - avcodec in 'avcodec.pas', - avformat in 'avformat.pas', - avutil in 'avutil.pas', - rational in 'rational.pas', - opt in 'opt.pas', - avio in 'avio.pas', - sysutils; - -begin - // This compiles with all units in.. - // but I cant run it, if its compiled with lazarus or delphi - // I get errors about not finding functions in dll's - - // ON LINUX - Ubuntu .. you will probably need to - // sudo apt-get install libavcodec-dev libavformat-dev - - try - av_register_all(); - writeln( 'YES - If you see this then ffmpeg is probably lazarus compatible' ); - except - writeln( 'NO - ffmpeg is NOT lazarus compatible' ); - end; -end. - diff --git a/Game/Code/lib/ffmpeg/mathematics.pas b/Game/Code/lib/ffmpeg/mathematics.pas index 3beef517..4ecdce8f 100644 --- a/Game/Code/lib/ffmpeg/mathematics.pas +++ b/Game/Code/lib/ffmpeg/mathematics.pas @@ -1,7 +1,3 @@ -unit mathematics; - -interface - (* * copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at> * @@ -24,19 +20,23 @@ interface For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT in the source codes *) +// Revision: 10765 + +unit mathematics; + {$IFDEF FPC} - {$IFDEF LINUX} - {$LINKLIB libavutil} - {$ENDIF} - {$MODE DELPHI } (* CAT *) - {$PACKENUM 4} (* every enum type variables uses 4 bytes, CAT *) - {$PACKRECORDS C} (* GCC compatible, Record Packing, CAT *) + {$MODE DELPHI } + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) {$ENDIF} -uses - rational; (* CAT *) +interface -{$I version.inc} +uses + rational, + UConfig; type TAVRounding = ( @@ -44,23 +44,26 @@ type AV_ROUND_INF = 1, ///< round away from zero AV_ROUND_DOWN = 2, ///< round toward -infinity AV_ROUND_UP = 3, ///< round toward +infinity - AV_ROUND_NEAR_INF = 5, ///< round to nearest and halfway cases away from zero - AV_ROUND_FUCKING = $FFFFFF + AV_ROUND_NEAR_INF = 5 ///< round to nearest and halfway cases away from zero ); -(** * rescale a 64bit integer with rounding to nearest. - * a simple a*b/c isn't possible as it can overflow *) +(** + * rescale a 64bit integer with rounding to nearest. + * a simple a*b/c isn't possible as it can overflow + *) function av_rescale (a, b, c: int64): int64; cdecl; external av__util; (** * rescale a 64bit integer with specified rounding. - * a simple a*b/c isn't possible as it can overflow *) + * a simple a*b/c isn't possible as it can overflow + *) function av_rescale_rnd (a, b, c: int64; enum: TAVRounding): int64; cdecl; external av__util; (** - * rescale a 64bit integer by 2 rational numbers. *) + * rescale a 64bit integer by 2 rational numbers. + *) function av_rescale_q (a: int64; bq, cq: TAVRational): int64; cdecl; external av__util; diff --git a/Game/Code/lib/ffmpeg/mmreg.pas b/Game/Code/lib/ffmpeg/mmreg.pas deleted file mode 100644 index 05e24eb0..00000000 --- a/Game/Code/lib/ffmpeg/mmreg.pas +++ /dev/null @@ -1,1446 +0,0 @@ -unit mmreg;
-
-interface
-
-uses
- windows, mmsystem;
-
-(*++
-
-Copyright 1991-1998 Microsoft Corporation
-
-Module Name:
-
- mmreg.h
-
-Abstract:
-
- Multimedia Registration
-
-Revision History:
-
- Translated to .pas - Zinetz Victor, Dec. 2005
- mail@zinetz.info
-
---*)
-
-// Define the following to skip definitions
-//
-// NOMMIDS Multimedia IDs are not defined
-// NONEWWAVE No new waveform types are defined except WAVEFORMATEX
-// NONEWRIFF No new RIFF forms are defined
-// NOJPEGDIB No JPEG DIB definitions
-// NONEWIC No new Image Compressor types are defined
-// NOBITMAP No extended bitmap info header definition
-
-(* manufacturer IDs *)
-const
- MM_MICROSOFT = 1; //* Microsoft Corporation */
- MM_CREATIVE = 2; //* Creative Labs, Inc */
- MM_MEDIAVISION = 3; (* Media Vision, Inc. *)
- MM_FUJITSU = 4; (* Fujitsu Corp. *)
- MM_ARTISOFT = 20; (* Artisoft, Inc. *)
- MM_TURTLE_BEACH = 21; (* Turtle Beach, Inc. *)
- MM_IBM = 22; (* IBM Corporation *)
- MM_VOCALTEC = 23; (* Vocaltec LTD. *)
- MM_ROLAND = 24; (* Roland *)
- MM_DSP_SOLUTIONS = 25; (* DSP Solutions, Inc. *)
- MM_NEC = 26; (* NEC *)
- MM_ATI = 27; (* ATI *)
- MM_WANGLABS = 28; (* Wang Laboratories, Inc *)
- MM_TANDY = 29; (* Tandy Corporation *)
- MM_VOYETRA = 30; (* Voyetra *)
- MM_ANTEX = 31; (* Antex Electronics Corporation *)
- MM_ICL_PS = 32; (* ICL Personal Systems *)
- MM_INTEL = 33; (* Intel Corporation *)
- MM_GRAVIS = 34; (* Advanced Gravis *)
- MM_VAL = 35; (* Video Associates Labs, Inc. *)
- MM_INTERACTIVE = 36; (* InterActive Inc *)
- MM_YAMAHA = 37; (* Yamaha Corporation of America *)
- MM_EVEREX = 38; (* Everex Systems, Inc *)
- MM_ECHO = 39; (* Echo Speech Corporation *)
- MM_SIERRA = 40; (* Sierra Semiconductor Corp *)
- MM_CAT = 41; (* Computer Aided Technologies *)
- MM_APPS = 42; (* APPS Software International *)
- MM_DSP_GROUP = 43; (* DSP Group, Inc *)
- MM_MELABS = 44; (* microEngineering Labs *)
- MM_COMPUTER_FRIENDS = 45; (* Computer Friends, Inc. *)
- MM_ESS = 46; (* ESS Technology *)
- MM_AUDIOFILE = 47; (* Audio, Inc. *)
- MM_MOTOROLA = 48; (* Motorola, Inc. *)
- MM_CANOPUS = 49; (* Canopus, co., Ltd. *)
- MM_EPSON = 50; (* Seiko Epson Corporation *)
- MM_TRUEVISION = 51; (* Truevision *)
- MM_AZTECH = 52; (* Aztech Labs, Inc. *)
- MM_VIDEOLOGIC = 53; (* Videologic *)
- MM_SCALACS = 54; (* SCALACS *)
- MM_KORG = 55; (* Korg Inc. *)
- MM_APT = 56; (* Audio Processing Technology *)
- MM_ICS = 57; (* Integrated Circuit Systems, Inc. *)
- MM_ITERATEDSYS = 58; (* Iterated Systems, Inc. *)
- MM_METHEUS = 59; (* Metheus *)
- MM_LOGITECH = 60; (* Logitech, Inc. *)
- MM_WINNOV = 61; (* Winnov, Inc. *)
- MM_NCR = 62; (* NCR Corporation *)
- MM_EXAN = 63; (* EXAN *)
- MM_AST = 64; (* AST Research Inc. *)
- MM_WILLOWPOND = 65; (* Willow Pond Corporation *)
- MM_SONICFOUNDRY = 66; (* Sonic Foundry *)
- MM_VITEC = 67; (* Vitec Multimedia *)
- MM_MOSCOM = 68; (* MOSCOM Corporation *)
- MM_SILICONSOFT = 69; (* Silicon Soft, Inc. *)
- MM_SUPERMAC = 73; (* Supermac *)
- MM_AUDIOPT = 74; (* Audio Processing Technology *)
- MM_SPEECHCOMP = 76; (* Speech Compression *)
- MM_AHEAD = 77; (* Ahead, Inc. *)
- MM_DOLBY = 78; (* Dolby Laboratories *)
- MM_OKI = 79; (* OKI *)
- MM_AURAVISION = 80; (* AuraVision Corporation *)
- MM_OLIVETTI = 81; (* Ing C. Olivetti & C., S.p.A. *)
- MM_IOMAGIC = 82; (* I/O Magic Corporation *)
- MM_MATSUSHITA = 83; (* Matsushita Electric Industrial Co., LTD. *)
- MM_CONTROLRES = 84; (* Control Resources Limited *)
- MM_XEBEC = 85; (* Xebec Multimedia Solutions Limited *)
- MM_NEWMEDIA = 86; (* New Media Corporation *)
- MM_NMS = 87; (* Natural MicroSystems *)
- MM_LYRRUS = 88; (* Lyrrus Inc. *)
- MM_COMPUSIC = 89; (* Compusic *)
- MM_OPTI = 90; (* OPTi Computers Inc. *)
- MM_ADLACC = 91; (* Adlib Accessories Inc. *)
- MM_COMPAQ = 92; (* Compaq Computer Corp. *)
- MM_DIALOGIC = 93; (* Dialogic Corporation *)
- MM_INSOFT = 94; (* InSoft, Inc. *)
- MM_MPTUS = 95; (* M.P. Technologies, Inc. *)
- MM_WEITEK = 96; (* Weitek *)
- MM_LERNOUT_AND_HAUSPIE = 97; (* Lernout & Hauspie *)
- MM_QCIAR = 98; (* Quanta Computer Inc. *)
- MM_APPLE = 99; (* Apple Computer, Inc. *)
- MM_DIGITAL = 100; (* Digital Equipment Corporation *)
- MM_MOTU = 101; (* Mark of the Unicorn *)
- MM_WORKBIT = 102; (* Workbit Corporation *)
- MM_OSITECH = 103; (* Ositech Communications Inc. *)
- MM_MIRO = 104; (* miro Computer Products AG *)
- MM_CIRRUSLOGIC = 105; (* Cirrus Logic *)
- MM_ISOLUTION = 106; (* ISOLUTION B.V. *)
- MM_HORIZONS = 107; (* Horizons Technology, Inc *)
- MM_CONCEPTS = 108; (* Computer Concepts Ltd *)
- MM_VTG = 109; (* Voice Technologies Group, Inc. *)
- MM_RADIUS = 110; (* Radius *)
- MM_ROCKWELL = 111; (* Rockwell International *)
- MM_XYz = 112; (* Co. XYZ for testing *)
- MM_OPCODE = 113; (* Opcode Systems *)
- MM_VOXWARE = 114; (* Voxware Inc *)
- MM_NORTHERN_TELECOM = 115; (* Northern Telecom Limited *)
- MM_APICOM = 116; (* APICOM *)
- MM_GRANDE = 117; (* Grande Software *)
- MM_ADDX = 118; (* ADDX *)
- MM_WILDCAT = 119; (* Wildcat Canyon Software *)
- MM_RHETOREX = 120; (* Rhetorex Inc *)
- MM_BROOKTREE = 121; (* Brooktree Corporation *)
- MM_ENSONIQ = 125; (* ENSONIQ Corporation *)
- MM_FAST = 126; (* ///FAST Multimedia AG *)
- MM_NVIDIA = 127; (* NVidia Corporation *)
- MM_OKSORI = 128; (* OKSORI Co., Ltd. *)
- MM_DIACOUSTICS = 129; (* DiAcoustics, Inc. *)
- MM_GULBRANSEN = 130; (* Gulbransen, Inc. *)
- MM_KAY_ELEMETRICS = 131; (* Kay Elemetrics, Inc. *)
- MM_CRYSTAL = 132; (* Crystal Semiconductor Corporation *)
- MM_SPLASH_STUDIOS = 133; (* Splash Studios *)
- MM_QUARTERDECK = 134; (* Quarterdeck Corporation *)
- MM_TDK = 135; (* TDK Corporation *)
- MM_DIGITAL_AUDIO_LABS = 136; (* Digital Audio Labs, Inc. *)
- MM_SEERSYS = 137; (* Seer Systems, Inc. *)
- MM_PICTURETEL = 138; (* PictureTel Corporation *)
- MM_ATT_MICROELECTRONICS = 139; (* AT&T Microelectronics *)
- MM_OSPREY = 140; (* Osprey Technologies, Inc. *)
- MM_MEDIATRIX = 141; (* Mediatrix Peripherals *)
- MM_SOUNDESIGNS = 142; (* SounDesignS M.C.S. Ltd. *)
- MM_ALDIGITAL = 143; (* A.L. Digital Ltd. *)
- MM_SPECTRUM_SIGNAL_PROCESSING= 144; (* Spectrum Signal Processing, Inc. *)
- MM_ECS = 145; (* Electronic Courseware Systems, Inc. *)
- MM_AMD = 146; (* AMD *)
- MM_COREDYNAMICS = 147; (* Core Dynamics *)
- MM_CANAM = 148; (* CANAM Computers *)
- MM_SOFTSOUND = 149; (* Softsound, Ltd. *)
- MM_NORRIS = 150; (* Norris Communications, Inc. *)
- MM_DDD = 151; (* Danka Data Devices *)
- MM_EUPHONICS = 152; (* EuPhonics *)
- MM_PRECEPT = 153; (* Precept Software, Inc. *)
- MM_CRYSTAL_NET = 154; (* Crystal Net Corporation *)
- MM_CHROMATIC = 155; (* Chromatic Research, Inc *)
- MM_VOICEINFO = 156; (* Voice Information Systems, Inc *)
- MM_VIENNASYS = 157; (* Vienna Systems *)
- MM_CONNECTIX = 158; (* Connectix Corporation *)
- MM_GADGETLABS = 159; (* Gadget Labs LLC *)
- MM_FRONTIER = 160; (* Frontier Design Group LLC *)
- MM_VIONA = 161; (* Viona Development GmbH *)
- MM_CASIO = 162; (* Casio Computer Co., LTD *)
- MM_DIAMONDMM = 163; (* Diamond Multimedia *)
- MM_S3 = 164; (* S3 *)
- MM_FRAUNHOFER_IIS = 172; (* Fraunhofer *)
-
-(* MM_MICROSOFT product IDs *)
-
- MM_MIDI_MAPPER = 1; (* Midi Mapper *)
- MM_WAVE_MAPPER = 2; (* Wave Mapper *)
- MM_SNDBLST_MIDIOUT = 3; (* Sound Blaster MIDI output port *)
- MM_SNDBLST_MIDIIN = 4; (* Sound Blaster MIDI input port *)
- MM_SNDBLST_SYNTH = 5; (* Sound Blaster internal synth *)
- MM_SNDBLST_WAVEOUT = 6; (* Sound Blaster waveform output *)
- MM_SNDBLST_WAVEIN = 7; (* Sound Blaster waveform input *)
- MM_ADLIB = 9; (* Ad Lib Compatible synth *)
- MM_MPU401_MIDIOUT = 10; (* MPU 401 compatible MIDI output port *)
- MM_MPU401_MIDIIN = 11; (* MPU 401 compatible MIDI input port *)
- MM_PC_JOYSTICK = 12; (* Joystick adapter *)
-
- MM_PCSPEAKER_WAVEOUT = 13; (* PC speaker waveform output *)
- MM_MSFT_WSS_WAVEIN = 14; (* MS Audio Board waveform input *)
- MM_MSFT_WSS_WAVEOUT = 15; (* MS Audio Board waveform output *)
- MM_MSFT_WSS_FMSYNTH_STEREO = 16; (* MS Audio Board Stereo FM synth *)
- MM_MSFT_WSS_MIXER = 17; (* MS Audio Board Mixer Driver *)
- MM_MSFT_WSS_OEM_WAVEIN = 18; (* MS OEM Audio Board waveform input *)
- MM_MSFT_WSS_OEM_WAVEOUT = 19; (* MS OEM Audio Board waveform output *)
- MM_MSFT_WSS_OEM_FMSYNTH_STEREO = 20; (* MS OEM Audio Board Stereo FM Synth *)
- MM_MSFT_WSS_AUX = 21; (* MS Audio Board Aux. Port *)
- MM_MSFT_WSS_OEM_AUX = 22; (* MS OEM Audio Aux Port *)
- MM_MSFT_GENERIC_WAVEIN = 23; (* MS Vanilla driver waveform input *)
- MM_MSFT_GENERIC_WAVEOUT = 24; (* MS Vanilla driver wavefrom output *)
- MM_MSFT_GENERIC_MIDIIN = 25; (* MS Vanilla driver MIDI in *)
- MM_MSFT_GENERIC_MIDIOUT = 26; (* MS Vanilla driver MIDI external out *)
- MM_MSFT_GENERIC_MIDISYNTH = 27; (* MS Vanilla driver MIDI synthesizer *)
- MM_MSFT_GENERIC_AUX_LINE = 28; (* MS Vanilla driver aux (line in) *)
- MM_MSFT_GENERIC_AUX_MIC = 29; (* MS Vanilla driver aux (mic) *)
- MM_MSFT_GENERIC_AUX_CD = 30; (* MS Vanilla driver aux (CD) *)
- MM_MSFT_WSS_OEM_MIXER = 31; (* MS OEM Audio Board Mixer Driver *)
- MM_MSFT_MSACM = 32; (* MS Audio Compression Manager *)
- MM_MSFT_ACM_MSADPCM = 33; (* MS ADPCM Codec *)
- MM_MSFT_ACM_IMAADPCM = 34; (* IMA ADPCM Codec *)
- MM_MSFT_ACM_MSFILTER = 35; (* MS Filter *)
- MM_MSFT_ACM_GSM610 = 36; (* GSM 610 codec *)
- MM_MSFT_ACM_G711 = 37; (* G.711 codec *)
- MM_MSFT_ACM_PCM = 38; (* PCM converter *)
-
- // Microsoft Windows Sound System drivers
-
- MM_WSS_SB16_WAVEIN = 39; (* Sound Blaster 16 waveform input *)
- MM_WSS_SB16_WAVEOUT = 40; (* Sound Blaster 16 waveform output *)
- MM_WSS_SB16_MIDIIN = 41; (* Sound Blaster 16 midi-in *)
- MM_WSS_SB16_MIDIOUT = 42; (* Sound Blaster 16 midi out *)
- MM_WSS_SB16_SYNTH = 43; (* Sound Blaster 16 FM Synthesis *)
- MM_WSS_SB16_AUX_LINE = 44; (* Sound Blaster 16 aux (line in) *)
- MM_WSS_SB16_AUX_CD = 45; (* Sound Blaster 16 aux (CD) *)
- MM_WSS_SB16_MIXER = 46; (* Sound Blaster 16 mixer device *)
- MM_WSS_SBPRO_WAVEIN = 47; (* Sound Blaster Pro waveform input *)
- MM_WSS_SBPRO_WAVEOUT = 48; (* Sound Blaster Pro waveform output *)
- MM_WSS_SBPRO_MIDIIN = 49; (* Sound Blaster Pro midi in *)
- MM_WSS_SBPRO_MIDIOUT = 50; (* Sound Blaster Pro midi out *)
- MM_WSS_SBPRO_SYNTH = 51; (* Sound Blaster Pro FM synthesis *)
- MM_WSS_SBPRO_AUX_LINE = 52; (* Sound Blaster Pro aux (line in ) *)
- MM_WSS_SBPRO_AUX_CD = 53; (* Sound Blaster Pro aux (CD) *)
- MM_WSS_SBPRO_MIXER = 54; (* Sound Blaster Pro mixer *)
-
- MM_MSFT_WSS_NT_WAVEIN = 55; (* WSS NT wave in *)
- MM_MSFT_WSS_NT_WAVEOUT = 56; (* WSS NT wave out *)
- MM_MSFT_WSS_NT_FMSYNTH_STEREO = 57; (* WSS NT FM synth *)
- MM_MSFT_WSS_NT_MIXER = 58; (* WSS NT mixer *)
- MM_MSFT_WSS_NT_AUX = 59; (* WSS NT aux *)
-
- MM_MSFT_SB16_WAVEIN = 60; (* Sound Blaster 16 waveform input *)
- MM_MSFT_SB16_WAVEOUT = 61; (* Sound Blaster 16 waveform output *)
- MM_MSFT_SB16_MIDIIN = 62; (* Sound Blaster 16 midi-in *)
- MM_MSFT_SB16_MIDIOUT = 63; (* Sound Blaster 16 midi out *)
- MM_MSFT_SB16_SYNTH = 64; (* Sound Blaster 16 FM Synthesis *)
- MM_MSFT_SB16_AUX_LINE = 65; (* Sound Blaster 16 aux (line in) *)
- MM_MSFT_SB16_AUX_CD = 66; (* Sound Blaster 16 aux (CD) *)
- MM_MSFT_SB16_MIXER = 67; (* Sound Blaster 16 mixer device *)
- MM_MSFT_SBPRO_WAVEIN = 68; (* Sound Blaster Pro waveform input *)
- MM_MSFT_SBPRO_WAVEOUT = 69; (* Sound Blaster Pro waveform output *)
- MM_MSFT_SBPRO_MIDIIN = 70; (* Sound Blaster Pro midi in *)
- MM_MSFT_SBPRO_MIDIOUT = 71; (* Sound Blaster Pro midi out *)
- MM_MSFT_SBPRO_SYNTH = 72; (* Sound Blaster Pro FM synthesis *)
- MM_MSFT_SBPRO_AUX_LINE = 73; (* Sound Blaster Pro aux (line in ) *)
- MM_MSFT_SBPRO_AUX_CD = 74; (* Sound Blaster Pro aux (CD) *)
- MM_MSFT_SBPRO_MIXER = 75; (* Sound Blaster Pro mixer *)
-
- MM_MSFT_MSOPL_SYNTH = 76; (* Yamaha OPL2/OPL3 compatible FM synthesis *)
-
- MM_MSFT_VMDMS_LINE_WAVEIN = 80; (* Voice Modem Serial Line Wave Input *)
- MM_MSFT_VMDMS_LINE_WAVEOUT = 81; (* Voice Modem Serial Line Wave Output *)
- MM_MSFT_VMDMS_HANDSET_WAVEIN = 82; (* Voice Modem Serial Handset Wave Input *)
- MM_MSFT_VMDMS_HANDSET_WAVEOUT = 83; (* Voice Modem Serial Handset Wave Output *)
- MM_MSFT_VMDMW_LINE_WAVEIN = 84; (* Voice Modem Wrapper Line Wave Input *)
- MM_MSFT_VMDMW_LINE_WAVEOUT = 85; (* Voice Modem Wrapper Line Wave Output *)
- MM_MSFT_VMDMW_HANDSET_WAVEIN = 86; (* Voice Modem Wrapper Handset Wave Input *)
- MM_MSFT_VMDMW_HANDSET_WAVEOUT = 87; (* Voice Modem Wrapper Handset Wave Output *)
- MM_MSFT_VMDMW_MIXER = 88; (* Voice Modem Wrapper Mixer *)
- MM_MSFT_VMDM_GAME_WAVEOUT = 89; (* Voice Modem Game Compatible Wave Device *)
- MM_MSFT_VMDM_GAME_WAVEIN = 90; (* Voice Modem Game Compatible Wave Device *)
-
- MM_MSFT_ACM_MSNAUDIO = 91; (* *)
- MM_MSFT_ACM_MSG723 = 92; (* *)
-
- MM_MSFT_WDMAUDIO_WAVEOUT = 100; (* Generic id for WDM Audio drivers *)
- MM_MSFT_WDMAUDIO_WAVEIN = 101; (* Generic id for WDM Audio drivers *)
- MM_MSFT_WDMAUDIO_MIDIOUT = 102; (* Generic id for WDM Audio drivers *)
- MM_MSFT_WDMAUDIO_MIDIIN = 103; (* Generic id for WDM Audio drivers *)
- MM_MSFT_WDMAUDIO_MIXER = 104; (* Generic id for WDM Audio drivers *)
-
-
-(* MM_CREATIVE product IDs *)
- MM_CREATIVE_SB15_WAVEIN = 1; (* SB (r) 1.5 waveform input *)
- MM_CREATIVE_SB20_WAVEIN = 2;
- MM_CREATIVE_SBPRO_WAVEIN = 3;
- MM_CREATIVE_SBP16_WAVEIN = 4;
- MM_CREATIVE_PHNBLST_WAVEIN = 5;
- MM_CREATIVE_SB15_WAVEOUT = 101;
- MM_CREATIVE_SB20_WAVEOUT = 102;
- MM_CREATIVE_SBPRO_WAVEOUT = 103;
- MM_CREATIVE_SBP16_WAVEOUT = 104;
- MM_CREATIVE_PHNBLST_WAVEOUT = 105;
- MM_CREATIVE_MIDIOUT = 201; (* SB (r) *)
- MM_CREATIVE_MIDIIN = 202; (* SB (r) *)
- MM_CREATIVE_FMSYNTH_MONO = 301; (* SB (r) *)
- MM_CREATIVE_FMSYNTH_STEREO = 302; (* SB Pro (r) stereo synthesizer *)
- MM_CREATIVE_MIDI_AWE32 = 303;
- MM_CREATIVE_AUX_CD = 401; (* SB Pro (r) aux (CD) *)
- MM_CREATIVE_AUX_LINE = 402; (* SB Pro (r) aux (Line in ) *)
- MM_CREATIVE_AUX_MIC = 403; (* SB Pro (r) aux (mic) *)
- MM_CREATIVE_AUX_MASTER = 404;
- MM_CREATIVE_AUX_PCSPK = 405;
- MM_CREATIVE_AUX_WAVE = 406;
- MM_CREATIVE_AUX_MIDI = 407;
- MM_CREATIVE_SBPRO_MIXER = 408;
- MM_CREATIVE_SB16_MIXER = 409;
-
-(* MM_MEDIAVISION product IDs *)
-
-// Pro Audio Spectrum
- MM_MEDIAVISION_PROAUDIO = $10;
- MM_PROAUD_MIDIOUT = (MM_MEDIAVISION_PROAUDIO+1);
- MM_PROAUD_MIDIIN = (MM_MEDIAVISION_PROAUDIO+2);
- MM_PROAUD_SYNTH = (MM_MEDIAVISION_PROAUDIO+3);
- MM_PROAUD_WAVEOUT = (MM_MEDIAVISION_PROAUDIO+4);
- MM_PROAUD_WAVEIN = (MM_MEDIAVISION_PROAUDIO+5);
- MM_PROAUD_MIXER = (MM_MEDIAVISION_PROAUDIO+6);
- MM_PROAUD_AUX = (MM_MEDIAVISION_PROAUDIO+7);
-
-// Thunder Board
- MM_MEDIAVISION_THUNDER = $20;
- MM_THUNDER_SYNTH = (MM_MEDIAVISION_THUNDER+3);
- MM_THUNDER_WAVEOUT = (MM_MEDIAVISION_THUNDER+4);
- MM_THUNDER_WAVEIN = (MM_MEDIAVISION_THUNDER+5);
- MM_THUNDER_AUX = (MM_MEDIAVISION_THUNDER+7);
-
-// Audio Port
- MM_MEDIAVISION_TPORT = $40;
- MM_TPORT_WAVEOUT = (MM_MEDIAVISION_TPORT+1);
- MM_TPORT_WAVEIN = (MM_MEDIAVISION_TPORT+2);
- MM_TPORT_SYNTH = (MM_MEDIAVISION_TPORT+3);
-
-// Pro Audio Spectrum Plus
- MM_MEDIAVISION_PROAUDIO_PLUS = $50;
- MM_PROAUD_PLUS_MIDIOUT = (MM_MEDIAVISION_PROAUDIO_PLUS+1);
- MM_PROAUD_PLUS_MIDIIN = (MM_MEDIAVISION_PROAUDIO_PLUS+2);
- MM_PROAUD_PLUS_SYNTH = (MM_MEDIAVISION_PROAUDIO_PLUS+3);
- MM_PROAUD_PLUS_WAVEOUT = (MM_MEDIAVISION_PROAUDIO_PLUS+4);
- MM_PROAUD_PLUS_WAVEIN = (MM_MEDIAVISION_PROAUDIO_PLUS+5);
- MM_PROAUD_PLUS_MIXER = (MM_MEDIAVISION_PROAUDIO_PLUS+6);
- MM_PROAUD_PLUS_AUX = (MM_MEDIAVISION_PROAUDIO_PLUS+7);
-
-// Pro Audio Spectrum 16
- MM_MEDIAVISION_PROAUDIO_16 = $60;
- MM_PROAUD_16_MIDIOUT = (MM_MEDIAVISION_PROAUDIO_16+1);
- MM_PROAUD_16_MIDIIN = (MM_MEDIAVISION_PROAUDIO_16+2);
- MM_PROAUD_16_SYNTH = (MM_MEDIAVISION_PROAUDIO_16+3);
- MM_PROAUD_16_WAVEOUT = (MM_MEDIAVISION_PROAUDIO_16+4);
- MM_PROAUD_16_WAVEIN = (MM_MEDIAVISION_PROAUDIO_16+5);
- MM_PROAUD_16_MIXER = (MM_MEDIAVISION_PROAUDIO_16+6);
- MM_PROAUD_16_AUX = (MM_MEDIAVISION_PROAUDIO_16+7);
-
-// Pro Audio Studio 16
- MM_MEDIAVISION_PROSTUDIO_16 = $60;
- MM_STUDIO_16_MIDIOUT = (MM_MEDIAVISION_PROSTUDIO_16+1);
- MM_STUDIO_16_MIDIIN = (MM_MEDIAVISION_PROSTUDIO_16+2);
- MM_STUDIO_16_SYNTH = (MM_MEDIAVISION_PROSTUDIO_16+3);
- MM_STUDIO_16_WAVEOUT = (MM_MEDIAVISION_PROSTUDIO_16+4);
- MM_STUDIO_16_WAVEIN = (MM_MEDIAVISION_PROSTUDIO_16+5);
- MM_STUDIO_16_MIXER = (MM_MEDIAVISION_PROSTUDIO_16+6);
- MM_STUDIO_16_AUX = (MM_MEDIAVISION_PROSTUDIO_16+7);
-
-// CDPC
- MM_MEDIAVISION_CDPC = $70;
- MM_CDPC_MIDIOUT = (MM_MEDIAVISION_CDPC+1);
- MM_CDPC_MIDIIN = (MM_MEDIAVISION_CDPC+2);
- MM_CDPC_SYNTH = (MM_MEDIAVISION_CDPC+3);
- MM_CDPC_WAVEOUT = (MM_MEDIAVISION_CDPC+4);
- MM_CDPC_WAVEIN = (MM_MEDIAVISION_CDPC+5);
- MM_CDPC_MIXER = (MM_MEDIAVISION_CDPC+6);
- MM_CDPC_AUX = (MM_MEDIAVISION_CDPC+7);
-
-// Opus MV 1208 Chipsent
- MM_MEDIAVISION_OPUS1208 = $80;
- MM_OPUS401_MIDIOUT = (MM_MEDIAVISION_OPUS1208+1);
- MM_OPUS401_MIDIIN = (MM_MEDIAVISION_OPUS1208+2);
- MM_OPUS1208_SYNTH = (MM_MEDIAVISION_OPUS1208+3);
- MM_OPUS1208_WAVEOUT = (MM_MEDIAVISION_OPUS1208+4);
- MM_OPUS1208_WAVEIN = (MM_MEDIAVISION_OPUS1208+5);
- MM_OPUS1208_MIXER = (MM_MEDIAVISION_OPUS1208+6);
- MM_OPUS1208_AUX = (MM_MEDIAVISION_OPUS1208+7);
-
-// Opus MV 1216 chipset
- MM_MEDIAVISION_OPUS1216 = $90;
- MM_OPUS1216_MIDIOUT = (MM_MEDIAVISION_OPUS1216+1);
- MM_OPUS1216_MIDIIN = (MM_MEDIAVISION_OPUS1216+2);
- MM_OPUS1216_SYNTH = (MM_MEDIAVISION_OPUS1216+3);
- MM_OPUS1216_WAVEOUT = (MM_MEDIAVISION_OPUS1216+4);
- MM_OPUS1216_WAVEIN = (MM_MEDIAVISION_OPUS1216+5);
- MM_OPUS1216_MIXER = (MM_MEDIAVISION_OPUS1216+6);
- MM_OPUS1216_AUX = (MM_MEDIAVISION_OPUS1216+7);
-
-(* MM_ARTISOFT product IDs *)
- MM_ARTISOFT_SBWAVEIN = 1; (* Artisoft sounding Board waveform input *)
- MM_ARTISOFT_SBWAVEOUT = 2; (* Artisoft sounding Board waveform output *)
-
-(* MM_IBM product IDs *)
- MM_MMOTION_WAVEAUX = 1; (* IBM M-Motion Auxiliary Device *)
- MM_MMOTION_WAVEOUT = 2; (* IBM M-Motion Waveform output *)
- MM_MMOTION_WAVEIN = 3; (* IBM M-Motion Waveform Input *)
- MM_IBM_PCMCIA_WAVEIN = 11; (* IBM waveform input *)
- MM_IBM_PCMCIA_WAVEOUT = 12; (* IBM Waveform output *)
- MM_IBM_PCMCIA_SYNTH = 13; (* IBM Midi Synthesis *)
- MM_IBM_PCMCIA_MIDIIN = 14; (* IBM external MIDI in *)
- MM_IBM_PCMCIA_MIDIOUT = 15; (* IBM external MIDI out *)
- MM_IBM_PCMCIA_AUX = 16; (* IBM auxiliary control *)
- MM_IBM_THINKPAD200 = 17;
- MM_IBM_MWAVE_WAVEIN = 18;
- MM_IBM_MWAVE_WAVEOUT = 19;
- MM_IBM_MWAVE_MIXER = 20;
- MM_IBM_MWAVE_MIDIIN = 21;
- MM_IBM_MWAVE_MIDIOUT = 22;
- MM_IBM_MWAVE_AUX = 23;
- MM_IBM_WC_MIDIOUT = 30;
- MM_IBM_WC_WAVEOUT = 31;
- MM_IBM_WC_MIXEROUT = 33;
-
-(* MM_VOCALTEC product IDs *)
- MM_VOCALTEC_WAVEOUT = 1;
- MM_VOCALTEC_WAVEIN = 2;
-
-(* MM_ROLAND product IDs *)
- MM_ROLAND_RAP10_MIDIOUT = 10; (* MM_ROLAND_RAP10 *)
- MM_ROLAND_RAP10_MIDIIN = 11; (* MM_ROLAND_RAP10 *)
- MM_ROLAND_RAP10_SYNTH = 12; (* MM_ROLAND_RAP10 *)
- MM_ROLAND_RAP10_WAVEOUT = 13; (* MM_ROLAND_RAP10 *)
- MM_ROLAND_RAP10_WAVEIN = 14; (* MM_ROLAND_RAP10 *)
- MM_ROLAND_MPU401_MIDIOUT = 15;
- MM_ROLAND_MPU401_MIDIIN = 16;
- MM_ROLAND_SMPU_MIDIOUTA = 17;
- MM_ROLAND_SMPU_MIDIOUTB = 18;
- MM_ROLAND_SMPU_MIDIINA = 19;
- MM_ROLAND_SMPU_MIDIINB = 20;
- MM_ROLAND_SC7_MIDIOUT = 21;
- MM_ROLAND_SC7_MIDIIN = 22;
- MM_ROLAND_SERIAL_MIDIOUT = 23;
- MM_ROLAND_SERIAL_MIDIIN = 24;
- MM_ROLAND_SCP_MIDIOUT = 38;
- MM_ROLAND_SCP_MIDIIN = 39;
- MM_ROLAND_SCP_WAVEOUT = 40;
- MM_ROLAND_SCP_WAVEIN = 41;
- MM_ROLAND_SCP_MIXER = 42;
- MM_ROLAND_SCP_AUX = 48;
-
-(* MM_DSP_SOLUTIONS product IDs *)
- MM_DSP_SOLUTIONS_WAVEOUT = 1;
- MM_DSP_SOLUTIONS_WAVEIN = 2;
- MM_DSP_SOLUTIONS_SYNTH = 3;
- MM_DSP_SOLUTIONS_AUX = 4;
-
-(* MM_WANGLABS product IDs *)
- MM_WANGLABS_WAVEIN1 = 1; (* Input audio wave on CPU board models: Exec 4010, 4030, 3450; PC 251/25c, pc 461/25s , pc 461/33c *)
- MM_WANGLABS_WAVEOUT1 = 2;
-
-(* MM_TANDY product IDs *)
- MM_TANDY_VISWAVEIN = 1;
- MM_TANDY_VISWAVEOUT = 2;
- MM_TANDY_VISBIOSSYNTH = 3;
- MM_TANDY_SENS_MMAWAVEIN = 4;
- MM_TANDY_SENS_MMAWAVEOUT = 5;
- MM_TANDY_SENS_MMAMIDIIN = 6;
- MM_TANDY_SENS_MMAMIDIOUT = 7;
- MM_TANDY_SENS_VISWAVEOUT = 8;
- MM_TANDY_PSSJWAVEIN = 9;
- MM_TANDY_PSSJWAVEOUT = 10;
-
-(* product IDs *)
- MM_INTELOPD_WAVEIN = 1; (* HID2 WaveAudio Driver *)
- MM_INTELOPD_WAVEOUT = 101; (* HID2 *)
- MM_INTELOPD_AUX = 401; (* HID2 for mixing *)
- MM_INTEL_NSPMODEMLINE = 501;
-
-(* MM_INTERACTIVE product IDs *)
- MM_INTERACTIVE_WAVEIN = $45;
- MM_INTERACTIVE_WAVEOUT = $45;
-
-(* MM_YAMAHA product IDs *)
- MM_YAMAHA_GSS_SYNTH = $01;
- MM_YAMAHA_GSS_WAVEOUT = $02;
- MM_YAMAHA_GSS_WAVEIN = $03;
- MM_YAMAHA_GSS_MIDIOUT = $04;
- MM_YAMAHA_GSS_MIDIIN = $05;
- MM_YAMAHA_GSS_AUX = $06;
- MM_YAMAHA_SERIAL_MIDIOUT = $07;
- MM_YAMAHA_SERIAL_MIDIIN = $08;
- MM_YAMAHA_OPL3SA_WAVEOUT = $10;
- MM_YAMAHA_OPL3SA_WAVEIN = $11;
- MM_YAMAHA_OPL3SA_FMSYNTH = $12;
- MM_YAMAHA_OPL3SA_YSYNTH = $13;
- MM_YAMAHA_OPL3SA_MIDIOUT = $14;
- MM_YAMAHA_OPL3SA_MIDIIN = $15;
- MM_YAMAHA_OPL3SA_MIXER = $17;
- MM_YAMAHA_OPL3SA_JOYSTICK = $18;
-
-(* MM_EVEREX product IDs *)
- MM_EVEREX_CARRIER = $01;
-
-(* MM_ECHO product IDs *)
- MM_ECHO_SYNTH = $01;
- MM_ECHO_WAVEOUT = $02;
- MM_ECHO_WAVEIN = $03;
- MM_ECHO_MIDIOUT = $04;
- MM_ECHO_MIDIIN = $05;
- MM_ECHO_AUX = $06;
-
-(* MM_SIERRA product IDs *)
- MM_SIERRA_ARIA_MIDIOUT = $14;
- MM_SIERRA_ARIA_MIDIIN = $15;
- MM_SIERRA_ARIA_SYNTH = $16;
- MM_SIERRA_ARIA_WAVEOUT = $17;
- MM_SIERRA_ARIA_WAVEIN = $18;
- MM_SIERRA_ARIA_AUX = $19;
- MM_SIERRA_ARIA_AUX2 = $20;
- MM_SIERRA_QUARTET_WAVEIN = $50;
- MM_SIERRA_QUARTET_WAVEOUT = $51;
- MM_SIERRA_QUARTET_MIDIIN = $52;
- MM_SIERRA_QUARTET_MIDIOUT = $53;
- MM_SIERRA_QUARTET_SYNTH = $54;
- MM_SIERRA_QUARTET_AUX_CD = $55;
- MM_SIERRA_QUARTET_AUX_LINE = $56;
- MM_SIERRA_QUARTET_AUX_MODEM = $57;
- MM_SIERRA_QUARTET_MIXER = $58;
-
-(* MM_CAT product IDs *)
- MM_CAT_WAVEOUT = 1;
-
-(* MM_DSP_GROUP product IDs *)
- MM_DSP_GROUP_TRUESPEECH = $01;
-
-(* MM_MELABS product IDs *)
- MM_MELABS_MIDI2GO = $01;
-
-(* MM_ESS product IDs *)
- MM_ESS_AMWAVEOUT = $01;
- MM_ESS_AMWAVEIN = $02;
- MM_ESS_AMAUX = $03;
- MM_ESS_AMSYNTH = $04;
- MM_ESS_AMMIDIOUT = $05;
- MM_ESS_AMMIDIIN = $06;
- MM_ESS_MIXER = $07;
- MM_ESS_AUX_CD = $08;
- MM_ESS_MPU401_MIDIOUT = $09;
- MM_ESS_MPU401_MIDIIN = $0A;
- MM_ESS_ES488_WAVEOUT = $10;
- MM_ESS_ES488_WAVEIN = $11;
- MM_ESS_ES488_MIXER = $12;
- MM_ESS_ES688_WAVEOUT = $13;
- MM_ESS_ES688_WAVEIN = $14;
- MM_ESS_ES688_MIXER = $15;
- MM_ESS_ES1488_WAVEOUT = $16;
- MM_ESS_ES1488_WAVEIN = $17;
- MM_ESS_ES1488_MIXER = $18;
- MM_ESS_ES1688_WAVEOUT = $19;
- MM_ESS_ES1688_WAVEIN = $1A;
- MM_ESS_ES1688_MIXER = $1B;
- MM_ESS_ES1788_WAVEOUT = $1C;
- MM_ESS_ES1788_WAVEIN = $1D;
- MM_ESS_ES1788_MIXER = $1E;
- MM_ESS_ES1888_WAVEOUT = $1F;
- MM_ESS_ES1888_WAVEIN = $20;
- MM_ESS_ES1888_MIXER = $21;
- MM_ESS_ES1868_WAVEOUT = $22;
- MM_ESS_ES1868_WAVEIN = $23;
- MM_ESS_ES1868_MIXER = $24;
- MM_ESS_ES1878_WAVEOUT = $25;
- MM_ESS_ES1878_WAVEIN = $26;
- MM_ESS_ES1878_MIXER = $27;
-
-(* product IDs *)
- MM_EPS_FMSND = 1;
-
-(* MM_TRUEVISION product IDs *)
- MM_TRUEVISION_WAVEIN1 = 1;
- MM_TRUEVISION_WAVEOUT1 = 2;
-
-(* MM_AZTECH product IDs *)
- MM_AZTECH_MIDIOUT = 3;
- MM_AZTECH_MIDIIN = 4;
- MM_AZTECH_WAVEIN = 17;
- MM_AZTECH_WAVEOUT = 18;
- MM_AZTECH_FMSYNTH = 20;
- MM_AZTECH_MIXER = 21;
- MM_AZTECH_PRO16_WAVEIN = 33;
- MM_AZTECH_PRO16_WAVEOUT = 34;
- MM_AZTECH_PRO16_FMSYNTH = 38;
- MM_AZTECH_DSP16_WAVEIN = 65;
- MM_AZTECH_DSP16_WAVEOUT = 66;
- MM_AZTECH_DSP16_FMSYNTH = 68;
- MM_AZTECH_DSP16_WAVESYNTH = 70;
- MM_AZTECH_NOVA16_WAVEIN = 71;
- MM_AZTECH_NOVA16_WAVEOUT = 72;
- MM_AZTECH_NOVA16_MIXER = 73;
- MM_AZTECH_WASH16_WAVEIN = 74;
- MM_AZTECH_WASH16_WAVEOUT = 75;
- MM_AZTECH_WASH16_MIXER = 76;
- MM_AZTECH_AUX_CD = 401;
- MM_AZTECH_AUX_LINE = 402;
- MM_AZTECH_AUX_MIC = 403;
- MM_AZTECH_AUX = 404;
-
-(* MM_VIDEOLOGIC product IDs *)
- MM_VIDEOLOGIC_MSWAVEIN = 1;
- MM_VIDEOLOGIC_MSWAVEOUT = 2;
-
-(* MM_KORG product IDs *)
- MM_KORG_PCIF_MIDIOUT = 1;
- MM_KORG_PCIF_MIDIIN = 2;
-
-(* MM_APT product IDs *)
- MM_APT_ACE100CD = 1;
-
-(* MM_ICS product IDs *)
- MM_ICS_WAVEDECK_WAVEOUT = 1; (* MS WSS compatible card and driver *)
- MM_ICS_WAVEDECK_WAVEIN = 2;
- MM_ICS_WAVEDECK_MIXER = 3;
- MM_ICS_WAVEDECK_AUX = 4;
- MM_ICS_WAVEDECK_SYNTH = 5;
- MM_ICS_WAVEDEC_SB_WAVEOUT = 6;
- MM_ICS_WAVEDEC_SB_WAVEIN = 7;
- MM_ICS_WAVEDEC_SB_FM_MIDIOUT = 8;
- MM_ICS_WAVEDEC_SB_MPU401_MIDIOUT = 9;
- MM_ICS_WAVEDEC_SB_MPU401_MIDIIN = 10;
- MM_ICS_WAVEDEC_SB_MIXER = 11;
- MM_ICS_WAVEDEC_SB_AUX = 12;
- MM_ICS_2115_LITE_MIDIOUT = 13;
- MM_ICS_2120_LITE_MIDIOUT = 14;
-
-(* MM_ITERATEDSYS product IDs *)
- MM_ITERATEDSYS_FUFCODEC = 1;
-
-(* MM_METHEUS product IDs *)
- MM_METHEUS_ZIPPER = 1;
-
-(* MM_WINNOV product IDs *)
- MM_WINNOV_CAVIAR_WAVEIN = 1;
- MM_WINNOV_CAVIAR_WAVEOUT = 2;
- MM_WINNOV_CAVIAR_VIDC = 3;
- MM_WINNOV_CAVIAR_CHAMPAGNE = 4; (* Fourcc is CHAM *)
- MM_WINNOV_CAVIAR_YUV8 = 5; (* Fourcc is YUV8 *)
-
-(* MM_NCR product IDs *)
- MM_NCR_BA_WAVEIN = 1;
- MM_NCR_BA_WAVEOUT = 2;
- MM_NCR_BA_SYNTH = 3;
- MM_NCR_BA_AUX = 4;
- MM_NCR_BA_MIXER = 5;
-
-(* MM_VITEC product IDs *)
- MM_VITEC_VMAKER = 1;
- MM_VITEC_VMPRO = 2;
-
-(* MM_MOSCOM product IDs *)
- MM_MOSCOM_VPC2400_IN = 1; (* Four Port Voice Processing / Voice Recognition Board *)
- MM_MOSCOM_VPC2400_OUT = 2; (* VPC2400 *)
-
-(* MM_SILICONSOFT product IDs *)
- MM_SILICONSOFT_SC1_WAVEIN = 1; (* Waveform in , high sample rate *)
- MM_SILICONSOFT_SC1_WAVEOUT = 2; (* Waveform out , high sample rate *)
- MM_SILICONSOFT_SC2_WAVEIN = 3; (* Waveform in 2 channels, high sample rate *)
- MM_SILICONSOFT_SC2_WAVEOUT = 4; (* Waveform out 2 channels, high sample rate *)
- MM_SILICONSOFT_SOUNDJR2_WAVEOUT = 5; (* Waveform out, self powered, efficient *)
- MM_SILICONSOFT_SOUNDJR2PR_WAVEIN = 6; (* Waveform in, self powered, efficient *)
- MM_SILICONSOFT_SOUNDJR2PR_WAVEOUT = 7; (* Waveform out 2 channels, self powered, efficient *)
- MM_SILICONSOFT_SOUNDJR3_WAVEOUT = 8; (* Waveform in 2 channels, self powered, efficient *)
-
-(* MM_OLIVETTI product IDs *)
- MM_OLIVETTI_WAVEIN = 1;
- MM_OLIVETTI_WAVEOUT = 2;
- MM_OLIVETTI_MIXER = 3;
- MM_OLIVETTI_AUX = 4;
- MM_OLIVETTI_MIDIIN = 5;
- MM_OLIVETTI_MIDIOUT = 6;
- MM_OLIVETTI_SYNTH = 7;
- MM_OLIVETTI_JOYSTICK = 8;
- MM_OLIVETTI_ACM_GSM = 9;
- MM_OLIVETTI_ACM_ADPCM = 10;
- MM_OLIVETTI_ACM_CELP = 11;
- MM_OLIVETTI_ACM_SBC = 12;
- MM_OLIVETTI_ACM_OPR = 13;
-
-(* MM_IOMAGIC product IDs *)
-
-(* The I/O Magic Tempo is a PCMCIA Type 2 audio card featuring wave audio
- record and playback, FM synthesizer, and MIDI output. The I/O Magic
- Tempo WaveOut device supports mono and stereo PCM playback at rates
- of 7350, 11025, 22050, and 44100 samples *)
-
- MM_IOMAGIC_TEMPO_WAVEOUT = 1;
- MM_IOMAGIC_TEMPO_WAVEIN = 2;
- MM_IOMAGIC_TEMPO_SYNTH = 3;
- MM_IOMAGIC_TEMPO_MIDIOUT = 4;
- MM_IOMAGIC_TEMPO_MXDOUT = 5;
- MM_IOMAGIC_TEMPO_AUXOUT = 6;
-
-(* MM_MATSUSHITA product IDs *)
- MM_MATSUSHITA_WAVEIN = 1;
- MM_MATSUSHITA_WAVEOUT = 2;
- MM_MATSUSHITA_FMSYNTH_STEREO = 3;
- MM_MATSUSHITA_MIXER = 4;
- MM_MATSUSHITA_AUX = 5;
-
-(* MM_NEWMEDIA product IDs *)
- MM_NEWMEDIA_WAVJAMMER = 1; (* WSS Compatible sound card. *)
-
-(* MM_LYRRUS product IDs *)
-
-(* Bridge is a MIDI driver that allows the the Lyrrus G-VOX hardware to
- communicate with Windows base transcription and sequencer applications.
- The driver also provides a mechanism for the user to configure the system
- to their personal playing style. *)
-
- MM_LYRRUS_BRIDGE_GUITAR = 1;
-
-(* MM_OPTI product IDs *)
- MM_OPTI_M16_FMSYNTH_STEREO = $0001;
- MM_OPTI_M16_MIDIIN = $0002;
- MM_OPTI_M16_MIDIOUT = $0003;
- MM_OPTI_M16_WAVEIN = $0004;
- MM_OPTI_M16_WAVEOUT = $0005;
- MM_OPTI_M16_MIXER = $0006;
- MM_OPTI_M16_AUX = $0007;
- MM_OPTI_P16_FMSYNTH_STEREO = $0010;
- MM_OPTI_P16_MIDIIN = $0011;
- MM_OPTI_P16_MIDIOUT = $0012;
- MM_OPTI_P16_WAVEIN = $0013;
- MM_OPTI_P16_WAVEOUT = $0014;
- MM_OPTI_P16_MIXER = $0015;
- MM_OPTI_P16_AUX = $0016;
- MM_OPTI_M32_WAVEIN = $0020;
- MM_OPTI_M32_WAVEOUT = $0021;
- MM_OPTI_M32_MIDIIN = $0022;
- MM_OPTI_M32_MIDIOUT = $0023;
- MM_OPTI_M32_SYNTH_STEREO = $0024;
- MM_OPTI_M32_MIXER = $0025;
- MM_OPTI_M32_AUX = $0026;
-
-(* Product IDs for MM_ADDX - ADDX *)
- MM_ADDX_PCTV_DIGITALMIX = 1; (* MM_ADDX_PCTV_DIGITALMIX *)
- MM_ADDX_PCTV_WAVEIN = 2; (* MM_ADDX_PCTV_WAVEIN *)
- MM_ADDX_PCTV_WAVEOUT = 3; (* MM_ADDX_PCTV_WAVEOUT *)
- MM_ADDX_PCTV_MIXER = 4; (* MM_ADDX_PCTV_MIXER *)
- MM_ADDX_PCTV_AUX_CD = 5; (* MM_ADDX_PCTV_AUX_CD *)
- MM_ADDX_PCTV_AUX_LINE = 6; (* MM_ADDX_PCTV_AUX_LINE *)
-
-(* Product IDs for MM_AHEAD - Ahead, Inc. *)
- MM_AHEAD_MULTISOUND = 1;
- MM_AHEAD_SOUNDBLASTER = 2;
- MM_AHEAD_PROAUDIO = 3;
- MM_AHEAD_GENERIC = 4;
-
-(* Product IDs for MM_AMD - AMD *)
- MM_AMD_INTERWAVE_WAVEIN = 1;
- MM_AMD_INTERWAVE_WAVEOUT = 2;
- MM_AMD_INTERWAVE_SYNTH = 3;
- MM_AMD_INTERWAVE_MIXER1 = 4;
- MM_AMD_INTERWAVE_MIXER2 = 5;
- MM_AMD_INTERWAVE_JOYSTICK = 6;
- MM_AMD_INTERWAVE_EX_CD = 7;
- MM_AMD_INTERWAVE_MIDIIN = 8;
- MM_AMD_INTERWAVE_MIDIOUT = 9;
- MM_AMD_INTERWAVE_AUX1 = 10;
- MM_AMD_INTERWAVE_AUX2 = 11;
- MM_AMD_INTERWAVE_AUX_MIC = 12;
- MM_AMD_INTERWAVE_AUX_CD = 13;
- MM_AMD_INTERWAVE_MONO_IN = 14;
- MM_AMD_INTERWAVE_MONO_OUT = 15;
- MM_AMD_INTERWAVE_EX_TELEPHONY = 16;
- MM_AMD_INTERWAVE_WAVEOUT_BASE = 17;
- MM_AMD_INTERWAVE_WAVEOUT_TREBLE = 18;
- MM_AMD_INTERWAVE_STEREO_ENHANCED = 19;
-
-(* Product IDs for MM_AST - AST Research Inc. *)
- MM_AST_MODEMWAVE_WAVEIN = 13;
- MM_AST_MODEMWAVE_WAVEOUT = 14;
-
-(* Product IDs for MM_BROOKTREE - Brooktree Corporation *)
- MM_BTV_WAVEIN = 1; (* Brooktree PCM Wave Audio In *)
- MM_BTV_WAVEOUT = 2; (* Brooktree PCM Wave Audio Out *)
- MM_BTV_MIDIIN = 3; (* Brooktree MIDI In *)
- MM_BTV_MIDIOUT = 4; (* Brooktree MIDI out *)
- MM_BTV_MIDISYNTH = 5; (* Brooktree MIDI FM synth *)
- MM_BTV_AUX_LINE = 6; (* Brooktree Line Input *)
- MM_BTV_AUX_MIC = 7; (* Brooktree Microphone Input *)
- MM_BTV_AUX_CD = 8; (* Brooktree CD Input *)
- MM_BTV_DIGITALIN = 9; (* Brooktree PCM Wave in with subcode information *)
- MM_BTV_DIGITALOUT = 10; (* Brooktree PCM Wave out with subcode information *)
- MM_BTV_MIDIWAVESTREAM = 11; (* Brooktree WaveStream *)
- MM_BTV_MIXER = 12; (* Brooktree WSS Mixer driver *)
-
-(* Product IDs for MM_CANAM - CANAM Computers *)
- MM_CANAM_CBXWAVEOUT = 1;
- MM_CANAM_CBXWAVEIN = 2;
-
-(* Product IDs for MM_CASIO - Casio Computer Co., LTD *)
- MM_CASIO_WP150_MIDIOUT = 1; (* wp150 *)
- MM_CASIO_WP150_MIDIIN = 2;
-
-(* Product IDs for MM_COMPAQ - Compaq Computer Corp. *)
- MM_COMPAQ_BB_WAVEIN = 1;
- MM_COMPAQ_BB_WAVEOUT = 2;
- MM_COMPAQ_BB_WAVEAUX = 3;
-
-(* Product IDs for MM_COREDYNAMICS - Core Dynamics *)
- MM_COREDYNAMICS_DYNAMIXHR = 1; (* DynaMax Hi-Rez *)
- MM_COREDYNAMICS_DYNASONIX_SYNTH = 2; (* DynaSonix *)
- MM_COREDYNAMICS_DYNASONIX_MIDI_IN = 3;
- MM_COREDYNAMICS_DYNASONIX_MIDI_OUT= 4;
- MM_COREDYNAMICS_DYNASONIX_WAVE_IN = 5;
- MM_COREDYNAMICS_DYNASONIX_WAVE_OUT= 6;
- MM_COREDYNAMICS_DYNASONIX_AUDIO_IN= 7;
- MM_COREDYNAMICS_DYNASONIX_AUDIO_OUT = 8;
- MM_COREDYNAMICS_DYNAGRAFX_VGA = 9; (* DynaGrfx *)
- MM_COREDYNAMICS_DYNAGRAFX_WAVE_IN = 10;
- MM_COREDYNAMICS_DYNAGRAFX_WAVE_OUT= 11;
-
-(* Product IDs for MM_CRYSTAL - Crystal Semiconductor Corporation *)
- MM_CRYSTAL_CS4232_WAVEIN = 1;
- MM_CRYSTAL_CS4232_WAVEOUT = 2;
- MM_CRYSTAL_CS4232_WAVEMIXER = 3;
- MM_CRYSTAL_CS4232_WAVEAUX_AUX1 = 4;
- MM_CRYSTAL_CS4232_WAVEAUX_AUX2 = 5;
- MM_CRYSTAL_CS4232_WAVEAUX_LINE = 6;
- MM_CRYSTAL_CS4232_WAVEAUX_MONO = 7;
- MM_CRYSTAL_CS4232_WAVEAUX_MASTER = 8;
- MM_CRYSTAL_CS4232_MIDIIN = 9;
- MM_CRYSTAL_CS4232_MIDIOUT = 10;
- MM_CRYSTAL_CS4232_INPUTGAIN_AUX1 = 13;
- MM_CRYSTAL_CS4232_INPUTGAIN_LOOP = 14;
-
-(* Product IDs for MM_DDD - Danka Data Devices *)
- MM_DDD_MIDILINK_MIDIIN = 1;
- MM_DDD_MIDILINK_MIDIOUT = 2;
-
-(* Product IDs for MM_DIACOUSTICS - DiAcoustics, Inc. *)
- MM_DIACOUSTICS_DRUM_ACTION = 1; (* Drum Action *)
-
-(* Product IDs for MM_DIAMONDMM - Diamond Multimedia *)
- MM_DIMD_PLATFORM = 0; (* Freedom Audio *)
- MM_DIMD_DIRSOUND = 1;
- MM_DIMD_VIRTMPU = 2;
- MM_DIMD_VIRTSB = 3;
- MM_DIMD_VIRTJOY = 4;
- MM_DIMD_WAVEIN = 5;
- MM_DIMD_WAVEOUT = 6;
- MM_DIMD_MIDIIN = 7;
- MM_DIMD_MIDIOUT = 8;
- MM_DIMD_AUX_LINE = 9;
- MM_DIMD_MIXER = 10;
-
-(* Product IDs for MM_DIGITAL_AUDIO_LABS - Digital Audio Labs, Inc. *)
- MM_DIGITAL_AUDIO_LABS_V8 = $10;
- MM_DIGITAL_AUDIO_LABS_CPRO = $11;
-
-(* Product IDs for MM_DIGITAL - Digital Equipment Corporation *)
- MM_DIGITAL_AV320_WAVEIN = 1; (* Digital Audio Video Compression Board *)
- MM_DIGITAL_AV320_WAVEOUT = 2; (* Digital Audio Video Compression Board *)
-
-(* Product IDs for MM_ECS - Electronic Courseware Systems, Inc. *)
- MM_ECS_AADF_MIDI_IN = 10;
- MM_ECS_AADF_MIDI_OUT = 11;
- MM_ECS_AADF_WAVE2MIDI_IN = 12;
-
-(* Product IDs for MM_ENSONIQ - ENSONIQ Corporation *)
- MM_ENSONIQ_SOUNDSCAPE = $10; (* ENSONIQ Soundscape *)
- MM_SOUNDSCAPE_WAVEOUT = MM_ENSONIQ_SOUNDSCAPE+1;
- MM_SOUNDSCAPE_WAVEOUT_AUX = MM_ENSONIQ_SOUNDSCAPE+2;
- MM_SOUNDSCAPE_WAVEIN = MM_ENSONIQ_SOUNDSCAPE+3;
- MM_SOUNDSCAPE_MIDIOUT = MM_ENSONIQ_SOUNDSCAPE+4;
- MM_SOUNDSCAPE_MIDIIN = MM_ENSONIQ_SOUNDSCAPE+5;
- MM_SOUNDSCAPE_SYNTH = MM_ENSONIQ_SOUNDSCAPE+6;
- MM_SOUNDSCAPE_MIXER = MM_ENSONIQ_SOUNDSCAPE+7;
- MM_SOUNDSCAPE_AUX = MM_ENSONIQ_SOUNDSCAPE+8;
-
-(* Product IDs for MM_FRONTIER - Frontier Design Group LLC *)
- MM_FRONTIER_WAVECENTER_MIDIIN = 1; (* WaveCenter *)
- MM_FRONTIER_WAVECENTER_MIDIOUT = 2;
- MM_FRONTIER_WAVECENTER_WAVEIN = 3;
- MM_FRONTIER_WAVECENTER_WAVEOUT = 4;
-
-(* Product IDs for MM_GADGETLABS - Gadget Labs LLC *)
- MM_GADGETLABS_WAVE44_WAVEIN = 1;
- MM_GADGETLABS_WAVE44_WAVEOUT = 2;
- MM_GADGETLABS_WAVE42_WAVEIN = 3;
- MM_GADGETLABS_WAVE42_WAVEOUT = 4;
- MM_GADGETLABS_WAVE4_MIDIIN = 5;
- MM_GADGETLABS_WAVE4_MIDIOUT = 6;
-
-(* Product IDs for MM_KAY_ELEMETRICS - Kay Elemetrics, Inc. *)
- MM_KAY_ELEMETRICS_CSL = $4300;
- MM_KAY_ELEMETRICS_CSL_DAT = $4308;
- MM_KAY_ELEMETRICS_CSL_4CHANNEL = $4309;
-
-(* Product IDs for MM_LERNOUT_AND_HAUSPIE - Lernout & Hauspie *)
- MM_LERNOUT_ANDHAUSPIE_LHCODECACM = 1;
-
-(* Product IDs for MM_MPTUS - M.P. Technologies, Inc. *)
- MM_MPTUS_SPWAVEOUT = 1; (* Sound Pallette *)
-
-(* Product IDs for MM_MOTU - Mark of the Unicorn *)
- MM_MOTU_MTP_MIDIOUT_ALL = 100;
- MM_MOTU_MTP_MIDIIN_1 = 101;
- MM_MOTU_MTP_MIDIOUT_1 = 101;
- MM_MOTU_MTP_MIDIIN_2 = 102;
- MM_MOTU_MTP_MIDIOUT_2 = 102;
- MM_MOTU_MTP_MIDIIN_3 = 103;
- MM_MOTU_MTP_MIDIOUT_3 = 103;
- MM_MOTU_MTP_MIDIIN_4 = 104;
- MM_MOTU_MTP_MIDIOUT_4 = 104;
- MM_MOTU_MTP_MIDIIN_5 = 105;
- MM_MOTU_MTP_MIDIOUT_5 = 105;
- MM_MOTU_MTP_MIDIIN_6 = 106;
- MM_MOTU_MTP_MIDIOUT_6 = 106;
- MM_MOTU_MTP_MIDIIN_7 = 107;
- MM_MOTU_MTP_MIDIOUT_7 = 107;
- MM_MOTU_MTP_MIDIIN_8 = 108;
- MM_MOTU_MTP_MIDIOUT_8 = 108;
-
- MM_MOTU_MTPII_MIDIOUT_ALL = 200;
- MM_MOTU_MTPII_MIDIIN_SYNC = 200;
- MM_MOTU_MTPII_MIDIIN_1 = 201;
- MM_MOTU_MTPII_MIDIOUT_1 = 201;
- MM_MOTU_MTPII_MIDIIN_2 = 202;
- MM_MOTU_MTPII_MIDIOUT_2 = 202;
- MM_MOTU_MTPII_MIDIIN_3 = 203;
- MM_MOTU_MTPII_MIDIOUT_3 = 203;
- MM_MOTU_MTPII_MIDIIN_4 = 204;
- MM_MOTU_MTPII_MIDIOUT_4 = 204;
- MM_MOTU_MTPII_MIDIIN_5 = 205;
- MM_MOTU_MTPII_MIDIOUT_5 = 205;
- MM_MOTU_MTPII_MIDIIN_6 = 206;
- MM_MOTU_MTPII_MIDIOUT_6 = 206;
- MM_MOTU_MTPII_MIDIIN_7 = 207;
- MM_MOTU_MTPII_MIDIOUT_7 = 207;
- MM_MOTU_MTPII_MIDIIN_8 = 208;
- MM_MOTU_MTPII_MIDIOUT_8 = 208;
- MM_MOTU_MTPII_NET_MIDIIN_1 = 209;
- MM_MOTU_MTPII_NET_MIDIOUT_1 = 209;
- MM_MOTU_MTPII_NET_MIDIIN_2 = 210;
- MM_MOTU_MTPII_NET_MIDIOUT_2 = 210;
- MM_MOTU_MTPII_NET_MIDIIN_3 = 211;
- MM_MOTU_MTPII_NET_MIDIOUT_3 = 211;
- MM_MOTU_MTPII_NET_MIDIIN_4 = 212;
- MM_MOTU_MTPII_NET_MIDIOUT_4 = 212;
- MM_MOTU_MTPII_NET_MIDIIN_5 = 213;
- MM_MOTU_MTPII_NET_MIDIOUT_5 = 213;
- MM_MOTU_MTPII_NET_MIDIIN_6 = 214;
- MM_MOTU_MTPII_NET_MIDIOUT_6 = 214;
- MM_MOTU_MTPII_NET_MIDIIN_7 = 215;
- MM_MOTU_MTPII_NET_MIDIOUT_7 = 215;
- MM_MOTU_MTPII_NET_MIDIIN_8 = 216;
- MM_MOTU_MTPII_NET_MIDIOUT_8 = 216;
-
- MM_MOTU_MXP_MIDIIN_MIDIOUT_ALL = 300;
- MM_MOTU_MXP_MIDIIN_SYNC = 300;
- MM_MOTU_MXP_MIDIIN_MIDIIN_1 = 301;
- MM_MOTU_MXP_MIDIIN_MIDIOUT_1 = 301;
- MM_MOTU_MXP_MIDIIN_MIDIIN_2 = 302;
- MM_MOTU_MXP_MIDIIN_MIDIOUT_2 = 302;
- MM_MOTU_MXP_MIDIIN_MIDIIN_3 = 303;
- MM_MOTU_MXP_MIDIIN_MIDIOUT_3 = 303;
- MM_MOTU_MXP_MIDIIN_MIDIIN_4 = 304;
- MM_MOTU_MXP_MIDIIN_MIDIOUT_4 = 304;
- MM_MOTU_MXP_MIDIIN_MIDIIN_5 = 305;
- MM_MOTU_MXP_MIDIIN_MIDIOUT_5 = 305;
- MM_MOTU_MXP_MIDIIN_MIDIIN_6 = 306;
- MM_MOTU_MXP_MIDIIN_MIDIOUT_6 = 306;
-
- MM_MOTU_MXPMPU_MIDIOUT_ALL = 400;
- MM_MOTU_MXPMPU_MIDIIN_SYNC = 400;
- MM_MOTU_MXPMPU_MIDIIN_1 = 401;
- MM_MOTU_MXPMPU_MIDIOUT_1 = 401;
- MM_MOTU_MXPMPU_MIDIIN_2 = 402;
- MM_MOTU_MXPMPU_MIDIOUT_2 = 402;
- MM_MOTU_MXPMPU_MIDIIN_3 = 403;
- MM_MOTU_MXPMPU_MIDIOUT_3 = 403;
- MM_MOTU_MXPMPU_MIDIIN_4 = 404;
- MM_MOTU_MXPMPU_MIDIOUT_4 = 404;
- MM_MOTU_MXPMPU_MIDIIN_5 = 405;
- MM_MOTU_MXPMPU_MIDIOUT_5 = 405;
- MM_MOTU_MXPMPU_MIDIIN_6 = 406;
- MM_MOTU_MXPMPU_MIDIOUT_6 = 406;
-
- MM_MOTU_MXN_MIDIOUT_ALL = 500;
- MM_MOTU_MXN_MIDIIN_SYNC = 500;
- MM_MOTU_MXN_MIDIIN_1 = 501;
- MM_MOTU_MXN_MIDIOUT_1 = 501;
- MM_MOTU_MXN_MIDIIN_2 = 502;
- MM_MOTU_MXN_MIDIOUT_2 = 502;
- MM_MOTU_MXN_MIDIIN_3 = 503;
- MM_MOTU_MXN_MIDIOUT_3 = 503;
- MM_MOTU_MXN_MIDIIN_4 = 504;
- MM_MOTU_MXN_MIDIOUT_4 = 504;
-
- MM_MOTU_FLYER_MIDI_IN_SYNC = 600;
- MM_MOTU_FLYER_MIDI_IN_A = 601;
- MM_MOTU_FLYER_MIDI_OUT_A = 601;
- MM_MOTU_FLYER_MIDI_IN_B = 602;
- MM_MOTU_FLYER_MIDI_OUT_B = 602;
-
- MM_MOTU_PKX_MIDI_IN_SYNC = 700;
- MM_MOTU_PKX_MIDI_IN_A = 701;
- MM_MOTU_PKX_MIDI_OUT_A = 701;
- MM_MOTU_PKX_MIDI_IN_B = 702;
- MM_MOTU_PKX_MIDI_OUT_B = 702;
-
- MM_MOTU_DTX_MIDI_IN_SYNC = 800;
- MM_MOTU_DTX_MIDI_IN_A = 801;
- MM_MOTU_DTX_MIDI_OUT_A = 801;
- MM_MOTU_DTX_MIDI_IN_B = 802;
- MM_MOTU_DTX_MIDI_OUT_B = 802;
-
- MM_MOTU_MTPAV_MIDIOUT_ALL = 900;
- MM_MOTU_MTPAV_MIDIIN_SYNC = 900;
- MM_MOTU_MTPAV_MIDIIN_1 = 901;
- MM_MOTU_MTPAV_MIDIOUT_1 = 901;
- MM_MOTU_MTPAV_MIDIIN_2 = 902;
- MM_MOTU_MTPAV_MIDIOUT_2 = 902;
- MM_MOTU_MTPAV_MIDIIN_3 = 903;
- MM_MOTU_MTPAV_MIDIOUT_3 = 903;
- MM_MOTU_MTPAV_MIDIIN_4 = 904;
- MM_MOTU_MTPAV_MIDIOUT_4 = 904;
- MM_MOTU_MTPAV_MIDIIN_5 = 905;
- MM_MOTU_MTPAV_MIDIOUT_5 = 905;
- MM_MOTU_MTPAV_MIDIIN_6 = 906;
- MM_MOTU_MTPAV_MIDIOUT_6 = 906;
- MM_MOTU_MTPAV_MIDIIN_7 = 907;
- MM_MOTU_MTPAV_MIDIOUT_7 = 907;
- MM_MOTU_MTPAV_MIDIIN_8 = 908;
- MM_MOTU_MTPAV_MIDIOUT_8 = 908;
- MM_MOTU_MTPAV_NET_MIDIIN_1 = 909;
- MM_MOTU_MTPAV_NET_MIDIOUT_1 = 909;
- MM_MOTU_MTPAV_NET_MIDIIN_2 = 910;
- MM_MOTU_MTPAV_NET_MIDIOUT_2 = 910;
- MM_MOTU_MTPAV_NET_MIDIIN_3 = 911;
- MM_MOTU_MTPAV_NET_MIDIOUT_3 = 911;
- MM_MOTU_MTPAV_NET_MIDIIN_4 = 912;
- MM_MOTU_MTPAV_NET_MIDIOUT_4 = 912;
- MM_MOTU_MTPAV_NET_MIDIIN_5 = 913;
- MM_MOTU_MTPAV_NET_MIDIOUT_5 = 913;
- MM_MOTU_MTPAV_NET_MIDIIN_6 = 914;
- MM_MOTU_MTPAV_NET_MIDIOUT_6 = 914;
- MM_MOTU_MTPAV_NET_MIDIIN_7 = 915;
- MM_MOTU_MTPAV_NET_MIDIOUT_7 = 915;
- MM_MOTU_MTPAV_NET_MIDIIN_8 = 916;
- MM_MOTU_MTPAV_NET_MIDIOUT_8 = 916;
- MM_MOTU_MTPAV_MIDIIN_ADAT = 917;
- MM_MOTU_MTPAV_MIDIOUT_ADAT = 917;
-
-
-(* Product IDs for MM_MIRO - miro Computer Products AG *)
- MM_MIRO_MOVIEPRO = 1; (* miroMOVIE pro *)
- MM_MIRO_VIDEOD1 = 2; (* miroVIDEO D1 *)
- MM_MIRO_VIDEODC1TV = 3; (* miroVIDEO DC1 tv *)
- MM_MIRO_VIDEOTD = 4; (* miroVIDEO 10/20 TD *)
- MM_MIRO_DC30_WAVEOUT = 5;
- MM_MIRO_DC30_WAVEIN = 6;
- MM_MIRO_DC30_MIX = 7;
-
-(* Product IDs for MM_NEC - NEC *)
- MM_NEC_73_86_SYNTH = 5;
- MM_NEC_73_86_WAVEOUT = 6;
- MM_NEC_73_86_WAVEIN = 7;
- MM_NEC_26_SYNTH = 9;
- MM_NEC_MPU401_MIDIOUT = 10;
- MM_NEC_MPU401_MIDIIN = 11;
- MM_NEC_JOYSTICK = 12;
-
-(* Product IDs for MM_NORRIS - Norris Communications, Inc. *)
- MM_NORRIS_VOICELINK = 1;
-
-(* Product IDs for MM_NORTHERN_TELECOM - Northern Telecom Limited *)
- MM_NORTEL_MPXAC_WAVEIN = 1; (* MPX Audio Card Wave Input Device *)
- MM_NORTEL_MPXAC_WAVEOUT = 2; (* MPX Audio Card Wave Output Device *)
-
-(* Product IDs for MM_NVIDIA - NVidia Corporation *)
- MM_NVIDIA_WAVEOUT = 1;
- MM_NVIDIA_WAVEIN = 2;
- MM_NVIDIA_MIDIOUT = 3;
- MM_NVIDIA_MIDIIN = 4;
- MM_NVIDIA_GAMEPORT = 5;
- MM_NVIDIA_MIXER = 6;
- MM_NVIDIA_AUX = 7;
-
-(* Product IDs for MM_OKSORI - OKSORI Co., Ltd. *)
- MM_OKSORI_BASE = 0; (* Oksori Base *)
- MM_OKSORI_OSR8_WAVEOUT = MM_OKSORI_BASE+1; (* Oksori 8bit Wave out *)
- MM_OKSORI_OSR8_WAVEIN = MM_OKSORI_BASE+2; (* Oksori 8bit Wave in *)
- MM_OKSORI_OSR16_WAVEOUT = MM_OKSORI_BASE+3; (* Oksori 16 bit Wave out *)
- MM_OKSORI_OSR16_WAVEIN = MM_OKSORI_BASE+4; (* Oksori 16 bit Wave in *)
- MM_OKSORI_FM_OPL4 = MM_OKSORI_BASE+5; (* Oksori FM Synth Yamaha OPL4 *)
- MM_OKSORI_MIX_MASTER = MM_OKSORI_BASE+6; (* Oksori DSP Mixer - Master Volume *)
- MM_OKSORI_MIX_WAVE = MM_OKSORI_BASE+7; (* Oksori DSP Mixer - Wave Volume *)
- MM_OKSORI_MIX_FM = MM_OKSORI_BASE+8; (* Oksori DSP Mixer - FM Volume *)
- MM_OKSORI_MIX_LINE = MM_OKSORI_BASE+9; (* Oksori DSP Mixer - Line Volume *)
- MM_OKSORI_MIX_CD = MM_OKSORI_BASE+10; (* Oksori DSP Mixer - CD Volume *)
- MM_OKSORI_MIX_MIC = MM_OKSORI_BASE+11; (* Oksori DSP Mixer - MIC Volume *)
- MM_OKSORI_MIX_ECHO = MM_OKSORI_BASE+12; (* Oksori DSP Mixer - Echo Volume *)
- MM_OKSORI_MIX_AUX1 = MM_OKSORI_BASE+13; (* Oksori AD1848 - AUX1 Volume *)
- MM_OKSORI_MIX_LINE1 = MM_OKSORI_BASE+14; (* Oksori AD1848 - LINE1 Volume *)
- MM_OKSORI_EXT_MIC1 = MM_OKSORI_BASE+15; (* Oksori External - One Mic Connect *)
- MM_OKSORI_EXT_MIC2 = MM_OKSORI_BASE+16; (* Oksori External - Two Mic Connect *)
- MM_OKSORI_MIDIOUT = MM_OKSORI_BASE+17; (* Oksori MIDI Out Device *)
- MM_OKSORI_MIDIIN = MM_OKSORI_BASE+18; (* Oksori MIDI In Device *)
- MM_OKSORI_MPEG_CDVISION = MM_OKSORI_BASE+19; (* Oksori CD-Vision MPEG Decoder *)
-
-(* Product IDs for MM_OSITECH - Ositech Communications Inc. *)
- MM_OSITECH_TRUMPCARD = 1; (* Trumpcard *)
-
-(* Product IDs for MM_OSPREY - Osprey Technologies, Inc. *)
- MM_OSPREY_1000WAVEIN = 1;
- MM_OSPREY_1000WAVEOUT = 2;
-
-(* Product IDs for MM_QUARTERDECK - Quarterdeck Corporation *)
- MM_QUARTERDECK_LHWAVEIN = 0; (* Quarterdeck L&H Codec Wave In *)
- MM_QUARTERDECK_LHWAVEOUT = 1; (* Quarterdeck L&H Codec Wave Out *)
-
-(* Product IDs for MM_RHETOREX - Rhetorex Inc *)
- MM_RHETOREX_WAVEIN = 1;
- MM_RHETOREX_WAVEOUT = 2;
-
-(* Product IDs for MM_ROCKWELL - Rockwell International *)
- MM_VOICEMIXER = 1;
- ROCKWELL_WA1_WAVEIN = 100;
- ROCKWELL_WA1_WAVEOUT = 101;
- ROCKWELL_WA1_SYNTH = 102;
- ROCKWELL_WA1_MIXER = 103;
- ROCKWELL_WA1_MPU401_IN = 104;
- ROCKWELL_WA1_MPU401_OUT = 105;
- ROCKWELL_WA2_WAVEIN = 200;
- ROCKWELL_WA2_WAVEOUT = 201;
- ROCKWELL_WA2_SYNTH = 202;
- ROCKWELL_WA2_MIXER = 203;
- ROCKWELL_WA2_MPU401_IN = 204;
- ROCKWELL_WA2_MPU401_OUT = 205;
-
-(* Product IDs for MM_S3 - S3 *)
- MM_S3_WAVEOUT = $1;
- MM_S3_WAVEIN = $2;
- MM_S3_MIDIOUT = $3;
- MM_S3_MIDIIN = $4;
- MM_S3_FMSYNTH = $5;
- MM_S3_MIXER = $6;
- MM_S3_AUX = $7;
-
-(* Product IDs for MM_SEERSYS - Seer Systems, Inc. *)
- MM_SEERSYS_SEERSYNTH = 1;
- MM_SEERSYS_SEERWAVE = 2;
- MM_SEERSYS_SEERMIX = 3;
-
-(* Product IDs for MM_SOFTSOUND - Softsound, Ltd. *)
- MM_SOFTSOUND_CODEC = 1;
-
-(* Product IDs for MM_SOUNDESIGNS - SounDesignS M.C.S. Ltd. *)
- MM_SOUNDESIGNS_WAVEIN = 1;
- MM_SOUNDESIGNS_WAVEOUT = 2;
-
-(* Product IDs for MM_SPECTRUM_SIGNAL_PROCESSING - Spectrum Signal Processing, Inc. *)
- MM_SSP_SNDFESWAVEIN = 1; (* Sound Festa Wave In Device *)
- MM_SSP_SNDFESWAVEOUT = 2; (* Sound Festa Wave Out Device *)
- MM_SSP_SNDFESMIDIIN = 3; (* Sound Festa MIDI In Device *)
- MM_SSP_SNDFESMIDIOUT = 4; (* Sound Festa MIDI Out Device *)
- MM_SSP_SNDFESSYNTH = 5; (* Sound Festa MIDI Synth Device *)
- MM_SSP_SNDFESMIX = 6; (* Sound Festa Mixer Device *)
- MM_SSP_SNDFESAUX = 7; (* Sound Festa Auxilliary Device *)
-
-(* Product IDs for MM_TDK - TDK Corporation *)
- MM_TDK_MW_MIDI_SYNTH = 1;
- MM_TDK_MW_MIDI_IN = 2;
- MM_TDK_MW_MIDI_OUT = 3;
- MM_TDK_MW_WAVE_IN = 4;
- MM_TDK_MW_WAVE_OUT = 5;
- MM_TDK_MW_AUX = 6;
- MM_TDK_MW_MIXER = 10;
- MM_TDK_MW_AUX_MASTER = 100;
- MM_TDK_MW_AUX_BASS = 101;
- MM_TDK_MW_AUX_TREBLE = 102;
- MM_TDK_MW_AUX_MIDI_VOL = 103;
- MM_TDK_MW_AUX_WAVE_VOL = 104;
- MM_TDK_MW_AUX_WAVE_RVB = 105;
- MM_TDK_MW_AUX_WAVE_CHR = 106;
- MM_TDK_MW_AUX_VOL = 107;
- MM_TDK_MW_AUX_RVB = 108;
- MM_TDK_MW_AUX_CHR = 109;
-
-(* Product IDs for MM_TURTLE_BEACH - Turtle Beach, Inc. *)
- MM_TBS_TROPEZ_WAVEIN = 37;
- MM_TBS_TROPEZ_WAVEOUT = 38;
- MM_TBS_TROPEZ_AUX1 = 39;
- MM_TBS_TROPEZ_AUX2 = 40;
- MM_TBS_TROPEZ_LINE = 41;
-
-(* Product IDs for MM_VIENNASYS - Vienna Systems *)
- MM_VIENNASYS_TSP_WAVE_DRIVER = 1;
-
-(* Product IDs for MM_VIONA - Viona Development GmbH *)
- MM_VIONA_QVINPCI_MIXER = 1; (* Q-Motion PCI II/Bravado 2000 *)
- MM_VIONA_QVINPCI_WAVEIN = 2;
- MM_VIONAQVINPCI_WAVEOUT = 3;
- MM_VIONA_BUSTER_MIXER = 4; (* Buster *)
- MM_VIONA_CINEMASTER_MIXER = 5; (* Cinemaster *)
- MM_VIONA_CONCERTO_MIXER = 6; (* Concerto *)
-
-(* Product IDs for MM_WILDCAT - Wildcat Canyon Software *)
- MM_WILDCAT_AUTOSCOREMIDIIN = 1; (* Autoscore *)
-
-(* Product IDs for MM_WILLOWPOND - Willow Pond Corporation *)
- MM_WILLOWPOND_FMSYNTH_STEREO = 20;
- MM_WILLOWPOND_SNDPORT_WAVEIN = 100;
- MM_WILLOWPOND_SNDPORT_WAVEOUT = 101;
- MM_WILLOWPOND_SNDPORT_MIXER = 102;
- MM_WILLOWPOND_SNDPORT_AUX = 103;
- MM_WILLOWPOND_PH_WAVEIN = 104;
- MM_WILLOWPOND_PH_WAVEOUT = 105;
- MM_WILLOWPOND_PH_MIXER = 106;
- MM_WILLOWPOND_PH_AUX = 107;
-
-(* Product IDs for MM_WORKBIT - Workbit Corporation *)
- MM_WORKBIT_MIXER = 1; (* Harmony Mixer *)
- MM_WORKBIT_WAVEOUT = 2; (* Harmony Mixer *)
- MM_WORKBIT_WAVEIN = 3; (* Harmony Mixer *)
- MM_WORKBIT_MIDIIN = 4; (* Harmony Mixer *)
- MM_WORKBIT_MIDIOUT = 5; (* Harmony Mixer *)
- MM_WORKBIT_FMSYNTH = 6; (* Harmony Mixer *)
- MM_WORKBIT_AUX = 7; (* Harmony Mixer *)
- MM_WORKBIT_JOYSTICK = 8;
-
-(* Product IDs for MM_FRAUNHOFER_IIS - Fraunhofer *)
- MM_FHGIIS_MPEGLAYER3 = 10;
-
-{(*)///////////////////////////////////////////////////////////////////////// *)
-
-(* INFO LIST CHUNKS (from the Multimedia Programmer's Reference
- plus new ones) *)
- RIFFINFO_IARL = mmioFOURCC ('I', 'A', 'R', 'L'); (*Archival location *)
-#define RIFFINFO_IART mmioFOURCC ('I', 'A', 'R', 'T') (*Artist *)
-#define RIFFINFO_ICMS mmioFOURCC ('I', 'C', 'M', 'S') (*Commissioned *)
-#define RIFFINFO_ICMT mmioFOURCC ('I', 'C', 'M', 'T') (*Comments *)
-#define RIFFINFO_ICOP mmioFOURCC ('I', 'C', 'O', 'P') (*Copyright *)
-#define RIFFINFO_ICRD mmioFOURCC ('I', 'C', 'R', 'D') (*Creation date of subject *)
-#define RIFFINFO_ICRP mmioFOURCC ('I', 'C', 'R', 'P') (*Cropped *)
-#define RIFFINFO_IDIM mmioFOURCC ('I', 'D', 'I', 'M') (*Dimensions *)
-#define RIFFINFO_IDPI mmioFOURCC ('I', 'D', 'P', 'I') (*Dots per inch *)
-#define RIFFINFO_IENG mmioFOURCC ('I', 'E', 'N', 'G') (*Engineer *)
-#define RIFFINFO_IGNR mmioFOURCC ('I', 'G', 'N', 'R') (*Genre *)
-#define RIFFINFO_IKEY mmioFOURCC ('I', 'K', 'E', 'Y') (*Keywords *)
-#define RIFFINFO_ILGT mmioFOURCC ('I', 'L', 'G', 'T') (*Lightness settings *)
-#define RIFFINFO_IMED mmioFOURCC ('I', 'M', 'E', 'D') (*Medium *)
-#define RIFFINFO_INAM mmioFOURCC ('I', 'N', 'A', 'M') (*Name of subject *)
-#define RIFFINFO_IPLT mmioFOURCC ('I', 'P', 'L', 'T') (*Palette Settings. No. of colors requested. *)
-#define RIFFINFO_IPRD mmioFOURCC ('I', 'P', 'R', 'D') (*Product *)
-#define RIFFINFO_ISBJ mmioFOURCC ('I', 'S', 'B', 'J') (*Subject description *)
-#define RIFFINFO_ISFT mmioFOURCC ('I', 'S', 'F', 'T') (*Software. Name of package used to create file. *)
-#define RIFFINFO_ISHP mmioFOURCC ('I', 'S', 'H', 'P') (*Sharpness. *)
-#define RIFFINFO_ISRC mmioFOURCC ('I', 'S', 'R', 'C') (*Source. *)
-#define RIFFINFO_ISRF mmioFOURCC ('I', 'S', 'R', 'F') (*Source Form. ie slide, paper *)
-#define RIFFINFO_ITCH mmioFOURCC ('I', 'T', 'C', 'H') (*Technician who digitized the subject. *)
-
-(* New INFO Chunks as of August 30, 1993: *)
-#define RIFFINFO_ISMP mmioFOURCC ('I', 'S', 'M', 'P') (*SMPTE time code *)
-(* ISMP: SMPTE time code of digitization start point expressed as a NULL terminated
- text string "HH:MM:SS:FF". If performing MCI capture in AVICAP, this
- chunk will be automatically set based on the MCI start time.
-*)
-#define RIFFINFO_IDIT mmioFOURCC ('I', 'D', 'I', 'T') (*Digitization Time *)
-(* IDIT: "Digitization Time" Specifies the time and date that the digitization commenced.
- The digitization time is contained in an ASCII string which
- contains exactly 26 characters and is in the format
- "Wed Jan 02 02:03:55 1990\n\0".
- The ctime(), asctime(), functions can be used to create strings
- in this format. This chunk is automatically added to the capture
- file based on the current system time at the moment capture is initiated.
-*)
-
-(*Template line for new additions*)
-(*#define RIFFINFO_I mmioFOURCC ('I', '', '', '') *) }
-
-
-(* WAVE form wFormatTag IDs *)
- WAVE_FORMAT_UNKNOWN =$0000; (* Microsoft Corporation *)
- WAVE_FORMAT_ADPCM =$0002; (* Microsoft Corporation *)
- WAVE_FORMAT_IEEE_FLOAT =$0003; (* Microsoft Corporation *)
- (* IEEE754: range (+1, -1] *)
- (* 32-bit/64-bit format as defined by *)
- (* MSVC++ float/double type *)
- WAVE_FORMAT_IBM_CVSD =$0005; (* IBM Corporation *)
- WAVE_FORMAT_ALAW =$0006; (* Microsoft Corporation *)
- WAVE_FORMAT_MULAW =$0007; (* Microsoft Corporation *)
- WAVE_FORMAT_OKI_ADPCM =$0010; (* OKI *)
- WAVE_FORMAT_DVI_ADPCM =$0011; (* Intel Corporation *)
- WAVE_FORMAT_IMA_ADPCM =(WAVE_FORMAT_DVI_ADPCM); (* Intel Corporation *)
- WAVE_FORMAT_MEDIASPACE_ADPCM =$0012; (* Videologic *)
- WAVE_FORMAT_SIERRA_ADPCM =$0013; (* Sierra Semiconductor Corp *)
- WAVE_FORMAT_G723_ADPCM =$0014; (* Antex Electronics Corporation *)
- WAVE_FORMAT_DIGISTD =$0015; (* DSP Solutions, Inc. *)
- WAVE_FORMAT_DIGIFIX =$0016; (* DSP Solutions, Inc. *)
- WAVE_FORMAT_DIALOGIC_OKI_ADPCM =$0017; (* Dialogic Corporation *)
- WAVE_FORMAT_MEDIAVISION_ADPCM =$0018; (* Media Vision, Inc. *)
- WAVE_FORMAT_YAMAHA_ADPCM =$0020; (* Yamaha Corporation of America *)
- WAVE_FORMAT_SONARC =$0021; (* Speech Compression *)
- WAVE_FORMAT_DSPGROUP_TRUESPEECH =$0022; (* DSP Group, Inc *)
- WAVE_FORMAT_ECHOSC1 =$0023; (* Echo Speech Corporation *)
- WAVE_FORMAT_AUDIOFILE_AF36 =$0024; (* *)
- WAVE_FORMAT_APTX =$0025; (* Audio Processing Technology *)
- WAVE_FORMAT_AUDIOFILE_AF10 =$0026; (* *)
- WAVE_FORMAT_DOLBY_AC2 =$0030; (* Dolby Laboratories *)
- WAVE_FORMAT_GSM610 =$0031; (* Microsoft Corporation *)
- WAVE_FORMAT_MSNAUDIO =$0032; (* Microsoft Corporation *)
- WAVE_FORMAT_ANTEX_ADPCME =$0033; (* Antex Electronics Corporation *)
- WAVE_FORMAT_CONTROL_RES_VQLPC =$0034; (* Control Resources Limited *)
- WAVE_FORMAT_DIGIREAL =$0035; (* DSP Solutions, Inc. *)
- WAVE_FORMAT_DIGIADPCM =$0036; (* DSP Solutions, Inc. *)
- WAVE_FORMAT_CONTROL_RES_CR10 =$0037; (* Control Resources Limited *)
- WAVE_FORMAT_NMS_VBXADPCM =$0038; (* Natural MicroSystems *)
- WAVE_FORMAT_CS_IMAADPCM =$0039; (* Crystal Semiconductor IMA ADPCM *)
- WAVE_FORMAT_ECHOSC3 =$003A; (* Echo Speech Corporation *)
- WAVE_FORMAT_ROCKWELL_ADPCM =$003B; (* Rockwell International *)
- WAVE_FORMAT_ROCKWELL_DIGITALK =$003C; (* Rockwell International *)
- WAVE_FORMAT_XEBEC =$003D; (* Xebec Multimedia Solutions Limited *)
- WAVE_FORMAT_G721_ADPCM =$0040; (* Antex Electronics Corporation *)
- WAVE_FORMAT_G728_CELP =$0041; (* Antex Electronics Corporation *)
- WAVE_FORMAT_MPEG =$0050; (* Microsoft Corporation *)
- WAVE_FORMAT_MPEGLAYER3 =$0055; (* ISO/MPEG Layer3 Format Tag *)
- WAVE_FORMAT_CIRRUS =$0060; (* Cirrus Logic *)
- WAVE_FORMAT_ESPCM =$0061; (* ESS Technology *)
- WAVE_FORMAT_VOXWARE =$0062; (* Voxware Inc *)
- WAVEFORMAT_CANOPUS_ATRAC =$0063; (* Canopus, co., Ltd. *)
- WAVE_FORMAT_G726_ADPCM =$0064; (* APICOM *)
- WAVE_FORMAT_G722_ADPCM =$0065; (* APICOM *)
- WAVE_FORMAT_DSAT =$0066; (* Microsoft Corporation *)
- WAVE_FORMAT_DSAT_DISPLAY =$0067; (* Microsoft Corporation *)
- WAVE_FORMAT_SOFTSOUND =$0080; (* Softsound, Ltd. *)
- WAVE_FORMAT_RHETOREX_ADPCM =$0100; (* Rhetorex Inc *)
- WAVE_FORMAT_CREATIVE_ADPCM =$0200; (* Creative Labs, Inc *)
- WAVE_FORMAT_CREATIVE_FASTSPEECH8 =$0202; (* Creative Labs, Inc *)
- WAVE_FORMAT_CREATIVE_FASTSPEECH10 =$0203; (* Creative Labs, Inc *)
- WAVE_FORMAT_QUARTERDECK =$0220; (* Quarterdeck Corporation *)
- WAVE_FORMAT_FM_TOWNS_SND =$0300; (* Fujitsu Corp. *)
- WAVE_FORMAT_BTV_DIGITAL =$0400; (* Brooktree Corporation *)
- WAVE_FORMAT_OLIGSM =$1000; (* Ing C. Olivetti & C., S.p.A. *)
- WAVE_FORMAT_OLIADPCM =$1001; (* Ing C. Olivetti & C., S.p.A. *)
- WAVE_FORMAT_OLICELP =$1002; (* Ing C. Olivetti & C., S.p.A. *)
- WAVE_FORMAT_OLISBC =$1003; (* Ing C. Olivetti & C., S.p.A. *)
- WAVE_FORMAT_OLIOPR =$1004; (* Ing C. Olivetti & C., S.p.A. *)
- WAVE_FORMAT_LH_CODEC =$1100; (* Lernout & Hauspie *)
- WAVE_FORMAT_NORRIS =$1400; (* Norris Communications, Inc. *)
-
-//
-// the WAVE_FORMAT_DEVELOPMENT format tag can be used during the
-// development phase of a new wave format. Before shipping, you MUST
-// acquire an official format tag from Microsoft.
-//
- WAVE_FORMAT_DEVELOPMENT = ($FFFF);
-
-
- ACM_MPEG_LAYER1 =($0001);
- ACM_MPEG_LAYER2 =($0002);
- ACM_MPEG_LAYER3 =($0004);
- ACM_MPEG_STEREO =($0001);
- ACM_MPEG_JOINTSTEREO =($0002);
- ACM_MPEG_DUALCHANNEL =($0004);
- ACM_MPEG_SINGLECHANNEL =($0008);
- ACM_MPEG_PRIVATEBIT =($0001);
- ACM_MPEG_COPYRIGHT =($0002);
- ACM_MPEG_ORIGINALHOME =($0004);
- ACM_MPEG_PROTECTIONBIT =($0008);
- ACM_MPEG_ID_MPEG1 =($0010);
-
-//
-// MPEG Layer3 WAVEFORMATEX structure
-// for WAVE_FORMAT_MPEGLAYER3 ($0055)
-//
- MPEGLAYER3_WFX_EXTRA_BYTES = 12;
-
- MPEGLAYER3_ID_UNKNOWN = 0;
- MPEGLAYER3_ID_MPEG = 1;
- MPEGLAYER3_ID_CONSTANTFRAMESIZE = 2;
-
- MPEGLAYER3_FLAG_PADDING_ISO = $00000000;
- MPEGLAYER3_FLAG_PADDING_ON = $00000001;
- MPEGLAYER3_FLAG_PADDING_OFF = $00000002;
-
- WAVE_FILTER_UNKNOWN = $0000;
- WAVE_FILTER_DEVELOPMENT =($FFFF);
-
- WAVE_FILTER_VOLUME = $0001;
- WAVE_FILTER_ECHO = $0002;
-
- BI_BITFIELDS = 3;
-
- QUERYDIBSUPPORT = 3073;
- QDI_SETDIBITS = $0001;
- QDI_GETDIBITS = $0002;
- QDI_DIBTOSCREEN = $0004;
- QDI_STRETCHDIB = $0008;
-
- JPEG_PROCESS_BASELINE = 0; (* Baseline DCT *)
-
-
-(*
-//
-// Microsoft MPEG audio WAV definition
-//
- MPEG-1 audio wave format (audio layer only). (0x0050) *)
-type
- PMPEG1WAVEFORMAT = ^MPEG1WAVEFORMAT;
- mpeg1waveformat_tag = record
- wfx: tWAVEFORMATEX;
- fwHeadLayer: word;
- dwHeadBitrate: dword;
- fwHeadMode: word;
- fwHeadModeExt: word;
- wHeadEmphasis: word;
- fwHeadFlags: word;
- dwPTSLow: dword;
- dwPTSHigh: dword;
- end;
- MPEG1WAVEFORMAT = mpeg1waveformat_tag;
-
-(*
-// MPEG Layer3 WAVEFORMATEX structure
-// for WAVE_FORMAT_MPEGLAYER3 (0x0055)
-//
-#define MPEGLAYER3_WFX_EXTRA_BYTES 12
-
-// WAVE_FORMAT_MPEGLAYER3 format sructure *)
- PMPEGLAYER3WAVEFORMAT = ^MPEGLAYER3WAVEFORMAT;
- mpeglayer3waveformat_tag = record
- wfx: tWAVEFORMATEX;
- wID: word;
- fdwFlags: dword;
- nBlockSize: word;
- nFramesPerBlock: word;
- nCodecDelay: word;
- end;
- MPEGLAYER3WAVEFORMAT = mpeglayer3waveformat_tag;
-
-implementation
-
-end.
diff --git a/Game/Code/lib/ffmpeg/opt.pas b/Game/Code/lib/ffmpeg/opt.pas index bd3f14fd..971ce601 100644 --- a/Game/Code/lib/ffmpeg/opt.pas +++ b/Game/Code/lib/ffmpeg/opt.pas @@ -15,24 +15,30 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*) -(* This is a part of Pascal porting of ffmpeg. Originally by Victor Zinetz for Delphi and Free Pascal on Windows. -For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT -in the source codes *) + *) + +(* This is a part of Pascal porting of ffmpeg. + * Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes *) + +// Revision: 11250 unit opt; + {$IFDEF FPC} - {$MODE DELPHI} (* CAT *) - {$PACKENUM 4} (* every enum type variables uses 4 bytes, CAT *) - {$PACKRECORDS C} (* GCC compatible, Record Packing, CAT *) + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) {$ENDIF} interface uses - rational; (* CAT *) - -{$I version.inc} + rational, + UConfig; type TAVOptionType = ( @@ -43,6 +49,7 @@ type FF_OPT_TYPE_FLOAT, FF_OPT_TYPE_STRING, 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 ); @@ -55,12 +62,20 @@ const AV_OPT_FLAG_SUBTITLE_PARAM = 32; type + (** + * AVOption. + *) PAVOption = ^TAVOption; TAVOption = record name: pchar; + + (** + * short English text help. + * @todo what about other languages + *) help: pchar; offset: integer; ///< offset to context structure where the parsed value should be stored - _type: TAVOptionType; + type_: TAVOptionType; default_val: double; min: double; @@ -68,9 +83,13 @@ type flags: integer; //FIXME think about enc-audio, ... style flags - _unit: pchar; + unit_: pchar; end; +{$IF LIBAVCODEC_VERSION >= 51039000} // 51.39.0 +function av_find_opt (obj: Pointer; {const} name: PChar; {const} unit_: PChar; mask: integer; flags: integer): {const} PAVOption; + cdecl; external av__codec; +{$IFEND} function av_set_string (obj: pointer; name: pchar; val: pchar): PAVOption; cdecl; external av__codec; @@ -105,6 +124,11 @@ function av_opt_show (obj: pointer; av_log_obj: pointer): integer; procedure av_opt_set_defaults (s: pointer); cdecl; external av__codec; +{$IF LIBAVCODEC_VERSION >= 51039000} // 51.39.0 +procedure av_opt_set_defaults2 (s: Pointer; mask: integer; flags: integer); + cdecl; external av__codec; +{$IFEND} + implementation end. diff --git a/Game/Code/lib/ffmpeg/rational.pas b/Game/Code/lib/ffmpeg/rational.pas index 86dbf8a4..14edb799 100644 --- a/Game/Code/lib/ffmpeg/rational.pas +++ b/Game/Code/lib/ffmpeg/rational.pas @@ -16,24 +16,33 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *) -(* This is a part of Pascal porting of ffmpeg. Originally by Victor Zinetz for Delphi and Free Pascal on Windows. -For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT -in the source codes *) + +(* This is a part of Pascal porting of ffmpeg. + * Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes *) + +// Revision: 10765 unit rational; + {$IFDEF FPC} - {$MODE DELPHI} (* CAT *) - {$PACKENUM 4} (* every enum type variables uses 4 bytes, CAT *) - {$PACKRECORDS C} (* GCC compatible, Record Packing, CAT *) + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) {$ENDIF} -interface (* unit windows is deleted by CAT *) +interface -{$I version.inc} +uses + UConfig; type (* - * Rational number num/den. *) + * Rational number num/den. + *) PAVRational = ^TAVRational; TAVRational = record num: integer; ///< numerator @@ -41,32 +50,75 @@ type end; (** - * returns 0 if a==b, 1 if a>b and -1 if a<b. + * Compare two rationals. + * @param a first rational + * @param b second rational + * @return 0 if a==b, 1 if a>b and -1 if a<b. *) -function av_cmp_q(a: TAVRational; b: TAVRational): integer; +function av_cmp_q(a: TAVRational; b: TAVRational): integer; inline; (** - * converts the given AVRational to a double. + * Rational to double conversion. + * @param a rational to convert + * @return (double) a *) -function av_q2d(a: TAVRational): double; +function av_q2d(a: TAVRational): double; inline; (** - * reduce a fraction. - * this is usefull for framerate calculations + * Reduce a fraction. + * This is useful for framerate calculations. + * @param dst_nom destination numerator + * @param dst_den destination denominator + * @param nom source numerator + * @param den source denominator * @param max the maximum allowed for dst_nom & dst_den * @return 1 if exact, 0 otherwise *) -function av_reduce(dst_nom: pinteger; dst_den: PInteger; nom: int64; den: int64; max: int64): integer; +function av_reduce(dst_nom: PInteger; dst_den: PInteger; nom: int64; den: int64; max: int64): integer; cdecl; external av__util; +(** + * Multiplies two rationals. + * @param b first rational. + * @param c second rational. + * @return b*c. + *) function av_mul_q(b: TAVRational; c: TAVRational): TAVRational; cdecl; external av__util; + +(** + * Divides one rational by another. + * @param b first rational. + * @param c second rational. + * @return b/c. + *) function av_div_q(b: TAVRational; c: TAVRational): TAVRational; cdecl; external av__util; + +(** + * Adds two rationals. + * @param b first rational. + * @param c second rational. + * @return b+c. + *) function av_add_q(b: TAVRational; c: TAVRational): TAVRational; cdecl; external av__util; + +(** + * Subtracts one rational from another. + * @param b first rational. + * @param c second rational. + * @return b-c. + *) function av_sub_q(b: TAVRational; c: TAVRational): TAVRational; cdecl; external av__util; + +(** + * Converts a double precision floating point number to a rational. + * @param d double to convert + * @param max the maximum allowed numerator and denominator + * @return (AVRational) d. + *) function av_d2q(d: double; max: integer): TAVRational; cdecl; external av__util; @@ -76,10 +128,12 @@ function av_cmp_q (a: TAVRational; b: TAVRational): integer; var tmp: int64; begin - tmp := a.num * b.den - b.num * a.den; + tmp := a.num * int64(b.den) - b.num * int64(a.den); - if tmp <> 0 then Result := (tmp shr 63) or 1 (* fixed by CAT *) - else Result := 0 + if (tmp <> 0) then + Result := (tmp shr 63) or 1 + else + Result := 0 end; function av_q2d(a: TAVRational): double; diff --git a/Game/Code/lib/ffmpeg/swscale.pas b/Game/Code/lib/ffmpeg/swscale.pas index a1bbf04f..406ab4a9 100644 --- a/Game/Code/lib/ffmpeg/swscale.pas +++ b/Game/Code/lib/ffmpeg/swscale.pas @@ -1,204 +1,210 @@ -{
- * Copyright (C) 2001-2003 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-}
-{
- * @file swscale.h
- * @brief
- * external api for the swscale stuff
-}
-
-unit swscale;
-
-{$IFDEF FPC}
- {$IFNDEF win32}
- {$LINKLIB libavutil}
- {$LINKLIB libswscale}
- {$ENDIF}
- {$MODE DELPHI } (* CAT *)
- {$PACKENUM 4} (* every enum type variables uses 4 bytes, CAT *)
- {$PACKRECORDS C} (* GCC compatible, Record Packing, CAT *)
-{$ENDIF}
-
-interface
-
-uses
- avutil;
-
-const
-{$IFDEF win32}
- sw__scale = 'swscale-0.dll';
-{$ELSE}
- sw__scale = 'libswscale.so'; // .0.5.0
-{$ENDIF}
-
-type
- TQuadIntArray = array[0..3] of integer;
- PQuadIntArray = ^TQuadIntArray;
- TIntArray = array[0..0] of integer;
- PIntArray = ^TIntArray;
- TPByteArray = array[0..0] of Pbyte;
- PPByteArray = ^TPByteArray;
-
-const
- LIBSWSCALE_VERSION_INT = ((0 shl 16)+(5 shl 8))+0;
- LIBSWSCALE_VERSION = '0.5.0';
- LIBSWSCALE_BUILD = LIBSWSCALE_VERSION_INT;
-
- LIBSWSCALE_IDENT = 'SwS'+LIBSWSCALE_VERSION;
-
- {* values for the flags, the stuff on the command line is different *}
- SWS_FAST_BILINEAR = 1;
- SWS_BILINEAR = 2;
- SWS_BICUBIC = 4;
- SWS_X = 8;
- SWS_POINT = $10;
- SWS_AREA = $20;
- SWS_BICUBLIN = $40;
- SWS_GAUSS = $80;
- SWS_SINC = $100;
- SWS_LANCZOS = $200;
- SWS_SPLINE = $400;
-
- SWS_SRC_V_CHR_DROP_MASK = $30000;
- SWS_SRC_V_CHR_DROP_SHIFT = 16;
-
- SWS_PARAM_DEFAULT = 123456;
-
- SWS_PRINT_INFO = $1000;
-
- //the following 3 flags are not completely implemented
- //internal chrominace subsampling info
- SWS_FULL_CHR_H_INT = $2000;
- //input subsampling info
- SWS_FULL_CHR_H_INP = $4000;
- SWS_DIRECT_BGR = $8000;
- SWS_ACCURATE_RND = $40000;
-
- SWS_CPU_CAPS_MMX = $80000000;
- SWS_CPU_CAPS_MMX2 = $20000000;
- SWS_CPU_CAPS_3DNOW = $40000000;
- SWS_CPU_CAPS_ALTIVEC = $10000000;
- SWS_CPU_CAPS_BFIN = $01000000;
-
- SWS_MAX_REDUCE_CUTOFF = 0.002;
-
- SWS_CS_ITU709 = 1;
- SWS_CS_FCC = 4;
- SWS_CS_ITU601 = 5;
- SWS_CS_ITU624 = 5;
- SWS_CS_SMPTE170M = 5;
- SWS_CS_SMPTE240M = 7;
- SWS_CS_DEFAULT = 5;
-
-
-type
-
- // when used for filters they must have an odd number of elements
- // coeffs cannot be shared between vectors
- PSwsVector = ^TSwsVector;
- TSwsVector = record
- coeff: Pdouble;
- length: integer;
- end;
-
- // vectors can be shared
- PSwsFilter = ^TSwsFilter;
- TSwsFilter = record
- lumH: PSwsVector;
- lumV: PSwsVector;
- chrH: PSwsVector;
- chrV: PSwsVector;
- end;
-
- PSwsContext = ^TSwsContext;
- TSwsContext = record
- av_class: Pointer;
- swScale: Pointer;
- srxW,srcH, dstH: integer;
- chrSrcW, chrSrcH, chrDstW, chrDstH: integer;
- lumXInc, chrXInc, lumYInc, chrYInc: integer;
- dstFormat, srcFormat, origDstFormat, origSrcFormat: integer;
- chrSrcHSubSample, chrSrcVSubSample, chrIntHSubSample, chrIntVSubSample: integer;
- chrDstHSubSample, chrDstVSubSample: integer;
- vChrDrop, sliceDir: integer;
- param: array[0..1] of double;
- {internal structure}
- end;
-
-
-procedure sws_freeContext(swsContext: PSwsContext);
- cdecl; external sw__scale;
-
-function sws_getContext(srcW: integer; srcH: integer; srcFormat: integer; dstW: integer; dstH: integer;dstFormat: integer; flags: integer;
- srcFilter: PSwsFilter; dstFilter: PSwsFilter; param: Pdouble): PSwsContext;
- cdecl; external sw__scale;
-function sws_scale(context: PSwsContext; src: PPByteArray; srcStride: PIntArray; srcSliceY: integer; srcSliceH: integer;
- dst: PPByteArray; dstStride: PIntArray): integer;
- cdecl; external sw__scale;
-function sws_scale_ordered(context: PSwsContext; src: PPByteArray; srcStride: PIntArray; srcSliceY: integer;
- srcSliceH: integer; dst: PPByteArray; dstStride: PIntArray): integer;
- cdecl; external sw__scale; deprecated;
-
-function sws_setColorspaceDetails(c: PSwsContext; inv_table: PQuadIntArray; srcRange: integer; table: PQuadIntArray; dstRange: integer;
- brightness: integer; contrast: integer; saturation: integer): integer;
- cdecl; external sw__scale;
-function sws_getColorspaceDetails(c: PSwsContext; var inv_table: PQuadIntArray; var srcRange: integer; var table: PQuadIntArray; var dstRange: integer;
- var brightness: integer; var contrast: integer; var saturation: integer): integer;
- cdecl; external sw__scale;
-function sws_getGaussianVec(variance: double; quality: double): PSwsVector;
- cdecl; external sw__scale;
-function sws_getConstVec(c: double; length: integer): PSwsVector;
- cdecl; external sw__scale;
-function sws_getIdentityVec: PSwsVector;
- cdecl; external sw__scale;
-procedure sws_scaleVec(a: PSwsVector; scalar: double);
- cdecl; external sw__scale;
-procedure sws_normalizeVec(a: PSwsVector; height: double);
- cdecl; external sw__scale;
-procedure sws_convVec(a: PSwsVector; b: PSwsVector);
- cdecl; external sw__scale;
-procedure sws_addVec(a: PSwsVector; b: PSwsVector);
- cdecl; external sw__scale;
-procedure sws_subVec(a: PSwsVector; b: PSwsVector);
- cdecl; external sw__scale;
-procedure sws_shiftVec(a: PSwsVector; shift: integer);
- cdecl; external sw__scale;
-function sws_cloneVec(a: PSwsVector): PSwsVector;
- cdecl; external sw__scale;
-
-procedure sws_printVec(a: PSwsVector);
- cdecl; external sw__scale;
-procedure sws_freeVec(a: PSwsVector);
- cdecl; external sw__scale;
-
-function sws_getDefaultFilter(lumaGBlur: single; chromaGBlur: single; lumaSarpen: single; chromaSharpen: single; chromaHShift: single;
- chromaVShift: single; verbose: integer): PSwsFilter;
- cdecl; external sw__scale;
-procedure sws_freeFilter(filter: PSwsFilter);
- cdecl; external sw__scale;
-
-function sws_getCachedContext(context: PSwsContext;
- srcW: integer; srcH: integer; srcFormat: integer;
- dstW: integer; dstH: integer; dstFormat: integer; flags: integer;
- srcFilter: PSwsFilter; dstFilter: PSwsFilter; param: Pdouble): PSwsContext;
- cdecl; external sw__scale;
-
-implementation
-
-end.
+(* + * Copyright (C) 2001-2003 Michael Niedermayer <michaelni@gmx.at> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + *) +(* + * @file swscale.h + * @brief + * external api for the swscale stuff + *) + +unit swscale; + +{$IFDEF FPC} + {$MODE DELPHI } + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +interface + +uses + avutil, + config; + +const + (* Max. supported version by this header *) + LIBSWSCALE_MAX_VERSION_MAJOR = 0; + LIBSWSCALE_MAX_VERSION_MINOR = 5; + LIBSWSCALE_MAX_VERSION_RELEASE = 0; + LIBSWSCALE_MAX_VERSION = (LIBSWSCALE_MAX_VERSION_MAJOR * VERSION_MAJOR) + + (LIBSWSCALE_MAX_VERSION_MINOR * VERSION_MINOR) + + (LIBSWSCALE_MAX_VERSION_RELEASE * VERSION_RELEASE); + +(* Check if linked versions are supported *) +{$IF (LIBSWSCALE_VERSION > LIBSWSCALE_MAX_VERSION)} + {$MESSAGE Warn 'Linked version of libswscale may be unsupported!'} +{$IFEND} + +type + TQuadIntArray = array[0..3] of integer; + PQuadIntArray = ^TQuadIntArray; + TIntArray = array[0..0] of integer; + PIntArray = ^TIntArray; + TPByteArray = array[0..0] of Pbyte; + PPByteArray = ^TPByteArray; + +const + LIBSWSCALE_VERSION_INT = ((0 shl 16)+(5 shl 8))+0; + LIBSWSCALE_VERSION = '0.5.0'; + LIBSWSCALE_BUILD = LIBSWSCALE_VERSION_INT; + + LIBSWSCALE_IDENT = 'SwS'+LIBSWSCALE_VERSION; + + {* values for the flags, the stuff on the command line is different *} + SWS_FAST_BILINEAR = 1; + SWS_BILINEAR = 2; + SWS_BICUBIC = 4; + SWS_X = 8; + SWS_POINT = $10; + SWS_AREA = $20; + SWS_BICUBLIN = $40; + SWS_GAUSS = $80; + SWS_SINC = $100; + SWS_LANCZOS = $200; + SWS_SPLINE = $400; + + SWS_SRC_V_CHR_DROP_MASK = $30000; + SWS_SRC_V_CHR_DROP_SHIFT = 16; + + SWS_PARAM_DEFAULT = 123456; + + SWS_PRINT_INFO = $1000; + + //the following 3 flags are not completely implemented + //internal chrominace subsampling info + SWS_FULL_CHR_H_INT = $2000; + //input subsampling info + SWS_FULL_CHR_H_INP = $4000; + SWS_DIRECT_BGR = $8000; + SWS_ACCURATE_RND = $40000; + + SWS_CPU_CAPS_MMX = $80000000; + SWS_CPU_CAPS_MMX2 = $20000000; + SWS_CPU_CAPS_3DNOW = $40000000; + SWS_CPU_CAPS_ALTIVEC = $10000000; + SWS_CPU_CAPS_BFIN = $01000000; + + SWS_MAX_REDUCE_CUTOFF = 0.002; + + SWS_CS_ITU709 = 1; + SWS_CS_FCC = 4; + SWS_CS_ITU601 = 5; + SWS_CS_ITU624 = 5; + SWS_CS_SMPTE170M = 5; + SWS_CS_SMPTE240M = 7; + SWS_CS_DEFAULT = 5; + + +type + + // when used for filters they must have an odd number of elements + // coeffs cannot be shared between vectors + PSwsVector = ^TSwsVector; + TSwsVector = record + coeff: Pdouble; + length: integer; + end; + + // vectors can be shared + PSwsFilter = ^TSwsFilter; + TSwsFilter = record + lumH: PSwsVector; + lumV: PSwsVector; + chrH: PSwsVector; + chrV: PSwsVector; + end; + + PSwsContext = ^TSwsContext; + TSwsContext = record + av_class: Pointer; + swScale: Pointer; + srxW,srcH, dstH: integer; + chrSrcW, chrSrcH, chrDstW, chrDstH: integer; + lumXInc, chrXInc, lumYInc, chrYInc: integer; + dstFormat, srcFormat, origDstFormat, origSrcFormat: integer; + chrSrcHSubSample, chrSrcVSubSample, chrIntHSubSample, chrIntVSubSample: integer; + chrDstHSubSample, chrDstVSubSample: integer; + vChrDrop, sliceDir: integer; + param: array[0..1] of double; + {internal structure} + end; + + +procedure sws_freeContext(swsContext: PSwsContext); + cdecl; external sw__scale; + +function sws_getContext(srcW: integer; srcH: integer; srcFormat: integer; dstW: integer; dstH: integer;dstFormat: integer; flags: integer; + srcFilter: PSwsFilter; dstFilter: PSwsFilter; param: Pdouble): PSwsContext; + cdecl; external sw__scale; +function sws_scale(context: PSwsContext; src: PPByteArray; srcStride: PIntArray; srcSliceY: integer; srcSliceH: integer; + dst: PPByteArray; dstStride: PIntArray): integer; + cdecl; external sw__scale; +function sws_scale_ordered(context: PSwsContext; src: PPByteArray; srcStride: PIntArray; srcSliceY: integer; + srcSliceH: integer; dst: PPByteArray; dstStride: PIntArray): integer; + cdecl; external sw__scale; deprecated; + +function sws_setColorspaceDetails(c: PSwsContext; inv_table: PQuadIntArray; srcRange: integer; table: PQuadIntArray; dstRange: integer; + brightness: integer; contrast: integer; saturation: integer): integer; + cdecl; external sw__scale; +function sws_getColorspaceDetails(c: PSwsContext; var inv_table: PQuadIntArray; var srcRange: integer; var table: PQuadIntArray; var dstRange: integer; + var brightness: integer; var contrast: integer; var saturation: integer): integer; + cdecl; external sw__scale; +function sws_getGaussianVec(variance: double; quality: double): PSwsVector; + cdecl; external sw__scale; +function sws_getConstVec(c: double; length: integer): PSwsVector; + cdecl; external sw__scale; +function sws_getIdentityVec: PSwsVector; + cdecl; external sw__scale; +procedure sws_scaleVec(a: PSwsVector; scalar: double); + cdecl; external sw__scale; +procedure sws_normalizeVec(a: PSwsVector; height: double); + cdecl; external sw__scale; +procedure sws_convVec(a: PSwsVector; b: PSwsVector); + cdecl; external sw__scale; +procedure sws_addVec(a: PSwsVector; b: PSwsVector); + cdecl; external sw__scale; +procedure sws_subVec(a: PSwsVector; b: PSwsVector); + cdecl; external sw__scale; +procedure sws_shiftVec(a: PSwsVector; shift: integer); + cdecl; external sw__scale; +function sws_cloneVec(a: PSwsVector): PSwsVector; + cdecl; external sw__scale; + +procedure sws_printVec(a: PSwsVector); + cdecl; external sw__scale; +procedure sws_freeVec(a: PSwsVector); + cdecl; external sw__scale; + +function sws_getDefaultFilter(lumaGBlur: single; chromaGBlur: single; lumaSarpen: single; chromaSharpen: single; chromaHShift: single; + chromaVShift: single; verbose: integer): PSwsFilter; + cdecl; external sw__scale; +procedure sws_freeFilter(filter: PSwsFilter); + cdecl; external sw__scale; + +function sws_getCachedContext(context: PSwsContext; + srcW: integer; srcH: integer; srcFormat: integer; + dstW: integer; dstH: integer; dstFormat: integer; flags: integer; + srcFilter: PSwsFilter; dstFilter: PSwsFilter; param: Pdouble): PSwsContext; + cdecl; external sw__scale; + +implementation + +end. diff --git a/Game/Code/lib/ffmpeg/version.inc b/Game/Code/lib/ffmpeg/version.inc deleted file mode 100644 index 6ba2bd52..00000000 --- a/Game/Code/lib/ffmpeg/version.inc +++ /dev/null @@ -1,102 +0,0 @@ -const
-{$IFDEF MSWINDOWS}
- av__codec = 'avcodec-51.dll';
- LIBAVCODEC_MAJOR_VERSION = 51;
- LIBAVCODEC_MINOR_VERSION = 0;
- LIBAVCODEC_SUB_VERSION = 0;
-
- av__format = 'avformat-50.dll';
- LIBAVFORMAT_MAJOR_VERSION = 50;
- LIBAVFORMAT_MINOR_VERSION = 0;
- LIBAVFORMAT_SUB_VERSION = 0;
-
- av__util = 'avutil-49.dll';
- LIBAVUTIL_MAJOR_VERSION = 49;
- LIBAVUTIL_MINOR_VERSION = 0;
- LIBAVUTIL_SUB_VERSION = 0;
-{$ENDIF}
-{$IFDEF LINUX}
- av__codec = 'libavcodec.so';
- LIBAVCODEC_MAJOR_VERSION = 51;
- LIBAVCODEC_MINOR_VERSION = 0;
- LIBAVCODEC_SUB_VERSION = 0;
-
- av__format = 'libavformat.so';
-//av__format = 'libavformat.51';
- LIBAVFORMAT_MAJOR_VERSION = 51;
- LIBAVFORMAT_MINOR_VERSION = 0;
- LIBAVFORMAT_SUB_VERSION = 0;
-
- av__util = 'libavutil.so';
- LIBAVUTIL_MAJOR_VERSION = 49;
- LIBAVUTIL_MINOR_VERSION = 0;
- LIBAVUTIL_SUB_VERSION = 0;
-{$ENDIF}
-{$IFDEF DARWIN}
- av__codec = 'libavcodec.dylib';
- LIBAVCODEC_MAJOR_VERSION = 51;
- LIBAVCODEC_MINOR_VERSION = 0;
- LIBAVCODEC_SUB_VERSION = 0;
-
- av__format = 'libavformat.dylib';
- LIBAVFORMAT_MAJOR_VERSION = 52;
- LIBAVFORMAT_MINOR_VERSION = 0;
- LIBAVFORMAT_SUB_VERSION = 0;
-
- av__util = 'libavutil.dylib';
- LIBAVUTIL_MAJOR_VERSION = 49;
- LIBAVUTIL_MINOR_VERSION = 0;
- LIBAVUTIL_SUB_VERSION = 0;
-{$ENDIF}
-
-(* Max. supported version by this header *)
-(* TODO: someone has to check the changes up to version 52, add some IFDEFS and increase this version number *)
-
-LIBAVCODEC_MAX_MAJOR_VERSION = 51;
-LIBAVCODEC_MAX_MINOR_VERSION = 12;
-LIBAVCODEC_MAX_SUB_VERSION = 1;
-LIBAVCODEC_MAX_VERSION = (LIBAVCODEC_MAX_MAJOR_VERSION * 10000) +
- (LIBAVCODEC_MAX_MINOR_VERSION * 100) +
- (LIBAVCODEC_MAX_SUB_VERSION);
-
-LIBAVFORMAT_MAX_MAJOR_VERSION = 51;
-LIBAVFORMAT_MAX_MINOR_VERSION = 12;
-LIBAVFORMAT_MAX_SUB_VERSION = 1;
-LIBAVFORMAT_MAX_VERSION = (LIBAVFORMAT_MAX_MAJOR_VERSION * 10000) +
- (LIBAVFORMAT_MAX_MINOR_VERSION * 100) +
- (LIBAVFORMAT_MAX_SUB_VERSION);
-
-LIBAVUTIL_MAX_MAJOR_VERSION = 49;
-LIBAVUTIL_MAX_MINOR_VERSION = 4;
-LIBAVUTIL_MAX_SUB_VERSION = 1;
-LIBAVUTIL_MAX_VERSION = (LIBAVUTIL_MAX_MAJOR_VERSION * 10000) +
- (LIBAVUTIL_MAX_MINOR_VERSION * 100) +
- (LIBAVUTIL_MAX_SUB_VERSION);
-
-(* Calc linked version *)
-LIBAVCODEC_VERSION = (LIBAVCODEC_MAJOR_VERSION * 10000) +
- (LIBAVCODEC_MINOR_VERSION * 100) +
- (LIBAVCODEC_SUB_VERSION);
-
-LIBAVFORMAT_VERSION = (LIBAVFORMAT_MAJOR_VERSION * 10000) +
- (LIBAVFORMAT_MINOR_VERSION * 100) +
- (LIBAVFORMAT_SUB_VERSION);
-
-LIBAVUTIL_VERSION = (LIBAVUTIL_MAJOR_VERSION * 10000) +
- (LIBAVUTIL_MINOR_VERSION * 100) +
- (LIBAVUTIL_SUB_VERSION);
-
-(* Check if linked versions are supported *)
-
-{$IF (LIBAVCODEC_VERSION > LIBAVCODEC_MAX_VERSION)}
- {$MESSAGE Warn 'Linked version of libavcodec may be unsupported!'}
-{$IFEND}
-
-{$IF (LIBAVFORMAT_VERSION > LIBAVFORMAT_MAX_VERSION)}
- {$MESSAGE Warn 'Linked version of libavformat may be unsupported!'}
-{$IFEND}
-
-{$IF (LIBAVUTIL_VERSION > LIBAVUTIL_MAX_VERSION)}
- {$MESSAGE Warn 'Linked version of libavutil may be unsupported!'}
-{$IFEND}
-
|