DEADSOFTWARE

Sound: OpenAL: Add Opus support
[d2df-sdl.git] / src / lib / vorbis / ogg.pas
1 {
2 Translation of the ogg headers for FreePascal
3 Copyright (C) 2006 by Ivo Steinmann
4 }
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 ********************************************************************)
18 unit ogg;
20 {$MODE OBJFPC}
21 {$MINENUMSIZE 4}
22 {$PACKRECORDS C}
24 interface
26 uses
27 ctypes;
29 {$IF DEFINED(WINDOWS)}
30 {$IF DEFINED(VORBIS_WINDOZE_STATIC) OR DEFINED(OPUS_WINDOZE_STATIC)}
31 {$LINKLIB libogg.a}
32 {$ELSE}
33 {$DEFINE OGG_DYNAMIC}
34 const ogglib = 'libogg-0.dll';
35 {$ENDIF}
36 {$ELSEIF DEFINED(UNIX)}
37 {$DEFINE OGG_DYNAMIC}
38 const ogglib = 'libogg.so';
39 {$ELSE}
40 {$ERROR libogg not supported on this platform. Fix it!}
41 {$ENDIF}
43 (***********************************************************************)
44 (* Header : os_types.h *)
45 (***********************************************************************)
46 type
47 ogg_int64_t = cint64; pogg_int64_t = ^ogg_int64_t;
48 ogg_int32_t = cint32; pogg_int32_t = ^ogg_int32_t;
49 ogg_uint32_t = cuint32; pogg_uint32_t = ^ogg_uint32_t;
50 ogg_int16_t = cint16; pogg_int16_t = ^ogg_int16_t;
51 ogg_uint16_t = cuint16; pogg_uint16_t = ^ogg_uint16_t;
54 (***********************************************************************)
55 (* Header : ogg.h *)
56 (***********************************************************************)
57 type
58 poggpack_buffer = ^oggpack_buffer;
59 oggpack_buffer = record
60 endbyte : clong;
61 endbit : cint;
62 buffer : pcuchar;
63 ptr : pcuchar;
64 storage : clong;
65 end;
67 { ogg_page is used to encapsulate the data in one Ogg bitstream page }
69 pogg_page = ^ogg_page;
70 ogg_page = record
71 header : pcuchar;
72 header_len : clong;
73 body : pcuchar;
74 body_len : clong;
75 end;
77 { ogg_stream_state contains the current encode/decode state of a logical Ogg bitstream }
79 pogg_stream_state = ^ogg_stream_state;
80 ogg_stream_state = record
81 body_data : pcuchar; { bytes from packet bodies }
82 body_storage : clong; { storage elements allocated }
83 body_fill : clong; { elements stored; fill mark }
84 body_returned : clong; { elements of fill returned }
86 lacing_vals : pcint; { The values that will go to the segment table }
87 granule_vals : pogg_int64_t; { granulepos values for headers. Not compact this way, but it is simple coupled to the lacing fifo }
89 lacing_storage : clong;
90 lacing_fill : clong;
91 lacing_packet : clong;
92 lacing_returned : clong;
94 header : array[0..281] of cuchar; { working space for header encode }
95 header_fill : cint;
97 e_o_s : cint; { set when we have buffered the last packet in the logical bitstream }
98 b_o_s : cint; { set after we've written the initial page of a logical bitstream }
100 serialno : clong;
101 pageno : clong;
102 packetno : ogg_int64_t; { sequence number for decode; the framing knows where there's a hole in the data,
103 but we need coupling so that the codec (which is in a seperate abstraction layer) also knows about the gap }
104 granulepos : ogg_int64_t;
105 end;
107 { ogg_packet is used to encapsulate the data and metadata belonging to a single raw Ogg/Vorbis packet }
109 pogg_packet = ^ogg_packet;
110 ogg_packet = record
111 packet : pcuchar;
112 bytes : clong;
113 b_o_s : clong;
114 e_o_s : clong;
116 granulepos : ogg_int64_t;
117 packetno : ogg_int64_t; { sequence number for decode; the framing knows where there's a hole in the data,
118 but we need coupling so that the codec (which is in a seperate abstraction layer) also knows about the gap }
119 end;
121 ogg_sync_state = record
122 data : pcuchar;
123 storage : cint;
124 fill : cint;
125 returned : cint;
127 unsynced : cint;
128 headerbytes : cint;
129 bodybytes : cint;
130 end;
132 { Ogg BITSTREAM PRIMITIVES: bitstream }
134 procedure oggpack_writeinit(var b: oggpack_buffer); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
135 procedure oggpack_writetrunc(var b: oggpack_buffer; bits: clong); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
136 procedure oggpack_writealign(var b: oggpack_buffer); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
137 procedure oggpack_writecopy(var b: oggpack_buffer; source: pointer; bits: clong); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
138 procedure oggpack_reset(var b: oggpack_buffer); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
139 procedure oggpack_writeclear(var b: oggpack_buffer); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
140 procedure oggpack_readinit(var b: oggpack_buffer; buf: pointer; bytes: cint); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
141 procedure oggpack_write(var b: oggpack_buffer; value: culong; bits: cint); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
142 function oggpack_look(var b: oggpack_buffer; bits: cint): clong; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
143 function oggpack_look1(var b: oggpack_buffer): clong; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
144 procedure oggpack_adv(var b: oggpack_buffer; bits: cint); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
145 procedure oggpack_adv1(var b: oggpack_buffer); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
146 function oggpack_read(var b: oggpack_buffer; bits: cint): clong; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
147 function oggpack_read1(var b: oggpack_buffer): clong; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
148 function oggpack_bytes(var b: oggpack_buffer): clong; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
149 function oggpack_bits(var b: oggpack_buffer): clong; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
150 function oggpack_get_buffer(var b: oggpack_buffer): pointer; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
152 procedure oggpackB_writeinit(var b: oggpack_buffer); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
153 procedure oggpackB_writetrunc(var b: oggpack_buffer; bits: clong); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
154 procedure oggpackB_writealign(var b: oggpack_buffer); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
155 procedure oggpackB_writecopy(var b: oggpack_buffer; source: pointer; bits: clong); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
156 procedure oggpackB_reset(var b: oggpack_buffer); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
157 procedure oggpackB_writeclear(var b: oggpack_buffer); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
158 procedure oggpackB_readinit(var b: oggpack_buffer; buf: pointer; bytes: cint); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
159 procedure oggpackB_write(var b: oggpack_buffer; value: culong; bits: cint); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
160 function oggpackB_look(var b: oggpack_buffer; bits: cint): clong; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
161 function oggpackB_look1(var b: oggpack_buffer): clong; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
162 procedure oggpackB_adv(var b: oggpack_buffer; bits: cint); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
163 procedure oggpackB_adv1(var b: oggpack_buffer); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
164 function oggpackB_read(var b: oggpack_buffer; bits: cint): clong; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
165 function oggpackB_read1(var b: oggpack_buffer): clong; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
166 function oggpackB_bytes(var b: oggpack_buffer): clong; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
167 function oggpackB_bits(var b: oggpack_buffer): clong; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
168 function oggpackB_get_buffer(var b: oggpack_buffer): pointer; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
170 { ogglib BITSTREAM PRIMITIVES: encoding }
172 function ogg_stream_packetin(var os: ogg_stream_state; var op: ogg_packet): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
173 function ogg_stream_pageout(var os: ogg_stream_state; var op: ogg_page): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
174 function ogg_stream_flush(var os: ogg_stream_state; var op: ogg_page): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
176 { ogglib BITSTREAM PRIMITIVES: decoding }
178 function ogg_sync_init(var oy: ogg_sync_state): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
179 function ogg_sync_clear(var oy: ogg_sync_state): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
180 function ogg_sync_reset(var oy: ogg_sync_state): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
181 function ogg_sync_destroy(var oy: ogg_sync_state): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
183 function ogg_sync_buffer(var oy: ogg_sync_state; size: clong): pointer; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
184 function ogg_sync_wrote(var oy: ogg_sync_state; bytes: clong): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
185 function ogg_sync_pageseek(var oy: ogg_sync_state; var og: ogg_page): pointer; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
186 function ogg_sync_pageout(var oy: ogg_sync_state; var og: ogg_page): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
187 function ogg_stream_pagein(var os: ogg_stream_state; var og: ogg_page): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
188 function ogg_stream_packetout(var os: ogg_stream_state; var op: ogg_packet): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
189 function ogg_stream_packetpeek(var os: ogg_stream_state; var op: ogg_packet): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
191 { ogglib BITSTREAM PRIMITIVES: general }
193 function ogg_stream_init(var os: ogg_stream_state; serialno: cint): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
194 function ogg_stream_clear(var os: ogg_stream_state): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
195 function ogg_stream_reset(var os: ogg_stream_state): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
196 function ogg_stream_reset_serialno(var os: ogg_stream_state; serialno: cint): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
197 function ogg_stream_destroy(var os: ogg_stream_state): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
198 function ogg_stream_eos(var os: ogg_stream_state): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
200 procedure ogg_page_checksum_set(var og: ogg_page); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
202 function ogg_page_version(var og: ogg_page): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
203 function ogg_page_continued(var og: ogg_page): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
204 function ogg_page_bos(var og: ogg_page): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
205 function ogg_page_eos(var og: ogg_page): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
206 function ogg_page_granulepos(var og: ogg_page): ogg_int64_t; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
207 function ogg_page_serialno(var og: ogg_page): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
208 function ogg_page_pageno(var og: ogg_page): clong; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
209 function ogg_page_packets(var og: ogg_page): cint; cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
211 procedure ogg_packet_clear(var op: ogg_packet); cdecl; external {$IFDEF OGG_DYNAMIC}ogglib{$ENDIF};
213 implementation
215 end.