seal 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (421) hide show
  1. data/.yardopts +1 -0
  2. data/LICENSE +13 -0
  3. data/README.md +265 -0
  4. data/ext/seal/extconf.rb +45 -0
  5. data/include/al/al.h +724 -0
  6. data/include/al/alc.h +277 -0
  7. data/include/al/efx-presets.h +402 -0
  8. data/include/al/efx.h +758 -0
  9. data/include/mpg123/mpg123.h +1034 -0
  10. data/include/ogg/config_types.h +25 -0
  11. data/include/ogg/ogg.h +210 -0
  12. data/include/ogg/os_types.h +147 -0
  13. data/include/seal.h +23 -0
  14. data/include/seal/buf.h +143 -0
  15. data/include/seal/core.h +95 -0
  16. data/include/seal/efs.h +112 -0
  17. data/include/seal/err.h +93 -0
  18. data/include/seal/fmt.h +58 -0
  19. data/include/seal/listener.h +103 -0
  20. data/include/seal/raw.h +86 -0
  21. data/include/seal/rvb.h +520 -0
  22. data/include/seal/src.h +413 -0
  23. data/include/seal/stream.h +81 -0
  24. data/include/vorbis/codec.h +243 -0
  25. data/include/vorbis/vorbisfile.h +206 -0
  26. data/mpg123/AUTHORS +150 -0
  27. data/mpg123/COPYING +773 -0
  28. data/mpg123/ChangeLog +3 -0
  29. data/mpg123/INSTALL +111 -0
  30. data/mpg123/Makefile.am +99 -0
  31. data/mpg123/Makefile.in +1043 -0
  32. data/mpg123/NEWS +1200 -0
  33. data/mpg123/NEWS.libmpg123 +133 -0
  34. data/mpg123/README +203 -0
  35. data/mpg123/TODO +38 -0
  36. data/mpg123/aclocal.m4 +1168 -0
  37. data/mpg123/build/config.guess +1530 -0
  38. data/mpg123/build/config.sub +1782 -0
  39. data/mpg123/build/depcomp +707 -0
  40. data/mpg123/build/install-sh +527 -0
  41. data/mpg123/build/ltmain.sh +9655 -0
  42. data/mpg123/build/missing +330 -0
  43. data/mpg123/configure +20267 -0
  44. data/mpg123/configure.ac +2178 -0
  45. data/mpg123/doc/ACCURACY +2 -0
  46. data/mpg123/doc/BENCHMARKING +110 -0
  47. data/mpg123/doc/BUGS +3 -0
  48. data/mpg123/doc/CONTACT +17 -0
  49. data/mpg123/doc/LICENSE +22 -0
  50. data/mpg123/doc/Makefile.am +32 -0
  51. data/mpg123/doc/Makefile.in +490 -0
  52. data/mpg123/doc/PATENTS +39 -0
  53. data/mpg123/doc/README.3DNOW +56 -0
  54. data/mpg123/doc/README.gain +171 -0
  55. data/mpg123/doc/README.remote +218 -0
  56. data/mpg123/doc/ROAD_TO_LGPL +270 -0
  57. data/mpg123/doc/THANKS +13 -0
  58. data/mpg123/doc/TODO +63 -0
  59. data/mpg123/doc/doxy_examples.c +21 -0
  60. data/mpg123/doc/doxygen.conf +41 -0
  61. data/mpg123/doc/doxyhead.xhtml +12 -0
  62. data/mpg123/doc/examples/dump_seekindex.c +41 -0
  63. data/mpg123/doc/examples/extract_frames.c +92 -0
  64. data/mpg123/doc/examples/feedseek.c +238 -0
  65. data/mpg123/doc/examples/id3dump.c +178 -0
  66. data/mpg123/doc/examples/mpg123_to_wav.c +118 -0
  67. data/mpg123/doc/examples/mpglib.c +92 -0
  68. data/mpg123/doc/examples/scan.c +47 -0
  69. data/mpg123/doc/libmpg123_speed.txt +84 -0
  70. data/mpg123/equalize.dat +37 -0
  71. data/mpg123/libmpg123.pc.in +11 -0
  72. data/mpg123/m4/addrconfig.m4 +34 -0
  73. data/mpg123/m4/libtool.m4 +7982 -0
  74. data/mpg123/m4/ltoptions.m4 +384 -0
  75. data/mpg123/m4/ltsugar.m4 +123 -0
  76. data/mpg123/m4/ltversion.m4 +23 -0
  77. data/mpg123/m4/lt~obsolete.m4 +98 -0
  78. data/mpg123/makedll.sh +19 -0
  79. data/mpg123/man1/mpg123.1 +512 -0
  80. data/mpg123/mpg123.spec +68 -0
  81. data/mpg123/mpg123.spec.in +68 -0
  82. data/mpg123/ports/MSVC++/2005/libmpg123/libmpg123.vcproj +741 -0
  83. data/mpg123/ports/MSVC++/2008/dump_seekindex/dump_seekindex.vcproj +194 -0
  84. data/mpg123/ports/MSVC++/2008/feedseek/feedseek.vcproj +195 -0
  85. data/mpg123/ports/MSVC++/2008/libmpg123/libmpg123.vcproj +1357 -0
  86. data/mpg123/ports/MSVC++/2008/mpg123.sln +44 -0
  87. data/mpg123/ports/MSVC++/2008/mpglib/mpglib.vcproj +191 -0
  88. data/mpg123/ports/MSVC++/2008/scan/scan.vcproj +195 -0
  89. data/mpg123/ports/MSVC++/2008clr/2008clr.sln +81 -0
  90. data/mpg123/ports/MSVC++/2008clr/examples/ReplaceReaderclr/Program.cs +435 -0
  91. data/mpg123/ports/MSVC++/2008clr/examples/ReplaceReaderclr/Properties/AssemblyInfo.cs +36 -0
  92. data/mpg123/ports/MSVC++/2008clr/examples/ReplaceReaderclr/ReplaceReaderclr.csproj +72 -0
  93. data/mpg123/ports/MSVC++/2008clr/examples/feedseekclr/Program.cs +331 -0
  94. data/mpg123/ports/MSVC++/2008clr/examples/feedseekclr/Properties/AssemblyInfo.cs +36 -0
  95. data/mpg123/ports/MSVC++/2008clr/examples/feedseekclr/feedseekclr.csproj +71 -0
  96. data/mpg123/ports/MSVC++/2008clr/examples/scanclr/Program.cs +79 -0
  97. data/mpg123/ports/MSVC++/2008clr/examples/scanclr/Properties/AssemblyInfo.cs +36 -0
  98. data/mpg123/ports/MSVC++/2008clr/examples/scanclr/scanclr.csproj +70 -0
  99. data/mpg123/ports/MSVC++/2008clr/mpg123clr/AssemblyInfo.cpp +76 -0
  100. data/mpg123/ports/MSVC++/2008clr/mpg123clr/ReadMe.txt +165 -0
  101. data/mpg123/ports/MSVC++/2008clr/mpg123clr/advanced.cpp +91 -0
  102. data/mpg123/ports/MSVC++/2008clr/mpg123clr/advanced.h +130 -0
  103. data/mpg123/ports/MSVC++/2008clr/mpg123clr/dllmain.cpp +19 -0
  104. data/mpg123/ports/MSVC++/2008clr/mpg123clr/enum.h +218 -0
  105. data/mpg123/ports/MSVC++/2008clr/mpg123clr/error.cpp +48 -0
  106. data/mpg123/ports/MSVC++/2008clr/mpg123clr/error.h +134 -0
  107. data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v1.cpp +92 -0
  108. data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v1.h +132 -0
  109. data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v2.cpp +138 -0
  110. data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v2.h +152 -0
  111. data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.cpp +896 -0
  112. data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.h +953 -0
  113. data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.rc +102 -0
  114. data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.vcproj +328 -0
  115. data/mpg123/ports/MSVC++/2008clr/mpg123clr/resource.h +14 -0
  116. data/mpg123/ports/MSVC++/2008clr/mpg123clr/stdafx.cpp +8 -0
  117. data/mpg123/ports/MSVC++/2008clr/mpg123clr/stdafx.h +38 -0
  118. data/mpg123/ports/MSVC++/2008clr/mpg123clr/string.cpp +166 -0
  119. data/mpg123/ports/MSVC++/2008clr/mpg123clr/string.h +265 -0
  120. data/mpg123/ports/MSVC++/2008clr/mpg123clr/targetver.h +24 -0
  121. data/mpg123/ports/MSVC++/2008clr/mpg123clr/text.cpp +67 -0
  122. data/mpg123/ports/MSVC++/2008clr/mpg123clr/text.h +111 -0
  123. data/mpg123/ports/MSVC++/2010/dump_seekindex/dump_seekindex.vcxproj +90 -0
  124. data/mpg123/ports/MSVC++/2010/dump_seekindex/dump_seekindex.vcxproj.filters +6 -0
  125. data/mpg123/ports/MSVC++/2010/feedseek/feedseek.vcxproj +95 -0
  126. data/mpg123/ports/MSVC++/2010/feedseek/feedseek.vcxproj.filters +6 -0
  127. data/mpg123/ports/MSVC++/2010/libmpg123/libmpg123.vcxproj +960 -0
  128. data/mpg123/ports/MSVC++/2010/libmpg123/libmpg123.vcxproj.user +3 -0
  129. data/mpg123/ports/MSVC++/2010/libmpg123/yasm.exe +0 -0
  130. data/mpg123/ports/MSVC++/2010/mpg123.sln +38 -0
  131. data/mpg123/ports/MSVC++/2010/scan/scan.vcxproj +93 -0
  132. data/mpg123/ports/MSVC++/2010/scan/scan.vcxproj.filters +6 -0
  133. data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/CORE/CORE_FileIn.H +15 -0
  134. data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/CORE/SourceFilter_MP3.H +139 -0
  135. data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/IIEP_Def.H +206 -0
  136. data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/IIEP_FileIn.H +167 -0
  137. data/mpg123/ports/MSVC++/CMP3Stream/README +4 -0
  138. data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/CORE_FileIn.CPP +462 -0
  139. data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/CORE_Log.CPP +122 -0
  140. data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/CORE_Mutex.CPP +35 -0
  141. data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/SourceFilter_MP3Stream.CPP +586 -0
  142. data/mpg123/ports/MSVC++/CMP3Stream/libMPG123/PLACE_LIBMPG123_SOURCES_HERE +0 -0
  143. data/mpg123/ports/MSVC++/CMP3Stream/libMPG123/libMPG123.vcproj +245 -0
  144. data/mpg123/ports/MSVC++/config.h +35 -0
  145. data/mpg123/ports/MSVC++/examples/feedseek.c +240 -0
  146. data/mpg123/ports/MSVC++/examples/scan.c +47 -0
  147. data/mpg123/ports/MSVC++/mpg123.h +46 -0
  148. data/mpg123/ports/MSVC++/msvc.c +59 -0
  149. data/mpg123/ports/README +26 -0
  150. data/mpg123/ports/Sony_PSP/Makefile.psp +38 -0
  151. data/mpg123/ports/Sony_PSP/README +11 -0
  152. data/mpg123/ports/Sony_PSP/config.h +368 -0
  153. data/mpg123/ports/Sony_PSP/readers.c.patch +2 -0
  154. data/mpg123/ports/Xcode/config.h +197 -0
  155. data/mpg123/ports/Xcode/mpg123.h +17 -0
  156. data/mpg123/ports/Xcode/mpg123.xcodeproj/project.pbxproj +670 -0
  157. data/mpg123/ports/mpg123_.pas +478 -0
  158. data/mpg123/scripts/benchmark-cpu.pl +56 -0
  159. data/mpg123/scripts/tag_lyrics.py +76 -0
  160. data/mpg123/src/Makefile.am +186 -0
  161. data/mpg123/src/Makefile.in +1097 -0
  162. data/mpg123/src/audio.c +725 -0
  163. data/mpg123/src/audio.h +106 -0
  164. data/mpg123/src/buffer.c +312 -0
  165. data/mpg123/src/buffer.h +45 -0
  166. data/mpg123/src/common.c +240 -0
  167. data/mpg123/src/common.h +29 -0
  168. data/mpg123/src/config.h.in +436 -0
  169. data/mpg123/src/control_generic.c +809 -0
  170. data/mpg123/src/equalizer.c +48 -0
  171. data/mpg123/src/genre.c +271 -0
  172. data/mpg123/src/genre.h +15 -0
  173. data/mpg123/src/getlopt.c +148 -0
  174. data/mpg123/src/getlopt.h +77 -0
  175. data/mpg123/src/httpget.c +700 -0
  176. data/mpg123/src/httpget.h +66 -0
  177. data/mpg123/src/legacy_module.c +74 -0
  178. data/mpg123/src/libmpg123/Makefile.am +141 -0
  179. data/mpg123/src/libmpg123/Makefile.in +919 -0
  180. data/mpg123/src/libmpg123/compat.c +138 -0
  181. data/mpg123/src/libmpg123/compat.h +178 -0
  182. data/mpg123/src/libmpg123/dct36_3dnow.S +505 -0
  183. data/mpg123/src/libmpg123/dct36_3dnowext.S +512 -0
  184. data/mpg123/src/libmpg123/dct64.c +174 -0
  185. data/mpg123/src/libmpg123/dct64_3dnow.S +712 -0
  186. data/mpg123/src/libmpg123/dct64_3dnowext.S +714 -0
  187. data/mpg123/src/libmpg123/dct64_altivec.c +315 -0
  188. data/mpg123/src/libmpg123/dct64_i386.c +336 -0
  189. data/mpg123/src/libmpg123/dct64_i486.c +342 -0
  190. data/mpg123/src/libmpg123/dct64_mmx.S +811 -0
  191. data/mpg123/src/libmpg123/dct64_neon.S +297 -0
  192. data/mpg123/src/libmpg123/dct64_neon_float.S +270 -0
  193. data/mpg123/src/libmpg123/dct64_sse.S +454 -0
  194. data/mpg123/src/libmpg123/dct64_sse_float.S +401 -0
  195. data/mpg123/src/libmpg123/dct64_x86_64.S +464 -0
  196. data/mpg123/src/libmpg123/dct64_x86_64_float.S +426 -0
  197. data/mpg123/src/libmpg123/debug.h +171 -0
  198. data/mpg123/src/libmpg123/decode.h +268 -0
  199. data/mpg123/src/libmpg123/dither.c +119 -0
  200. data/mpg123/src/libmpg123/dither.h +23 -0
  201. data/mpg123/src/libmpg123/equalizer.c +17 -0
  202. data/mpg123/src/libmpg123/equalizer_3dnow.S +70 -0
  203. data/mpg123/src/libmpg123/feature.c +106 -0
  204. data/mpg123/src/libmpg123/format.c +521 -0
  205. data/mpg123/src/libmpg123/frame.c +1046 -0
  206. data/mpg123/src/libmpg123/frame.h +410 -0
  207. data/mpg123/src/libmpg123/gapless.h +119 -0
  208. data/mpg123/src/libmpg123/getbits.h +100 -0
  209. data/mpg123/src/libmpg123/getcpuflags.S +91 -0
  210. data/mpg123/src/libmpg123/getcpuflags.h +47 -0
  211. data/mpg123/src/libmpg123/huffman.h +340 -0
  212. data/mpg123/src/libmpg123/icy.c +32 -0
  213. data/mpg123/src/libmpg123/icy.h +38 -0
  214. data/mpg123/src/libmpg123/icy2utf8.c +438 -0
  215. data/mpg123/src/libmpg123/icy2utf8.h +10 -0
  216. data/mpg123/src/libmpg123/id3.c +999 -0
  217. data/mpg123/src/libmpg123/id3.h +43 -0
  218. data/mpg123/src/libmpg123/index.c +134 -0
  219. data/mpg123/src/libmpg123/index.h +59 -0
  220. data/mpg123/src/libmpg123/intsym.h +256 -0
  221. data/mpg123/src/libmpg123/l12_integer_tables.h +278 -0
  222. data/mpg123/src/libmpg123/l2tables.h +164 -0
  223. data/mpg123/src/libmpg123/l3_integer_tables.h +1002 -0
  224. data/mpg123/src/libmpg123/layer1.c +155 -0
  225. data/mpg123/src/libmpg123/layer2.c +371 -0
  226. data/mpg123/src/libmpg123/layer3.c +2053 -0
  227. data/mpg123/src/libmpg123/lfs_alias.c +252 -0
  228. data/mpg123/src/libmpg123/lfs_wrap.c +751 -0
  229. data/mpg123/src/libmpg123/libmpg123.c +1607 -0
  230. data/mpg123/src/libmpg123/mangle.h +74 -0
  231. data/mpg123/src/libmpg123/mpeghead.h +87 -0
  232. data/mpg123/src/libmpg123/mpg123.h.in +1075 -0
  233. data/mpg123/src/libmpg123/mpg123lib_intern.h +338 -0
  234. data/mpg123/src/libmpg123/ntom.c +148 -0
  235. data/mpg123/src/libmpg123/optimize.c +964 -0
  236. data/mpg123/src/libmpg123/optimize.h +219 -0
  237. data/mpg123/src/libmpg123/parse.c +1179 -0
  238. data/mpg123/src/libmpg123/parse.h +25 -0
  239. data/mpg123/src/libmpg123/reader.h +137 -0
  240. data/mpg123/src/libmpg123/readers.c +1235 -0
  241. data/mpg123/src/libmpg123/sample.h +152 -0
  242. data/mpg123/src/libmpg123/stringbuf.c +163 -0
  243. data/mpg123/src/libmpg123/synth.c +816 -0
  244. data/mpg123/src/libmpg123/synth.h +196 -0
  245. data/mpg123/src/libmpg123/synth_3dnow.S +318 -0
  246. data/mpg123/src/libmpg123/synth_3dnowext.S +6 -0
  247. data/mpg123/src/libmpg123/synth_8bit.c +142 -0
  248. data/mpg123/src/libmpg123/synth_8bit.h +86 -0
  249. data/mpg123/src/libmpg123/synth_altivec.c +1057 -0
  250. data/mpg123/src/libmpg123/synth_arm.S +271 -0
  251. data/mpg123/src/libmpg123/synth_arm_accurate.S +287 -0
  252. data/mpg123/src/libmpg123/synth_i486.c +252 -0
  253. data/mpg123/src/libmpg123/synth_i586.S +336 -0
  254. data/mpg123/src/libmpg123/synth_i586_dither.S +375 -0
  255. data/mpg123/src/libmpg123/synth_mmx.S +125 -0
  256. data/mpg123/src/libmpg123/synth_mono.h +64 -0
  257. data/mpg123/src/libmpg123/synth_neon.S +123 -0
  258. data/mpg123/src/libmpg123/synth_neon_accurate.S +173 -0
  259. data/mpg123/src/libmpg123/synth_neon_float.S +149 -0
  260. data/mpg123/src/libmpg123/synth_neon_s32.S +168 -0
  261. data/mpg123/src/libmpg123/synth_ntom.h +213 -0
  262. data/mpg123/src/libmpg123/synth_real.c +404 -0
  263. data/mpg123/src/libmpg123/synth_s32.c +411 -0
  264. data/mpg123/src/libmpg123/synth_sse.S +6 -0
  265. data/mpg123/src/libmpg123/synth_sse3d.h +246 -0
  266. data/mpg123/src/libmpg123/synth_sse_accurate.S +294 -0
  267. data/mpg123/src/libmpg123/synth_sse_float.S +241 -0
  268. data/mpg123/src/libmpg123/synth_sse_s32.S +306 -0
  269. data/mpg123/src/libmpg123/synth_stereo_neon.S +175 -0
  270. data/mpg123/src/libmpg123/synth_stereo_neon_accurate.S +262 -0
  271. data/mpg123/src/libmpg123/synth_stereo_neon_float.S +220 -0
  272. data/mpg123/src/libmpg123/synth_stereo_neon_s32.S +247 -0
  273. data/mpg123/src/libmpg123/synth_stereo_sse_accurate.S +508 -0
  274. data/mpg123/src/libmpg123/synth_stereo_sse_float.S +416 -0
  275. data/mpg123/src/libmpg123/synth_stereo_sse_s32.S +540 -0
  276. data/mpg123/src/libmpg123/synth_stereo_x86_64.S +335 -0
  277. data/mpg123/src/libmpg123/synth_stereo_x86_64_accurate.S +454 -0
  278. data/mpg123/src/libmpg123/synth_stereo_x86_64_float.S +396 -0
  279. data/mpg123/src/libmpg123/synth_stereo_x86_64_s32.S +473 -0
  280. data/mpg123/src/libmpg123/synth_x86_64.S +244 -0
  281. data/mpg123/src/libmpg123/synth_x86_64_accurate.S +301 -0
  282. data/mpg123/src/libmpg123/synth_x86_64_float.S +259 -0
  283. data/mpg123/src/libmpg123/synth_x86_64_s32.S +312 -0
  284. data/mpg123/src/libmpg123/synths.h +52 -0
  285. data/mpg123/src/libmpg123/tabinit.c +294 -0
  286. data/mpg123/src/libmpg123/tabinit_mmx.S +210 -0
  287. data/mpg123/src/libmpg123/testcpu.c +35 -0
  288. data/mpg123/src/libmpg123/true.h +14 -0
  289. data/mpg123/src/local.c +63 -0
  290. data/mpg123/src/local.h +21 -0
  291. data/mpg123/src/metaprint.c +373 -0
  292. data/mpg123/src/metaprint.h +17 -0
  293. data/mpg123/src/module.c +306 -0
  294. data/mpg123/src/module.h +48 -0
  295. data/mpg123/src/mpg123.c +1405 -0
  296. data/mpg123/src/mpg123app.h +171 -0
  297. data/mpg123/src/output/Makefile.am +213 -0
  298. data/mpg123/src/output/Makefile.in +1238 -0
  299. data/mpg123/src/output/aix.c +300 -0
  300. data/mpg123/src/output/alib.c +209 -0
  301. data/mpg123/src/output/alsa.c +297 -0
  302. data/mpg123/src/output/arts.c +117 -0
  303. data/mpg123/src/output/coreaudio.c +370 -0
  304. data/mpg123/src/output/dummy.c +78 -0
  305. data/mpg123/src/output/esd.c +167 -0
  306. data/mpg123/src/output/hp.c +184 -0
  307. data/mpg123/src/output/jack.c +450 -0
  308. data/mpg123/src/output/mint.c +197 -0
  309. data/mpg123/src/output/nas.c +335 -0
  310. data/mpg123/src/output/openal.c +197 -0
  311. data/mpg123/src/output/os2.c +665 -0
  312. data/mpg123/src/output/oss.c +319 -0
  313. data/mpg123/src/output/portaudio.c +255 -0
  314. data/mpg123/src/output/pulse.c +164 -0
  315. data/mpg123/src/output/sdl.c +206 -0
  316. data/mpg123/src/output/sgi.c +213 -0
  317. data/mpg123/src/output/sndio.c +161 -0
  318. data/mpg123/src/output/sun.c +281 -0
  319. data/mpg123/src/output/win32.c +229 -0
  320. data/mpg123/src/playlist.c +596 -0
  321. data/mpg123/src/playlist.h +52 -0
  322. data/mpg123/src/resolver.c +319 -0
  323. data/mpg123/src/resolver.h +25 -0
  324. data/mpg123/src/sfifo.c +146 -0
  325. data/mpg123/src/sfifo.h +95 -0
  326. data/mpg123/src/streamdump.c +74 -0
  327. data/mpg123/src/streamdump.h +20 -0
  328. data/mpg123/src/term.c +479 -0
  329. data/mpg123/src/term.h +81 -0
  330. data/mpg123/src/tests/noise.c +52 -0
  331. data/mpg123/src/tests/plain_id3.c +109 -0
  332. data/mpg123/src/tests/seek_accuracy.c +261 -0
  333. data/mpg123/src/tests/seek_whence.c +56 -0
  334. data/mpg123/src/tests/testtext.h +34 -0
  335. data/mpg123/src/tests/text.c +80 -0
  336. data/mpg123/src/wav.c +464 -0
  337. data/mpg123/src/wavhead.h +68 -0
  338. data/mpg123/src/win32_net.c +599 -0
  339. data/mpg123/src/win32_support.c +191 -0
  340. data/mpg123/src/win32_support.h +152 -0
  341. data/mpg123/src/xfermem.c +321 -0
  342. data/mpg123/src/xfermem.h +74 -0
  343. data/mpg123/windows-builds.sh +137 -0
  344. data/msvc/lib/OpenAL32.lib +0 -0
  345. data/spec/fixtures/heal.ogg +0 -0
  346. data/spec/fixtures/tone_up.wav +0 -0
  347. data/spec/seal/buffer_spec.rb +37 -0
  348. data/spec/seal/core_spec.rb +29 -0
  349. data/spec/seal/effect_slot_spec.rb +38 -0
  350. data/spec/seal/listener_spec.rb +33 -0
  351. data/spec/seal/reverb_spec.rb +51 -0
  352. data/spec/seal/source_spec.rb +370 -0
  353. data/spec/seal/stream_spec.rb +38 -0
  354. data/spec/spec_helper.rb +45 -0
  355. data/spec/support/attribute_examples.rb +75 -0
  356. data/spec/support/audio_object_with_format.rb +27 -0
  357. data/spec/support/movable_object.rb +22 -0
  358. data/src/libogg/bitwise.c +857 -0
  359. data/src/libogg/framing.c +2093 -0
  360. data/src/libvorbis/backends.h +144 -0
  361. data/src/libvorbis/bitrate.c +253 -0
  362. data/src/libvorbis/bitrate.h +59 -0
  363. data/src/libvorbis/block.c +1046 -0
  364. data/src/libvorbis/codebook.c +484 -0
  365. data/src/libvorbis/codebook.h +119 -0
  366. data/src/libvorbis/codec_internal.h +167 -0
  367. data/src/libvorbis/envelope.c +375 -0
  368. data/src/libvorbis/envelope.h +80 -0
  369. data/src/libvorbis/floor0.c +221 -0
  370. data/src/libvorbis/floor1.c +1100 -0
  371. data/src/libvorbis/highlevel.h +58 -0
  372. data/src/libvorbis/info.c +668 -0
  373. data/src/libvorbis/lookup.c +94 -0
  374. data/src/libvorbis/lookup.h +32 -0
  375. data/src/libvorbis/lookup_data.h +192 -0
  376. data/src/libvorbis/lpc.c +160 -0
  377. data/src/libvorbis/lpc.h +29 -0
  378. data/src/libvorbis/lsp.c +456 -0
  379. data/src/libvorbis/lsp.h +28 -0
  380. data/src/libvorbis/mapping0.c +816 -0
  381. data/src/libvorbis/masking.h +785 -0
  382. data/src/libvorbis/mdct.c +563 -0
  383. data/src/libvorbis/mdct.h +71 -0
  384. data/src/libvorbis/misc.h +57 -0
  385. data/src/libvorbis/os.h +186 -0
  386. data/src/libvorbis/psy.c +1206 -0
  387. data/src/libvorbis/psy.h +154 -0
  388. data/src/libvorbis/registry.c +45 -0
  389. data/src/libvorbis/registry.h +32 -0
  390. data/src/libvorbis/res0.c +889 -0
  391. data/src/libvorbis/scales.h +90 -0
  392. data/src/libvorbis/sharedbook.c +579 -0
  393. data/src/libvorbis/smallft.c +1255 -0
  394. data/src/libvorbis/smallft.h +34 -0
  395. data/src/libvorbis/synthesis.c +184 -0
  396. data/src/libvorbis/vorbisfile.c +2337 -0
  397. data/src/libvorbis/window.c +2135 -0
  398. data/src/libvorbis/window.h +26 -0
  399. data/src/rubyext.c +2329 -0
  400. data/src/seal/buf.c +124 -0
  401. data/src/seal/core.c +283 -0
  402. data/src/seal/efs.c +74 -0
  403. data/src/seal/err.c +118 -0
  404. data/src/seal/fmt.c +86 -0
  405. data/src/seal/listener.c +111 -0
  406. data/src/seal/mpg.c +174 -0
  407. data/src/seal/mpg.h +24 -0
  408. data/src/seal/ov.c +180 -0
  409. data/src/seal/ov.h +22 -0
  410. data/src/seal/raw.c +59 -0
  411. data/src/seal/reader.c +102 -0
  412. data/src/seal/reader.h +59 -0
  413. data/src/seal/rvb.c +368 -0
  414. data/src/seal/src.c +654 -0
  415. data/src/seal/stream.c +109 -0
  416. data/src/seal/threading.c +66 -0
  417. data/src/seal/threading.h +20 -0
  418. data/src/seal/wav.c +297 -0
  419. data/src/seal/wav.h +23 -0
  420. data/src/win32api.rb +29 -0
  421. metadata +563 -0
