ogg.pas 12 KB

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