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_looknull145 function  oggpack_look(var b: oggpack_buffer; bits: cint): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
oggpack_look1null146 function  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_readnull149 function  oggpack_read(var b: oggpack_buffer; bits: cint): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
oggpack_read1null150 function  oggpack_read1(var b: oggpack_buffer): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
oggpack_bytesnull151 function  oggpack_bytes(var b: oggpack_buffer): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
oggpack_bitsnull152 function  oggpack_bits(var b: oggpack_buffer): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
oggpack_get_buffernull153 function  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_looknull163 function  oggpackB_look(var b: oggpack_buffer; bits: cint): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
oggpackB_look1null164 function  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_readnull167 function  oggpackB_read(var b: oggpack_buffer; bits: cint): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
oggpackB_read1null168 function  oggpackB_read1(var b: oggpack_buffer): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
oggpackB_bytesnull169 function  oggpackB_bytes(var b: oggpack_buffer): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
oggpackB_bitsnull170 function  oggpackB_bits(var b: oggpack_buffer): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
oggpackB_get_buffernull171 function  oggpackB_get_buffer(var b: oggpack_buffer): pointer; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
172 
173 { ogglib BITSTREAM PRIMITIVES: encoding }
174 
ogg_stream_packetinnull175 function  ogg_stream_packetin(var os: ogg_stream_state; var op: ogg_packet): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_stream_pageoutnull176 function  ogg_stream_pageout(var os: ogg_stream_state; var op: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_stream_flushnull177 function  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_initnull181 function  ogg_sync_init(var oy: ogg_sync_state): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_sync_clearnull182 function  ogg_sync_clear(var oy: ogg_sync_state): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_sync_resetnull183 function  ogg_sync_reset(var oy: ogg_sync_state): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_sync_destroynull184 function  ogg_sync_destroy(var oy: ogg_sync_state): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
185 
ogg_sync_buffernull186 function  ogg_sync_buffer(var oy: ogg_sync_state; size: clong): pointer; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_sync_wrotenull187 function  ogg_sync_wrote(var oy: ogg_sync_state; bytes: clong): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_sync_pageseeknull188 function  ogg_sync_pageseek(var oy: ogg_sync_state; var og: ogg_page): pointer; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_sync_pageoutnull189 function  ogg_sync_pageout(var oy: ogg_sync_state; var og: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_stream_pageinnull190 function  ogg_stream_pagein(var os: ogg_stream_state; var og: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_stream_packetoutnull191 function  ogg_stream_packetout(var os: ogg_stream_state; var op: ogg_packet): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_stream_packetpeeknull192 function  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_initnull196 function  ogg_stream_init(var os: ogg_stream_state; serialno: cint): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_stream_clearnull197 function  ogg_stream_clear(var os: ogg_stream_state): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_stream_resetnull198 function  ogg_stream_reset(var os: ogg_stream_state): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_stream_reset_serialnonull199 function  ogg_stream_reset_serialno(var os: ogg_stream_state; serialno: cint): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_stream_destroynull200 function  ogg_stream_destroy(var os: ogg_stream_state): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_stream_eosnull201 function  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_versionnull205 function  ogg_page_version(var og: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_page_continuednull206 function  ogg_page_continued(var og: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_page_bosnull207 function  ogg_page_bos(var og: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_page_eosnull208 function  ogg_page_eos(var og: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_page_granuleposnull209 function  ogg_page_granulepos(var og: ogg_page): ogg_int64_t; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_page_serialnonull210 function  ogg_page_serialno(var og: ogg_page): cint; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_page_pagenonull211 function  ogg_page_pageno(var og: ogg_page): clong; cdecl; external {$IFDEF DYNLINK}ogglib{$ENDIF};
ogg_page_packetsnull212 function  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