blob: 84622f0da84a70aeda5f01112f72a0c67e3570bf (
plain) (
tree)
|
|
(*
* unbuffered io for ffmpeg system
* 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 Street, Fifth Floor, Boston, MA 02110-1301 USA
*)
unit avio;
interface
{$IFDEF win32}
uses
windows;
{$ENDIF}
const
{$IFDEF win32}
av__format = 'avformat-50.dll';
{$ELSE}
av__format = 'libavformat.so'; // .0d
{$ENDIF}
URL_RDONLY = 0;
URL_WRONLY = 1;
URL_RDWR = 2;
(* output byte stream handling *)
type
offset_t = int64;
int = integer;
(* unbuffered I/O *)
PURLProtocol = ^TURLProtocol;
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 */
priv_data: pointer;
filename: array [0..0] of char; (* specified filename *)
end;
PURLPollEntry = ^TURLPollEntry;
TURLPollEntry = record
handle: PURLContext;
events: integer;
revents: integer;
end;
TURLProtocol = record
name: pchar;
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_close: function (h: PURLContext): integer; cdecl;
next: PURLProtocol;
end;
PByteIOContext = ^TByteIOContext;
TByteIOContext = record
buffer: pchar;
buffer_size: integer;
buf_ptr: pchar;
buf_end: pchar;
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 *)
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 *)
is_streamed: integer;
max_packet_size: integer;
checksum: longword;
checksum_ptr: pchar;
update_checksum: function (checksum: cardinal; const buf: pchar; size: cardinal): LongWord; cdecl;
error: integer; ///< contains the error code or 0 if no error happened
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;
(* 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;
{$IFNDEF FPC}
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;
{$ENDIF}
implementation
function url_is_streamed(s: PByteIOContext): integer;
begin
Result := s^.is_streamed;
end;
end.
|