1 { 2 Translation of the ogg headers for FreePascal 3 Copyright (C) 2006 by Ivo Steinmann 4 } 5 6 (******************************************************************** 7 * * 8 * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * 9 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * 10 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * 11 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * 12 * * 13 * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * 14 * by the Xiph.Org Foundation http://www.xiph.org/ * 15 * * 16 ********************************************************************) 17 18 unit ogg; 19 20 {$mode objfpc} 21 {$MINENUMSIZE 4} 22 23 interface 24 25 uses 26 ctypes; 27 28 {$IFDEF WINDOWS} 29 {$DEFINE DYNLINK} 30 {$ENDIF} 31 32 {$IFDEF DYNLINK} 33 const 34 {$IF Defined(WINDOWS)} 35 ogglib = 'ogglib.dll'; 36 {$ELSEIF Defined(UNIX)} 37 ogglib = 'libogg.so'; 38 {$ELSE} 39 {$MESSAGE ERROR 'DYNLINK not supported'} 40 {$IFEND} 41 {$ELSE} 42 {$LINKLIB ogg} 43 {$ENDIF} 44 45 46 (***********************************************************************) 47 (* Header : os_types.h *) 48 (***********************************************************************) 49 type 50 ogg_int64_t = cint64; pogg_int64_t = ^ogg_int64_t; 51 ogg_int32_t = cint32; pogg_int32_t = ^ogg_int32_t; 52 ogg_uint32_t = cuint32; pogg_uint32_t = ^ogg_uint32_t; 53 ogg_int16_t = cint16; pogg_int16_t = ^ogg_int16_t; 54 ogg_uint16_t = cuint16; pogg_uint16_t = ^ogg_uint16_t; 55 56 57 (***********************************************************************) 58 (* Header : ogg.h *) 59 (***********************************************************************) 60 type 61 poggpack_buffer = ^oggpack_buffer; 62 oggpack_buffer = record 63 endbyte : clong; 64 endbit : cint; 65 buffer : pcuchar; 66 ptr : pcuchar; 67 storage : clong; 68 end; 69 70 { ogg_page is used to encapsulate the data in one Ogg bitstream page } 71 72 pogg_page = ^ogg_page; 73 ogg_page = record 74 header : pcuchar; 75 header_len : clong; 76 body : pcuchar; 77 body_len : clong; 78 end; 79 80 { ogg_stream_state contains the current encode/decode state of a logical Ogg bitstream } 81 82 pogg_stream_state = ^ogg_stream_state; 83 ogg_stream_state = record 84 body_data : pcuchar; { bytes from packet bodies } 85 body_storage : clong; { storage elements allocated } 86 body_fill : clong; { elements stored; fill mark } 87 body_returned : clong; { elements of fill returned } 88 89 lacing_vals : pcint; { The values that will go to the segment table } 90 granule_vals : pogg_int64_t; { granulepos values for headers. Not compact this way, but it is simple coupled to the lacing fifo } 91 92 lacing_storage : clong; 93 lacing_fill : clong; 94 lacing_packet : clong; 95 lacing_returned : clong; 96 97 header : array[0..281] of cuchar; { working space for header encode } 98 header_fill : cint; 99 100 e_o_s : cint; { set when we have buffered the last packet in the logical bitstream } 101 b_o_s : cint; { set after we've written the initial page of a logical bitstream } 102 103 serialno : clong; 104 pageno : clong; 105 packetno : ogg_int64_t; { sequence number for decode; the framing knows where there's a hole in the data, 106 but we need coupling so that the codec (which is in a seperate abstraction layer) also knows about the gap } 107 granulepos : ogg_int64_t; 108 end; 109 110 { ogg_packet is used to encapsulate the data and metadata belonging to a single raw Ogg/Vorbis packet } 111 112 pogg_packet = ^ogg_packet; 113 ogg_packet = record 114 packet : pcuchar; 115 bytes : clong; 116 b_o_s : clong; 117 e_o_s : clong; 118 119 granulepos : ogg_int64_t; 120 packetno : ogg_int64_t; { sequence number for decode; the framing knows where there's a hole in the data, 121 but we need coupling so that the codec (which is in a seperate abstraction layer) also knows about the gap } 122 end; 123 124 ogg_sync_state = record 125 data : pcuchar; 126 storage : cint; 127 fill : cint; 128 returned : cint; 129 130 unsynced : cint; 131 headerbytes : cint; 132 bodybytes : cint; 133 end; 134 135 { Ogg BITSTREAM PRIMITIVES: bitstream } 136 137 procedure oggpack_writeinit(var b: oggpack_buffer); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 138 procedure oggpack_writetrunc(var b: oggpack_buffer; bits: clong); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 139 procedure oggpack_writealign(var b: oggpack_buffer); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 140 procedure oggpack_writecopy(var b: oggpack_buffer; source: pointer; bits: clong); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 141 procedure oggpack_reset(var b: oggpack_buffer); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 142 procedure oggpack_writeclear(var b: oggpack_buffer); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 143 procedure oggpack_readinit(var b: oggpack_buffer; buf: pointer; bytes: cint); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 144 procedure oggpack_write(var b: oggpack_buffer; value: culong; bits: cint); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; oggpack_looknull145function oggpack_look(var b: oggpack_buffer; bits: cint): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; oggpack_look1null146function oggpack_look1(var b: oggpack_buffer): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 147 procedure oggpack_adv(var b: oggpack_buffer; bits: cint); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 148 procedure oggpack_adv1(var b: oggpack_buffer); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; oggpack_readnull149function oggpack_read(var b: oggpack_buffer; bits: cint): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; oggpack_read1null150function oggpack_read1(var b: oggpack_buffer): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; oggpack_bytesnull151function oggpack_bytes(var b: oggpack_buffer): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; oggpack_bitsnull152function oggpack_bits(var b: oggpack_buffer): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; oggpack_get_buffernull153function oggpack_get_buffer(var b: oggpack_buffer): pointer; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 154 155 procedure oggpackB_writeinit(var b: oggpack_buffer); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 156 procedure oggpackB_writetrunc(var b: oggpack_buffer; bits: clong); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 157 procedure oggpackB_writealign(var b: oggpack_buffer); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 158 procedure oggpackB_writecopy(var b: oggpack_buffer; source: pointer; bits: clong); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 159 procedure oggpackB_reset(var b: oggpack_buffer); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 160 procedure oggpackB_writeclear(var b: oggpack_buffer); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 161 procedure oggpackB_readinit(var b: oggpack_buffer; buf: pointer; bytes: cint); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 162 procedure oggpackB_write(var b: oggpack_buffer; value: culong; bits: cint); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; oggpackB_looknull163function oggpackB_look(var b: oggpack_buffer; bits: cint): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; oggpackB_look1null164function oggpackB_look1(var b: oggpack_buffer): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 165 procedure oggpackB_adv(var b: oggpack_buffer; bits: cint); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 166 procedure oggpackB_adv1(var b: oggpack_buffer); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; oggpackB_readnull167function oggpackB_read(var b: oggpack_buffer; bits: cint): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; oggpackB_read1null168function oggpackB_read1(var b: oggpack_buffer): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; oggpackB_bytesnull169function oggpackB_bytes(var b: oggpack_buffer): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; oggpackB_bitsnull170function oggpackB_bits(var b: oggpack_buffer): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; oggpackB_get_buffernull171function oggpackB_get_buffer(var b: oggpack_buffer): pointer; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 172 173 { ogglib BITSTREAM PRIMITIVES: encoding } 174 ogg_stream_packetinnull175function ogg_stream_packetin(var os: ogg_stream_state; var op: ogg_packet): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_stream_pageoutnull176function ogg_stream_pageout(var os: ogg_stream_state; var op: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_stream_flushnull177function ogg_stream_flush(var os: ogg_stream_state; var op: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 178 179 { ogglib BITSTREAM PRIMITIVES: decoding } 180 ogg_sync_initnull181function ogg_sync_init(var oy: ogg_sync_state): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_sync_clearnull182function ogg_sync_clear(var oy: ogg_sync_state): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_sync_resetnull183function ogg_sync_reset(var oy: ogg_sync_state): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_sync_destroynull184function ogg_sync_destroy(var oy: ogg_sync_state): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 185 ogg_sync_buffernull186function ogg_sync_buffer(var oy: ogg_sync_state; size: clong): pointer; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_sync_wrotenull187function ogg_sync_wrote(var oy: ogg_sync_state; bytes: clong): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_sync_pageseeknull188function ogg_sync_pageseek(var oy: ogg_sync_state; var og: ogg_page): pointer; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_sync_pageoutnull189function ogg_sync_pageout(var oy: ogg_sync_state; var og: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_stream_pageinnull190function ogg_stream_pagein(var os: ogg_stream_state; var og: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_stream_packetoutnull191function ogg_stream_packetout(var os: ogg_stream_state; var op: ogg_packet): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_stream_packetpeeknull192function ogg_stream_packetpeek(var os: ogg_stream_state; var op: ogg_packet): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 193 194 { ogglib BITSTREAM PRIMITIVES: general } 195 ogg_stream_initnull196function ogg_stream_init(var os: ogg_stream_state; serialno: cint): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_stream_clearnull197function ogg_stream_clear(var os: ogg_stream_state): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_stream_resetnull198function ogg_stream_reset(var os: ogg_stream_state): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_stream_reset_serialnonull199function ogg_stream_reset_serialno(var os: ogg_stream_state; serialno: cint): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_stream_destroynull200function ogg_stream_destroy(var os: ogg_stream_state): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_stream_eosnull201function ogg_stream_eos(var os: ogg_stream_state): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 202 203 procedure ogg_page_checksum_set(var og: ogg_page); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 204 ogg_page_versionnull205function ogg_page_version(var og: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_page_continuednull206function ogg_page_continued(var og: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_page_bosnull207function ogg_page_bos(var og: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_page_eosnull208function ogg_page_eos(var og: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_page_granuleposnull209function ogg_page_granulepos(var og: ogg_page): ogg_int64_t; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_page_serialnonull210function ogg_page_serialno(var og: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_page_pagenonull211function ogg_page_pageno(var og: ogg_page): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; ogg_page_packetsnull212function ogg_page_packets(var og: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 213 214 procedure ogg_packet_clear(var op: ogg_packet); cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF}; 215 216 implementation 217 218 end. 219