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,6 @@
1
+ #include "mangle.h"
2
+ #define MPL_DCT64 ASM_NAME(dct64_3dnowext)
3
+ #define SYNTH_NAME ASM_NAME(synth_1to1_3dnowext_asm)
4
+ #include "synth_sse3d.h"
5
+
6
+ NONEXEC_STACK
@@ -0,0 +1,142 @@
1
+ /*
2
+ synth_8bit.c: The functions for synthesizing 8bit 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 2: All synth functions that produce 8bit output.
15
+ What we need is just a special WRITE_SAMPLE. For the generic and i386 functions, that is.
16
+ For the rather optimized synth_1to1, we will need the postprocessing 8bit converters from synth_8bit.h .
17
+ */
18
+
19
+ #define SAMPLE_T unsigned char
20
+ #define WRITE_SAMPLE(samples,sum,clip) WRITE_8BIT_SAMPLE(samples,sum,clip)
21
+
22
+ /* Part 2a: All straight 1to1 decoding functions */
23
+ #define BLOCK 0x40 /* One decoding block is 64 samples. */
24
+
25
+ #define SYNTH_NAME synth_1to1_8bit
26
+ #include "synth.h"
27
+ #undef SYNTH_NAME
28
+
29
+ /* Mono-related synths; they wrap over _some_ synth_1to1_8bit (could be generic, could be i386). */
30
+ #define SYNTH_NAME fr->synths.plain[r_1to1][f_8]
31
+ #define MONO_NAME synth_1to1_8bit_mono
32
+ #define MONO2STEREO_NAME synth_1to1_8bit_m2s
33
+ #include "synth_mono.h"
34
+ #undef SYNTH_NAME
35
+ #undef MONO_NAME
36
+ #undef MONO2STEREO_NAME
37
+
38
+ #ifdef OPT_X86
39
+ #define NO_AUTOINCREMENT
40
+ #define SYNTH_NAME synth_1to1_8bit_i386
41
+ #include "synth.h"
42
+ #undef SYNTH_NAME
43
+ /* i386 uses the normal mono functions. */
44
+ #undef NO_AUTOINCREMENT
45
+ #endif
46
+
47
+ /* But now, we need functions that take the 16bit output of optimized synth_1to1 and convert it.
48
+ I suppose that is still faster than dropping the optimization altogether! */
49
+
50
+ #define BASE_SYNTH_NAME fr->synths.plain[r_1to1][f_16]
51
+ #define SYNTH_NAME synth_1to1_8bit_wrap
52
+ #define MONO_NAME synth_1to1_8bit_wrap_mono
53
+ #define MONO2STEREO_NAME synth_1to1_8bit_wrap_m2s
54
+ #include "synth_8bit.h"
55
+ #undef BASE_SYNTH_NAME
56
+ #undef SYNTH_NAME
57
+ #undef MONO_NAME
58
+ #undef MONO2STEREO_NAME
59
+
60
+ #undef BLOCK
61
+
62
+ #ifndef NO_DOWNSAMPLE
63
+
64
+ /*
65
+ Part 2b: 2to1 synth. Only generic and i386.
66
+ */
67
+ #define BLOCK 0x20 /* One decoding block is 32 samples. */
68
+
69
+ #define SYNTH_NAME synth_2to1_8bit
70
+ #include "synth.h"
71
+ #undef SYNTH_NAME
72
+
73
+ /* Mono-related synths; they wrap over _some_ synth_2to1_8bit (could be generic, could be i386). */
74
+ #define SYNTH_NAME fr->synths.plain[r_2to1][f_8]
75
+ #define MONO_NAME synth_2to1_8bit_mono
76
+ #define MONO2STEREO_NAME synth_2to1_8bit_m2s
77
+ #include "synth_mono.h"
78
+ #undef SYNTH_NAME
79
+ #undef MONO_NAME
80
+ #undef MONO2STEREO_NAME
81
+
82
+ #ifdef OPT_X86
83
+ #define NO_AUTOINCREMENT
84
+ #define SYNTH_NAME synth_2to1_8bit_i386
85
+ #include "synth.h"
86
+ #undef SYNTH_NAME
87
+ /* i386 uses the normal mono functions. */
88
+ #undef NO_AUTOINCREMENT
89
+ #endif
90
+
91
+ #undef BLOCK
92
+
93
+ /*
94
+ Part 2c: 4to1 synth. Only generic and i386.
95
+ */
96
+ #define BLOCK 0x10 /* One decoding block is 16 samples. */
97
+
98
+ #define SYNTH_NAME synth_4to1_8bit
99
+ #include "synth.h"
100
+ #undef SYNTH_NAME
101
+
102
+ /* Mono-related synths; they wrap over _some_ synth_4to1_8bit (could be generic, could be i386). */
103
+ #define SYNTH_NAME fr->synths.plain[r_4to1][f_8]
104
+ #define MONO_NAME synth_4to1_8bit_mono
105
+ #define MONO2STEREO_NAME synth_4to1_8bit_m2s
106
+ #include "synth_mono.h"
107
+ #undef SYNTH_NAME
108
+ #undef MONO_NAME
109
+ #undef MONO2STEREO_NAME
110
+
111
+ #ifdef OPT_X86
112
+ #define NO_AUTOINCREMENT
113
+ #define SYNTH_NAME synth_4to1_8bit_i386
114
+ #include "synth.h"
115
+ #undef SYNTH_NAME
116
+ /* i386 uses the normal mono functions. */
117
+ #undef NO_AUTOINCREMENT
118
+ #endif
119
+
120
+ #undef BLOCK
121
+
122
+ #endif /* NO_DOWNSAMPLE */
123
+
124
+ #ifndef NO_NTOM
125
+ /*
126
+ Part 2d: ntom synth.
127
+ Same procedure as above... Just no extra play anymore, straight synth that may use an optimized dct64.
128
+ */
129
+
130
+ /* These are all in one header, there's no flexibility to gain. */
131
+ #define SYNTH_NAME synth_ntom_8bit
132
+ #define MONO_NAME synth_ntom_8bit_mono
133
+ #define MONO2STEREO_NAME synth_ntom_8bit_m2s
134
+ #include "synth_ntom.h"
135
+ #undef SYNTH_NAME
136
+ #undef MONO_NAME
137
+ #undef MONO2STEREO_NAME
138
+
139
+ #endif
140
+
141
+ #undef SAMPLE_T
142
+ #undef WRITE_SAMPLE
@@ -0,0 +1,86 @@
1
+ /*
2
+ synth_8bit.h: Wrappers over optimized synth_xtoy for converting signed short to 8bit.
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, code generalized to the wrapper by Thomas Orgis
7
+
8
+ Only variable is the BLOCK size to choose 1to1, 2to1 or 4to1.
9
+ Oh, and the names: BASE_SYNTH_NAME, SYNTH_NAME, MONO_NAME, MONO2STEREO_NAME
10
+ (p.ex. opt_synth_1to1(fr), synth_1to1_8bit, synth_1to1_8bit_mono, ...).
11
+ */
12
+
13
+ int SYNTH_NAME(real *bandPtr, int channel, mpg123_handle *fr, int final)
14
+ {
15
+ short samples_tmp[BLOCK];
16
+ short *tmp1 = samples_tmp + channel;
17
+ int i,ret;
18
+
19
+ unsigned char *samples = fr->buffer.data;
20
+ int pnt = fr->buffer.fill;
21
+ fr->buffer.data = (unsigned char*) samples_tmp;
22
+ fr->buffer.fill = 0;
23
+ ret = BASE_SYNTH_NAME(bandPtr, channel, fr , 0);
24
+ fr->buffer.data = samples;
25
+
26
+ samples += channel + pnt;
27
+ for(i=0;i<(BLOCK/2);i++)
28
+ {
29
+ *samples = fr->conv16to8[*tmp1>>AUSHIFT];
30
+ samples += 2;
31
+ tmp1 += 2;
32
+ }
33
+ fr->buffer.fill = pnt + (final ? BLOCK : 0 );
34
+
35
+ return ret;
36
+ }
37
+
38
+ int MONO_NAME(real *bandPtr, mpg123_handle *fr)
39
+ {
40
+ short samples_tmp[BLOCK];
41
+ short *tmp1 = samples_tmp;
42
+ int i,ret;
43
+
44
+ unsigned char *samples = fr->buffer.data;
45
+ int pnt = fr->buffer.fill;
46
+ fr->buffer.data = (unsigned char*) samples_tmp;
47
+ fr->buffer.fill = 0;
48
+ ret = BASE_SYNTH_NAME(bandPtr, 0, fr, 0);
49
+ fr->buffer.data = samples;
50
+
51
+ samples += pnt;
52
+ for(i=0;i<(BLOCK/2);i++)
53
+ {
54
+ *samples++ = fr->conv16to8[*tmp1>>AUSHIFT];
55
+ tmp1+=2;
56
+ }
57
+ fr->buffer.fill = pnt + BLOCK/2;
58
+
59
+ return ret;
60
+ }
61
+
62
+ int MONO2STEREO_NAME(real *bandPtr, mpg123_handle *fr)
63
+ {
64
+ short samples_tmp[BLOCK];
65
+ short *tmp1 = samples_tmp;
66
+ int i,ret;
67
+
68
+ unsigned char *samples = fr->buffer.data;
69
+ int pnt = fr->buffer.fill;
70
+ fr->buffer.data = (unsigned char*) samples_tmp;
71
+ fr->buffer.fill = 0;
72
+ ret = BASE_SYNTH_NAME(bandPtr, 0, fr, 0);
73
+ fr->buffer.data = samples;
74
+
75
+ samples += pnt;
76
+ for(i=0;i<(BLOCK/2);i++)
77
+ {
78
+ *samples++ = fr->conv16to8[*tmp1>>AUSHIFT];
79
+ *samples++ = fr->conv16to8[*tmp1>>AUSHIFT];
80
+ tmp1 += 2;
81
+ }
82
+ fr->buffer.fill = pnt + BLOCK;
83
+
84
+ return ret;
85
+ }
86
+
@@ -0,0 +1,1057 @@
1
+ /*
2
+ decode.c: decoding samples...
3
+
4
+ copyright 1995-2009 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
+ altivec optimization by tmkk
8
+ */
9
+
10
+ #include "mpg123lib_intern.h"
11
+
12
+ #ifndef __APPLE__
13
+ #include <altivec.h>
14
+ #endif
15
+
16
+ /* A macro for normal synth functions */
17
+ #define SYNTH_ALTIVEC(B0STEP) \
18
+ v1 = vec_ld(0,window); \
19
+ v2 = vec_ld(16,window); \
20
+ v3 = vec_ld(32,window); \
21
+ v4 = vec_ld(48,window); \
22
+ v5 = vec_ld(64,window); \
23
+ v1 = vec_perm(v1,v2,vperm1); \
24
+ v6 = vec_ld(0,b0); \
25
+ v2 = vec_perm(v2,v3,vperm1); \
26
+ v7 = vec_ld(16,b0); \
27
+ v3 = vec_perm(v3,v4,vperm1); \
28
+ v8 = vec_ld(32,b0); \
29
+ v4 = vec_perm(v4,v5,vperm1); \
30
+ v9 = vec_ld(48,b0); \
31
+ \
32
+ vsum = vec_madd(v1,v6,vzero); \
33
+ vsum = vec_madd(v2,v7,vsum); \
34
+ vsum = vec_madd(v3,v8,vsum); \
35
+ vsum = vec_madd(v4,v9,vsum); \
36
+ \
37
+ window += 32; \
38
+ b0 += B0STEP; \
39
+ \
40
+ v1 = vec_ld(0,window); \
41
+ v2 = vec_ld(16,window); \
42
+ v3 = vec_ld(32,window); \
43
+ v4 = vec_ld(48,window); \
44
+ v5 = vec_ld(64,window); \
45
+ v1 = vec_perm(v1,v2,vperm1); \
46
+ v6 = vec_ld(0,b0); \
47
+ v2 = vec_perm(v2,v3,vperm1); \
48
+ v7 = vec_ld(16,b0); \
49
+ v3 = vec_perm(v3,v4,vperm1); \
50
+ v8 = vec_ld(32,b0); \
51
+ v4 = vec_perm(v4,v5,vperm1); \
52
+ v9 = vec_ld(48,b0); \
53
+ \
54
+ vsum2 = vec_madd(v1,v6,vzero); \
55
+ vsum2 = vec_madd(v2,v7,vsum2); \
56
+ vsum2 = vec_madd(v3,v8,vsum2); \
57
+ vsum2 = vec_madd(v4,v9,vsum2); \
58
+ \
59
+ window += 32; \
60
+ b0 += B0STEP; \
61
+ \
62
+ v1 = vec_ld(0,window); \
63
+ v2 = vec_ld(16,window); \
64
+ v3 = vec_ld(32,window); \
65
+ v4 = vec_ld(48,window); \
66
+ v5 = vec_ld(64,window); \
67
+ v1 = vec_perm(v1,v2,vperm1); \
68
+ v6 = vec_ld(0,b0); \
69
+ v2 = vec_perm(v2,v3,vperm1); \
70
+ v7 = vec_ld(16,b0); \
71
+ v3 = vec_perm(v3,v4,vperm1); \
72
+ v8 = vec_ld(32,b0); \
73
+ v4 = vec_perm(v4,v5,vperm1); \
74
+ v9 = vec_ld(48,b0); \
75
+ \
76
+ vsum3 = vec_madd(v1,v6,vzero); \
77
+ vsum3 = vec_madd(v2,v7,vsum3); \
78
+ vsum3 = vec_madd(v3,v8,vsum3); \
79
+ vsum3 = vec_madd(v4,v9,vsum3); \
80
+ \
81
+ window += 32; \
82
+ b0 += B0STEP; \
83
+ \
84
+ v1 = vec_ld(0,window); \
85
+ v2 = vec_ld(16,window); \
86
+ v3 = vec_ld(32,window); \
87
+ v4 = vec_ld(48,window); \
88
+ v5 = vec_ld(64,window); \
89
+ v1 = vec_perm(v1,v2,vperm1); \
90
+ v6 = vec_ld(0,b0); \
91
+ v2 = vec_perm(v2,v3,vperm1); \
92
+ v7 = vec_ld(16,b0); \
93
+ v3 = vec_perm(v3,v4,vperm1); \
94
+ v8 = vec_ld(32,b0); \
95
+ v4 = vec_perm(v4,v5,vperm1); \
96
+ v9 = vec_ld(48,b0); \
97
+ \
98
+ vsum4 = vec_madd(v1,v6,vzero); \
99
+ vsum4 = vec_madd(v2,v7,vsum4); \
100
+ vsum4 = vec_madd(v3,v8,vsum4); \
101
+ vsum4 = vec_madd(v4,v9,vsum4); \
102
+ \
103
+ window += 32; \
104
+ b0 += B0STEP; \
105
+ \
106
+ v1 = vec_mergeh(vsum,vsum3); \
107
+ v2 = vec_mergeh(vsum2,vsum4); \
108
+ v3 = vec_mergel(vsum,vsum3); \
109
+ v4 = vec_mergel(vsum2,vsum4); \
110
+ v5 = vec_mergeh(v1,v2); \
111
+ v6 = vec_mergel(v1,v2); \
112
+ v7 = vec_mergeh(v3,v4); \
113
+ v8 = vec_mergel(v3,v4);
114
+
115
+ /* A macro for stereo synth functions */
116
+ #define SYNTH_STEREO_ALTIVEC(B0STEP) \
117
+ v1 = vec_ld(0,window); \
118
+ v2 = vec_ld(16,window); \
119
+ v3 = vec_ld(32,window); \
120
+ v4 = vec_ld(48,window); \
121
+ v5 = vec_ld(64,window); \
122
+ v1 = vec_perm(v1,v2,vperm1); \
123
+ v6 = vec_ld(0,b0l); \
124
+ v10 = vec_ld(0,b0r); \
125
+ v2 = vec_perm(v2,v3,vperm1); \
126
+ v7 = vec_ld(16,b0l); \
127
+ v11 = vec_ld(16,b0r); \
128
+ v3 = vec_perm(v3,v4,vperm1); \
129
+ v8 = vec_ld(32,b0l); \
130
+ v12 = vec_ld(32,b0r); \
131
+ v4 = vec_perm(v4,v5,vperm1); \
132
+ v9 = vec_ld(48,b0l); \
133
+ v13 = vec_ld(48,b0r); \
134
+ \
135
+ vsum = vec_madd(v1,v6,vzero); \
136
+ vsum5 = vec_madd(v1,v10,vzero); \
137
+ vsum = vec_madd(v2,v7,vsum); \
138
+ vsum5 = vec_madd(v2,v11,vsum5); \
139
+ vsum = vec_madd(v3,v8,vsum); \
140
+ vsum5 = vec_madd(v3,v12,vsum5); \
141
+ vsum = vec_madd(v4,v9,vsum); \
142
+ vsum5 = vec_madd(v4,v13,vsum5); \
143
+ \
144
+ window += 32; \
145
+ b0l += B0STEP; \
146
+ b0r += B0STEP; \
147
+ \
148
+ v1 = vec_ld(0,window); \
149
+ v2 = vec_ld(16,window); \
150
+ v3 = vec_ld(32,window); \
151
+ v4 = vec_ld(48,window); \
152
+ v5 = vec_ld(64,window); \
153
+ v1 = vec_perm(v1,v2,vperm1); \
154
+ v6 = vec_ld(0,b0l); \
155
+ v10 = vec_ld(0,b0r); \
156
+ v2 = vec_perm(v2,v3,vperm1); \
157
+ v7 = vec_ld(16,b0l); \
158
+ v11 = vec_ld(16,b0r); \
159
+ v3 = vec_perm(v3,v4,vperm1); \
160
+ v8 = vec_ld(32,b0l); \
161
+ v12 = vec_ld(32,b0r); \
162
+ v4 = vec_perm(v4,v5,vperm1); \
163
+ v9 = vec_ld(48,b0l); \
164
+ v13 = vec_ld(48,b0r); \
165
+ \
166
+ vsum2 = vec_madd(v1,v6,vzero); \
167
+ vsum6 = vec_madd(v1,v10,vzero); \
168
+ vsum2 = vec_madd(v2,v7,vsum2); \
169
+ vsum6 = vec_madd(v2,v11,vsum6); \
170
+ vsum2 = vec_madd(v3,v8,vsum2); \
171
+ vsum6 = vec_madd(v3,v12,vsum6); \
172
+ vsum2 = vec_madd(v4,v9,vsum2); \
173
+ vsum6 = vec_madd(v4,v13,vsum6); \
174
+ \
175
+ window += 32; \
176
+ b0l += B0STEP; \
177
+ b0r += B0STEP; \
178
+ \
179
+ v1 = vec_ld(0,window); \
180
+ v2 = vec_ld(16,window); \
181
+ v3 = vec_ld(32,window); \
182
+ v4 = vec_ld(48,window); \
183
+ v5 = vec_ld(64,window); \
184
+ v1 = vec_perm(v1,v2,vperm1); \
185
+ v6 = vec_ld(0,b0l); \
186
+ v10 = vec_ld(0,b0r); \
187
+ v2 = vec_perm(v2,v3,vperm1); \
188
+ v7 = vec_ld(16,b0l); \
189
+ v11 = vec_ld(16,b0r); \
190
+ v3 = vec_perm(v3,v4,vperm1); \
191
+ v8 = vec_ld(32,b0l); \
192
+ v12 = vec_ld(32,b0r); \
193
+ v4 = vec_perm(v4,v5,vperm1); \
194
+ v9 = vec_ld(48,b0l); \
195
+ v13 = vec_ld(48,b0r); \
196
+ \
197
+ vsum3 = vec_madd(v1,v6,vzero); \
198
+ vsum7 = vec_madd(v1,v10,vzero); \
199
+ vsum3 = vec_madd(v2,v7,vsum3); \
200
+ vsum7 = vec_madd(v2,v11,vsum7); \
201
+ vsum3 = vec_madd(v3,v8,vsum3); \
202
+ vsum7 = vec_madd(v3,v12,vsum7); \
203
+ vsum3 = vec_madd(v4,v9,vsum3); \
204
+ vsum7 = vec_madd(v4,v13,vsum7); \
205
+ \
206
+ window += 32; \
207
+ b0l += B0STEP; \
208
+ b0r += B0STEP; \
209
+ \
210
+ v1 = vec_ld(0,window); \
211
+ v2 = vec_ld(16,window); \
212
+ v3 = vec_ld(32,window); \
213
+ v4 = vec_ld(48,window); \
214
+ v5 = vec_ld(64,window); \
215
+ v1 = vec_perm(v1,v2,vperm1); \
216
+ v6 = vec_ld(0,b0l); \
217
+ v10 = vec_ld(0,b0r); \
218
+ v2 = vec_perm(v2,v3,vperm1); \
219
+ v7 = vec_ld(16,b0l); \
220
+ v11 = vec_ld(16,b0r); \
221
+ v3 = vec_perm(v3,v4,vperm1); \
222
+ v8 = vec_ld(32,b0l); \
223
+ v12 = vec_ld(32,b0r); \
224
+ v4 = vec_perm(v4,v5,vperm1); \
225
+ v9 = vec_ld(48,b0l); \
226
+ v13 = vec_ld(48,b0r); \
227
+ \
228
+ vsum4 = vec_madd(v1,v6,vzero); \
229
+ vsum8 = vec_madd(v1,v10,vzero); \
230
+ vsum4 = vec_madd(v2,v7,vsum4); \
231
+ vsum8 = vec_madd(v2,v11,vsum8); \
232
+ vsum4 = vec_madd(v3,v8,vsum4); \
233
+ vsum8 = vec_madd(v3,v12,vsum8); \
234
+ vsum4 = vec_madd(v4,v9,vsum4); \
235
+ vsum8 = vec_madd(v4,v13,vsum8); \
236
+ \
237
+ window += 32; \
238
+ b0l += B0STEP; \
239
+ b0r += B0STEP; \
240
+ \
241
+ v1 = vec_mergeh(vsum,vsum3); \
242
+ v5 = vec_mergeh(vsum5,vsum7); \
243
+ v2 = vec_mergeh(vsum2,vsum4); \
244
+ v6 = vec_mergeh(vsum6,vsum8); \
245
+ v3 = vec_mergel(vsum,vsum3); \
246
+ v7 = vec_mergel(vsum5,vsum7); \
247
+ v4 = vec_mergel(vsum2,vsum4); \
248
+ v8 = vec_mergel(vsum6,vsum8); \
249
+ vsum = vec_mergeh(v1,v2); \
250
+ vsum5 = vec_mergeh(v5,v6); \
251
+ vsum2 = vec_mergel(v1,v2); \
252
+ vsum6 = vec_mergel(v5,v6); \
253
+ vsum3 = vec_mergeh(v3,v4); \
254
+ vsum7 = vec_mergeh(v7,v8); \
255
+ vsum4 = vec_mergel(v3,v4); \
256
+ vsum8 = vec_mergel(v7,v8);
257
+
258
+ int synth_1to1_altivec(real *bandPtr,int channel,mpg123_handle *fr, int final)
259
+ {
260
+ short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
261
+
262
+ real *b0, **buf;
263
+ int clip;
264
+ int bo1;
265
+
266
+ if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
267
+
268
+ if(!channel)
269
+ {
270
+ fr->bo--;
271
+ fr->bo &= 0xf;
272
+ buf = fr->real_buffs[0];
273
+ }
274
+ else
275
+ {
276
+ samples++;
277
+ buf = fr->real_buffs[1];
278
+ }
279
+
280
+ if(fr->bo & 0x1)
281
+ {
282
+ b0 = buf[0];
283
+ bo1 = fr->bo;
284
+ dct64_altivec(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
285
+ }
286
+ else
287
+ {
288
+ b0 = buf[1];
289
+ bo1 = fr->bo+1;
290
+ dct64_altivec(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
291
+ }
292
+
293
+
294
+ {
295
+ register int j;
296
+ real *window = fr->decwin + 16 - bo1;
297
+
298
+ ALIGNED(16) int clip_tmp[4];
299
+ vector float v1,v2,v3,v4,v5,v6,v7,v8,v9;
300
+ vector unsigned char vperm1,vperm2,vperm3,vperm4;
301
+ vector float vsum,vsum2,vsum3,vsum4,vmin,vmax,vzero;
302
+ vector signed int vclip;
303
+ vector signed short vsample1,vsample2;
304
+ vector unsigned int vshift;
305
+ vclip = vec_xor(vclip,vclip);
306
+ vzero = vec_xor(vzero,vzero);
307
+ vshift = vec_splat_u32(-1); /* 31 */
308
+ #ifdef __APPLE__
309
+ vmax = (vector float)(32767.0f);
310
+ vmin = (vector float)(-32768.0f);
311
+ vperm4 = (vector unsigned char)(0,1,18,19,2,3,22,23,4,5,26,27,6,7,30,31);
312
+ #else
313
+ vmax = (vector float){32767.0f,32767.0f,32767.0f,32767.0f};
314
+ vmin = (vector float){-32768.0f,-32768.0f,-32768.0f,-32768.0f};
315
+ vperm4 = (vector unsigned char){0,1,18,19,2,3,22,23,4,5,26,27,6,7,30,31};
316
+ #endif
317
+
318
+ vperm1 = vec_lvsl(0,window);
319
+ vperm2 = vec_lvsl(0,samples);
320
+ vperm3 = vec_lvsr(0,samples);
321
+ for (j=4;j;j--)
322
+ {
323
+ SYNTH_ALTIVEC(16);
324
+
325
+ vsum = vec_sub(v5,v6);
326
+ v9 = vec_sub(v7,v8);
327
+ vsum = vec_add(vsum,v9);
328
+
329
+ v3 = vec_round(vsum);
330
+ v3 = (vector float)vec_cts(v3,0);
331
+ v1 = (vector float)vec_cmpgt(vsum,vmax);
332
+ v2 = (vector float)vec_cmplt(vsum,vmin);
333
+ vsample1 = vec_ld(0,samples);
334
+ vsample2 = vec_ld(15,samples);
335
+ v3 = (vector float)vec_packs((vector signed int)v3,(vector signed int)v3);
336
+ v4 = (vector float)vec_perm(vsample1,vsample2,vperm2);
337
+ v5 = (vector float)vec_perm(v3,v4,vperm4);
338
+ v6 = (vector float)vec_perm(vsample2,vsample1,vperm2);
339
+ v7 = (vector float)vec_perm(v5,v6,vperm3);
340
+ v8 = (vector float)vec_perm(v6,v5,vperm3);
341
+ vec_st((vector signed short)v7,15,samples);
342
+ vec_st((vector signed short)v8,0,samples);
343
+ samples += 8;
344
+
345
+ v1 = (vector float)vec_sr((vector unsigned int)v1, vshift);
346
+ v2 = (vector float)vec_sr((vector unsigned int)v2, vshift);
347
+ v1 = (vector float)vec_add((vector unsigned int)v1,(vector unsigned int)v2);
348
+ vclip = vec_sums((vector signed int)v1,vclip);
349
+ }
350
+
351
+ for (j=4;j;j--)
352
+ {
353
+ SYNTH_ALTIVEC(-16);
354
+
355
+ vsum = vec_add(v5,v6);
356
+ v9 = vec_add(v7,v8);
357
+ vsum = vec_add(vsum,v9);
358
+
359
+ v3 = vec_round(vsum);
360
+ v3 = (vector float)vec_cts(v3,0);
361
+ v1 = (vector float)vec_cmpgt(vsum,vmax);
362
+ v2 = (vector float)vec_cmplt(vsum,vmin);
363
+ vsample1 = vec_ld(0,samples);
364
+ vsample2 = vec_ld(15,samples);
365
+ v3 = (vector float)vec_packs((vector signed int)v3,(vector signed int)v3);
366
+ v4 = (vector float)vec_perm(vsample1,vsample2,vperm2);
367
+ v5 = (vector float)vec_perm(v3,v4,vperm4);
368
+ v6 = (vector float)vec_perm(vsample2,vsample1,vperm2);
369
+ v7 = (vector float)vec_perm(v5,v6,vperm3);
370
+ v8 = (vector float)vec_perm(v6,v5,vperm3);
371
+ vec_st((vector signed short)v7,15,samples);
372
+ vec_st((vector signed short)v8,0,samples);
373
+ samples += 8;
374
+
375
+ v1 = (vector float)vec_sr((vector unsigned int)v1, vshift);
376
+ v2 = (vector float)vec_sr((vector unsigned int)v2, vshift);
377
+ v1 = (vector float)vec_add((vector unsigned int)v1,(vector unsigned int)v2);
378
+ vclip = vec_sums((vector signed int)v1,vclip);
379
+ }
380
+
381
+ vec_st(vclip,0,clip_tmp);
382
+ clip = clip_tmp[3];
383
+ }
384
+ if(final) fr->buffer.fill += 128;
385
+
386
+ return clip;
387
+ }
388
+
389
+ int synth_1to1_stereo_altivec(real *bandPtr_l, real *bandPtr_r, mpg123_handle *fr)
390
+ {
391
+ short *samples = (short *) (fr->buffer.data+fr->buffer.fill);
392
+
393
+ real *b0l, *b0r, **bufl, **bufr;
394
+ int clip;
395
+ int bo1;
396
+
397
+ if(fr->have_eq_settings)
398
+ {
399
+ do_equalizer(bandPtr_l,0,fr->equalizer);
400
+ do_equalizer(bandPtr_r,1,fr->equalizer);
401
+ }
402
+
403
+ fr->bo--;
404
+ fr->bo &= 0xf;
405
+ bufl = fr->real_buffs[0];
406
+ bufr = fr->real_buffs[1];
407
+
408
+ if(fr->bo & 0x1)
409
+ {
410
+ b0l = bufl[0];
411
+ b0r = bufr[0];
412
+ bo1 = fr->bo;
413
+ dct64_altivec(bufl[1]+((fr->bo+1)&0xf),bufl[0]+fr->bo,bandPtr_l);
414
+ dct64_altivec(bufr[1]+((fr->bo+1)&0xf),bufr[0]+fr->bo,bandPtr_r);
415
+ }
416
+ else
417
+ {
418
+ b0l = bufl[1];
419
+ b0r = bufr[1];
420
+ bo1 = fr->bo+1;
421
+ dct64_altivec(bufl[0]+fr->bo,bufl[1]+fr->bo+1,bandPtr_l);
422
+ dct64_altivec(bufr[0]+fr->bo,bufr[1]+fr->bo+1,bandPtr_r);
423
+ }
424
+
425
+
426
+ {
427
+ register int j;
428
+ real *window = fr->decwin + 16 - bo1;
429
+
430
+ ALIGNED(16) int clip_tmp[4];
431
+ vector float v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13;
432
+ vector unsigned char vperm1,vperm2;
433
+ vector float vsum,vsum2,vsum3,vsum4,vsum5,vsum6,vsum7,vsum8,vmin,vmax,vzero;
434
+ vector signed int vclip;
435
+ vector unsigned int vshift;
436
+ vector signed short vprev;
437
+ vclip = vec_xor(vclip,vclip);
438
+ vzero = vec_xor(vzero,vzero);
439
+ vshift = vec_splat_u32(-1); /* 31 */
440
+ #ifdef __APPLE__
441
+ vmax = (vector float)(32767.0f);
442
+ vmin = (vector float)(-32768.0f);
443
+ #else
444
+ vmax = (vector float){32767.0f,32767.0f,32767.0f,32767.0f};
445
+ vmin = (vector float){-32768.0f,-32768.0f,-32768.0f,-32768.0f};
446
+ #endif
447
+
448
+ vperm1 = vec_lvsl(0,window);
449
+ vperm2 = vec_lvsr(0,samples);
450
+ vprev = vec_perm(vec_ld(0,samples),vec_ld(0,samples),vec_lvsl(0,samples));
451
+ for (j=4;j;j--)
452
+ {
453
+ SYNTH_STEREO_ALTIVEC(16);
454
+
455
+ vsum = vec_sub(vsum,vsum2);
456
+ vsum2 = vec_sub(vsum5,vsum6);
457
+ vsum3 = vec_sub(vsum3,vsum4);
458
+ vsum4 = vec_sub(vsum7,vsum8);
459
+ vsum = vec_add(vsum,vsum3);
460
+ vsum2 = vec_add(vsum2,vsum4);
461
+
462
+ v1 = vec_round(vsum);
463
+ v2 = vec_round(vsum2);
464
+ v1 = (vector float)vec_cts(v1,0);
465
+ v2 = (vector float)vec_cts(v2,0);
466
+ v3 = vec_mergeh(v1, v2);
467
+ v4 = vec_mergel(v1, v2);
468
+ v5 = (vector float)vec_packs((vector signed int)v3,(vector signed int)v4);
469
+ v6 = (vector float)vec_perm(vprev,(vector signed short)v5,vperm2);
470
+ vprev = (vector signed short)v5;
471
+ v1 = (vector float)vec_cmpgt(vsum,vmax);
472
+ v2 = (vector float)vec_cmplt(vsum,vmin);
473
+ v3 = (vector float)vec_cmpgt(vsum2,vmax);
474
+ v4 = (vector float)vec_cmplt(vsum2,vmin);
475
+ vec_st((vector signed short)v6,0,samples);
476
+ samples += 8;
477
+
478
+ v1 = (vector float)vec_sr((vector unsigned int)v1, vshift);
479
+ v2 = (vector float)vec_sr((vector unsigned int)v2, vshift);
480
+ v3 = (vector float)vec_sr((vector unsigned int)v3, vshift);
481
+ v4 = (vector float)vec_sr((vector unsigned int)v4, vshift);
482
+ v1 = (vector float)vec_add((vector unsigned int)v1,(vector unsigned int)v2);
483
+ v2 = (vector float)vec_add((vector unsigned int)v3,(vector unsigned int)v4);
484
+ vclip = vec_sums((vector signed int)v1,vclip);
485
+ vclip = vec_sums((vector signed int)v2,vclip);
486
+ }
487
+
488
+ for (j=4;j;j--)
489
+ {
490
+ SYNTH_STEREO_ALTIVEC(-16);
491
+
492
+ vsum = vec_add(vsum,vsum2);
493
+ vsum2 = vec_add(vsum5,vsum6);
494
+ vsum3 = vec_add(vsum3,vsum4);
495
+ vsum4 = vec_add(vsum7,vsum8);
496
+ vsum = vec_add(vsum,vsum3);
497
+ vsum2 = vec_add(vsum2,vsum4);
498
+
499
+ v1 = vec_round(vsum);
500
+ v2 = vec_round(vsum2);
501
+ v1 = (vector float)vec_cts(v1,0);
502
+ v2 = (vector float)vec_cts(v2,0);
503
+ v3 = vec_mergeh(v1, v2);
504
+ v4 = vec_mergel(v1, v2);
505
+ v5 = (vector float)vec_packs((vector signed int)v3,(vector signed int)v4);
506
+ v6 = (vector float)vec_perm(vprev,(vector signed short)v5,vperm2);
507
+ vprev = (vector signed short)v5;
508
+ v1 = (vector float)vec_cmpgt(vsum,vmax);
509
+ v2 = (vector float)vec_cmplt(vsum,vmin);
510
+ v3 = (vector float)vec_cmpgt(vsum2,vmax);
511
+ v4 = (vector float)vec_cmplt(vsum2,vmin);
512
+ vec_st((vector signed short)v6,0,samples);
513
+ samples += 8;
514
+
515
+ v1 = (vector float)vec_sr((vector unsigned int)v1, vshift);
516
+ v2 = (vector float)vec_sr((vector unsigned int)v2, vshift);
517
+ v3 = (vector float)vec_sr((vector unsigned int)v3, vshift);
518
+ v4 = (vector float)vec_sr((vector unsigned int)v4, vshift);
519
+ v1 = (vector float)vec_add((vector unsigned int)v1,(vector unsigned int)v2);
520
+ v2 = (vector float)vec_add((vector unsigned int)v3,(vector unsigned int)v4);
521
+ vclip = vec_sums((vector signed int)v1,vclip);
522
+ vclip = vec_sums((vector signed int)v2,vclip);
523
+ }
524
+
525
+ if((size_t)samples & 0xf)
526
+ {
527
+ v1 = (vector float)vec_perm(vec_ld(0,samples),vec_ld(0,samples),vec_lvsl(0,samples));
528
+ v2 = (vector float)vec_perm(vprev,(vector signed short)v1,vperm2);
529
+ vec_st((vector signed short)v2,0,samples);
530
+ }
531
+
532
+ vec_st(vclip,0,clip_tmp);
533
+ clip = clip_tmp[3];
534
+ }
535
+ fr->buffer.fill += 128;
536
+
537
+ return clip;
538
+ }
539
+
540
+ int synth_1to1_real_altivec(real *bandPtr,int channel,mpg123_handle *fr, int final)
541
+ {
542
+ real *samples = (real *) (fr->buffer.data+fr->buffer.fill);
543
+
544
+ real *b0, **buf;
545
+ int bo1;
546
+
547
+ if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
548
+
549
+ if(!channel)
550
+ {
551
+ fr->bo--;
552
+ fr->bo &= 0xf;
553
+ buf = fr->real_buffs[0];
554
+ }
555
+ else
556
+ {
557
+ samples++;
558
+ buf = fr->real_buffs[1];
559
+ }
560
+
561
+ if(fr->bo & 0x1)
562
+ {
563
+ b0 = buf[0];
564
+ bo1 = fr->bo;
565
+ dct64_altivec(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
566
+ }
567
+ else
568
+ {
569
+ b0 = buf[1];
570
+ bo1 = fr->bo+1;
571
+ dct64_altivec(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
572
+ }
573
+
574
+
575
+ {
576
+ register int j;
577
+ real *window = fr->decwin + 16 - bo1;
578
+
579
+ vector float v1,v2,v3,v4,v5,v6,v7,v8,v9;
580
+ vector unsigned char vperm1,vperm2,vperm3,vperm4, vperm5;
581
+ vector float vsum,vsum2,vsum3,vsum4,vscale,vzero;
582
+ vector float vsample1,vsample2,vsample3;
583
+ vzero = vec_xor(vzero, vzero);
584
+ #ifdef __APPLE__
585
+ vscale = (vector float)(1.0f/32768.0f);
586
+ vperm4 = (vector unsigned char)(0,1,2,3,20,21,22,23,4,5,6,7,28,29,30,31);
587
+ vperm5 = (vector unsigned char)(8,9,10,11,20,21,22,23,12,13,14,15,28,29,30,31);
588
+ #else
589
+ vscale = (vector float){1.0f/32768.0f,1.0f/32768.0f,1.0f/32768.0f,1.0f/32768.0f};
590
+ vperm4 = (vector unsigned char){0,1,2,3,20,21,22,23,4,5,6,7,28,29,30,31};
591
+ vperm5 = (vector unsigned char){8,9,10,11,20,21,22,23,12,13,14,15,28,29,30,31};
592
+ #endif
593
+
594
+ vperm1 = vec_lvsl(0,window);
595
+ vperm2 = vec_lvsl(0,samples);
596
+ vperm3 = vec_lvsr(0,samples);
597
+ for (j=4;j;j--)
598
+ {
599
+ SYNTH_ALTIVEC(16);
600
+
601
+ vsum = vec_sub(v5,v6);
602
+ v9 = vec_sub(v7,v8);
603
+ vsum = vec_add(vsum,v9);
604
+ vsum = vec_madd(vsum, vscale, vzero);
605
+
606
+ vsample1 = vec_ld(0,samples);
607
+ vsample2 = vec_ld(16,samples);
608
+ vsample3 = vec_ld(31,samples);
609
+ v1 = vec_perm(vsample1, vsample2, vperm2);
610
+ v2 = vec_perm(vsample2, vsample3, vperm2);
611
+ v1 = vec_perm(vsum, v1, vperm4);
612
+ v2 = vec_perm(vsum, v2, vperm5);
613
+ v3 = vec_perm(vsample3, vsample2, vperm2);
614
+ v4 = vec_perm(vsample2, vsample1, vperm2);
615
+ v5 = vec_perm(v2, v3, vperm3);
616
+ v6 = vec_perm(v1, v2, vperm3);
617
+ v7 = vec_perm(v4, v1, vperm3);
618
+ vec_st(v5,31,samples);
619
+ vec_st(v6,16,samples);
620
+ vec_st(v7,0,samples);
621
+ samples += 8;
622
+ }
623
+
624
+ for (j=4;j;j--)
625
+ {
626
+ SYNTH_ALTIVEC(-16);
627
+
628
+ vsum = vec_add(v5,v6);
629
+ v9 = vec_add(v7,v8);
630
+ vsum = vec_add(vsum,v9);
631
+ vsum = vec_madd(vsum, vscale, vzero);
632
+
633
+ vsample1 = vec_ld(0,samples);
634
+ vsample2 = vec_ld(16,samples);
635
+ vsample3 = vec_ld(31,samples);
636
+ v1 = vec_perm(vsample1, vsample2, vperm2);
637
+ v2 = vec_perm(vsample2, vsample3, vperm2);
638
+ v1 = vec_perm(vsum, v1, vperm4);
639
+ v2 = vec_perm(vsum, v2, vperm5);
640
+ v3 = vec_perm(vsample3, vsample2, vperm2);
641
+ v4 = vec_perm(vsample2, vsample1, vperm2);
642
+ v5 = vec_perm(v2, v3, vperm3);
643
+ v6 = vec_perm(v1, v2, vperm3);
644
+ v7 = vec_perm(v4, v1, vperm3);
645
+ vec_st(v5,31,samples);
646
+ vec_st(v6,16,samples);
647
+ vec_st(v7,0,samples);
648
+ samples += 8;
649
+ }
650
+ }
651
+ if(final) fr->buffer.fill += 256;
652
+
653
+ return 0;
654
+ }
655
+
656
+ int synth_1to1_real_stereo_altivec(real *bandPtr_l, real *bandPtr_r, mpg123_handle *fr)
657
+ {
658
+ real *samples = (real *) (fr->buffer.data+fr->buffer.fill);
659
+
660
+ real *b0l, *b0r, **bufl, **bufr;
661
+ int bo1;
662
+
663
+ if(fr->have_eq_settings)
664
+ {
665
+ do_equalizer(bandPtr_l,0,fr->equalizer);
666
+ do_equalizer(bandPtr_r,1,fr->equalizer);
667
+ }
668
+
669
+ fr->bo--;
670
+ fr->bo &= 0xf;
671
+ bufl = fr->real_buffs[0];
672
+ bufr = fr->real_buffs[1];
673
+
674
+ if(fr->bo & 0x1)
675
+ {
676
+ b0l = bufl[0];
677
+ b0r = bufr[0];
678
+ bo1 = fr->bo;
679
+ dct64_altivec(bufl[1]+((fr->bo+1)&0xf),bufl[0]+fr->bo,bandPtr_l);
680
+ dct64_altivec(bufr[1]+((fr->bo+1)&0xf),bufr[0]+fr->bo,bandPtr_r);
681
+ }
682
+ else
683
+ {
684
+ b0l = bufl[1];
685
+ b0r = bufr[1];
686
+ bo1 = fr->bo+1;
687
+ dct64_altivec(bufl[0]+fr->bo,bufl[1]+fr->bo+1,bandPtr_l);
688
+ dct64_altivec(bufr[0]+fr->bo,bufr[1]+fr->bo+1,bandPtr_r);
689
+ }
690
+
691
+
692
+ {
693
+ register int j;
694
+ real *window = fr->decwin + 16 - bo1;
695
+
696
+ vector float v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13;
697
+ vector unsigned char vperm1,vperm2;
698
+ vector float vsum,vsum2,vsum3,vsum4,vsum5,vsum6,vsum7,vsum8,vscale,vzero;
699
+ vector float vprev;
700
+ vzero = vec_xor(vzero,vzero);
701
+ #ifdef __APPLE__
702
+ vscale = (vector float)(1.0f/32768.0f);
703
+ #else
704
+ vscale = (vector float){1.0f/32768.0f,1.0f/32768.0f,1.0f/32768.0f,1.0f/32768.0f};
705
+ #endif
706
+
707
+ vperm1 = vec_lvsl(0,window);
708
+ vperm2 = vec_lvsr(0,samples);
709
+ vprev = vec_perm(vec_ld(0,samples),vec_ld(0,samples),vec_lvsl(0,samples));
710
+ for (j=4;j;j--)
711
+ {
712
+ SYNTH_STEREO_ALTIVEC(16);
713
+
714
+ vsum = vec_sub(vsum,vsum2);
715
+ vsum2 = vec_sub(vsum5,vsum6);
716
+ vsum3 = vec_sub(vsum3,vsum4);
717
+ vsum4 = vec_sub(vsum7,vsum8);
718
+ vsum = vec_add(vsum,vsum3);
719
+ vsum2 = vec_add(vsum2,vsum4);
720
+ vsum = vec_madd(vsum, vscale, vzero);
721
+ vsum2 = vec_madd(vsum2, vscale, vzero);
722
+
723
+ v1 = vec_mergeh(vsum, vsum2);
724
+ v2 = vec_mergel(vsum, vsum2);
725
+ v3 = vec_perm(vprev,v1,vperm2);
726
+ v4 = vec_perm(v1,v2,vperm2);
727
+ vprev = v2;
728
+ vec_st(v3,0,samples);
729
+ vec_st(v4,16,samples);
730
+ samples += 8;
731
+ }
732
+
733
+ for (j=4;j;j--)
734
+ {
735
+ SYNTH_STEREO_ALTIVEC(-16);
736
+
737
+ vsum = vec_add(vsum,vsum2);
738
+ vsum2 = vec_add(vsum5,vsum6);
739
+ vsum3 = vec_add(vsum3,vsum4);
740
+ vsum4 = vec_add(vsum7,vsum8);
741
+ vsum = vec_add(vsum,vsum3);
742
+ vsum2 = vec_add(vsum2,vsum4);
743
+ vsum = vec_madd(vsum, vscale, vzero);
744
+ vsum2 = vec_madd(vsum2, vscale, vzero);
745
+
746
+ v1 = vec_mergeh(vsum, vsum2);
747
+ v2 = vec_mergel(vsum, vsum2);
748
+ v3 = vec_perm(vprev,v1,vperm2);
749
+ v4 = vec_perm(v1,v2,vperm2);
750
+ vprev = v2;
751
+ vec_st(v3,0,samples);
752
+ vec_st(v4,16,samples);
753
+ samples += 8;
754
+ }
755
+
756
+ if((size_t)samples & 0xf)
757
+ {
758
+ v1 = (vector float)vec_perm(vec_ld(0,samples),vec_ld(0,samples),vec_lvsl(0,samples));
759
+ v2 = (vector float)vec_perm(vprev,v1,vperm2);
760
+ vec_st(v2,0,samples);
761
+ }
762
+ }
763
+ fr->buffer.fill += 256;
764
+
765
+ return 0;
766
+ }
767
+
768
+ int synth_1to1_s32_altivec(real *bandPtr,int channel,mpg123_handle *fr, int final)
769
+ {
770
+ int32_t *samples = (int32_t *) (fr->buffer.data+fr->buffer.fill);
771
+
772
+ real *b0, **buf;
773
+ int clip;
774
+ int bo1;
775
+
776
+ if(fr->have_eq_settings) do_equalizer(bandPtr,channel,fr->equalizer);
777
+
778
+ if(!channel)
779
+ {
780
+ fr->bo--;
781
+ fr->bo &= 0xf;
782
+ buf = fr->real_buffs[0];
783
+ }
784
+ else
785
+ {
786
+ samples++;
787
+ buf = fr->real_buffs[1];
788
+ }
789
+
790
+ if(fr->bo & 0x1)
791
+ {
792
+ b0 = buf[0];
793
+ bo1 = fr->bo;
794
+ dct64_altivec(buf[1]+((fr->bo+1)&0xf),buf[0]+fr->bo,bandPtr);
795
+ }
796
+ else
797
+ {
798
+ b0 = buf[1];
799
+ bo1 = fr->bo+1;
800
+ dct64_altivec(buf[0]+fr->bo,buf[1]+fr->bo+1,bandPtr);
801
+ }
802
+
803
+
804
+ {
805
+ register int j;
806
+ real *window = fr->decwin + 16 - bo1;
807
+
808
+ ALIGNED(16) int clip_tmp[4];
809
+ vector float v1,v2,v3,v4,v5,v6,v7,v8,v9;
810
+ vector unsigned char vperm1,vperm2,vperm3,vperm4,vperm5;
811
+ vector float vsum,vsum2,vsum3,vsum4,vmax,vmin,vzero;
812
+ vector signed int vsample1,vsample2,vsample3;
813
+ vector unsigned int vshift;
814
+ vector signed int vclip;
815
+ vzero = vec_xor(vzero, vzero);
816
+ vclip = vec_xor(vclip, vclip);
817
+ vshift = vec_splat_u32(-1); /* 31 */
818
+ #ifdef __APPLE__
819
+ vmax = (vector float)(32767.999f);
820
+ vmin = (vector float)(-32768.0f);
821
+ vperm4 = (vector unsigned char)(0,1,2,3,20,21,22,23,4,5,6,7,28,29,30,31);
822
+ vperm5 = (vector unsigned char)(8,9,10,11,20,21,22,23,12,13,14,15,28,29,30,31);
823
+ #else
824
+ vmax = (vector float){32767.999f,32767.999f,32767.999f,32767.999f};
825
+ vmin = (vector float){-32768.0f,-32768.0f,-32768.0f,-32768.0f};
826
+ vperm4 = (vector unsigned char){0,1,2,3,20,21,22,23,4,5,6,7,28,29,30,31};
827
+ vperm5 = (vector unsigned char){8,9,10,11,20,21,22,23,12,13,14,15,28,29,30,31};
828
+ #endif
829
+
830
+ vperm1 = vec_lvsl(0,window);
831
+ vperm2 = vec_lvsl(0,samples);
832
+ vperm3 = vec_lvsr(0,samples);
833
+ for (j=4;j;j--)
834
+ {
835
+ SYNTH_ALTIVEC(16);
836
+
837
+ vsum = vec_sub(v5,v6);
838
+ v9 = vec_sub(v7,v8);
839
+ v1 = vec_add(vsum,v9);
840
+ vsum = (vector float)vec_cts(v1,16);
841
+ v8 = (vector float)vec_cmpgt(v1,vmax);
842
+ v9 = (vector float)vec_cmplt(v1,vmin);
843
+
844
+ vsample1 = vec_ld(0,samples);
845
+ vsample2 = vec_ld(16,samples);
846
+ vsample3 = vec_ld(31,samples);
847
+ v1 = (vector float)vec_perm(vsample1, vsample2, vperm2);
848
+ v2 = (vector float)vec_perm(vsample2, vsample3, vperm2);
849
+ v1 = vec_perm(vsum, v1, vperm4);
850
+ v2 = vec_perm(vsum, v2, vperm5);
851
+ v3 = (vector float)vec_perm(vsample3, vsample2, vperm2);
852
+ v4 = (vector float)vec_perm(vsample2, vsample1, vperm2);
853
+ v5 = vec_perm(v2, v3, vperm3);
854
+ v6 = vec_perm(v1, v2, vperm3);
855
+ v7 = vec_perm(v4, v1, vperm3);
856
+ vec_st((vector signed int)v5,31,samples);
857
+ vec_st((vector signed int)v6,16,samples);
858
+ vec_st((vector signed int)v7,0,samples);
859
+ samples += 8;
860
+
861
+ v1 = (vector float)vec_sr((vector unsigned int)v8, vshift);
862
+ v2 = (vector float)vec_sr((vector unsigned int)v9, vshift);
863
+ v1 = (vector float)vec_add((vector unsigned int)v1,(vector unsigned int)v2);
864
+ vclip = vec_sums((vector signed int)v1,vclip);
865
+ }
866
+
867
+ for (j=4;j;j--)
868
+ {
869
+ SYNTH_ALTIVEC(-16);
870
+
871
+ vsum = vec_add(v5,v6);
872
+ v9 = vec_add(v7,v8);
873
+ v1 = vec_add(vsum,v9);
874
+ vsum = (vector float)vec_cts(v1,16);
875
+ v8 = (vector float)vec_cmpgt(v1,vmax);
876
+ v9 = (vector float)vec_cmplt(v1,vmin);
877
+
878
+ vsample1 = vec_ld(0,samples);
879
+ vsample2 = vec_ld(16,samples);
880
+ vsample3 = vec_ld(31,samples);
881
+ v1 = (vector float)vec_perm(vsample1, vsample2, vperm2);
882
+ v2 = (vector float)vec_perm(vsample2, vsample3, vperm2);
883
+ v1 = vec_perm(vsum, v1, vperm4);
884
+ v2 = vec_perm(vsum, v2, vperm5);
885
+ v3 = (vector float)vec_perm(vsample3, vsample2, vperm2);
886
+ v4 = (vector float)vec_perm(vsample2, vsample1, vperm2);
887
+ v5 = vec_perm(v2, v3, vperm3);
888
+ v6 = vec_perm(v1, v2, vperm3);
889
+ v7 = vec_perm(v4, v1, vperm3);
890
+ vec_st((vector signed int)v5,31,samples);
891
+ vec_st((vector signed int)v6,16,samples);
892
+ vec_st((vector signed int)v7,0,samples);
893
+ samples += 8;
894
+
895
+ v1 = (vector float)vec_sr((vector unsigned int)v8, vshift);
896
+ v2 = (vector float)vec_sr((vector unsigned int)v9, vshift);
897
+ v1 = (vector float)vec_add((vector unsigned int)v1,(vector unsigned int)v2);
898
+ vclip = vec_sums((vector signed int)v1,vclip);
899
+ }
900
+
901
+ vec_st(vclip,0,clip_tmp);
902
+ clip = clip_tmp[3];
903
+ }
904
+ if(final) fr->buffer.fill += 256;
905
+
906
+ return clip;
907
+ }
908
+
909
+
910
+ int synth_1to1_s32_stereo_altivec(real *bandPtr_l, real *bandPtr_r, mpg123_handle *fr)
911
+ {
912
+ int32_t *samples = (int32_t *) (fr->buffer.data+fr->buffer.fill);
913
+
914
+ real *b0l, *b0r, **bufl, **bufr;
915
+ int clip;
916
+ int bo1;
917
+
918
+ if(fr->have_eq_settings)
919
+ {
920
+ do_equalizer(bandPtr_l,0,fr->equalizer);
921
+ do_equalizer(bandPtr_r,1,fr->equalizer);
922
+ }
923
+
924
+ fr->bo--;
925
+ fr->bo &= 0xf;
926
+ bufl = fr->real_buffs[0];
927
+ bufr = fr->real_buffs[1];
928
+
929
+ if(fr->bo & 0x1)
930
+ {
931
+ b0l = bufl[0];
932
+ b0r = bufr[0];
933
+ bo1 = fr->bo;
934
+ dct64_altivec(bufl[1]+((fr->bo+1)&0xf),bufl[0]+fr->bo,bandPtr_l);
935
+ dct64_altivec(bufr[1]+((fr->bo+1)&0xf),bufr[0]+fr->bo,bandPtr_r);
936
+ }
937
+ else
938
+ {
939
+ b0l = bufl[1];
940
+ b0r = bufr[1];
941
+ bo1 = fr->bo+1;
942
+ dct64_altivec(bufl[0]+fr->bo,bufl[1]+fr->bo+1,bandPtr_l);
943
+ dct64_altivec(bufr[0]+fr->bo,bufr[1]+fr->bo+1,bandPtr_r);
944
+ }
945
+
946
+
947
+ {
948
+ register int j;
949
+ real *window = fr->decwin + 16 - bo1;
950
+
951
+ ALIGNED(16) int clip_tmp[4];
952
+ vector float v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13;
953
+ vector unsigned char vperm1,vperm2;
954
+ vector float vsum,vsum2,vsum3,vsum4,vsum5,vsum6,vsum7,vsum8,vmax,vmin,vzero;
955
+ vector float vprev;
956
+ vector unsigned int vshift;
957
+ vector signed int vclip;
958
+ vzero = vec_xor(vzero, vzero);
959
+ vclip = vec_xor(vclip, vclip);
960
+ vshift = vec_splat_u32(-1); /* 31 */
961
+ #ifdef __APPLE__
962
+ vmax = (vector float)(32767.999f);
963
+ vmin = (vector float)(-32768.0f);
964
+ #else
965
+ vmax = (vector float){32767.999f,32767.999f,32767.999f,32767.999f};
966
+ vmin = (vector float){-32768.0f,-32768.0f,-32768.0f,-32768.0f};
967
+ #endif
968
+
969
+ vperm1 = vec_lvsl(0,window);
970
+ vperm2 = vec_lvsr(0,samples);
971
+ vprev = (vector float)vec_perm(vec_ld(0,samples),vec_ld(0,samples),vec_lvsl(0,samples));
972
+ for (j=4;j;j--)
973
+ {
974
+ SYNTH_STEREO_ALTIVEC(16);
975
+
976
+ vsum = vec_sub(vsum,vsum2);
977
+ vsum2 = vec_sub(vsum5,vsum6);
978
+ vsum3 = vec_sub(vsum3,vsum4);
979
+ vsum4 = vec_sub(vsum7,vsum8);
980
+ v1 = vec_add(vsum,vsum3);
981
+ v2 = vec_add(vsum2,vsum4);
982
+ vsum = (vector float)vec_cts(v1,16);
983
+ vsum2 = (vector float)vec_cts(v2,16);
984
+ v5 = (vector float)vec_cmpgt(v1,vmax);
985
+ v6 = (vector float)vec_cmplt(v1,vmin);
986
+ v7 = (vector float)vec_cmpgt(v2,vmax);
987
+ v8 = (vector float)vec_cmplt(v2,vmin);
988
+
989
+ v1 = vec_mergeh(vsum, vsum2);
990
+ v2 = vec_mergel(vsum, vsum2);
991
+ v3 = vec_perm(vprev,v1,vperm2);
992
+ v4 = vec_perm(v1,v2,vperm2);
993
+ vprev = v2;
994
+ vec_st((vector signed int)v3,0,samples);
995
+ vec_st((vector signed int)v4,16,samples);
996
+ samples += 8;
997
+
998
+ v1 = (vector float)vec_sr((vector unsigned int)v5, vshift);
999
+ v2 = (vector float)vec_sr((vector unsigned int)v6, vshift);
1000
+ v3 = (vector float)vec_sr((vector unsigned int)v7, vshift);
1001
+ v4 = (vector float)vec_sr((vector unsigned int)v8, vshift);
1002
+ v1 = (vector float)vec_add((vector unsigned int)v1,(vector unsigned int)v2);
1003
+ v2 = (vector float)vec_add((vector unsigned int)v3,(vector unsigned int)v4);
1004
+ vclip = vec_sums((vector signed int)v1,vclip);
1005
+ vclip = vec_sums((vector signed int)v2,vclip);
1006
+ }
1007
+
1008
+ for (j=4;j;j--)
1009
+ {
1010
+ SYNTH_STEREO_ALTIVEC(-16);
1011
+
1012
+ vsum = vec_add(vsum,vsum2);
1013
+ vsum2 = vec_add(vsum5,vsum6);
1014
+ vsum3 = vec_add(vsum3,vsum4);
1015
+ vsum4 = vec_add(vsum7,vsum8);
1016
+ v1 = vec_add(vsum,vsum3);
1017
+ v2 = vec_add(vsum2,vsum4);
1018
+ vsum = (vector float)vec_cts(v1,16);
1019
+ vsum2 = (vector float)vec_cts(v2,16);
1020
+ v5 = (vector float)vec_cmpgt(v1,vmax);
1021
+ v6 = (vector float)vec_cmplt(v1,vmin);
1022
+ v7 = (vector float)vec_cmpgt(v2,vmax);
1023
+ v8 = (vector float)vec_cmplt(v2,vmin);
1024
+
1025
+ v1 = vec_mergeh(vsum, vsum2);
1026
+ v2 = vec_mergel(vsum, vsum2);
1027
+ v3 = vec_perm(vprev,v1,vperm2);
1028
+ v4 = vec_perm(v1,v2,vperm2);
1029
+ vprev = v2;
1030
+ vec_st((vector signed int)v3,0,samples);
1031
+ vec_st((vector signed int)v4,16,samples);
1032
+ samples += 8;
1033
+
1034
+ v1 = (vector float)vec_sr((vector unsigned int)v5, vshift);
1035
+ v2 = (vector float)vec_sr((vector unsigned int)v6, vshift);
1036
+ v3 = (vector float)vec_sr((vector unsigned int)v7, vshift);
1037
+ v4 = (vector float)vec_sr((vector unsigned int)v8, vshift);
1038
+ v1 = (vector float)vec_add((vector unsigned int)v1,(vector unsigned int)v2);
1039
+ v2 = (vector float)vec_add((vector unsigned int)v3,(vector unsigned int)v4);
1040
+ vclip = vec_sums((vector signed int)v1,vclip);
1041
+ vclip = vec_sums((vector signed int)v2,vclip);
1042
+ }
1043
+
1044
+ if((size_t)samples & 0xf)
1045
+ {
1046
+ v1 = (vector float)vec_perm(vec_ld(0,samples),vec_ld(0,samples),vec_lvsl(0,samples));
1047
+ v2 = (vector float)vec_perm(vprev,v1,vperm2);
1048
+ vec_st((vector signed int)v2,0,samples);
1049
+ }
1050
+
1051
+ vec_st(vclip,0,clip_tmp);
1052
+ clip = clip_tmp[3];
1053
+ }
1054
+ fr->buffer.fill += 256;
1055
+
1056
+ return clip;
1057
+ }