@@ -0,0 +1,410 @@
1
+ /*
2
+ frame: Central data structures and opmitization hooks.
3
+
4
+ copyright 2007 by the mpg123 project - free software under the terms of the LGPL 2.1
5
+ see COPYING and AUTHORS files in distribution or http://mpg123.org
6
+ initially written by Thomas Orgis
7
+ */
8
+
9
+ #ifndef MPG123_FRAME_H
10
+ #define MPG123_FRAME_H
11
+
12
+ #include <stdio.h>
13
+ #include "config.h"
14
+ #include "mpg123.h"
15
+ #include "optimize.h"
16
+ #include "id3.h"
17
+ #include "icy.h"
18
+ #include "reader.h"
19
+ #ifdef FRAME_INDEX
20
+ #include "index.h"
21
+ #endif
22
+ #include "synths.h"
23
+
24
+ #ifdef OPT_DITHER
25
+ #include "dither.h"
26
+ int frame_dither_init(mpg123_handle *fr);
27
+ #endif
28
+
29
+ /* max = 1728 */
30
+ #define MAXFRAMESIZE 3456
31
+
32
+ struct al_table
33
+ {
34
+ short bits;
35
+ short d;
36
+ };
37
+
38
+ /* the output buffer, used to be pcm_sample, pcm_point and audiobufsize */
39
+ struct outbuffer
40
+ {
41
+ unsigned char *data; /* main data pointer, aligned */
42
+ unsigned char *p; /* read pointer */
43
+ size_t fill; /* fill from read pointer */
44
+ size_t size;
45
+ unsigned char *rdata; /* unaligned base pointer */
46
+ };
47
+
48
+ struct audioformat
49
+ {
50
+ int encoding;
51
+ int encsize; /* Size of one sample in bytes, plain int should be fine here... */
52
+ int channels;
53
+ long rate;
54
+ };
55
+
56
+ void invalidate_format(struct audioformat *af);
57
+
58
+ struct mpg123_pars_struct
59
+ {
60
+ int verbose; /* verbose level */
61
+ long flags; /* combination of above */
62
+ #ifndef NO_NTOM
63
+ long force_rate;
64
+ #endif
65
+ int down_sample;
66
+ int rva; /* (which) rva to do: 0: nothing, 1: radio/mix/track 2: album/audiophile */
67
+ long halfspeed;
68
+ long doublespeed;
69
+ long timeout;
70
+ #define NUM_CHANNELS 2
71
+ char audio_caps[NUM_CHANNELS][MPG123_RATES+1][MPG123_ENCODINGS];
72
+ /* long start_frame; */ /* frame offset to begin with */
73
+ /* long frame_number;*/ /* number of frames to decode */
74
+ #ifndef NO_ICY
75
+ long icy_interval;
76
+ #endif
77
+ double outscale;
78
+ long resync_limit;
79
+ long index_size; /* Long, because: negative values have a meaning. */
80
+ long preframes;
81
+ #ifndef NO_FEEDER
82
+ long feedpool;
83
+ long feedbuffer;
84
+ #endif
85
+ };
86
+
87
+ enum frame_state_flags
88
+ {
89
+ FRAME_ACCURATE = 0x1 /**< 0001 Positions are considered accurate. */
90
+ ,FRAME_FRANKENSTEIN = 0x2 /**< 0010 This stream is concatenated. */
91
+ };
92
+
93
+ /* There is a lot to condense here... many ints can be merged as flags; though the main space is still consumed by buffers. */
94
+ struct mpg123_handle_struct
95
+ {
96
+ int fresh; /* to be moved into flags */
97
+ int new_format;
98
+ real hybrid_block[2][2][SBLIMIT*SSLIMIT];
99
+ int hybrid_blc[2];
100
+ /* the scratch vars for the decoders, sometimes real, sometimes short... sometimes int/long */
101
+ short *short_buffs[2][2];
102
+ real *real_buffs[2][2];
103
+ unsigned char *rawbuffs;
104
+ int rawbuffss;
105
+ #ifdef OPT_I486
106
+ int i486bo[2];
107
+ #endif
108
+ int bo; /* Just have it always here. */
109
+ #ifdef OPT_DITHER
110
+ int ditherindex;
111
+ float *dithernoise;
112
+ #endif
113
+ unsigned char* rawdecwin; /* the block with all decwins */
114
+ int rawdecwins; /* size of rawdecwin memory */
115
+ real *decwin; /* _the_ decode table */
116
+ #ifdef OPT_MMXORSSE
117
+ /* I am not really sure that I need both of them... used in assembler */
118
+ float *decwin_mmx;
119
+ float *decwins;
120
+ #endif
121
+ int have_eq_settings;
122
+ real equalizer[2][32];
123
+
124
+ /* for halfspeed mode */
125
+ unsigned char ssave[34];
126
+ int halfphase;
127
+ #ifndef NO_8BIT
128
+ /* a raw buffer and a pointer into the middle for signed short conversion, only allocated on demand */
129
+ unsigned char *conv16to8_buf;
130
+ unsigned char *conv16to8;
131
+ #endif
132
+ /* There's some possible memory saving for stuff that is not _really_ dynamic. */
133
+
134
+ /* layer3 */
135
+ int longLimit[9][23];
136
+ int shortLimit[9][14];
137
+ real gainpow2[256+118+4]; /* not really dynamic, just different for mmx */
138
+
139
+ /* layer2 */
140
+ real muls[27][64]; /* also used by layer 1 */
141
+
142
+ #ifndef NO_NTOM
143
+ /* decode_ntom */
144
+ unsigned long ntom_val[2];
145
+ unsigned long ntom_step;
146
+ #endif
147
+ /* special i486 fun */
148
+ #ifdef OPT_I486
149
+ int *int_buffs[2][2];
150
+ #endif
151
+ /* special altivec... */
152
+ #ifdef OPT_ALTIVEC
153
+ real *areal_buffs[4][4];
154
+ #endif
155
+ struct synth_s synths;
156
+ struct
157
+ {
158
+ #ifdef OPT_MULTI
159
+
160
+ #ifndef NO_LAYER3
161
+ #if (defined OPT_3DNOW || defined OPT_3DNOWEXT)
162
+ void (*the_dct36)(real *,real *,real *,real *,real *);
163
+ #endif
164
+ #endif
165
+
166
+ #endif
167
+ enum optdec type;
168
+ enum optcla class;
169
+ } cpu_opts;
170
+
171
+ int verbose; /* 0: nothing, 1: just print chosen decoder, 2: be verbose */
172
+
173
+ const struct al_table *alloc;
174
+ /* The runtime-chosen decoding, based on input and output format. */
175
+ func_synth synth;
176
+ func_synth_stereo synth_stereo;
177
+ func_synth_mono synth_mono;
178
+ /* Yes, this function is runtime-switched, too. */
179
+ void (*make_decode_tables)(mpg123_handle *fr); /* That is the volume control. */
180
+
181
+ int stereo; /* I _think_ 1 for mono and 2 for stereo */
182
+ int jsbound;
183
+ #define SINGLE_STEREO -1
184
+ #define SINGLE_LEFT 0
185
+ #define SINGLE_RIGHT 1
186
+ #define SINGLE_MIX 3
187
+ int single;
188
+ int II_sblimit;
189
+ int down_sample_sblimit;
190
+ int lsf; /* 0: MPEG 1.0; 1: MPEG 2.0/2.5 -- both used as bool and array index! */
191
+ /* Many flags in disguise as integers... wasting bytes. */
192
+ int mpeg25;
193
+ int down_sample;
194
+ int header_change;
195
+ int lay;
196
+ int (*do_layer)(mpg123_handle *);
197
+ int error_protection;
198
+ int bitrate_index;
199
+ int sampling_frequency;
200
+ int padding;
201
+ int extension;
202
+ int mode;
203
+ int mode_ext;
204
+ int copyright;
205
+ int original;
206
+ int emphasis;
207
+ int framesize; /* computed framesize */
208
+ int freesize; /* free format frame size */
209
+ enum mpg123_vbr vbr; /* 1 if variable bitrate was detected */
210
+ off_t num; /* frame offset ... */
211
+ off_t input_offset; /* byte offset of this frame in input stream */
212
+ off_t playnum; /* playback offset... includes repetitions, reset at seeks */
213
+ off_t audio_start; /* The byte offset in the file where audio data begins. */
214
+ int state_flags;
215
+ char silent_resync; /* Do not complain for the next n resyncs. */
216
+ unsigned char* xing_toc; /* The seek TOC from Xing header. */
217
+ int freeformat;
218
+ long freeformat_framesize;
219
+
220
+ /* bitstream info; bsi */
221
+ int bitindex;
222
+ unsigned char *wordpointer;
223
+ /* temporary storage for getbits stuff */
224
+ unsigned long ultmp;
225
+ unsigned char uctmp;
226
+
227
+ /* rva data, used in common.c, set in id3.c */
228
+
229
+ double maxoutburst; /* The maximum amplitude in current sample represenation. */
230
+ double lastscale;
231
+ struct
232
+ {
233
+ int level[2];
234
+ float gain[2];
235
+ float peak[2];
236
+ } rva;
237
+
238
+ /* input data */
239
+ off_t track_frames;
240
+ off_t track_samples;
241
+ double mean_framesize;
242
+ off_t mean_frames;
243
+ int fsizeold;
244
+ int ssize;
245
+ unsigned int bitreservoir;
246
+ unsigned char bsspace[2][MAXFRAMESIZE+512]; /* MAXFRAMESIZE */
247
+ unsigned char *bsbuf;
248
+ unsigned char *bsbufold;
249
+ int bsnum;
250
+ /* That is the header matching the last read frame body. */
251
+ unsigned long oldhead;
252
+ /* That is the header that is supposedly the first of the stream. */
253
+ unsigned long firsthead;
254
+ int abr_rate;
255
+ #ifdef FRAME_INDEX
256
+ struct frame_index index;
257
+ #endif
258
+
259
+ /* output data */
260
+ struct outbuffer buffer;
261
+ struct audioformat af;
262
+ int own_buffer;
263
+ size_t outblock; /* number of bytes that this frame produces (upper bound) */
264
+ int to_decode; /* this frame holds data to be decoded */
265
+ int to_ignore; /* the same, somehow */
266
+ off_t firstframe; /* start decoding from here */
267
+ off_t lastframe; /* last frame to decode (for gapless or num_frames limit) */
268
+ off_t ignoreframe; /* frames to decode but discard before firstframe */
269
+ #ifdef GAPLESS
270
+ off_t gapless_frames; /* frame count for the gapless part */
271
+ off_t firstoff; /* number of samples to ignore from firstframe */
272
+ off_t lastoff; /* number of samples to use from lastframe */
273
+ off_t begin_s; /* overall begin offset in samples */
274
+ off_t begin_os;
275
+ off_t end_s; /* overall end offset in samples */
276
+ off_t end_os;
277
+ off_t fullend_os; /* gapless_frames translated to output samples */
278
+ #endif
279
+ unsigned int crc; /* Well, I need a safe 16bit type, actually. But wider doesn't hurt. */
280
+ struct reader *rd; /* pointer to the reading functions */
281
+ struct reader_data rdat; /* reader data and state info */
282
+ struct mpg123_pars_struct p;
283
+ int err;
284
+ int decoder_change;
285
+ int delayed_change;
286
+ long clip;
287
+ /* the meta crap */
288
+ int metaflags;
289
+ unsigned char id3buf[128];
290
+ #ifndef NO_ID3V2
291
+ mpg123_id3v2 id3v2;
292
+ #endif
293
+ #ifndef NO_ICY
294
+ struct icy_meta icy;
295
+ #endif
296
+ /*
297
+ More variables needed for decoders, layerX.c.
298
+ This time it is not about static variables but about the need for alignment which cannot be guaranteed on the stack by certain compilers (Sun Studio).
299
+ We do not require the compiler to align stuff for our hand-written assembly. We only hope that it's able to align stuff for SSE and similar ops it generates itself.
300
+ */
301
+ /*
302
+ Those layer-specific structs could actually share memory, as they are not in use simultaneously. One might allocate on decoder switch, too.
303
+ They all reside in one lump of memory (after each other), allocated to layerscratch.
304
+ */
305
+ real *layerscratch;
306
+ #ifndef NO_LAYER1
307
+ struct
308
+ {
309
+ real (*fraction)[SBLIMIT]; /* ALIGNED(16) real fraction[2][SBLIMIT]; */
310
+ } layer1;
311
+ #endif
312
+ #ifndef NO_LAYER2
313
+ struct
314
+ {
315
+ real (*fraction)[4][SBLIMIT]; /* ALIGNED(16) real fraction[2][4][SBLIMIT] */
316
+ } layer2;
317
+ #endif
318
+ #ifndef NO_LAYER3
319
+ /* These are significant chunks of memory already... */
320
+ struct
321
+ {
322
+ real (*hybrid_in)[SBLIMIT][SSLIMIT]; /* ALIGNED(16) real hybridIn[2][SBLIMIT][SSLIMIT]; */
323
+ real (*hybrid_out)[SSLIMIT][SBLIMIT]; /* ALIGNED(16) real hybridOut[2][SSLIMIT][SBLIMIT]; */
324
+ } layer3;
325
+ #endif
326
+ /* A place for storing additional data for the large file wrapper.
327
+ This is cruft! */
328
+ void *wrapperdata;
329
+ /* A callback used to properly destruct the wrapper data. */
330
+ void (*wrapperclean)(void*);
331
+ };
332
+
333
+ /* generic init, does not include dynamic buffers */
334
+ void frame_init(mpg123_handle *fr);
335
+ void frame_init_par(mpg123_handle *fr, mpg123_pars *mp);
336
+ /* output buffer and format */
337
+ int frame_outbuffer(mpg123_handle *fr);
338
+ int frame_output_format(mpg123_handle *fr);
339
+
340
+ int frame_buffers(mpg123_handle *fr); /* various decoder buffers, needed once */
341
+ int frame_reset(mpg123_handle* fr); /* reset for next track */
342
+ int frame_buffers_reset(mpg123_handle *fr);
343
+ void frame_exit(mpg123_handle *fr); /* end, free all buffers */
344
+
345
+ /* Index functions... */
346
+ /* Well... print it... */
347
+ int mpg123_print_index(mpg123_handle *fr, FILE* out);
348
+ /* Find a seek position in index. */
349
+ off_t frame_index_find(mpg123_handle *fr, off_t want_frame, off_t* get_frame);
350
+ /* Apply index_size setting. */
351
+ int frame_index_setup(mpg123_handle *fr);
352
+
353
+ void do_volume(mpg123_handle *fr, double factor);
354
+ void do_rva(mpg123_handle *fr);
355
+
356
+ /* samples per frame ...
357
+ Layer I
358
+ Layer II
359
+ Layer III
360
+ MPEG-1
361
+ 384
362
+ 1152
363
+ 1152
364
+ MPEG-2 LSF
365
+ 384
366
+ 1152
367
+ 576
368
+ MPEG 2.5
369
+ 384
370
+ 1152
371
+ 576
372
+ */
373
+ #define spf(fr) ((fr)->lay == 1 ? 384 : ((fr)->lay==2 ? 1152 : ((fr)->lsf || (fr)->mpeg25 ? 576 : 1152)))
374
+
375
+ #ifdef GAPLESS
376
+ /* well, I take that one for granted... at least layer3 */
377
+ #define GAPLESS_DELAY 529
378
+ void frame_gapless_init(mpg123_handle *fr, off_t framecount, off_t bskip, off_t eskip);
379
+ void frame_gapless_realinit(mpg123_handle *fr);
380
+ void frame_gapless_update(mpg123_handle *mh, off_t total_samples);
381
+ /*void frame_gapless_position(mpg123_handle* fr);
382
+ void frame_gapless_bytify(mpg123_handle *fr);
383
+ void frame_gapless_ignore(mpg123_handle *fr, off_t frames);*/
384
+ /* void frame_gapless_buffercheck(mpg123_handle *fr); */
385
+ #endif
386
+
387
+ /* Number of samples the decoding of the current frame should yield. */
388
+ off_t frame_expect_outsamples(mpg123_handle *fr);
389
+
390
+ /* Skip this frame... do some fake action to get away without actually decoding it. */
391
+ void frame_skip(mpg123_handle *fr);
392
+
393
+ /*
394
+ Seeking core functions:
395
+ - convert input sample offset to output sample offset
396
+ - convert frame offset to output sample offset
397
+ - get leading frame offset for output sample offset
398
+ The offsets are "unadjusted"/internal; resampling is being taken care of.
399
+ */
400
+ off_t frame_ins2outs(mpg123_handle *fr, off_t ins);
401
+ off_t frame_outs(mpg123_handle *fr, off_t num);
402
+ /* This one just computes the expected sample count for _this_ frame. */
403
+ off_t frame_expect_outsampels(mpg123_handle *fr);
404
+ off_t frame_offset(mpg123_handle *fr, off_t outs);
405
+ void frame_set_frameseek(mpg123_handle *fr, off_t fe);
406
+ void frame_set_seek(mpg123_handle *fr, off_t sp);
407
+ off_t frame_tell_seek(mpg123_handle *fr);
408
+ /* Take a copy of the Xing VBR TOC for fuzzy seeking. */
409
+ int frame_fill_toc(mpg123_handle *fr, unsigned char* in);
410
+ #endif
@@ -0,0 +1,119 @@
1
+ /*
2
+ sampleadjust: gapless sample offset math
3
+
4
+ copyright 1995-2012 by the mpg123 project - free software under the terms of the LGPL 2.1
5
+ see COPYING and AUTHORS files in distribution or http://mpg123.org
6
+
7
+ This is no stand-alone header, precisely to be able to fool it into using fake handle types for testing the math.
8
+ */
9
+
10
+ #include "debug.h"
11
+
12
+ #ifdef GAPLESS
13
+ /* From internal sample number to external. */
14
+ static off_t sample_adjust(mpg123_handle *mh, off_t x)
15
+ {
16
+ off_t s;
17
+ if(mh->p.flags & MPG123_GAPLESS)
18
+ {
19
+ /* It's a bit tricky to do this computation for the padding samples.
20
+ They are not there on the outside. */
21
+ if(x > mh->end_os)
22
+ {
23
+ if(x < mh->fullend_os)
24
+ s = mh->end_os - mh->begin_os;
25
+ else
26
+ s = x - (mh->fullend_os - mh->end_os + mh->begin_os);
27
+ }
28
+ else
29
+ s = x - mh->begin_os;
30
+ }
31
+ else
32
+ s = x;
33
+
34
+ return s;
35
+ }
36
+
37
+ /* from external samples to internal */
38
+ static off_t sample_unadjust(mpg123_handle *mh, off_t x)
39
+ {
40
+ off_t s;
41
+ if(mh->p.flags & MPG123_GAPLESS)
42
+ {
43
+ s = x + mh->begin_os;
44
+ /* There is a hole; we don't create sample positions in there.
45
+ Jump from the end of the gapless track directly to after the padding. */
46
+ if(s >= mh->end_os)
47
+ s += mh->fullend_os - mh->end_os;
48
+ }
49
+ else s = x;
50
+
51
+ return s;
52
+ }
53
+
54
+ /*
55
+ Take the buffer after a frame decode (strictly: it is the data from frame fr->num!) and cut samples out.
56
+ fr->buffer.fill may then be smaller than before...
57
+ */
58
+ static void frame_buffercheck(mpg123_handle *fr)
59
+ {
60
+ /* When we have no accurate position, gapless code does not make sense. */
61
+ if(!(fr->state_flags & FRAME_ACCURATE)) return;
62
+
63
+ /* Get a grip on dirty streams that start with a gapless header.
64
+ Simply accept all data from frames that are too much,
65
+ they are supposedly attached to the stream after the fact. */
66
+ if(fr->gapless_frames > 0 && fr->num >= fr->gapless_frames) return;
67
+
68
+ /* Important: We first cut samples from the end, then cut from beginning (including left-shift of the buffer).
69
+ This order works also for the case where firstframe == lastframe. */
70
+
71
+ /* The last interesting (planned) frame: Only use some leading samples.
72
+ Note a difference from the below: The last frame and offset are unchanges by seeks.
73
+ The lastoff keeps being valid. */
74
+ if(fr->lastframe > -1 && fr->num >= fr->lastframe)
75
+ {
76
+ /* There can be more than one frame of padding at the end, so we ignore the whole frame if we are beyond lastframe. */
77
+ off_t byteoff = (fr->num == fr->lastframe) ? samples_to_bytes(fr, fr->lastoff) : 0;
78
+ if((off_t)fr->buffer.fill > byteoff)
79
+ {
80
+ fr->buffer.fill = byteoff;
81
+ }
82
+ if(VERBOSE3) fprintf(stderr, "\nNote: Cut frame %"OFF_P" buffer on end of stream to %"OFF_P" samples, fill now %"SIZE_P" bytes.\n", (off_p)fr->num, (off_p)(fr->num == fr->lastframe ? fr->lastoff : 0), (size_p)fr->buffer.fill);
83
+ }
84
+
85
+ /* The first interesting frame: Skip some leading samples. */
86
+ if(fr->firstoff && fr->num == fr->firstframe)
87
+ {
88
+ off_t byteoff = samples_to_bytes(fr, fr->firstoff);
89
+ if((off_t)fr->buffer.fill > byteoff)
90
+ {
91
+ fr->buffer.fill -= byteoff;
92
+ /* buffer.p != buffer.data only for own buffer */
93
+ debug6("cutting %li samples/%li bytes on begin, own_buffer=%i at %p=%p, buf[1]=%i",
94
+ (long)fr->firstoff, (long)byteoff, fr->own_buffer, (void*)fr->buffer.p, (void*)fr->buffer.data, ((short*)fr->buffer.p)[2]);
95
+ if(fr->own_buffer) fr->buffer.p = fr->buffer.data + byteoff;
96
+ else memmove(fr->buffer.data, fr->buffer.data + byteoff, fr->buffer.fill);
97
+ debug3("done cutting, buffer at %p =? %p, buf[1]=%i",
98
+ (void*)fr->buffer.p, (void*)fr->buffer.data, ((short*)fr->buffer.p)[2]);
99
+ }
100
+ else fr->buffer.fill = 0;
101
+
102
+ if(VERBOSE3) fprintf(stderr, "\nNote: Cut frame %"OFF_P" buffer on beginning of stream by %"OFF_P" samples, fill now %"SIZE_P" bytes.\n", (off_p)fr->num, (off_p)fr->firstoff, (size_p)fr->buffer.fill);
103
+ /* We can only reach this frame again by seeking. And on seeking, firstoff will be recomputed.
104
+ So it is safe to null it here (and it makes the if() decision abort earlier). */
105
+ fr->firstoff = 0;
106
+ }
107
+ }
108
+
109
+ #define SAMPLE_ADJUST(mh,x) sample_adjust(mh,x)
110
+ #define SAMPLE_UNADJUST(mh,x) sample_unadjust(mh,x)
111
+ #define FRAME_BUFFERCHECK(mh) frame_buffercheck(mh)
112
+
113
+ #else /* no gapless code included */
114
+
115
+ #define SAMPLE_ADJUST(mh,x) (x)
116
+ #define SAMPLE_UNADJUST(mh,x) (x)
117
+ #define FRAME_BUFFERCHECK(mh)
118
+
119
+ #endif