From 96a355913e633a41b6e9192b0791ffb47aecbe20 Mon Sep 17 00:00:00 2001 From: k-m_schindler Date: Sun, 18 Mar 2012 23:04:14 +0000 Subject: revert false commit git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2840 b956fd51-792f-4845-bead-9b4dfca2ff2c --- src/lib/ffmpeg/avio.pas | 1099 ++++++++++++++++++++++------------------------- 1 file changed, 522 insertions(+), 577 deletions(-) (limited to 'src/lib/ffmpeg/avio.pas') diff --git a/src/lib/ffmpeg/avio.pas b/src/lib/ffmpeg/avio.pas index a942e28f..adb59a44 100644 --- a/src/lib/ffmpeg/avio.pas +++ b/src/lib/ffmpeg/avio.pas @@ -1,8 +1,7 @@ (* + * unbuffered io for ffmpeg system * copyright (c) 2001 Fabrice Bellard * - * 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 @@ -29,7 +28,7 @@ * header, so it should not be directly included in your projects. * * update to - * Max. avformat version: 52.111.0 + * Max. avformat version: 52.78.3, revision 24841, Thu Aug 26 02:00:00 2010 CET *) unit avio; @@ -48,720 +47,678 @@ interface uses ctypes, - {$IFDEF UNIX} - BaseUnix, // for SEEK_CUR - {$ENDIF} avutil, avcodec, SysUtils, UConfig; +(* unbuffered I/O *) + const - AVIO_SEEKABLE_NORMAL = 0001; (**< Seeking works like for a local file *) - URL_PROTOCOL_FLAG_NESTED_SCHEME = 1; (*< The protocol name can be the first part of a nested protocol scheme *) + URL_RDONLY = 0; + URL_WRONLY = 1; + URL_RDWR = 2; + + (** + * 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; + +{$IF LIBAVFORMAT_VERSION >= 52056000} // 52.56.0 + (** + * Oring this flag as into the "whence" parameter to a seek function causes it to + * seek by any means (like reopening and linear reading) or other normally unreasonble + * means that can be extreemly slow. + * This may be ignored by the seek code. + *) + AVSEEK_FORCE = $20000; +{$IFEND} type - TReadWriteFunc = function(opaque: Pointer; buf: PByteArray; buf_size: cint): cint; cdecl; - TSeekFunc = function(opaque: Pointer; offset: cint64; whence: cint): cint64; cdecl; + TURLInterruptCB = function (): cint; cdecl; type - PURLContext = ^TURLContext; PURLProtocol = ^TURLProtocol; -(** - * 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(AVIOContext) must not be used outside libav*. - * - * @note None of the function pointers in AVIOContext should be called - * directly, they should only be set by the client application - * when implementing custom I/O. Normally these are set to the - * function pointers specified in avio_alloc_context() - *) - PAVIOContext = ^TAVIOContext; - TAVIOContext = record - buffer: PByteArray; (**< Start of the buffer. *) - buffer_size: cint; (**< Maximum buffer size *) - buf_ptr: PByteArray; (**< Current position in the buffer *) - buf_end: PByteArray; (**< End of the data, may be less than - buffer+buffer_size if the read function returned - less data than requested, e.g. for streams where - no more data has been received yet. *) - opaque: pointer; (**< A private pointer, passed to the read/write/seek/... - functions. *) - read_packet: TReadWriteFunc; - write_packet: TReadWriteFunc; - seek: TSeekFunc; - pos: cint64; (**< position in the file of the current buffer *) - must_flush: cint; (**< true if the next seek should flush *) - eof_reached: cint; (**< true if eof reached *) - write_flag: cint; (**< true if open for writing *) -{$IFDEF FF_API_OLD_AVIO} - is_streamed: cint; { deprecated } -{$ENDIF} - max_packet_size: cint; - checksum: culong; - checksum_ptr: PByteArray; - update_checksum: function (checksum: culong; buf: {const} PByteArray; size: cuint): culong; cdecl; - error: cint; (**< contains the error code or 0 if no error happened *) - (** - * Pause or resume playback for network streaming protocols - e.g. MMS. - *) - read_pause: function(opaque: Pointer; pause: cint): cint; cdecl; - (** - * Seek to a given timestamp in stream with the specified stream_index. - * Needed for some network streaming protocols which don't support seeking - * to byte position. - *) - read_seek: function(opaque: Pointer; stream_index: cint; - timestamp: cint64; flags: cint): cint64; cdecl; - (** - * A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable. - *) - seekable: cint; - end; - -(* unbuffered I/O *) - -(** - * URL Context. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(URLContext) must not be used outside libav*. - * @deprecated This struct will be made private - *) + (** + * 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 -{$IFDEF FF_API_URL_CLASS} + {$IF LIBAVFORMAT_VERSION < 52078003} // < 52.78.3 av_class: {const} PAVClass; ///< information for av_log(). Set by url_open(). -{$ENDIF} + {$ELSE} + {$IFDEF FF_API_URL_CLASS} + av_class: {const} PAVClass; ///< information for av_log(). Set by url_open(). + {$ENDIF} + {$IFEND} prot: PURLProtocol; flags: cint; is_streamed: cint; (**< true if streamed (no seek possible), default = false *) max_packet_size: cint; (**< if non zero, the stream is packetized with this max packet size *) priv_data: pointer; filename: PAnsiChar; (**< specified URL *) - is_connected: cint; +{$IF LIBAVFORMAT_VERSION >= 52070000} // 52.70.0 + is_connected: cint; +{$IFEND} end; PPURLContext = ^PURLContext; -(** - * @deprecated This struct is to be made private. Use the higher-level - * AVIOContext-based API instead. - *) + PURLPollEntry = ^TURLPollEntry; + TURLPollEntry = record + handle: PURLContext; + events: cint; + revents: cint; + end; + TURLProtocol = record name: PAnsiChar; +{$IF LIBAVFORMAT_VERSION < 52047000} // 52.47.0 + url_open: function (h: PURLContext; filename: {const} PAnsiChar; flags: cint): cint; cdecl; +{$ELSE} url_open: function (h: PURLContext; url: {const} PAnsiChar; flags: cint): cint; cdecl; +{$IFEND} + +(** + * Read up to size bytes from the resource accessed by h, and store + * the read bytes in buf. + * + * @return The number of bytes actually read, or a negative value + * corresponding to an AVERROR code in case of error. A value of zero + * indicates that it is not possible to read more from the accessed + * resource (except if the value of the size argument is also zero). + *) url_read: function (h: PURLContext; buf: PByteArray; size: cint): cint; cdecl; + +(** + * Read as many bytes as possible (up to size), calling the + * read function multiple times if necessary. + * Will also retry if the read function returns AVERROR(EAGAIN). + * This makes special short-read handling in applications + * unnecessary, if the return value is < size then it is + * certain there was either an error or the end of file was reached. + *) url_write: function (h: PURLContext; {const} buf: PByteArray; size: cint): cint; cdecl; + +(** + * Change the position that will be used by the next read/write + * operation on the resource accessed by h. + * + * @param pos specifies the new position to set + * @param whence specifies how pos should be interpreted, it must be + * one of SEEK_SET (seek from the beginning), SEEK_CUR (seek from the + * current position), SEEK_END (seek from the end), or AVSEEK_SIZE + * (return the filesize of the requested resource, pos is ignored). + * @return a negative value corresponding to an AVERROR code in case + * of failure, or the resulting file position, measured in bytes from + * the beginning of the file. You can use this feature together with + * SEEK_CUR to read the current file position. + *) url_seek: function (h: PURLContext; pos: cint64; whence: cint): cint64; cdecl; + url_close: function (h: PURLContext): cint; cdecl; next: PURLProtocol; + {$IF (LIBAVFORMAT_VERSION >= 52001000) and (LIBAVFORMAT_VERSION < 52004000)} // 52.1.0 .. 52.4.0 + url_read_play: function (h: PURLContext): cint; cdecl; + url_read_pause: function (h: PURLContext): cint; cdecl; + {$IFEND} + {$IF LIBAVFORMAT_VERSION >= 52004000} // 52.4.0 url_read_pause: function (h: PURLContext; pause: cint): cint; cdecl; + {$IFEND} + {$IF LIBAVFORMAT_VERSION >= 52001000} // 52.1.0 url_read_seek: function (h: PURLContext; stream_index: cint; timestamp: cint64; flags: cint): cint64; cdecl; + {$IFEND} + {$IF LIBAVFORMAT_VERSION >= 52031000} // 52.31.0 url_get_file_handle: function (h: PURLContext): cint; cdecl; + {$IFEND} + + {$IF LIBAVFORMAT_VERSION >= 52071000} // 52.71.0 priv_data_size: cint; {const} priv_data_class: PAVClass; - flags: cint; - url_check: function (h: PURLContext; mask: cint): cint; + {$IFEND} end; - PURLPollEntry = ^TURLPollEntry; - TURLPollEntry = record - handle: PURLContext; - events: cint; - revents: cint; + (** + * 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: PByteArray; + buffer_size: cint; + buf_ptr: PByteArray; + buf_end: PByteArray; + opaque: pointer; + read_packet: function (opaque: pointer; buf: PByteArray; buf_size: cint): cint; cdecl; + write_packet: function (opaque: pointer; buf: PByteArray; buf_size: cint): cint; cdecl; + seek: function (opaque: pointer; offset: cint64; whence: cint): cint64; cdecl; + pos: cint64; (* position in the file of the current buffer *) + must_flush: cint; (* true if the next seek should flush *) + eof_reached: cint; (* true if eof reached *) + write_flag: cint; (* true if open for writing *) + is_streamed: cint; + max_packet_size: cint; + checksum: culong; + checksum_ptr: PByteArray; + update_checksum: function (checksum: culong; buf: {const} PByteArray; size: cuint): culong; cdecl; + error: cint; ///< 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): cint; cdecl; + read_pause: function(opaque: Pointer): cint; cdecl; + {$IFEND} + {$IF LIBAVFORMAT_VERSION >= 52004000} // 52.4.0 + read_pause: function(opaque: Pointer; pause: cint): cint; cdecl; + {$IFEND} + {$IF LIBAVFORMAT_VERSION >= 52001000} // 52.1.0 + read_seek: function(opaque: Pointer; stream_index: cint; + timestamp: cint64; flags: cint): cint64; cdecl; + {$IFEND} end; -{$IFDEF FF_API_OLD_AVIO} - -(* not implemented *) -function url_poll(poll_table: PURLPollEntry; n: cint; timeout: cint): cint; - cdecl; external av__format; deprecated; - -const +{$IF LIBAVFORMAT_VERSION >= 52070000} // 52.70.0 (** - * @name URL open modes - * The flags argument to url_open and cosins must be one of the following - * constants, optionally ORed with other flags. - * @ - *) - URL_RDONLY = 0; (**< read-only *) - URL_WRONLY = 1; (**< write-only *) - URL_RDWR = 2; (**< read-write *) -(** - * @ + * Create a URLContext for accessing to the resource indicated by + * url, but do not initiate the connection yet. + * + * @param puc pointer to the location where, in case of success, the + * function puts the pointer to the created URLContext + * @param flags flags which control how the resource indicated by url + * is to be opened + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code in case of failure *) +function url_alloc(h: PPURLContext; {const} url: PAnsiChar; flags: cint): cint; + cdecl; external av__format; (** - * Use non-blocking mode. - * If this flag is set, operations on the context will return - * AVERROR(EAGAIN) if they can not be performed immediately. - * If this flag is not set, operations on the context will never return - * AVERROR(EAGAIN). - * Note that this flag does not affect the opening/connecting of the - * context. Connecting a protocol will always block if necessary (e.g. on - * network protocols) but never hang (e.g. on busy devices). - * Warning: non-blocking protocols is work-in-progress; this flag may be - * silently ignored. - *) - URL_FLAG_NONBLOCK = 4; - -type - TURLInterruptCB = function (): cint; cdecl; - -var - url_interrupt_cb: PURLInterruptCB; external av__format; + * Connect an URLContext that has been allocated by url_alloc + *) +function url_connect(h: PURLContext): cint; + cdecl; external av__format; +{$IFEND} +{$IF LIBAVFORMAT_VERSION >= 52021000} // 52.21.0 (** - * @defgroup old_url_funcs Old url_* functions - * The following functions are deprecated. Use the buffered API based on #AVIOContext instead. - * @ + * Create a URLContext for accessing to the resource indicated by + * URL, and open it using the URLProtocol up. + * + * @param puc pointer to the location where, in case of success, the + * function puts the pointer to the created URLContext + * @param flags flags which control how the resource indicated by URL + * is to be opened + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code in case of failure *) function url_open_protocol(puc: PPURLContext; up: PURLProtocol; +{$IF LIBAVFORMAT_VERSION < 52047000} // 52.47.0 + filename: {const} PAnsiChar; flags: cint): cint; +{$ELSE} url: {const} PAnsiChar; flags: cint): cint; - cdecl; external av__format; deprecated; -function url_alloc(h: PPURLContext; {const} url: PAnsiChar; flags: cint): cint; - cdecl; external av__format; deprecated; -function url_connect(h: PURLContext): cint; - cdecl; external av__format; deprecated; +{$IFEND} + cdecl; external av__format; +{$IFEND} + +(** + * Create a URLContext for accessing to the resource indicated by + * url, and open it. + * + * @param puc pointer to the location where, in case of success, the + * function puts the pointer to the created URLContext + * @param flags flags which control how the resource indicated by url + * is to be opened + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code in case of failure + *) +{$IF LIBAVFORMAT_VERSION < 52047000} // 52.47.0 +function url_open(h: PPointer; filename: {const} PAnsiChar; flags: cint): cint; +{$ELSE} function url_open(h: PPointer; url: {const} PAnsiChar; flags: cint): cint; - cdecl; external av__format; deprecated; +{$IFEND} + cdecl; external av__format; function url_read (h: PURLContext; buf: PByteArray; size: cint): cint; - cdecl; external av__format; deprecated; + cdecl; external av__format; +{$IF LIBAVFORMAT_VERSION >= 52034000} // 52.34.0 function url_read_complete (h: PURLContext; buf: PByteArray; size: cint): cint; cdecl; - cdecl; external av__format; deprecated; + cdecl; external av__format; +{$IFEND} function url_write (h: PURLContext; {const} buf: PByteArray; size: cint): cint; - cdecl; external av__format; deprecated; + cdecl; external av__format; function url_seek (h: PURLContext; pos: cint64; whence: cint): cint64; - cdecl; external av__format; deprecated; -function url_close (h: PURLContext): cint; - cdecl; external av__format; deprecated; -function url_filesize (h: PURLContext): cint64; - cdecl; external av__format; deprecated; -function url_get_file_handle(h: PURLContext): cint; - cdecl; external av__format; deprecated; -function url_get_max_packet_size(h: PURLContext): cint; - cdecl; external av__format; deprecated; -procedure url_get_filename(h: PURLContext; buf: PAnsiChar; buf_size: cint); - cdecl; external av__format; deprecated; -function av_url_read_pause(h: PURLContext; pause: cint): cint; - cdecl; external av__format; deprecated; -function av_url_read_seek(h: PURLContext; stream_index: cint; - timestamp: cint64; flags: cint): cint64; - cdecl; external av__format; deprecated; -procedure url_set_interrupt_cb (interrupt_cb: TURLInterruptCB); - cdecl; external av__format; deprecated; - -(** - * returns the next registered protocol after the given protocol (the first if - * NULL is given), or NULL if protocol is the last one. - *) -function av_protocol_next(p: PURLProtocol): PURLProtocol; cdecl; external av__format; (** - * Register the URLProtocol protocol. + * Close the resource accessed by the URLContext h, and free the + * memory used by it. * - * @param size the size of the URLProtocol struct referenced - *) -function av_register_protocol2(protocol: PURLProtocol; size: cint): cint; - cdecl; external av__format; deprecated; -(** - * @ + * @return a negative value if an error condition occurred, 0 + * otherwise *) +function url_close (h: PURLContext): cint; + cdecl; external av__format; -type - ByteIOContext = AVIOContext; { deprecated } - -function init_put_byte(s: PAVIOContext; - buffer: PByteArray; - buffer_size: cint; write_flag: cint; - opaque: pointer; - read_packet: TReadWriteFunc; - write_packet: TReadWriteFunc; - seek: TSeekFunc): cint; - cdecl; external av__format; deprecated; -function av_alloc_put_byte( - buffer: PByteArray; - buffer_size: cint; - write_flag: cint; - opaque: Pointer; - read_packet: TReadWriteFunc; - write_packet: TReadWriteFunc; - seek: TSeekFunc): PAVIOContext; - cdecl; external av__format; deprecated; - -(** - * @defgroup old_avio_funcs Old put_/get_*() functions - * The following functions are deprecated. Use the "avio_"-prefixed functions instead. - * @ - *) -function get_buffer(s: PAVIOContext; buf: PByteArray; size: cint): cint; - cdecl; external av__format; deprecated; -function get_partial_buffer(s: PAVIOContext; buf: PByteArray; size: cint): cint; - cdecl; external av__format; deprecated; -function get_byte(s: PAVIOContext): cint; - cdecl; external av__format; deprecated; -function get_le16(s: PAVIOContext): cuint; - cdecl; external av__format; deprecated; -function get_le24(s: PAVIOContext): cuint; - cdecl; external av__format; deprecated; -function get_le32(s: PAVIOContext): cuint; - cdecl; external av__format; deprecated; -function get_le64(s: PAVIOContext): cuint64; - cdecl; external av__format; deprecated; -function get_be16(s: PAVIOContext): cuint; - cdecl; external av__format; deprecated; -function get_be24(s: PAVIOContext): cuint; - cdecl; external av__format; deprecated; -function get_be32(s: PAVIOContext): cuint; - cdecl; external av__format; deprecated; -function get_be64(s: PAVIOContext): cuint64; - cdecl; external av__format; deprecated; - -procedure put_byte(s: PAVIOContext; b: cint); - cdecl; external av__format; deprecated; -procedure put_nbyte(s: PAVIOContext; b: cint; count: cint); - cdecl; external av__format; deprecated; -procedure put_buffer (s: PAVIOContext; buf: {const} PByteArray; size: cint); - cdecl; external av__format; deprecated; -procedure put_le64(s: PAVIOContext; val: cuint64); - cdecl; external av__format; deprecated; -procedure put_be64(s: PAVIOContext; val: cuint64); - cdecl; external av__format; deprecated; -procedure put_le32(s: PAVIOContext; val: cuint); - cdecl; external av__format; deprecated; -procedure put_be32(s: PAVIOContext; val: cuint); - cdecl; external av__format; deprecated; -procedure put_le24(s: PAVIOContext; val: cuint); - cdecl; external av__format; deprecated; -procedure put_be24(s: PAVIOContext; val: cuint); - cdecl; external av__format; deprecated; -procedure put_le16(s: PAVIOContext; val: cuint); - cdecl; external av__format; deprecated; -procedure put_be16(s: PAVIOContext; val: cuint); - cdecl; external av__format; deprecated; -procedure put_tag(s: PAVIOContext; tag: {const} PAnsiChar); - cdecl; external av__format; deprecated; (** - * @ + * Return a non-zero value if the resource indicated by url + * exists, 0 otherwise. *) +{$IF LIBAVFORMAT_VERSION < 52047000} // 52.47.0 +function url_exist(filename: {const} PAnsiChar): cint; +{$ELSE} +function url_exist(url: {const} PAnsiChar): cint; +{$IFEND} + cdecl; external av__format; -function av_url_read_fpause(h: PAVIOContext; pause: cint): cint; - cdecl; external av__format; deprecated; -function av_url_read_fseek(h: PAVIOContext; stream_index: cint; - timestamp: cint64; flags: cint): cint64; - cdecl; external av__format; deprecated; +function url_filesize (h: PURLContext): cint64; + cdecl; external av__format; (** - * @defgroup old_url_f_funcs Old url_f* functions - * The following functions are deprecated, use the "avio_"-prefixed functions instead. - * @ - *) -function url_fopen(var s: PAVIOContext; url: {const} PAnsiChar; flags: cint): cint; - cdecl; external av__format; deprecated; -function url_fclose(s: PAVIOContext): cint; - cdecl; external av__format; deprecated; -function url_fseek(s: PAVIOContext; offset: cint64; whence: cint): cint64; - cdecl; external av__format; deprecated; -function url_fskip(s: PAVIOContext; offset: cint64): cint; - cdecl; external av__format; deprecated; -function url_ftell(s: PAVIOContext): cint64; - cdecl; external av__format; deprecated; -function url_fsize(s: PAVIOContext): cint64; - cdecl; external av__format; deprecated; -const - URL_EOF = -1; -(** @note return URL_EOF (-1) if EOF *) -function url_fgetc(s: PAVIOContext): cint; - cdecl; external av__format; deprecated; -function url_setbufsize (s: PAVIOContext; buf_size: cint): cint; - cdecl; external av__format; deprecated; -function url_fprintf(s: PAVIOContext; fmt: {const} PAnsiChar; args: array of const): cint; - cdecl; external av__format; deprecated; -procedure put_flush_packet (s: PAVIOContext); - cdecl; external av__format; deprecated; -function url_open_dyn_buf(var s: PAVIOContext): cint; - cdecl; external av__format; deprecated; -function url_open_dyn_packet_buf(var s: PAVIOContext; max_packet_size: cint): cint; - cdecl; external av__format; deprecated; -function url_close_dyn_buf(s: PAVIOContext; pbuffer:PPointer): cint; - cdecl; external av__format; deprecated; -function url_fdopen (var s: PAVIOContext; h: PURLContext): cint; - cdecl; external av__format; deprecated; -(** - * @ + * Return the file descriptor associated with this URL. For RTP, this + * will return only the RTP file descriptor, not the RTCP file descriptor. + * To get both, use rtp_get_file_handles(). + * + * @return the file descriptor associated with this URL, or <0 on error. *) +(* not implemented *) +function url_get_file_handle(h: PURLContext): cint; + cdecl; external av__format; -function url_ferror(s: PAVIOContext): cint; - cdecl; external av__format; deprecated; - -function udp_set_remote_url(h: PURLContext; uri: {const} PAnsiChar): cint; - cdecl; external av__format; deprecated; -function udp_get_local_port(h: PURLContext): cint; - cdecl; external av__format; deprecated; - -type - Tupdate_checksum = function (c: culong; p: Pcuint8; len: cuint): culong; cdecl; -procedure init_checksum(s: PAVIOContext; - update_checksum: Tupdate_checksum; - checksum: culong); - cdecl; external av__format; deprecated; -function get_checksum(s: PAVIOContext): culong; - cdecl; external av__format; deprecated; -procedure put_strz(s: PAVIOContext; buf: {const} PAnsiChar); - cdecl; external av__format; deprecated; -(** @note unlike fgets, the EOL character is not returned and a whole - line is parsed. return NULL if first char read was EOF *) -function url_fgets(s: PAVIOContext; buf: PAnsiChar; buf_size: cint): PAnsiChar; - cdecl; external av__format; deprecated; -(** - * @deprecated use avio_get_str instead - *) -function get_strz(s: PAVIOContext; buf: PAnsiChar; maxlen: cint): PAnsiChar; - cdecl; external av__format; deprecated; (** - * @deprecated Use AVIOContext.seekable field directly. + * 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_is_streamed(s: PAVIOContext): cint; {$IFDEF HasInline}inline;{$ENDIF} deprecated; - -function url_fileno(s: PAVIOContext): PURLContext; - cdecl; external av__format; deprecated; +function url_get_max_packet_size(h: PURLContext): cint; + cdecl; external av__format; +procedure url_get_filename(h: PURLContext; buf: PAnsiChar; buf_size: cint); + cdecl; external av__format; (** - * @deprecated use AVIOContext.max_packet_size directly. + * 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. *) -function url_fget_max_packet_size (s: PAVIOContext): cint; - cdecl; external av__format; deprecated; - -function url_open_buf(var s: PAVIOContext; buf: PAnsiChar; buf_size: cint; flags: cint): cint; - cdecl; external av__format; deprecated; +procedure url_set_interrupt_cb (interrupt_cb: TURLInterruptCB); + cdecl; external av__format; -(** return the written or read size *) -function url_close_buf(s: PAVIOContext): cint; - cdecl; external av__format; deprecated; +(* not implemented *) +function url_poll(poll_table: PURLPollEntry; n: cint; timeout: cint): cint; + cdecl; external av__format; +{$IF LIBAVFORMAT_VERSION >= 52004000} // 52.4.0 (** - * Return a non-zero value if the resource indicated by url - * exists, 0 otherwise. - * @deprecated Use avio_check instead. + * Pause and resume playing - only meaningful if using a network streaming + * protocol (e.g. MMS). + * @param pause 1 for pause, 0 for resume *) -function url_exist(url: {const} PAnsiChar): cint; - cdecl; external av__format; deprecated; +function av_url_read_pause(h: PURLContext; pause: cint): cint; + cdecl; external av__format; {$IFEND} +{$IF LIBAVFORMAT_VERSION >= 52001000} // 52.1.0 (** - * Return AVIO_* access flags corresponding to the access permissions - * of the resource in url, or a negative value corresponding to an - * AVERROR code in case of failure. The returned access flags are - * masked by the value in flags. - * - * @note This function is intrinsically unsafe, in the sense that the - * checked resource may change its existence or permission status from - * one call to another. Thus you should not trust the returned value, - * unless you are sure that no other processes are accessing the - * checked resource. - * - * @note This function is slightly broken until next major bump - * because of AVIO_RDONLY == 0. Don't use it until then. + * 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 avio_check(url: {const} PAnsiChar; flags: cint): cint; +function av_url_read_seek(h: PURLContext; stream_index: cint; + timestamp: cint64; flags: cint): cint64; cdecl; external av__format; +{$IFEND} (** - * The callback is called in blocking functions to test regulary if - * asynchronous interruption is needed. AVERROR_EXIT is returned - * in this case by the interrupted function. 'NULL' means no interrupt - * callback is given. - *) -procedure avio_set_interrupt_cb(interrupt_cb: Pointer); - cdecl; external av__format; - -{$IFDEF FF_API_REGISTER_PROTOCOL} var +{$IF LIBAVFORMAT_VERSION < 52078003} // < 52.78.3 first_protocol: PURLProtocol; external av__format; +{$ELSE} + {$IFDEF FF_API_REGISTER_PROTOCOL} + first_protocol: PURLProtocol; external av__format; + {$IFEND} {$IFEND} + url_interrupt_cb: PURLInterruptCB; external av__format; +**) -{$IFDEF FF_API_REGISTER_PROTOCOL} +{$IF LIBAVFORMAT_VERSION >= 52002000} // 52.2.0 (** - * @deprecated Use av_register_protocol() instead. + * If protocol is NULL, returns the first registered protocol, + * if protocol is non-NULL, returns the next registered protocol after protocol, + * or NULL if protocol is the last one. *) -function register_protocol(protocol: PURLProtocol): cint; - cdecl; external av__format; deprecated; +function av_protocol_next(p: PURLProtocol): PURLProtocol; + cdecl; external av__format; +{$IFEND} +{$IF LIBAVFORMAT_VERSION <= 52028000} // 52.28.0 (** + * Register the URLProtocol protocol. + * + * + * @deprecated Use av_register_protocol() instead. + *) +function register_protocol(protocol: PURLProtocol): cint; + cdecl; external av__format; +(** Alias for register_protocol() + * * @deprecated Use av_register_protocol2() instead. *) function av_register_protocol(protocol: PURLProtocol): cint; - cdecl; external av__format; deprecated; -{$ENDIF} + cdecl; external av__format name 'register_protocol'; +{$ELSE} +{$IF LIBAVFORMAT_VERSION < 52078003} // < 52.78.3 +function av_register_protocol(protocol: PURLProtocol): cint; + cdecl; external av__format; +{$ELSE} + {$IFDEF FF_API_REGISTER_PROTOCOL} +function av_register_protocol(protocol: PURLProtocol): cint; + cdecl; external av__format; + {$ENDIF} +{$IFEND} +{$IFEND} +{$IF LIBAVFORMAT_VERSION >= 52069000} // 52.69.0 +function av_register_protocol2(protocol: PURLProtocol; size: cint): cint; + cdecl; external av__format; +{$IFEND} -(** - * Allocate and initialize an AVIOContext for buffered I/O. It must be later - * freed with av_free(). - * - * @param buffer Memory block for input/output operations via AVIOContext. - * The buffer must be allocated with av_malloc() and friends. - * @param buffer_size The buffer size is very important for performance. - * For protocols with fixed blocksize it should be set to this blocksize. - * For others a typical size is a cache page, e.g. 4kb. - * @param write_flag Set to 1 if the buffer should be writable, 0 otherwise. - * @param opaque An opaque pointer to user-specific data. - * @param read_packet A function for refilling the buffer, may be NULL. - * @param write_packet A function for writing the buffer contents, may be NULL. - * @param seek A function for seeking to specified byte position, may be NULL. - * - * @return Allocated AVIOContext or NULL on failure. - *) -function avio_alloc_context( - buffer: PAnsiChar; +type + TReadWriteFunc = function(opaque: Pointer; buf: PByteArray; buf_size: cint): cint; cdecl; + TSeekFunc = function(opaque: Pointer; offset: cint64; whence: cint): cint64; cdecl; + +function init_put_byte(s: PByteIOContext; + buffer: PByteArray; + buffer_size: cint; write_flag: cint; + opaque: pointer; + read_packet: TReadWriteFunc; + write_packet: TReadWriteFunc; + seek: TSeekFunc): cint; + cdecl; external av__format; +{$IF LIBAVFORMAT_VERSION >= 52004000} // 52.4.0 +function av_alloc_put_byte( + buffer: PByteArray; buffer_size: cint; write_flag: cint; opaque: Pointer; read_packet: TReadWriteFunc; write_packet: TReadWriteFunc; - seek: TSeekFunc): PAVIOContext; + seek: TSeekFunc): PByteIOContext; cdecl; external av__format; - -procedure avio_w8(s: PAVIOContext; b: cint); +{$IFEND} + +procedure put_byte(s: PByteIOContext; b: cint); cdecl; external av__format; -procedure avio_write(s: PAVIOContext; buf: {const} PAnsiChar; size: cint); +procedure put_buffer (s: PByteIOContext; buf: {const} PByteArray; size: cint); cdecl; external av__format; -procedure avio_wl64(s: PAVIOContext; val: cuint64); +procedure put_le64(s: PByteIOContext; val: cuint64); cdecl; external av__format; -procedure avio_wb64(s: PAVIOContext; val: cuint64); +procedure put_be64(s: PByteIOContext; val: cuint64); cdecl; external av__format; -procedure avio_wl32(s: PAVIOContext; val: cuint); +procedure put_le32(s: PByteIOContext; val: cuint); cdecl; external av__format; -procedure avio_wb32(s: PAVIOContext; val: cuint); +procedure put_be32(s: PByteIOContext; val: cuint); cdecl; external av__format; -procedure avio_wl24(s: PAVIOContext; val: cuint); +procedure put_le24(s: PByteIOContext; val: cuint); cdecl; external av__format; -procedure avio_wb24(s: PAVIOContext; val: cuint); +procedure put_be24(s: PByteIOContext; val: cuint); cdecl; external av__format; -procedure avio_wl16(s: PAVIOContext; val: cuint); +procedure put_le16(s: PByteIOContext; val: cuint); cdecl; external av__format; -procedure avio_wb16(s: PAVIOContext; val: cuint); +procedure put_be16(s: PByteIOContext; val: cuint); cdecl; external av__format; - -(** - * Write a NULL-terminated string. - * @return number of bytes written. - *) -function avio_put_str(s: PAVIOContext; str: {const} PAnsiChar): cint; +procedure put_tag(s: PByteIOContext; tag: {const} PAnsiChar); cdecl; external av__format; -(** - * Convert an UTF-8 string to UTF-16LE and write it. - * @return number of bytes written. - *) -function avio_put_str16le(s: PAVIOContext; str: {const} PAnsiChar): cint; +procedure put_strz(s: PByteIOContext; buf: {const} PAnsiChar); cdecl; external av__format; -const - (** - * 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; - - (** - * Oring this flag as into the "whence" parameter to a seek function causes it to - * seek by any means (like reopening and linear reading) or other normally unreasonble - * means that can be extreemly slow. - * This may be ignored by the seek code. - *) - AVSEEK_FORCE = $20000; - (** - * fseek() equivalent for AVIOContext. + * fseek() equivalent for ByteIOContext. * @return new position or AVERROR. *) -function avio_seek(s: PAVIOContext; offset: cint64; whence: cint): cint64; +function url_fseek(s: PByteIOContext; offset: cint64; whence: cint): cint64; cdecl; external av__format; (** - * Skip given number of bytes forward - * @return new position or AVERROR. + * Skip given number of bytes forward. + * @param offset number of bytes + * @return 0 on success, <0 on error *) -function avio_skip(s: PAVIOContext; offset: cint64): cint64; +{$IF LIBAVFORMAT_VERSION < 52074000} // 52.74.0 +procedure url_fskip(s: PByteIOContext; offset: cint64); cdecl; external av__format; +{$ELSE} +function url_fskip(s: PByteIOContext; offset: cint64): cint; + cdecl; external av__format; +{$IFEND} (** - * ftell() equivalent for AVIOContext. + * ftell() equivalent for ByteIOContext. * @return position or AVERROR. *) -function avio_tell(s: PAVIOContext): cint64; {$IFDEF HasInline}inline;{$ENDIF} +function url_ftell(s: PByteIOContext): cint64; + cdecl; external av__format; (** * Get the filesize. * @return filesize or AVERROR *) -function avio_size(s: PAVIOContext): cint64; +function url_fsize(s: PByteIOContext): cint64; cdecl; external av__format; (** - * feof() equivalent for AVIOContext. + * feof() equivalent for ByteIOContext. * @return non zero if and only if end of file *) -function url_feof(s: PAVIOContext): cint; +function url_feof(s: PByteIOContext): cint; cdecl; external av__format; - + +function url_ferror(s: PByteIOContext): cint; + cdecl; external av__format; + +{$IF LIBAVFORMAT_VERSION >= 52004000} // 52.4.0 +function av_url_read_fpause(h: PByteIOContext; pause: cint): cint; + cdecl; external av__format; +{$IFEND} + +{$IF LIBAVFORMAT_VERSION >= 52001000} // 52.1.0 +function av_url_read_fseek(h: PByteIOContext; stream_index: cint; + timestamp: cint64; flags: cint): cint64; + cdecl; external av__format; +{$IFEND} + +const + URL_EOF = -1; +(** @note return URL_EOF (-1) if EOF *) +function url_fgetc(s: PByteIOContext): cint; + cdecl; external av__format; + (** @warning currently size is limited *) -function avio_printf(s: PAVIOContext; fmt: {const} PAnsiChar; args: array of const): cint; +function url_fprintf(s: PByteIOContext; fmt: {const} PAnsiChar; args: array of const): cint; + 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: PAnsiChar; buf_size: cint): PAnsiChar; cdecl; external av__format; -procedure avio_flush(s: PAVIOContext); +procedure put_flush_packet (s: PByteIOContext); cdecl; external av__format; (** - * Read size bytes from AVIOContext into buf. + * Read size bytes from ByteIOContext into buf. * @return number of bytes read or AVERROR *) -function avio_read(s: PAVIOContext; buf: Pbyte; size: cint): cint; +function get_buffer(s: PByteIOContext; buf: PByteArray; size: cint): cint; cdecl; external av__format; (** - * @name Functions for reading from AVIOContext - * @ - * - * @note return 0 if EOF, so you cannot use it if EOF handling is - * necessary + * Read size bytes from ByteIOContext into buf. + * This reads at most 1 packet. If that is not enough fewer bytes will be + * returned. + * @return number of bytes read or AVERROR *) -function avio_r8(s: PAVIOContext): cint; +function get_partial_buffer(s: PByteIOContext; buf: PByteArray; size: cint): cint; cdecl; external av__format; -function avio_rl16(s: PAVIOContext): cuint; +(** @note return 0 if EOF, so you cannot use it if EOF handling is + necessary *) +function get_byte(s: PByteIOContext): cint; cdecl; external av__format; - -function avio_rl24(s: PAVIOContext): cuint; +function get_le24(s: PByteIOContext): cuint; cdecl; external av__format; - -function avio_rl32(s: PAVIOContext): cuint; +function get_le32(s: PByteIOContext): cuint; cdecl; external av__format; - -function avio_rl64(s: PAVIOContext): cuint64; +function get_le64(s: PByteIOContext): cuint64; cdecl; external av__format; - -function avio_rb16(s: PAVIOContext): cuint; +function get_le16(s: PByteIOContext): cuint; cdecl; external av__format; -function avio_rb24(s: PAVIOContext): cuint; +function get_strz(s: PByteIOContext; buf: PAnsiChar; maxlen: cint): PAnsiChar; cdecl; external av__format; - -function avio_rb32(s: PAVIOContext): cuint; +function get_be16(s: PByteIOContext): cuint; cdecl; external av__format; - -function avio_rb64(s: PAVIOContext): cuint64; +function get_be24(s: PByteIOContext): cuint; + cdecl; external av__format; +function get_be32(s: PByteIOContext): cuint; + cdecl; external av__format; +function get_be64(s: PByteIOContext): cuint64; cdecl; external av__format; -(** - * @ - *) -(** - * Read a string from pb into buf. The reading will terminate when either - * a NULL character was encountered, maxlen bytes have been read, or nothing - * more can be read from pb. The result is guaranteed to be NULL-terminated, it - * will be truncated if buf is too small. - * Note that the string is not interpreted or validated in any way, it - * might get truncated in the middle of a sequence for multi-byte encodings. - * - * @return number of bytes read (is always <= maxlen). - * If reading ends on EOF or error, the return value will be one more than - * bytes actually read. - *) -function avio_get_str(pb: PAVIOContext; maxlen: cint; buf: PAnsiChar; buflen: cint): cint; +{$IF LIBAVFORMAT_VERSION >= 51017001} // 51.17.1 + {$IF LIBAVFORMAT_VERSION < 52078003} // < 52.78.3 +function ff_get_v(bc: PByteIOContext): cuint64; + cdecl; external av__format; + {$ELSE} + {$IFDEF FF_API_URL_RESETBUF} +function ff_get_v(bc: PByteIOContext): cuint64; cdecl; external av__format; + {$ENDIF} + {$IFEND} +{$IFEND} + +function url_is_streamed(s: PByteIOContext): cint; {$IFDEF HasInline}inline;{$ENDIF} (** - * Read a UTF-16 string from pb and convert it to UTF-8. - * The reading will terminate when either a null or invalid character was - * encountered or maxlen bytes have been read. - * @return number of bytes read (is always <= maxlen) + * Create and initialize a ByteIOContext for accessing the + * resource referenced by the URLContext h. + * @note When the URLContext h has been opened in read+write mode, the + * ByteIOContext can be used only for writing. + * + * @param s Used to return the pointer to the created ByteIOContext. + * In case of failure the pointed to value is set to NULL. + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code in case of failure *) -function avio_get_str16le(pb: PAVIOContext; maxlen: cint; buf: PAnsiChar; buflen: cint): cint; +{$IF LIBAVFORMAT_VERSION >= 52000000} // 52.0.0 +function url_fdopen (var s: PByteIOContext; h: PURLContext): cint; +{$ELSE} +function url_fdopen (s: PByteIOContext; h: PURLContext): cint; +{$IFEND} cdecl; external av__format; -function avio_get_str16be(pb: PAVIOContext; maxlen: cint; buf: PAnsiChar; buflen: cint): cint; +(** @warning must be called before any I/O *) +function url_setbufsize (s: PByteIOContext; buf_size: cint): cint; cdecl; external av__format; -{$IFDEF FF_API_URL_RESETBUF} +{$IF LIBAVFORMAT_VERSION_MAJOR < 53} +{$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: PAVIOContext; flags: cint): cint; +function url_resetbuf(s: PByteIOContext; flags: cint): cint; cdecl; external av__format; -{$ENDIF} - -(** - * @name URL open modes - * The flags argument to avio_open must be one of the following - * constants, optionally ORed with other flags. - * @ - *) - -const -{$IF LIBAVFORMAT_VERSION_MAJOR < 53} - AVIO_RDONLY = 0; (**< read-only *) - AVIO_WRONLY = 1; (**< write-only *) - AVIO_RDWR = 2; (**< read-write *) -{$ELSE} - AVIO_RDONLY = 1; (**< read-only *) - AVIO_WRONLY = 2; (**< write-only *) - AVIO_RDWR = 4; (**< read-write *) -{$ENDIF} -(** - * @ - *) +{$IFEND} +{$IFEND} +{$IF LIBAVFORMAT_VERSION >= 52061000} // 52.61.0 (** - * Use non-blocking mode. - * If this flag is set, operations on the context will return - * AVERROR(EAGAIN) if they can not be performed immediately. - * If this flag is not set, operations on the context will never return - * AVERROR(EAGAIN). - * Note that this flag does not affect the opening/connecting of the - * context. Connecting a protocol will always block if necessary (e.g. on - * network protocols) but never hang (e.g. on busy devices). - * Warning: non-blocking protocols is work-in-progress; this flag may be - * silently ignored. + * Rewind the ByteIOContext using the specified buffer containing the first buf_size bytes of the file. + * Used after probing to avoid seeking. + * Joins buf and s->buffer, taking any overlap into consideration. + * @note s->buffer must overlap with buf or they can't be joined and the function fails + * @note This function is NOT part of the public API + * + * @param s The read-only ByteIOContext to rewind + * @param buf The probe buffer containing the first buf_size bytes of the file + * @param buf_size The size of buf + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code in case of failure *) -const -{$IF LIBAVFORMAT_VERSION_MAJOR < 53} - AVIO_FLAG_NONBLOCK = 4; -{$ELSE} - AVIO_FLAG_NONBLOCK = 8; -{$ENDIF} +function ff_rewind_with_probe_data(s: PByteIOContext; buf: PAnsiChar; buf_size: cint): cint; + cdecl; external av__format; +{$IFEND} (** - * Create and initialize a AVIOContext for accessing the + * Create and initialize a ByteIOContext for accessing the * resource indicated by url. * @note When the resource indicated by url has been opened in - * read+write mode, the AVIOContext can be used only for writing. + * read+write mode, the ByteIOContext can be used only for writing. * - * @param s Used to return the pointer to the created AVIOContext. + * @param s Used to return the pointer to the created ByteIOContext. * In case of failure the pointed to value is set to NULL. * @param flags flags which control how the resource indicated by url * is to be opened * @return 0 in case of success, a negative value corresponding to an * AVERROR code in case of failure *) -function avio_open(var s: PAVIOContext; url: {const} PAnsiChar; flags: cint): cint; +{$IF LIBAVFORMAT_VERSION < 52047000} // 52.47.0 +{$IF LIBAVFORMAT_VERSION >= 52000000} // 52.0.0 +function url_fopen(var s: PByteIOContext; filename: {const} PAnsiChar; flags: cint): cint; +{$ELSE} +function url_fopen(s: PByteIOContext; filename: {const} PAnsiChar; flags: cint): cint; +{$IFEND} +{$ELSE} +function url_fopen(var s: PByteIOContext; url: {const} PAnsiChar; flags: cint): cint; +{$IFEND} + cdecl; external av__format; +function url_fclose(s: PByteIOContext): cint; + cdecl; external av__format; +function url_fileno(s: PByteIOContext): PURLContext; cdecl; external av__format; (** - * Close the resource accessed by the AVIOContext s and free it. - * This function can only be used if s was opened by avio_open(). + * 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. * - * @return 0 on success, an AVERROR < 0 on error. + * @param s buffered file handle + * @return maximum packet size in bytes *) -function avio_close(s: PAVIOContext): cint; +function url_fget_max_packet_size (s: PByteIOContext): cint; + cdecl; external av__format; + +{$IF LIBAVFORMAT_VERSION >= 52000000} // 52.0.0 +function url_open_buf(var s: PByteIOContext; buf: PAnsiChar; buf_size: cint; flags: cint): cint; +{$ELSE} +function url_open_buf(s: PByteIOContext; buf: PAnsiChar; buf_size: cint; flags: cint): cint; +{$IFEND} + cdecl; external av__format; + +(** return the written or read size *) +function url_close_buf(s: PByteIOContext): cint; cdecl; external av__format; (** @@ -770,82 +727,70 @@ function avio_close(s: PAVIOContext): cint; * @param s new IO context * @return zero if no error. *) -function avio_open_dyn_buf(var s: PAVIOContext): cint; +{$IF LIBAVFORMAT_VERSION >= 52000000} // 52.0.0 +function url_open_dyn_buf(var s: PByteIOContext): cint; +{$ELSE} +function url_open_dyn_buf(s: PByteIOContext): cint; +{$IFEND} cdecl; external av__format; (** - * Return the written size and a pointer to the buffer. The buffer - * must be freed with av_free(). - * Padding of FF_INPUT_BUFFER_PADDING_SIZE is added to the buffer. + * 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: cint): cint; +{$ELSE} +function url_open_dyn_packet_buf(s: PByteIOContext; max_packet_size: cint): cint; +{$IFEND} + cdecl; external av__format; + +(** + * Return the written size and a pointer to the buffer. The buffer + * must be freed with av_free(). If the buffer is opened with + * url_open_dyn_buf, then padding of FF_INPUT_BUFFER_PADDING_SIZE is + * added; if opened with url_open_dyn_packet_buf, no padding is added. * @param s IO context * @param pbuffer pointer to a byte buffer * @return the length of the byte buffer *) -function avio_close_dyn_buf(s: PAVIOContext; var pbuffer: Pcuint8): cint; +function url_close_dyn_buf(s: PByteIOContext; pbuffer:PPointer): cint; cdecl; external av__format; -{$IFDEF FF_API_UDP_GET_FILE} -function udp_get_file_handle(h: PURLContext): cint; +{$IF LIBAVFORMAT_VERSION >= 51017001} // 51.17.1 +function ff_crc04C11DB7_update(checksum: culong; buf: {const} PByteArray; + len: cuint): culong; cdecl; external av__format; -{$ENDIF} +{$IFEND} -(** - * Iterate through names of available protocols. - * @note it is recommanded to use av_protocol_next() instead of this - * - * @param opaque A private pointer representing current protocol. - * It must be a pointer to NULL on first iteration and will - * be updated by successive calls to avio_enum_protocols. - * @param output If set to 1, iterate over output protocols, - * otherwise over input protocols. - * - * @return A static string containing the name of current protocol or NULL - *) -function avio_enum_protocols(var opaque: Pointer; output: cint): PAnsiChar; +function get_checksum(s: PByteIOContext): culong; cdecl; external av__format; - -(** - * Pause and resume playing - only meaningful if using a network streaming - * protocol (e.g. MMS). - * @param pause 1 for pause, 0 for resume - *) -function avio_pause(h: PAVIOContext; pause: cint): cint; +procedure init_gsum(s: PByteIOContext; + update_checksum: pointer; + checksum: culong); cdecl; external av__format; -(** - * 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 avio_seek_time(h: PAVIOContext; stream_index: cint; - timestamp: cint64; flags: cint): cint64; +(* udp.c *) +function udp_set_remote_url(h: PURLContext; uri: {const} PAnsiChar): cint; + cdecl; external av__format; +function udp_get_local_port(h: PURLContext): cint; cdecl; external av__format; +{$IF LIBAVFORMAT_VERSION_MAJOR <= 52} +function udp_get_file_handle(h: PURLContext): cint; + cdecl; external av__format; +{$IFEND} + implementation -{$IFDEF FF_API_OLD_AVIO} -function url_is_streamed(s: PAVIOContext): cint; +function url_is_streamed(s: PByteIOContext): cint; begin Result := s^.is_streamed; end; -{$ENDIF} - -function avio_tell(s: PAVIOContext): cint64; -begin - Result := avio_seek(s, 0, SEEK_CUR); -end; end. -- cgit v1.2.3