seal 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,338 @@
1
+ /*
2
+ mpg123lib_intern: Common non-public stuff for libmpg123
3
+
4
+ copyright 1995-2008 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
+ derived from the old mpg123.h
8
+ */
9
+
10
+ #ifndef MPG123_H_INTERN
11
+ #define MPG123_H_INTERN
12
+
13
+ #define MPG123_RATES 9
14
+ #define MPG123_ENCODINGS 12
15
+
16
+ #include "config.h" /* Load this before _anything_ */
17
+ #include "intsym.h" /* Prefixing of internal symbols that still are public in a static lib. */
18
+
19
+ /* ABI conformance for other compilers.
20
+ mpg123 needs 16byte-aligned stack for SSE and friends.
21
+ gcc provides that, but others don't necessarily. */
22
+ #ifdef ABI_ALIGN_FUN
23
+ #ifndef attribute_align_arg
24
+ #if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__>1)
25
+ # define attribute_align_arg __attribute__((force_align_arg_pointer))
26
+ /* The gcc that can align the stack does not need the check... nor does it work with gcc 4.3+, anyway. */
27
+ #else
28
+
29
+ # define attribute_align_arg
30
+ /* Other compilers get code to catch misaligned stack.
31
+ Well, except Sun Studio, which accepts the aligned attribute but does not honor it. */
32
+ #if !defined(__SUNPRO_C)
33
+ # define NEED_ALIGNCHECK
34
+ #endif
35
+
36
+ #endif
37
+ #endif
38
+ #else
39
+ #define attribute_align_arg
40
+ /* We won't try the align check... */
41
+ #endif
42
+
43
+ /* export DLL symbols */
44
+ #if defined(WIN32) && defined(DYNAMIC_BUILD)
45
+ #define BUILD_MPG123_DLL
46
+ #endif
47
+ #include "compat.h"
48
+ #include "mpg123.h"
49
+
50
+ #define SKIP_JUNK 1
51
+
52
+ #ifndef M_PI
53
+ # define M_PI 3.14159265358979323846
54
+ #endif
55
+ #ifndef M_SQRT2
56
+ # define M_SQRT2 1.41421356237309504880
57
+ #endif
58
+
59
+ #ifdef SUNOS
60
+ #define memmove(dst,src,size) bcopy(src,dst,size)
61
+ #endif
62
+
63
+ /* some stuff has to go back to mpg123.h */
64
+ #ifdef REAL_IS_FLOAT
65
+ # define real float
66
+ # define REAL_SCANF "%f"
67
+ # define REAL_PRINTF "%f"
68
+ #elif defined(REAL_IS_LONG_DOUBLE)
69
+ # define real long double
70
+ # define REAL_SCANF "%Lf"
71
+ # define REAL_PRINTF "%Lf"
72
+ #elif defined(REAL_IS_FIXED)
73
+ /* Disable some output formats for fixed point decoder... */
74
+
75
+ # define real long
76
+
77
+ /*
78
+ for fixed-point decoders, use pre-calculated tables to avoid expensive floating-point maths
79
+ undef this macro for run-time calculation
80
+ */
81
+ #define PRECALC_TABLES
82
+
83
+ # define REAL_RADIX 24
84
+ # define REAL_FACTOR 16777216.0
85
+
86
+ static inline long double_to_long_rounded(double x, double scalefac)
87
+ {
88
+ x *= scalefac;
89
+ x += (x > 0) ? 0.5 : -0.5;
90
+ return (long)x;
91
+ }
92
+
93
+ static inline long scale_rounded(long x, int shift)
94
+ {
95
+ x += (x >> 31);
96
+ x >>= (shift - 1);
97
+ x += (x & 1);
98
+ return (x >> 1);
99
+ }
100
+
101
+ # ifdef __GNUC__
102
+ # if defined(OPT_I386)
103
+ /* for i386_nofpu decoder */
104
+ # define REAL_MUL_ASM(x, y, radix) \
105
+ ({ \
106
+ long _x=(x), _y=(y); \
107
+ __asm__ ( \
108
+ "imull %1 \n\t" \
109
+ "shrdl %2, %%edx, %0 \n\t" \
110
+ : "+&a" (_x) \
111
+ : "mr" (_y), "I" (radix) \
112
+ : "%edx", "cc" \
113
+ ); \
114
+ _x; \
115
+ })
116
+
117
+ # define REAL_MUL_SCALE_LAYER3_ASM(x, y, radix) \
118
+ ({ \
119
+ long _x=(x), _y=(y), _radix=(radix); \
120
+ __asm__ ( \
121
+ "imull %1 \n\t" \
122
+ "shrdl %%cl, %%edx, %0 \n\t" \
123
+ : "+&a" (_x) \
124
+ : "mr" (_y), "c" (_radix) \
125
+ : "%edx", "cc" \
126
+ ); \
127
+ _x; \
128
+ })
129
+ # elif defined(OPT_PPC)
130
+ /* for powerpc */
131
+ # define REAL_MUL_ASM(x, y, radix) \
132
+ ({ \
133
+ long _x=(x), _y=(y), _mull, _mulh; \
134
+ __asm__ ( \
135
+ "mullw %0, %2, %3 \n\t" \
136
+ "mulhw %1, %2, %3 \n\t" \
137
+ "srwi %0, %0, %4 \n\t" \
138
+ "rlwimi %0, %1, %5, 0, %6 \n\t" \
139
+ : "=&r" (_mull), "=&r" (_mulh) \
140
+ : "r" (_x), "r" (_y), "i" (radix), "i" (32-(radix)), "i" ((radix)-1) \
141
+ ); \
142
+ _mull; \
143
+ })
144
+
145
+ # define REAL_MUL_SCALE_LAYER3_ASM(x, y, radix) \
146
+ ({ \
147
+ long _x=(x), _y=(y), _radix=(radix), _mull, _mulh, _radix2; \
148
+ __asm__ ( \
149
+ "mullw %0, %3, %4 \n\t" \
150
+ "mulhw %1, %3, %4 \n\t" \
151
+ "subfic %2, %5, 32 \n\t" \
152
+ "srw %0, %0, %5 \n\t" \
153
+ "slw %1, %1, %2 \n\t" \
154
+ "or %0, %0, %1 \n\t" \
155
+ : "=&r" (_mull), "=&r" (_mulh), "=&r" (_radix2) \
156
+ : "r" (_x), "r" (_y), "r" (_radix) \
157
+ : "cc" \
158
+ ); \
159
+ _mull; \
160
+ })
161
+ # elif defined(OPT_ARM)
162
+ /* for arm */
163
+ # define REAL_MUL_ASM(x, y, radix) \
164
+ ({ \
165
+ long _x=(x), _y=(y), _mull, _mulh; \
166
+ __asm__ ( \
167
+ "smull %0, %1, %2, %3 \n\t" \
168
+ "mov %0, %0, lsr %4 \n\t" \
169
+ "orr %0, %0, %1, lsl %5 \n\t" \
170
+ : "=&r" (_mull), "=&r" (_mulh) \
171
+ : "r" (_x), "r" (_y), "M" (radix), "M" (32-(radix)) \
172
+ ); \
173
+ _mull; \
174
+ })
175
+
176
+ # define REAL_MUL_SCALE_LAYER3_ASM(x, y, radix) \
177
+ ({ \
178
+ long _x=(x), _y=(y), _radix=(radix), _mull, _mulh, _radix2; \
179
+ __asm__ ( \
180
+ "smull %0, %1, %3, %4 \n\t" \
181
+ "mov %0, %0, lsr %5 \n\t" \
182
+ "rsb %2, %5, #32 \n\t" \
183
+ "mov %1, %1, lsl %2 \n\t" \
184
+ "orr %0, %0, %1 \n\t" \
185
+ : "=&r" (_mull), "=&r" (_mulh), "=&r" (_radix2) \
186
+ : "r" (_x), "r" (_y), "r" (_radix) \
187
+ ); \
188
+ _mull; \
189
+ })
190
+ # endif
191
+ # endif
192
+
193
+ /* I just changed the (int) to (long) there... seemed right. */
194
+ # define DOUBLE_TO_REAL(x) (double_to_long_rounded(x, REAL_FACTOR))
195
+ # define DOUBLE_TO_REAL_15(x) (double_to_long_rounded(x, 32768.0))
196
+ # define DOUBLE_TO_REAL_POW43(x) (double_to_long_rounded(x, 8192.0))
197
+ # define DOUBLE_TO_REAL_SCALE_LAYER12(x) (double_to_long_rounded(x, 1073741824.0))
198
+ # define DOUBLE_TO_REAL_SCALE_LAYER3(x, y) (double_to_long_rounded(x, pow(2.0,gainpow2_scale[y])))
199
+ # define REAL_TO_DOUBLE(x) ((double)(x) / REAL_FACTOR)
200
+ # ifdef REAL_MUL_ASM
201
+ # define REAL_MUL(x, y) REAL_MUL_ASM(x, y, REAL_RADIX)
202
+ # define REAL_MUL_15(x, y) REAL_MUL_ASM(x, y, 15)
203
+ # define REAL_MUL_SCALE_LAYER12(x, y) REAL_MUL_ASM(x, y, 15 + 30 - REAL_RADIX)
204
+ # else
205
+ # define REAL_MUL(x, y) (((long long)(x) * (long long)(y)) >> REAL_RADIX)
206
+ # define REAL_MUL_15(x, y) (((long long)(x) * (long long)(y)) >> 15)
207
+ # define REAL_MUL_SCALE_LAYER12(x, y) (((long long)(x) * (long long)(y)) >> (15 + 30 - REAL_RADIX))
208
+ # endif
209
+ # ifdef REAL_MUL_SCALE_LAYER3_ASM
210
+ # define REAL_MUL_SCALE_LAYER3(x, y, z) REAL_MUL_SCALE_LAYER3_ASM(x, y, 13 + gainpow2_scale[z] - REAL_RADIX)
211
+ # else
212
+ # define REAL_MUL_SCALE_LAYER3(x, y, z) (((long long)(x) * (long long)(y)) >> (13 + gainpow2_scale[z] - REAL_RADIX))
213
+ # endif
214
+ # define REAL_SCALE_LAYER12(x) ((long)((x) >> (30 - REAL_RADIX)))
215
+ # define REAL_SCALE_LAYER3(x, y) ((long)((x) >> (gainpow2_scale[y] - REAL_RADIX)))
216
+ # ifdef ACCURATE_ROUNDING
217
+ # define REAL_MUL_SYNTH(x, y) REAL_MUL(x, y)
218
+ # define REAL_SCALE_DCT64(x) (x)
219
+ # define REAL_SCALE_WINDOW(x) (x)
220
+ # else
221
+ # define REAL_MUL_SYNTH(x, y) ((x) * (y))
222
+ # define REAL_SCALE_DCT64(x) ((x) >> 8)
223
+ # define REAL_SCALE_WINDOW(x) scale_rounded(x, 16)
224
+ # endif
225
+ # define REAL_SCANF "%ld"
226
+ # define REAL_PRINTF "%ld"
227
+
228
+ #else
229
+ # define real double
230
+ # define REAL_SCANF "%lf"
231
+ # define REAL_PRINTF "%f"
232
+ #endif
233
+
234
+ #ifndef REAL_IS_FIXED
235
+ # if (defined SIZEOF_INT32_T) && (SIZEOF_INT32_T != 4)
236
+ # error "Bad 32bit types!!!"
237
+ # endif
238
+ #endif
239
+
240
+ #ifndef DOUBLE_TO_REAL
241
+ # define DOUBLE_TO_REAL(x) (real)(x)
242
+ #endif
243
+ #ifndef DOUBLE_TO_REAL_15
244
+ # define DOUBLE_TO_REAL_15(x) (real)(x)
245
+ #endif
246
+ #ifndef DOUBLE_TO_REAL_POW43
247
+ # define DOUBLE_TO_REAL_POW43(x) (real)(x)
248
+ #endif
249
+ #ifndef DOUBLE_TO_REAL_SCALE_LAYER12
250
+ # define DOUBLE_TO_REAL_SCALE_LAYER12(x) (real)(x)
251
+ #endif
252
+ #ifndef DOUBLE_TO_REAL_SCALE_LAYER3
253
+ # define DOUBLE_TO_REAL_SCALE_LAYER3(x, y) (real)(x)
254
+ #endif
255
+ #ifndef REAL_TO_DOUBLE
256
+ # define REAL_TO_DOUBLE(x) (x)
257
+ #endif
258
+
259
+ #ifndef REAL_MUL
260
+ # define REAL_MUL(x, y) ((x) * (y))
261
+ #endif
262
+ #ifndef REAL_MUL_SYNTH
263
+ # define REAL_MUL_SYNTH(x, y) ((x) * (y))
264
+ #endif
265
+ #ifndef REAL_MUL_15
266
+ # define REAL_MUL_15(x, y) ((x) * (y))
267
+ #endif
268
+ #ifndef REAL_MUL_SCALE_LAYER12
269
+ # define REAL_MUL_SCALE_LAYER12(x, y) ((x) * (y))
270
+ #endif
271
+ #ifndef REAL_MUL_SCALE_LAYER3
272
+ # define REAL_MUL_SCALE_LAYER3(x, y, z) ((x) * (y))
273
+ #endif
274
+ #ifndef REAL_SCALE_LAYER12
275
+ # define REAL_SCALE_LAYER12(x) (x)
276
+ #endif
277
+ #ifndef REAL_SCALE_LAYER3
278
+ # define REAL_SCALE_LAYER3(x, y) (x)
279
+ #endif
280
+ #ifndef REAL_SCALE_DCT64
281
+ # define REAL_SCALE_DCT64(x) (x)
282
+ #endif
283
+
284
+ /* used to be: AUDIOBUFSIZE = n*64 with n=1,2,3 ...
285
+ now: factor on minimum frame buffer size (which takes upsampling into account) */
286
+ #define AUDIOBUFSIZE 2
287
+
288
+ #include "true.h"
289
+
290
+ #define MAX_NAME_SIZE 81
291
+ #define SBLIMIT 32
292
+ #define SCALE_BLOCK 12
293
+ #define SSLIMIT 18
294
+
295
+ /* Same as MPG_M_* */
296
+ #define MPG_MD_STEREO 0
297
+ #define MPG_MD_JOINT_STEREO 1
298
+ #define MPG_MD_DUAL_CHANNEL 2
299
+ #define MPG_MD_MONO 3
300
+
301
+ /* We support short or float output samples...
302
+ Short integer amplitude is scaled by this. */
303
+ #define SHORT_SCALE 32768
304
+ /* That scales a short-scaled value to a 32bit integer scaled one
305
+ value = 2**31/2**15 */
306
+ #define S32_RESCALE 65536
307
+
308
+ /* Pre Shift fo 16 to 8 bit converter table */
309
+ #define AUSHIFT (3)
310
+
311
+ #include "optimize.h"
312
+ #include "decode.h"
313
+ #include "parse.h"
314
+ #include "frame.h"
315
+
316
+ /* fr is a mpg123_handle* by convention here... */
317
+ #define NOQUIET (!(fr->p.flags & MPG123_QUIET))
318
+ #define VERBOSE (NOQUIET && fr->p.verbose)
319
+ #define VERBOSE2 (NOQUIET && fr->p.verbose > 1)
320
+ #define VERBOSE3 (NOQUIET && fr->p.verbose > 2)
321
+ #define VERBOSE4 (NOQUIET && fr->p.verbose > 3)
322
+ #define PVERB(mp, level) (!((mp)->flags & MPG123_QUIET) && (mp)->verbose >= (level))
323
+
324
+ int decode_update(mpg123_handle *mh);
325
+ /* residing in format.c */
326
+ off_t samples_to_storage(mpg123_handle *fr , off_t s);
327
+ off_t samples_to_bytes(mpg123_handle *fr , off_t s);
328
+ off_t bytes_to_samples(mpg123_handle *fr , off_t b);
329
+ /* Postprocessing format conversion of freshly decoded buffer. */
330
+ void postprocess_buffer(mpg123_handle *fr);
331
+
332
+ /* If networking is enabled and we really mean internal networking, the timeout_read function is available. */
333
+ #if defined (NETWORK) && !defined (WANT_WIN32_SOCKETS)
334
+ /* Does not work with win32 */
335
+ #define TIMEOUT_READ
336
+ #endif
337
+
338
+ #endif
@@ -0,0 +1,148 @@
1
+ /*
2
+ ntom.c: N->M down/up sampling; the setup code.
3
+
4
+ copyright 1995-2008 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 Michael Hipp
7
+ */
8
+
9
+ #define SAFE_NTOM /* Do not depend on off_t*off_t with big values still being in the range... */
10
+ #include "mpg123lib_intern.h"
11
+ #include "debug.h"
12
+
13
+ int synth_ntom_set_step(mpg123_handle *fr)
14
+ {
15
+ long m,n;
16
+ m = frame_freq(fr);
17
+ n = fr->af.rate;
18
+ if(VERBOSE2)
19
+ fprintf(stderr,"Init rate converter: %ld->%ld\n",m,n);
20
+
21
+ if(n > NTOM_MAX_FREQ || m > NTOM_MAX_FREQ || m <= 0 || n <= 0) {
22
+ if(NOQUIET) error("NtoM converter: illegal rates");
23
+ fr->err = MPG123_BAD_RATE;
24
+ return -1;
25
+ }
26
+
27
+ n *= NTOM_MUL;
28
+ fr->ntom_step = (unsigned long) n / m;
29
+
30
+ if(fr->ntom_step > (unsigned long)NTOM_MAX*NTOM_MUL) {
31
+ if(NOQUIET) error3("max. 1:%i conversion allowed (%lu vs %lu)!", NTOM_MAX, fr->ntom_step, (unsigned long)8*NTOM_MUL);
32
+ fr->err = MPG123_BAD_RATE;
33
+ return -1;
34
+ }
35
+
36
+ fr->ntom_val[0] = fr->ntom_val[1] = ntom_val(fr, fr->num);
37
+ return 0;
38
+ }
39
+
40
+ /*
41
+ The SAFE_NTOM does iterative loops instead of straight multiplication.
42
+ The safety is not just about the algorithm closely mimicking the decoder instead of applying some formula,
43
+ it is more about avoiding multiplication of possibly big sample offsets (a 32bit off_t could overflow too easily).
44
+ */
45
+
46
+ unsigned long ntom_val(mpg123_handle *fr, off_t frame)
47
+ {
48
+ off_t ntm;
49
+ #ifdef SAFE_NTOM /* Carry out the loop, without the threatening integer overflow. */
50
+ off_t f;
51
+ ntm = NTOM_MUL>>1; /* for frame 0 */
52
+ for(f=0; f<frame; ++f) /* for frame > 0 */
53
+ {
54
+ ntm += spf(fr)*fr->ntom_step;
55
+ ntm -= (ntm/NTOM_MUL)*NTOM_MUL;
56
+ }
57
+ #else /* Just make one computation with overall sample offset. */
58
+ ntm = (NTOM_MUL>>1) + spf(fr)*frame*fr->ntom_step;
59
+ ntm -= (ntm/NTOM_MUL)*NTOM_MUL;
60
+ #endif
61
+ return (unsigned long) ntm;
62
+ }
63
+
64
+ /* Set the ntom value for next expected frame to be decoded.
65
+ This is for keeping output consistent across seeks. */
66
+ void ntom_set_ntom(mpg123_handle *fr, off_t num)
67
+ {
68
+ fr->ntom_val[1] = fr->ntom_val[0] = ntom_val(fr, num);
69
+ }
70
+
71
+ /* Carry out the ntom sample count operation for this one frame.
72
+ No fear of integer overflow here. */
73
+ off_t ntom_frame_outsamples(mpg123_handle *fr)
74
+ {
75
+ /* The do this before decoding the separate channels, so there is only one common ntom value. */
76
+ int ntm = fr->ntom_val[0];
77
+ ntm += spf(fr)*fr->ntom_step;
78
+ return ntm/NTOM_MUL;
79
+ }
80
+
81
+ /* Convert frame offset to unadjusted output sample offset. */
82
+ off_t ntom_frmouts(mpg123_handle *fr, off_t frame)
83
+ {
84
+ #ifdef SAFE_NTOM
85
+ off_t f;
86
+ #endif
87
+ off_t soff = 0;
88
+ off_t ntm = ntom_val(fr,0);
89
+ #ifdef SAFE_NTOM
90
+ if(frame <= 0) return 0;
91
+ for(f=0; f<frame; ++f)
92
+ {
93
+ ntm += spf(fr)*fr->ntom_step;
94
+ soff += ntm/NTOM_MUL;
95
+ ntm -= (ntm/NTOM_MUL)*NTOM_MUL;
96
+ }
97
+ #else
98
+ soff = (ntm + frame*(off_t)spf(fr)*(off_t)fr->ntom_step)/(off_t)NTOM_MUL;
99
+ #endif
100
+ return soff;
101
+ }
102
+
103
+ /* Convert input samples to unadjusted output samples. */
104
+ off_t ntom_ins2outs(mpg123_handle *fr, off_t ins)
105
+ {
106
+ off_t soff = 0;
107
+ off_t ntm = ntom_val(fr,0);
108
+ #ifdef SAFE_NTOM
109
+ {
110
+ off_t block = spf(fr);
111
+ if(ins <= 0) return 0;
112
+ do
113
+ {
114
+ off_t nowblock = ins > block ? block : ins;
115
+ ntm += nowblock*fr->ntom_step;
116
+ soff += ntm/NTOM_MUL;
117
+ ntm -= (ntm/NTOM_MUL)*NTOM_MUL;
118
+ ins -= nowblock;
119
+ } while(ins > 0);
120
+ }
121
+ #else
122
+ /* Beware of overflows: when off_t is 32bits, the multiplication blows too easily.
123
+ Of course, it blows for 64bits, too, in theory, but that's for _really_ large files. */
124
+ soff = ((off_t)ntm + (off_t)ins*(off_t)fr->ntom_step)/(off_t)NTOM_MUL;
125
+ #endif
126
+ return soff;
127
+ }
128
+
129
+ /* Determine frame offset from unadjusted output sample offset. */
130
+ off_t ntom_frameoff(mpg123_handle *fr, off_t soff)
131
+ {
132
+ off_t ioff = 0; /* frames or samples */
133
+ off_t ntm = ntom_val(fr,0);
134
+ #ifdef SAFE_NTOM
135
+ if(soff <= 0) return 0;
136
+ for(ioff=0; 1; ++ioff)
137
+ {
138
+ ntm += spf(fr)*fr->ntom_step;
139
+ if(ntm/NTOM_MUL > soff) break;
140
+ soff -= ntm/NTOM_MUL;
141
+ ntm -= (ntm/NTOM_MUL)*NTOM_MUL;
142
+ }
143
+ return ioff;
144
+ #else
145
+ ioff = (soff*(off_t)NTOM_MUL-ntm)/(off_t)fr->ntom_step;
146
+ return ioff/(off_t)spf(fr);
147
+ #endif
148
+ }