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,152 @@
1
+ /*
2
+ sample.h: The conversion from internal data to output samples of differing formats.
3
+
4
+ copyright 2007-9 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, taking WRITE_SAMPLE from decode.c
7
+ Later added the end-conversion specific macros here, too.
8
+ */
9
+
10
+ #ifndef SAMPLE_H
11
+ #define SAMPLE_H
12
+
13
+ /* mpg123lib_intern.h is included already, right? */
14
+
15
+ /* Special case is fixed point math... which does work, but not that nice yet. */
16
+ #ifdef REAL_IS_FIXED
17
+ static inline short idiv_signed_rounded(long x, int shift)
18
+ {
19
+ x >>= (shift - 1);
20
+ x += (x & 1);
21
+ return (short)(x >> 1);
22
+ }
23
+ # define REAL_PLUS_32767 ( 32767 << 15 )
24
+ # define REAL_MINUS_32768 ( -32768 << 15 )
25
+ # define REAL_TO_SHORT(x) (idiv_signed_rounded(x, 15))
26
+ /* No better code (yet). */
27
+ # define REAL_TO_SHORT_ACCURATE(x) REAL_TO_SHORT(x)
28
+ /* This is just here for completeness, it is not used! */
29
+ # define REAL_TO_S32(x) (x)
30
+ #endif
31
+
32
+ /* From now on for single precision float... double precision is a possible option once we added some bits. But, it would be rather insane. */
33
+ #ifndef REAL_TO_SHORT
34
+
35
+ /* Define the accurate rounding function. */
36
+ # if (defined REAL_IS_FLOAT) && (defined IEEE_FLOAT)
37
+ /* This function is only available for IEEE754 single-precision values
38
+ This is nearly identical to proper rounding, just -+0.5 is rounded to 0 */
39
+ static inline short ftoi16(float x)
40
+ {
41
+ union
42
+ {
43
+ float f;
44
+ int32_t i;
45
+ } u_fi;
46
+ u_fi.f = x + 12582912.0f; /* Magic Number: 2^23 + 2^22 */
47
+ return (short)u_fi.i;
48
+ }
49
+ # define REAL_TO_SHORT_ACCURATE(x) ftoi16(x)
50
+ # else
51
+ /* The "proper" rounding, plain C, a bit slow. */
52
+ # define REAL_TO_SHORT_ACCURATE(x) (short)((x)>0.0?(x)+0.5:(x)-0.5)
53
+ # endif
54
+
55
+ /* Now define the normal rounding. */
56
+ # ifdef ACCURATE_ROUNDING
57
+ # define REAL_TO_SHORT(x) REAL_TO_SHORT_ACCURATE(x)
58
+ # else
59
+ /* Non-accurate rounding... simple truncation. Fastest, most LSB errors. */
60
+ # define REAL_TO_SHORT(x) (short)(x)
61
+ # endif
62
+
63
+ #endif /* REAL_TO_SHORT */
64
+
65
+ /* We should add dithering for S32, too? */
66
+ #ifndef REAL_TO_S32
67
+ # ifdef ACCURATE_ROUNDING
68
+ # define REAL_TO_S32(x) (int32_t)((x)>0.0?(x)+0.5:(x)-0.5)
69
+ # else
70
+ # define REAL_TO_S32(x) (int32_t)(x)
71
+ # endif
72
+ #endif
73
+
74
+ #ifndef REAL_PLUS_32767
75
+ # define REAL_PLUS_32767 32767.0
76
+ #endif
77
+ #ifndef REAL_MINUS_32768
78
+ # define REAL_MINUS_32768 -32768.0
79
+ #endif
80
+ #ifndef REAL_PLUS_S32
81
+ # define REAL_PLUS_S32 2147483647.0
82
+ #endif
83
+ #ifndef REAL_MINUS_S32
84
+ # define REAL_MINUS_S32 -2147483648.0
85
+ #endif
86
+
87
+
88
+ /* The actual storage of a decoded sample is separated in the following macros.
89
+ We can handle different types, we could also handle dithering here. */
90
+
91
+ #ifdef NEWOLD_WRITE_SAMPLE
92
+
93
+ /* This is the old new mpg123 WRITE_SAMPLE, fixed for newer GCC by MPlayer folks.
94
+ Makes a huge difference on old machines. */
95
+ #if WORDS_BIGENDIAN
96
+ #define MANTISSA_OFFSET 1
97
+ #else
98
+ #define MANTISSA_OFFSET 0
99
+ #endif
100
+ #define WRITE_SHORT_SAMPLE(samples,sum,clip) { \
101
+ union { double dtemp; int itemp[2]; } u; int v; \
102
+ u.dtemp = ((((65536.0 * 65536.0 * 16)+(65536.0 * 0.5))* 65536.0)) + (sum);\
103
+ v = u.itemp[MANTISSA_OFFSET] - 0x80000000; \
104
+ if( v > 32767) { *(samples) = 0x7fff; (clip)++; } \
105
+ else if( v < -32768) { *(samples) = -0x8000; (clip)++; } \
106
+ else { *(samples) = v; } \
107
+ }
108
+
109
+ #else
110
+ /* Macro to produce a short (signed 16bit) output sample from internal representation,
111
+ which may be float, double or indeed some integer for fixed point handling. */
112
+ #define WRITE_SHORT_SAMPLE(samples,sum,clip) \
113
+ if( (sum) > REAL_PLUS_32767) { *(samples) = 0x7fff; (clip)++; } \
114
+ else if( (sum) < REAL_MINUS_32768) { *(samples) = -0x8000; (clip)++; } \
115
+ else { *(samples) = REAL_TO_SHORT(sum); }
116
+ #endif
117
+
118
+ /* Same as above, but always using accurate rounding. Would we want softer clipping here, too? */
119
+ #define WRITE_SHORT_SAMPLE_ACCURATE(samples,sum,clip) \
120
+ if( (sum) > REAL_PLUS_32767) { *(samples) = 0x7fff; (clip)++; } \
121
+ else if( (sum) < REAL_MINUS_32768) { *(samples) = -0x8000; (clip)++; } \
122
+ else { *(samples) = REAL_TO_SHORT_ACCURATE(sum); }
123
+
124
+ /*
125
+ 32bit signed
126
+ We do clipping with the same old borders... but different conversion.
127
+ We see here that we need extra work for non-16bit output... we optimized for 16bit.
128
+ -0x7fffffff-1 is the minimum 32 bit signed integer value expressed so that MSVC
129
+ does not give a compile time warning.
130
+ */
131
+ #define WRITE_S32_SAMPLE(samples,sum,clip) \
132
+ { \
133
+ real tmpsum = REAL_MUL((sum),S32_RESCALE); \
134
+ if( tmpsum > REAL_PLUS_S32 ){ *(samples) = 0x7fffffff; (clip)++; } \
135
+ else if( tmpsum < REAL_MINUS_S32 ) { *(samples) = -0x7fffffff-1; (clip)++; } \
136
+ else { *(samples) = REAL_TO_S32(tmpsum); } \
137
+ }
138
+
139
+ /* Produce an 8bit sample, via 16bit intermediate. */
140
+ #define WRITE_8BIT_SAMPLE(samples,sum,clip) \
141
+ { \
142
+ short write_8bit_tmp; \
143
+ if( (sum) > REAL_PLUS_32767) { write_8bit_tmp = 0x7fff; (clip)++; } \
144
+ else if( (sum) < REAL_MINUS_32768) { write_8bit_tmp = -0x8000; (clip)++; } \
145
+ else { write_8bit_tmp = REAL_TO_SHORT(sum); } \
146
+ *(samples) = fr->conv16to8[write_8bit_tmp>>AUSHIFT]; \
147
+ }
148
+ #ifndef REAL_IS_FIXED
149
+ #define WRITE_REAL_SAMPLE(samples,sum,clip) *(samples) = ((real)1./SHORT_SCALE)*(sum)
150
+ #endif
151
+
152
+ #endif
@@ -0,0 +1,163 @@
1
+ /*
2
+ stringbuf: mimicking a bit of C++ to more safely handle strings
3
+
4
+ copyright 2006-10 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
+ #include "mpg123lib_intern.h"
10
+ #include "config.h"
11
+ #include "mpg123.h"
12
+ #include "compat.h"
13
+ #include <string.h>
14
+ #include "debug.h"
15
+
16
+ void attribute_align_arg mpg123_init_string(mpg123_string* sb)
17
+ {
18
+ sb->p = NULL;
19
+ sb->size = 0;
20
+ sb->fill = 0;
21
+ }
22
+
23
+ void attribute_align_arg mpg123_free_string(mpg123_string* sb)
24
+ {
25
+ if(sb->p != NULL) free(sb->p);
26
+ mpg123_init_string(sb);
27
+ }
28
+
29
+ int attribute_align_arg mpg123_grow_string(mpg123_string* sb, size_t new)
30
+ {
31
+ if(sb->size < new) return mpg123_resize_string(sb, new);
32
+ else return 1;
33
+ }
34
+
35
+ int attribute_align_arg mpg123_resize_string(mpg123_string* sb, size_t new)
36
+ {
37
+ debug3("resizing string pointer %p from %lu to %lu", (void*) sb->p, (unsigned long)sb->size, (unsigned long)new);
38
+ if(new == 0)
39
+ {
40
+ if(sb->size && sb->p != NULL) free(sb->p);
41
+ mpg123_init_string(sb);
42
+ return 1;
43
+ }
44
+ if(sb->size != new)
45
+ {
46
+ char* t;
47
+ debug("really!");
48
+ t = (char*) safe_realloc(sb->p, new*sizeof(char));
49
+ debug1("safe_realloc returned %p", (void*) t);
50
+ if(t != NULL)
51
+ {
52
+ sb->p = t;
53
+ sb->size = new;
54
+ return 1;
55
+ }
56
+ else return 0;
57
+ }
58
+ else return 1; /* success */
59
+ }
60
+
61
+ int attribute_align_arg mpg123_copy_string(mpg123_string* from, mpg123_string* to)
62
+ {
63
+ size_t fill;
64
+ char *text;
65
+ if(to == NULL) return -1;
66
+
67
+ debug2("called copy_string with %p -> %p", (void*)from, (void*)to);
68
+ if(from == NULL)
69
+ {
70
+ fill = 0;
71
+ text = NULL;
72
+ }
73
+ else
74
+ {
75
+ fill = from->fill;
76
+ text = from->p;
77
+ }
78
+
79
+ if(mpg123_resize_string(to, fill))
80
+ {
81
+ memcpy(to->p, text, fill);
82
+ to->fill = fill;
83
+ return 1;
84
+ }
85
+ else return 0;
86
+ }
87
+
88
+ int attribute_align_arg mpg123_add_string(mpg123_string* sb, const char* stuff)
89
+ {
90
+ debug1("adding %s", stuff);
91
+ return mpg123_add_substring(sb, stuff, 0, strlen(stuff));
92
+ }
93
+
94
+ int attribute_align_arg mpg123_add_substring(mpg123_string *sb, const char *stuff, size_t from, size_t count)
95
+ {
96
+ debug("adding a substring");
97
+ if(sb->fill) /* includes zero byte... */
98
+ {
99
+ if( (SIZE_MAX - sb->fill >= count) /* Avoid overflow. */
100
+ && (sb->size >= sb->fill+count || mpg123_grow_string(sb, sb->fill+count)) )
101
+ {
102
+ memcpy(sb->p+sb->fill-1, stuff+from, count);
103
+ sb->fill += count;
104
+ sb->p[sb->fill-1] = 0; /* Terminate! */
105
+ }
106
+ else return 0;
107
+ }
108
+ else
109
+ {
110
+ if( count < SIZE_MAX && mpg123_grow_string(sb, count+1) )
111
+ {
112
+ memcpy(sb->p, stuff+from, count);
113
+ sb->fill = count+1;
114
+ sb->p[sb->fill-1] = 0; /* Terminate! */
115
+ }
116
+ else return 0;
117
+ }
118
+ return 1;
119
+ }
120
+
121
+ int attribute_align_arg mpg123_set_substring(mpg123_string* sb, const char* stuff, size_t from, size_t count)
122
+ {
123
+ sb->fill = 0;
124
+ return mpg123_add_substring(sb, stuff, from, count);
125
+ }
126
+
127
+ int attribute_align_arg mpg123_set_string(mpg123_string* sb, const char* stuff)
128
+ {
129
+ sb->fill = 0;
130
+ return mpg123_add_string(sb, stuff);
131
+ }
132
+
133
+ size_t attribute_align_arg mpg123_strlen(mpg123_string *sb, int utf8)
134
+ {
135
+ size_t i;
136
+ size_t bytelen;
137
+
138
+ /* Notions of empty string. If there's only a single character, it has to be the trailing zero, and if the first is the trailing zero anyway, we got empty. */
139
+ if(sb->fill < 2 || sb->p[0] == 0) return 0;
140
+
141
+ /* Find the first non-null character from the back.
142
+ We already established that the first character is non-null
143
+ That at fill-2 has to be null, though. */
144
+ for(i=sb->fill-2; i>0; --i)
145
+ if(sb->p[i] != 0) break;
146
+
147
+ /* For simple byte strings, we are done now. */
148
+ bytelen = i+1;
149
+
150
+ if(!utf8) return bytelen;
151
+ else
152
+ {
153
+ /* Work out the actual count of UTF8 bytes.
154
+ This employs no particular encoding error checking. */
155
+ size_t len = 0;
156
+ for(i=0; i<bytelen; ++i)
157
+ {
158
+ /* Every byte that is not a continuation byte ( 0xc0 == 10xx xxxx ) stands for a character. */
159
+ if((sb->p[i] & 0xc0) != 0x80) len++;
160
+ }
161
+ return len;
162
+ }
163
+ }
@@ -0,0 +1,816 @@
1
+ /*
2
+ synth.c: The functions for synthesizing samples, at the end of decoding.
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, heavily dissected and rearranged by Thomas Orgis
7
+ */
8
+
9
+ #include "mpg123lib_intern.h"
10
+ #include "sample.h"
11
+ #include "debug.h"
12
+
13
+ /*
14
+ Part 1: All synth functions that produce signed short.
15
+ That is:
16
+ - synth_1to1 with cpu-specific variants (synth_1to1_i386, synth_1to1_i586 ...)
17
+ - synth_1to1_mono and synth_1to1_m2s; which use fr->synths.plain[r_1to1][f_16].
18
+ Nearly every decoder variant has it's own synth_1to1, while the mono conversion is shared.
19
+ */
20
+
21
+ #define SAMPLE_T short
22
+ #define WRITE_SAMPLE(samples,sum,clip) WRITE_SHORT_SAMPLE(samples,sum,clip)
23
+
24
+ /* Part 1a: All straight 1to1 decoding functions */
25
+ #define BLOCK 0x40 /* One decoding block is 64 samples. */
26
+
27
+ #define SYNTH_NAME synth_1to1
28
+ #include "synth.h"
29
+ #undef SYNTH_NAME
30
+
31
+ /* Mono-related synths; they wrap over _some_ synth_1to1. */
32
+ #define SYNTH_NAME fr->synths.plain[r_1to1][f_16]
33
+ #define MONO_NAME synth_1to1_mono
34
+ #define MONO2STEREO_NAME synth_1to1_m2s
35
+ #include "synth_mono.h"
36
+ #undef SYNTH_NAME
37
+ #undef MONO_NAME
38
+ #undef MONO2STEREO_NAME
39
+
40
+ /* Now we have possibly some special synth_1to1 ...
41
+ ... they produce signed short; the mono functions defined above work on the special synths, too. */
42
+
43
+ #ifdef OPT_GENERIC_DITHER
44
+ #define SYNTH_NAME synth_1to1_dither
45
+ /* We need the accurate sample writing... */
46
+ #undef WRITE_SAMPLE
47
+ #define WRITE_SAMPLE(samples,sum,clip) WRITE_SHORT_SAMPLE_ACCURATE(samples,sum,clip)
48
+
49
+ #define USE_DITHER
50
+ #include "synth.h"
51
+ #undef USE_DITHER
52
+ #undef SYNTH_NAME
53
+
54
+ #undef WRITE_SAMPLE
55
+ #define WRITE_SAMPLE(samples,sum,clip) WRITE_SHORT_SAMPLE(samples,sum,clip)
56
+
57
+ #endif
58
+
59
+ #ifdef OPT_X86
60
+ /* The i386-specific C code, here as short variant, later 8bit and float. */
61
+ #define NO_AUTOINCREMENT
62
+ #define SYNTH_NAME synth_1to1_i386
63
+ #include "synth.h"
64
+ #undef SYNTH_NAME
65
+ /* i386 uses the normal mono functions. */
66
+ #undef NO_AUTOINCREMENT
67
+ #endif
68
+
69
+ #undef BLOCK /* Following functions are so special that they don't need this. */
70
+
71
+ #ifdef OPT_I586
72
+ /* This is defined in assembler. */
73
+ int synth_1to1_i586_asm(real *bandPtr, int channel, unsigned char *out, unsigned char *buffs, int *bo, real *decwin);
74
+ /* This is just a hull to use the mpg123 handle. */
75
+ int synth_1to1_i586(real *bandPtr, int channel, mpg123_handle *fr, int final)
76
+ {
77
+ int ret;
78
+ if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
79
+
80
+ ret = synth_1to1_i586_asm(bandPtr, channel, fr->buffer.data+fr->buffer.fill, fr->rawbuffs, &fr->bo, fr->decwin);
81
+ if(final) fr->buffer.fill += 128;
82
+ return ret;
83
+ }
84
+ #endif
85
+
86
+ #ifdef OPT_I586_DITHER
87
+ /* This is defined in assembler. */
88
+ int synth_1to1_i586_asm_dither(real *bandPtr, int channel, unsigned char *out, unsigned char *buffs, int *bo, real *decwin, float *dithernoise);
89
+ /* This is just a hull to use the mpg123 handle. */
90
+ int synth_1to1_i586_dither(real *bandPtr, int channel, mpg123_handle *fr, int final)
91
+ {
92
+ int ret;
93
+ int bo_dither[2]; /* Temporary workaround? Could expand the asm code. */
94
+ if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
95
+
96
+ /* Applying this hack, to change the asm only bit by bit (adding dithernoise pointer). */
97
+ bo_dither[0] = fr->bo;
98
+ bo_dither[1] = fr->ditherindex;
99
+ ret = synth_1to1_i586_asm_dither(bandPtr, channel, fr->buffer.data+fr->buffer.fill, fr->rawbuffs, bo_dither, fr->decwin, fr->dithernoise);
100
+ fr->bo = bo_dither[0];
101
+ fr->ditherindex = bo_dither[1];
102
+
103
+ if(final) fr->buffer.fill += 128;
104
+ return ret;
105
+ }
106
+ #endif
107
+
108
+ #ifdef OPT_3DNOW
109
+ /* Those are defined in assembler. */
110
+ void do_equalizer_3dnow(real *bandPtr,int channel, real equalizer[2][32]);
111
+ int synth_1to1_3dnow_asm(real *bandPtr, int channel, unsigned char *out, unsigned char *buffs, int *bo, real *decwin);
112
+ /* This is just a hull to use the mpg123 handle. */
113
+ int synth_1to1_3dnow(real *bandPtr, int channel, mpg123_handle *fr, int final)
114
+ {
115
+ int ret;
116
+
117
+ if(fr->have_eq_settings) do_equalizer_3dnow(bandPtr,channel,fr->equalizer);
118
+
119
+ /* this is in asm, can be dither or not */
120
+ /* uh, is this return from pointer correct? */
121
+ ret = (int) synth_1to1_3dnow_asm(bandPtr, channel, fr->buffer.data+fr->buffer.fill, fr->rawbuffs, &fr->bo, fr->decwin);
122
+ if(final) fr->buffer.fill += 128;
123
+ return ret;
124
+ }
125
+ #endif
126
+
127
+ #ifdef OPT_MMX
128
+ /* This is defined in assembler. */
129
+ int synth_1to1_MMX(real *bandPtr, int channel, short *out, short *buffs, int *bo, float *decwins);
130
+ /* This is just a hull to use the mpg123 handle. */
131
+ int synth_1to1_mmx(real *bandPtr, int channel, mpg123_handle *fr, int final)
132
+ {
133
+ if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
134
+
135
+ /* in asm */
136
+ synth_1to1_MMX(bandPtr, channel, (short*) (fr->buffer.data+fr->buffer.fill), (short *) fr->rawbuffs, &fr->bo, fr->decwins);
137
+ if(final) fr->buffer.fill += 128;
138
+ return 0;
139
+ }
140
+ #endif
141
+
142
+ #ifdef OPT_SSE
143
+ #ifdef ACCURATE_ROUNDING
144
+ /* This is defined in assembler. */
145
+ int synth_1to1_sse_accurate_asm(real *window, real *b0, short *samples, int bo1);
146
+ int synth_1to1_s_sse_accurate_asm(real *window, real *b0l, real *b0r, short *samples, int bo1);
147
+ void dct64_real_sse(real *out0, real *out1, real *samples);
148
+ /* This is just a hull to use the mpg123 handle. */
149
+ int synth_1to1_sse(real *bandPtr,int channel, mpg123_handle *fr, int final)
150
+ {
151
+ short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
152
+ real *b0, **buf;
153
+ int clip;
154
+ int bo1;
155
+
156
+ if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
157
+
158
+ if(!channel)
159
+ {
160
+ fr->bo--;
161
+ fr->bo &= 0xf;
162
+ buf = fr->real_buffs[0];
163
+ }
164
+ else
165
+ {
166
+ samples++;
167
+ buf = fr->real_buffs[1];
168
+ }
169
+
170
+ if(fr->bo & 0x1)
171
+ {
172
+ b0 = buf[0];
173
+ bo1 = fr->bo;
174
+ dct64_real_sse(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
175
+ }
176
+ else
177
+ {
178
+ b0 = buf[1];
179
+ bo1 = fr->bo+1;
180
+ dct64_real_sse(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
181
+ }
182
+
183
+ clip = synth_1to1_sse_accurate_asm(fr->decwin, b0, samples, bo1);
184
+
185
+ if(final) fr->buffer.fill += 128;
186
+
187
+ return clip;
188
+ }
189
+
190
+ int synth_1to1_stereo_sse(real *bandPtr_l, real *bandPtr_r, mpg123_handle *fr)
191
+ {
192
+ short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
193
+
194
+ real *b0l, *b0r, **bufl, **bufr;
195
+ int bo1;
196
+ int clip;
197
+
198
+ if(fr->have_eq_settings)
199
+ {
200
+ do_equalizer(bandPtr_l,0,fr->equalizer);
201
+ do_equalizer(bandPtr_r,1,fr->equalizer);
202
+ }
203
+
204
+ fr->bo--;
205
+ fr->bo &= 0xf;
206
+ bufl = fr->real_buffs[0];
207
+ bufr = fr->real_buffs[1];
208
+
209
+ if(fr->bo & 0x1)
210
+ {
211
+ b0l = bufl[0];
212
+ b0r = bufr[0];
213
+ bo1 = fr->bo;
214
+ dct64_real_sse(bufl[1]+((fr->bo+1)&0xf),bufl[0]+fr->bo,bandPtr_l);
215
+ dct64_real_sse(bufr[1]+((fr->bo+1)&0xf),bufr[0]+fr->bo,bandPtr_r);
216
+ }
217
+ else
218
+ {
219
+ b0l = bufl[1];
220
+ b0r = bufr[1];
221
+ bo1 = fr->bo+1;
222
+ dct64_real_sse(bufl[0]+fr->bo,bufl[1]+fr->bo+1,bandPtr_l);
223
+ dct64_real_sse(bufr[0]+fr->bo,bufr[1]+fr->bo+1,bandPtr_r);
224
+ }
225
+
226
+ clip = synth_1to1_s_sse_accurate_asm(fr->decwin, b0l, b0r, samples, bo1);
227
+
228
+ fr->buffer.fill += 128;
229
+
230
+ return clip;
231
+ }
232
+ #else
233
+ /* This is defined in assembler. */
234
+ void synth_1to1_sse_asm(real *bandPtr, int channel, short *samples, short *buffs, int *bo, real *decwin);
235
+ /* This is just a hull to use the mpg123 handle. */
236
+ int synth_1to1_sse(real *bandPtr, int channel, mpg123_handle *fr, int final)
237
+ {
238
+ if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
239
+
240
+ synth_1to1_sse_asm(bandPtr, channel, (short*) (fr->buffer.data+fr->buffer.fill), (short *) fr->rawbuffs, &fr->bo, fr->decwins);
241
+ if(final) fr->buffer.fill += 128;
242
+ return 0;
243
+ }
244
+ #endif
245
+ #endif
246
+
247
+ #ifdef OPT_3DNOWEXT
248
+ /* This is defined in assembler. */
249
+ void synth_1to1_3dnowext_asm(real *bandPtr, int channel, short *samples, short *buffs, int *bo, real *decwin);
250
+ /* This is just a hull to use the mpg123 handle. */
251
+ int synth_1to1_3dnowext(real *bandPtr, int channel, mpg123_handle *fr, int final)
252
+ {
253
+ if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
254
+
255
+ synth_1to1_3dnowext_asm(bandPtr, channel, (short*) (fr->buffer.data+fr->buffer.fill), (short *) fr->rawbuffs, &fr->bo, fr->decwins);
256
+ if(final) fr->buffer.fill += 128;
257
+ return 0;
258
+ }
259
+ #endif
260
+
261
+ #ifdef OPT_X86_64
262
+ #ifdef ACCURATE_ROUNDING
263
+ /* Assembler routines. */
264
+ int synth_1to1_x86_64_accurate_asm(real *window, real *b0, short *samples, int bo1);
265
+ int synth_1to1_s_x86_64_accurate_asm(real *window, real *b0l, real *b0r, short *samples, int bo1);
266
+ void dct64_real_x86_64(real *out0, real *out1, real *samples);
267
+ /* Hull for C mpg123 API */
268
+ int synth_1to1_x86_64(real *bandPtr,int channel, mpg123_handle *fr, int final)
269
+ {
270
+ short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
271
+
272
+ real *b0, **buf;
273
+ int bo1;
274
+ int clip;
275
+
276
+ if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
277
+
278
+ if(!channel)
279
+ {
280
+ fr->bo--;
281
+ fr->bo &= 0xf;
282
+ buf = fr->real_buffs[0];
283
+ }
284
+ else
285
+ {
286
+ samples++;
287
+ buf = fr->real_buffs[1];
288
+ }
289
+
290
+ if(fr->bo & 0x1)
291
+ {
292
+ b0 = buf[0];
293
+ bo1 = fr->bo;
294
+ dct64_real_x86_64(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
295
+ }
296
+ else
297
+ {
298
+ b0 = buf[1];
299
+ bo1 = fr->bo+1;
300
+ dct64_real_x86_64(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
301
+ }
302
+
303
+ clip = synth_1to1_x86_64_accurate_asm(fr->decwin, b0, samples, bo1);
304
+
305
+ if(final) fr->buffer.fill += 128;
306
+
307
+ return clip;
308
+ }
309
+
310
+ int synth_1to1_stereo_x86_64(real *bandPtr_l, real *bandPtr_r, mpg123_handle *fr)
311
+ {
312
+ short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
313
+
314
+ real *b0l, *b0r, **bufl, **bufr;
315
+ int bo1;
316
+ int clip;
317
+
318
+ if(fr->have_eq_settings)
319
+ {
320
+ do_equalizer(bandPtr_l,0,fr->equalizer);
321
+ do_equalizer(bandPtr_r,1,fr->equalizer);
322
+ }
323
+
324
+ fr->bo--;
325
+ fr->bo &= 0xf;
326
+ bufl = fr->real_buffs[0];
327
+ bufr = fr->real_buffs[1];
328
+
329
+ if(fr->bo & 0x1)
330
+ {
331
+ b0l = bufl[0];
332
+ b0r = bufr[0];
333
+ bo1 = fr->bo;
334
+ dct64_real_x86_64(bufl[1]+((fr->bo+1)&0xf),bufl[0]+fr->bo,bandPtr_l);
335
+ dct64_real_x86_64(bufr[1]+((fr->bo+1)&0xf),bufr[0]+fr->bo,bandPtr_r);
336
+ }
337
+ else
338
+ {
339
+ b0l = bufl[1];
340
+ b0r = bufr[1];
341
+ bo1 = fr->bo+1;
342
+ dct64_real_x86_64(bufl[0]+fr->bo,bufl[1]+fr->bo+1,bandPtr_l);
343
+ dct64_real_x86_64(bufr[0]+fr->bo,bufr[1]+fr->bo+1,bandPtr_r);
344
+ }
345
+
346
+ clip = synth_1to1_s_x86_64_accurate_asm(fr->decwin, b0l, b0r, samples, bo1);
347
+
348
+ fr->buffer.fill += 128;
349
+
350
+ return clip;
351
+ }
352
+ #else
353
+ /* This is defined in assembler. */
354
+ int synth_1to1_x86_64_asm(short *window, short *b0, short *samples, int bo1);
355
+ int synth_1to1_s_x86_64_asm(short *window, short *b0l, short *b0r, short *samples, int bo1);
356
+ void dct64_x86_64(short *out0, short *out1, real *samples);
357
+ /* This is just a hull to use the mpg123 handle. */
358
+ int synth_1to1_x86_64(real *bandPtr,int channel, mpg123_handle *fr, int final)
359
+ {
360
+ short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
361
+ short *b0, **buf;
362
+ int clip;
363
+ int bo1;
364
+
365
+ if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
366
+
367
+ if(!channel)
368
+ {
369
+ fr->bo--;
370
+ fr->bo &= 0xf;
371
+ buf = fr->short_buffs[0];
372
+ }
373
+ else
374
+ {
375
+ samples++;
376
+ buf = fr->short_buffs[1];
377
+ }
378
+
379
+ if(fr->bo & 0x1)
380
+ {
381
+ b0 = buf[0];
382
+ bo1 = fr->bo;
383
+ dct64_x86_64(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
384
+ }
385
+ else
386
+ {
387
+ b0 = buf[1];
388
+ bo1 = fr->bo+1;
389
+ dct64_x86_64(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
390
+ }
391
+
392
+ clip = synth_1to1_x86_64_asm((short *)fr->decwins, b0, samples, bo1);
393
+
394
+ if(final) fr->buffer.fill += 128;
395
+
396
+ return clip;
397
+ }
398
+
399
+ int synth_1to1_stereo_x86_64(real *bandPtr_l,real *bandPtr_r, mpg123_handle *fr)
400
+ {
401
+ short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
402
+ short *b0l, *b0r, **bufl, **bufr;
403
+ int clip;
404
+ int bo1;
405
+
406
+ if(fr->have_eq_settings)
407
+ {
408
+ do_equalizer(bandPtr_l,0,fr->equalizer);
409
+ do_equalizer(bandPtr_r,1,fr->equalizer);
410
+ }
411
+
412
+ fr->bo--;
413
+ fr->bo &= 0xf;
414
+ bufl = fr->short_buffs[0];
415
+ bufr = fr->short_buffs[1];
416
+
417
+ if(fr->bo & 0x1)
418
+ {
419
+ b0l = bufl[0];
420
+ b0r = bufr[0];
421
+ bo1 = fr->bo;
422
+ dct64_x86_64(bufl[1]+((fr->bo+1)&0xf),bufl[0]+fr->bo,bandPtr_l);
423
+ dct64_x86_64(bufr[1]+((fr->bo+1)&0xf),bufr[0]+fr->bo,bandPtr_r);
424
+ }
425
+ else
426
+ {
427
+ b0l = bufl[1];
428
+ b0r = bufr[1];
429
+ bo1 = fr->bo+1;
430
+ dct64_x86_64(bufl[0]+fr->bo,bufl[1]+fr->bo+1,bandPtr_l);
431
+ dct64_x86_64(bufr[0]+fr->bo,bufr[1]+fr->bo+1,bandPtr_r);
432
+ }
433
+
434
+ clip = synth_1to1_s_x86_64_asm((short *)fr->decwins, b0l, b0r, samples, bo1);
435
+
436
+ fr->buffer.fill += 128;
437
+
438
+ return clip;
439
+ }
440
+ #endif
441
+ #endif
442
+
443
+ #ifdef OPT_ARM
444
+ #ifdef ACCURATE_ROUNDING
445
+ /* Assembler routines. */
446
+ int synth_1to1_arm_accurate_asm(real *window, real *b0, short *samples, int bo1);
447
+ /* Hull for C mpg123 API */
448
+ int synth_1to1_arm(real *bandPtr,int channel, mpg123_handle *fr, int final)
449
+ {
450
+ short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
451
+
452
+ real *b0, **buf;
453
+ int bo1;
454
+ int clip;
455
+
456
+ if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
457
+
458
+ if(!channel)
459
+ {
460
+ fr->bo--;
461
+ fr->bo &= 0xf;
462
+ buf = fr->real_buffs[0];
463
+ }
464
+ else
465
+ {
466
+ samples++;
467
+ buf = fr->real_buffs[1];
468
+ }
469
+
470
+ if(fr->bo & 0x1)
471
+ {
472
+ b0 = buf[0];
473
+ bo1 = fr->bo;
474
+ dct64(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
475
+ }
476
+ else
477
+ {
478
+ b0 = buf[1];
479
+ bo1 = fr->bo+1;
480
+ dct64(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
481
+ }
482
+
483
+ clip = synth_1to1_arm_accurate_asm(fr->decwin, b0, samples, bo1);
484
+
485
+ if(final) fr->buffer.fill += 128;
486
+
487
+ return clip;
488
+ }
489
+ #else
490
+ /* Assembler routines. */
491
+ int synth_1to1_arm_asm(real *window, real *b0, short *samples, int bo1);
492
+ /* Hull for C mpg123 API */
493
+ int synth_1to1_arm(real *bandPtr,int channel, mpg123_handle *fr, int final)
494
+ {
495
+ short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
496
+
497
+ real *b0, **buf;
498
+ int bo1;
499
+ int clip;
500
+
501
+ if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
502
+
503
+ if(!channel)
504
+ {
505
+ fr->bo--;
506
+ fr->bo &= 0xf;
507
+ buf = fr->real_buffs[0];
508
+ }
509
+ else
510
+ {
511
+ samples++;
512
+ buf = fr->real_buffs[1];
513
+ }
514
+
515
+ if(fr->bo & 0x1)
516
+ {
517
+ b0 = buf[0];
518
+ bo1 = fr->bo;
519
+ dct64(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
520
+ }
521
+ else
522
+ {
523
+ b0 = buf[1];
524
+ bo1 = fr->bo+1;
525
+ dct64(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
526
+ }
527
+
528
+ clip = synth_1to1_arm_asm(fr->decwin, b0, samples, bo1);
529
+
530
+ if(final) fr->buffer.fill += 128;
531
+
532
+ return clip;
533
+ }
534
+ #endif
535
+ #endif
536
+
537
+ #ifdef OPT_NEON
538
+ #ifdef ACCURATE_ROUNDING
539
+ /* This is defined in assembler. */
540
+ int synth_1to1_neon_accurate_asm(real *window, real *b0, short *samples, int bo1);
541
+ int synth_1to1_s_neon_accurate_asm(real *window, real *b0l, real *b0r, short *samples, int bo1);
542
+ void dct64_real_neon(real *out0, real *out1, real *samples);
543
+ /* Hull for C mpg123 API */
544
+ int synth_1to1_neon(real *bandPtr,int channel, mpg123_handle *fr, int final)
545
+ {
546
+ short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
547
+
548
+ real *b0, **buf;
549
+ int bo1;
550
+ int clip;
551
+
552
+ if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
553
+
554
+ if(!channel)
555
+ {
556
+ fr->bo--;
557
+ fr->bo &= 0xf;
558
+ buf = fr->real_buffs[0];
559
+ }
560
+ else
561
+ {
562
+ samples++;
563
+ buf = fr->real_buffs[1];
564
+ }
565
+
566
+ if(fr->bo & 0x1)
567
+ {
568
+ b0 = buf[0];
569
+ bo1 = fr->bo;
570
+ dct64_real_neon(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
571
+ }
572
+ else
573
+ {
574
+ b0 = buf[1];
575
+ bo1 = fr->bo+1;
576
+ dct64_real_neon(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
577
+ }
578
+
579
+ clip = synth_1to1_neon_accurate_asm(fr->decwin, b0, samples, bo1);
580
+
581
+ if(final) fr->buffer.fill += 128;
582
+
583
+ return clip;
584
+ }
585
+
586
+ int synth_1to1_stereo_neon(real *bandPtr_l, real *bandPtr_r, mpg123_handle *fr)
587
+ {
588
+ short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
589
+
590
+ real *b0l, *b0r, **bufl, **bufr;
591
+ int bo1;
592
+ int clip;
593
+
594
+ if(fr->have_eq_settings)
595
+ {
596
+ do_equalizer(bandPtr_l,0,fr->equalizer);
597
+ do_equalizer(bandPtr_r,1,fr->equalizer);
598
+ }
599
+
600
+ fr->bo--;
601
+ fr->bo &= 0xf;
602
+ bufl = fr->real_buffs[0];
603
+ bufr = fr->real_buffs[1];
604
+
605
+ if(fr->bo & 0x1)
606
+ {
607
+ b0l = bufl[0];
608
+ b0r = bufr[0];
609
+ bo1 = fr->bo;
610
+ dct64_real_neon(bufl[1]+((fr->bo+1)&0xf),bufl[0]+fr->bo,bandPtr_l);
611
+ dct64_real_neon(bufr[1]+((fr->bo+1)&0xf),bufr[0]+fr->bo,bandPtr_r);
612
+ }
613
+ else
614
+ {
615
+ b0l = bufl[1];
616
+ b0r = bufr[1];
617
+ bo1 = fr->bo+1;
618
+ dct64_real_neon(bufl[0]+fr->bo,bufl[1]+fr->bo+1,bandPtr_l);
619
+ dct64_real_neon(bufr[0]+fr->bo,bufr[1]+fr->bo+1,bandPtr_r);
620
+ }
621
+
622
+ clip = synth_1to1_s_neon_accurate_asm(fr->decwin, b0l, b0r, samples, bo1);
623
+
624
+ fr->buffer.fill += 128;
625
+
626
+ return clip;
627
+ }
628
+ #else
629
+ /* This is defined in assembler. */
630
+ int synth_1to1_neon_asm(short *window, short *b0, short *samples, int bo1);
631
+ int synth_1to1_s_neon_asm(short *window, short *b0l, short *b0r, short *samples, int bo1);
632
+ void dct64_neon(short *out0, short *out1, real *samples);
633
+ /* Hull for C mpg123 API */
634
+ int synth_1to1_neon(real *bandPtr,int channel, mpg123_handle *fr, int final)
635
+ {
636
+ short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
637
+ short *b0, **buf;
638
+ int clip;
639
+ int bo1;
640
+
641
+ if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
642
+
643
+ if(!channel)
644
+ {
645
+ fr->bo--;
646
+ fr->bo &= 0xf;
647
+ buf = fr->short_buffs[0];
648
+ }
649
+ else
650
+ {
651
+ samples++;
652
+ buf = fr->short_buffs[1];
653
+ }
654
+
655
+ if(fr->bo & 0x1)
656
+ {
657
+ b0 = buf[0];
658
+ bo1 = fr->bo;
659
+ dct64_neon(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
660
+ }
661
+ else
662
+ {
663
+ b0 = buf[1];
664
+ bo1 = fr->bo+1;
665
+ dct64_neon(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
666
+ }
667
+
668
+ clip = synth_1to1_neon_asm((short *)fr->decwins, b0, samples, bo1);
669
+
670
+ if(final) fr->buffer.fill += 128;
671
+
672
+ return clip;
673
+ }
674
+
675
+ int synth_1to1_stereo_neon(real *bandPtr_l,real *bandPtr_r, mpg123_handle *fr)
676
+ {
677
+ short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
678
+ short *b0l, *b0r, **bufl, **bufr;
679
+ int clip;
680
+ int bo1;
681
+
682
+ if(fr->have_eq_settings)
683
+ {
684
+ do_equalizer(bandPtr_l,0,fr->equalizer);
685
+ do_equalizer(bandPtr_r,1,fr->equalizer);
686
+ }
687
+
688
+ fr->bo--;
689
+ fr->bo &= 0xf;
690
+ bufl = fr->short_buffs[0];
691
+ bufr = fr->short_buffs[1];
692
+
693
+ if(fr->bo & 0x1)
694
+ {
695
+ b0l = bufl[0];
696
+ b0r = bufr[0];
697
+ bo1 = fr->bo;
698
+ dct64_neon(bufl[1]+((fr->bo+1)&0xf),bufl[0]+fr->bo,bandPtr_l);
699
+ dct64_neon(bufr[1]+((fr->bo+1)&0xf),bufr[0]+fr->bo,bandPtr_r);
700
+ }
701
+ else
702
+ {
703
+ b0l = bufl[1];
704
+ b0r = bufr[1];
705
+ bo1 = fr->bo+1;
706
+ dct64_neon(bufl[0]+fr->bo,bufl[1]+fr->bo+1,bandPtr_l);
707
+ dct64_neon(bufr[0]+fr->bo,bufr[1]+fr->bo+1,bandPtr_r);
708
+ }
709
+
710
+ clip = synth_1to1_s_neon_asm((short *)fr->decwins, b0l, b0r, samples, bo1);
711
+
712
+ fr->buffer.fill += 128;
713
+
714
+ return clip;
715
+ }
716
+ #endif
717
+ #endif
718
+
719
+ #ifndef NO_DOWNSAMPLE
720
+
721
+ /*
722
+ Part 1b: 2to1 synth.
723
+ Only generic and i386 functions this time.
724
+ */
725
+ #define BLOCK 0x20 /* One decoding block is 32 samples. */
726
+
727
+ #define SYNTH_NAME synth_2to1
728
+ #include "synth.h"
729
+ #undef SYNTH_NAME
730
+
731
+ #ifdef OPT_DITHER /* Used for generic_dither and as fallback for i586_dither. */
732
+ #define SYNTH_NAME synth_2to1_dither
733
+ #define USE_DITHER
734
+ #include "synth.h"
735
+ #undef USE_DITHER
736
+ #undef SYNTH_NAME
737
+ #endif
738
+
739
+ #define SYNTH_NAME fr->synths.plain[r_2to1][f_16]
740
+ #define MONO_NAME synth_2to1_mono
741
+ #define MONO2STEREO_NAME synth_2to1_m2s
742
+ #include "synth_mono.h"
743
+ #undef SYNTH_NAME
744
+ #undef MONO_NAME
745
+ #undef MONO2STEREO_NAME
746
+
747
+ #ifdef OPT_X86
748
+ #define NO_AUTOINCREMENT
749
+ #define SYNTH_NAME synth_2to1_i386
750
+ #include "synth.h"
751
+ #undef SYNTH_NAME
752
+ /* i386 uses the normal mono functions. */
753
+ #undef NO_AUTOINCREMENT
754
+ #endif
755
+
756
+ #undef BLOCK
757
+
758
+ /*
759
+ Part 1c: 4to1 synth.
760
+ Same procedure as above...
761
+ */
762
+ #define BLOCK 0x10 /* One decoding block is 16 samples. */
763
+
764
+ #define SYNTH_NAME synth_4to1
765
+ #include "synth.h"
766
+ #undef SYNTH_NAME
767
+
768
+ #ifdef OPT_DITHER
769
+ #define SYNTH_NAME synth_4to1_dither
770
+ #define USE_DITHER
771
+ #include "synth.h"
772
+ #undef USE_DITHER
773
+ #undef SYNTH_NAME
774
+ #endif
775
+
776
+ #define SYNTH_NAME fr->synths.plain[r_4to1][f_16] /* This is just for the _i386 one... gotta check if it is really useful... */
777
+ #define MONO_NAME synth_4to1_mono
778
+ #define MONO2STEREO_NAME synth_4to1_m2s
779
+ #include "synth_mono.h"
780
+ #undef SYNTH_NAME
781
+ #undef MONO_NAME
782
+ #undef MONO2STEREO_NAME
783
+
784
+ #ifdef OPT_X86
785
+ #define NO_AUTOINCREMENT
786
+ #define SYNTH_NAME synth_4to1_i386
787
+ #include "synth.h"
788
+ #undef SYNTH_NAME
789
+ /* i386 uses the normal mono functions. */
790
+ #undef NO_AUTOINCREMENT
791
+ #endif
792
+
793
+ #undef BLOCK
794
+
795
+ #endif /* NO_DOWNSAMPLE */
796
+
797
+ #ifndef NO_NTOM
798
+ /*
799
+ Part 1d: ntom synth.
800
+ Same procedure as above... Just no extra play anymore, straight synth that uses the plain dct64.
801
+ */
802
+
803
+ /* These are all in one header, there's no flexibility to gain. */
804
+ #define SYNTH_NAME synth_ntom
805
+ #define MONO_NAME synth_ntom_mono
806
+ #define MONO2STEREO_NAME synth_ntom_m2s
807
+ #include "synth_ntom.h"
808
+ #undef SYNTH_NAME
809
+ #undef MONO_NAME
810
+ #undef MONO2STEREO_NAME
811
+
812
+ #endif
813
+
814
+ /* Done with short output. */
815
+ #undef SAMPLE_T
816
+ #undef WRITE_SAMPLE