ogg.pas 12 KB

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