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.
- data/.yardopts +1 -0
- data/LICENSE +13 -0
- data/README.md +265 -0
- data/ext/seal/extconf.rb +45 -0
- data/include/al/al.h +724 -0
- data/include/al/alc.h +277 -0
- data/include/al/efx-presets.h +402 -0
- data/include/al/efx.h +758 -0
- data/include/mpg123/mpg123.h +1034 -0
- data/include/ogg/config_types.h +25 -0
- data/include/ogg/ogg.h +210 -0
- data/include/ogg/os_types.h +147 -0
- data/include/seal.h +23 -0
- data/include/seal/buf.h +143 -0
- data/include/seal/core.h +95 -0
- data/include/seal/efs.h +112 -0
- data/include/seal/err.h +93 -0
- data/include/seal/fmt.h +58 -0
- data/include/seal/listener.h +103 -0
- data/include/seal/raw.h +86 -0
- data/include/seal/rvb.h +520 -0
- data/include/seal/src.h +413 -0
- data/include/seal/stream.h +81 -0
- data/include/vorbis/codec.h +243 -0
- data/include/vorbis/vorbisfile.h +206 -0
- data/mpg123/AUTHORS +150 -0
- data/mpg123/COPYING +773 -0
- data/mpg123/ChangeLog +3 -0
- data/mpg123/INSTALL +111 -0
- data/mpg123/Makefile.am +99 -0
- data/mpg123/Makefile.in +1043 -0
- data/mpg123/NEWS +1200 -0
- data/mpg123/NEWS.libmpg123 +133 -0
- data/mpg123/README +203 -0
- data/mpg123/TODO +38 -0
- data/mpg123/aclocal.m4 +1168 -0
- data/mpg123/build/config.guess +1530 -0
- data/mpg123/build/config.sub +1782 -0
- data/mpg123/build/depcomp +707 -0
- data/mpg123/build/install-sh +527 -0
- data/mpg123/build/ltmain.sh +9655 -0
- data/mpg123/build/missing +330 -0
- data/mpg123/configure +20267 -0
- data/mpg123/configure.ac +2178 -0
- data/mpg123/doc/ACCURACY +2 -0
- data/mpg123/doc/BENCHMARKING +110 -0
- data/mpg123/doc/BUGS +3 -0
- data/mpg123/doc/CONTACT +17 -0
- data/mpg123/doc/LICENSE +22 -0
- data/mpg123/doc/Makefile.am +32 -0
- data/mpg123/doc/Makefile.in +490 -0
- data/mpg123/doc/PATENTS +39 -0
- data/mpg123/doc/README.3DNOW +56 -0
- data/mpg123/doc/README.gain +171 -0
- data/mpg123/doc/README.remote +218 -0
- data/mpg123/doc/ROAD_TO_LGPL +270 -0
- data/mpg123/doc/THANKS +13 -0
- data/mpg123/doc/TODO +63 -0
- data/mpg123/doc/doxy_examples.c +21 -0
- data/mpg123/doc/doxygen.conf +41 -0
- data/mpg123/doc/doxyhead.xhtml +12 -0
- data/mpg123/doc/examples/dump_seekindex.c +41 -0
- data/mpg123/doc/examples/extract_frames.c +92 -0
- data/mpg123/doc/examples/feedseek.c +238 -0
- data/mpg123/doc/examples/id3dump.c +178 -0
- data/mpg123/doc/examples/mpg123_to_wav.c +118 -0
- data/mpg123/doc/examples/mpglib.c +92 -0
- data/mpg123/doc/examples/scan.c +47 -0
- data/mpg123/doc/libmpg123_speed.txt +84 -0
- data/mpg123/equalize.dat +37 -0
- data/mpg123/libmpg123.pc.in +11 -0
- data/mpg123/m4/addrconfig.m4 +34 -0
- data/mpg123/m4/libtool.m4 +7982 -0
- data/mpg123/m4/ltoptions.m4 +384 -0
- data/mpg123/m4/ltsugar.m4 +123 -0
- data/mpg123/m4/ltversion.m4 +23 -0
- data/mpg123/m4/lt~obsolete.m4 +98 -0
- data/mpg123/makedll.sh +19 -0
- data/mpg123/man1/mpg123.1 +512 -0
- data/mpg123/mpg123.spec +68 -0
- data/mpg123/mpg123.spec.in +68 -0
- data/mpg123/ports/MSVC++/2005/libmpg123/libmpg123.vcproj +741 -0
- data/mpg123/ports/MSVC++/2008/dump_seekindex/dump_seekindex.vcproj +194 -0
- data/mpg123/ports/MSVC++/2008/feedseek/feedseek.vcproj +195 -0
- data/mpg123/ports/MSVC++/2008/libmpg123/libmpg123.vcproj +1357 -0
- data/mpg123/ports/MSVC++/2008/mpg123.sln +44 -0
- data/mpg123/ports/MSVC++/2008/mpglib/mpglib.vcproj +191 -0
- data/mpg123/ports/MSVC++/2008/scan/scan.vcproj +195 -0
- data/mpg123/ports/MSVC++/2008clr/2008clr.sln +81 -0
- data/mpg123/ports/MSVC++/2008clr/examples/ReplaceReaderclr/Program.cs +435 -0
- data/mpg123/ports/MSVC++/2008clr/examples/ReplaceReaderclr/Properties/AssemblyInfo.cs +36 -0
- data/mpg123/ports/MSVC++/2008clr/examples/ReplaceReaderclr/ReplaceReaderclr.csproj +72 -0
- data/mpg123/ports/MSVC++/2008clr/examples/feedseekclr/Program.cs +331 -0
- data/mpg123/ports/MSVC++/2008clr/examples/feedseekclr/Properties/AssemblyInfo.cs +36 -0
- data/mpg123/ports/MSVC++/2008clr/examples/feedseekclr/feedseekclr.csproj +71 -0
- data/mpg123/ports/MSVC++/2008clr/examples/scanclr/Program.cs +79 -0
- data/mpg123/ports/MSVC++/2008clr/examples/scanclr/Properties/AssemblyInfo.cs +36 -0
- data/mpg123/ports/MSVC++/2008clr/examples/scanclr/scanclr.csproj +70 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/AssemblyInfo.cpp +76 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/ReadMe.txt +165 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/advanced.cpp +91 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/advanced.h +130 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/dllmain.cpp +19 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/enum.h +218 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/error.cpp +48 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/error.h +134 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v1.cpp +92 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v1.h +132 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v2.cpp +138 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/id3v2.h +152 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.cpp +896 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.h +953 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.rc +102 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/mpg123clr.vcproj +328 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/resource.h +14 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/stdafx.cpp +8 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/stdafx.h +38 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/string.cpp +166 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/string.h +265 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/targetver.h +24 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/text.cpp +67 -0
- data/mpg123/ports/MSVC++/2008clr/mpg123clr/text.h +111 -0
- data/mpg123/ports/MSVC++/2010/dump_seekindex/dump_seekindex.vcxproj +90 -0
- data/mpg123/ports/MSVC++/2010/dump_seekindex/dump_seekindex.vcxproj.filters +6 -0
- data/mpg123/ports/MSVC++/2010/feedseek/feedseek.vcxproj +95 -0
- data/mpg123/ports/MSVC++/2010/feedseek/feedseek.vcxproj.filters +6 -0
- data/mpg123/ports/MSVC++/2010/libmpg123/libmpg123.vcxproj +960 -0
- data/mpg123/ports/MSVC++/2010/libmpg123/libmpg123.vcxproj.user +3 -0
- data/mpg123/ports/MSVC++/2010/libmpg123/yasm.exe +0 -0
- data/mpg123/ports/MSVC++/2010/mpg123.sln +38 -0
- data/mpg123/ports/MSVC++/2010/scan/scan.vcxproj +93 -0
- data/mpg123/ports/MSVC++/2010/scan/scan.vcxproj.filters +6 -0
- data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/CORE/CORE_FileIn.H +15 -0
- data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/CORE/SourceFilter_MP3.H +139 -0
- data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/IIEP_Def.H +206 -0
- data/mpg123/ports/MSVC++/CMP3Stream/INCLUDE/IIEP_FileIn.H +167 -0
- data/mpg123/ports/MSVC++/CMP3Stream/README +4 -0
- data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/CORE_FileIn.CPP +462 -0
- data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/CORE_Log.CPP +122 -0
- data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/CORE_Mutex.CPP +35 -0
- data/mpg123/ports/MSVC++/CMP3Stream/SOURCE/SourceFilter_MP3Stream.CPP +586 -0
- data/mpg123/ports/MSVC++/CMP3Stream/libMPG123/PLACE_LIBMPG123_SOURCES_HERE +0 -0
- data/mpg123/ports/MSVC++/CMP3Stream/libMPG123/libMPG123.vcproj +245 -0
- data/mpg123/ports/MSVC++/config.h +35 -0
- data/mpg123/ports/MSVC++/examples/feedseek.c +240 -0
- data/mpg123/ports/MSVC++/examples/scan.c +47 -0
- data/mpg123/ports/MSVC++/mpg123.h +46 -0
- data/mpg123/ports/MSVC++/msvc.c +59 -0
- data/mpg123/ports/README +26 -0
- data/mpg123/ports/Sony_PSP/Makefile.psp +38 -0
- data/mpg123/ports/Sony_PSP/README +11 -0
- data/mpg123/ports/Sony_PSP/config.h +368 -0
- data/mpg123/ports/Sony_PSP/readers.c.patch +2 -0
- data/mpg123/ports/Xcode/config.h +197 -0
- data/mpg123/ports/Xcode/mpg123.h +17 -0
- data/mpg123/ports/Xcode/mpg123.xcodeproj/project.pbxproj +670 -0
- data/mpg123/ports/mpg123_.pas +478 -0
- data/mpg123/scripts/benchmark-cpu.pl +56 -0
- data/mpg123/scripts/tag_lyrics.py +76 -0
- data/mpg123/src/Makefile.am +186 -0
- data/mpg123/src/Makefile.in +1097 -0
- data/mpg123/src/audio.c +725 -0
- data/mpg123/src/audio.h +106 -0
- data/mpg123/src/buffer.c +312 -0
- data/mpg123/src/buffer.h +45 -0
- data/mpg123/src/common.c +240 -0
- data/mpg123/src/common.h +29 -0
- data/mpg123/src/config.h.in +436 -0
- data/mpg123/src/control_generic.c +809 -0
- data/mpg123/src/equalizer.c +48 -0
- data/mpg123/src/genre.c +271 -0
- data/mpg123/src/genre.h +15 -0
- data/mpg123/src/getlopt.c +148 -0
- data/mpg123/src/getlopt.h +77 -0
- data/mpg123/src/httpget.c +700 -0
- data/mpg123/src/httpget.h +66 -0
- data/mpg123/src/legacy_module.c +74 -0
- data/mpg123/src/libmpg123/Makefile.am +141 -0
- data/mpg123/src/libmpg123/Makefile.in +919 -0
- data/mpg123/src/libmpg123/compat.c +138 -0
- data/mpg123/src/libmpg123/compat.h +178 -0
- data/mpg123/src/libmpg123/dct36_3dnow.S +505 -0
- data/mpg123/src/libmpg123/dct36_3dnowext.S +512 -0
- data/mpg123/src/libmpg123/dct64.c +174 -0
- data/mpg123/src/libmpg123/dct64_3dnow.S +712 -0
- data/mpg123/src/libmpg123/dct64_3dnowext.S +714 -0
- data/mpg123/src/libmpg123/dct64_altivec.c +315 -0
- data/mpg123/src/libmpg123/dct64_i386.c +336 -0
- data/mpg123/src/libmpg123/dct64_i486.c +342 -0
- data/mpg123/src/libmpg123/dct64_mmx.S +811 -0
- data/mpg123/src/libmpg123/dct64_neon.S +297 -0
- data/mpg123/src/libmpg123/dct64_neon_float.S +270 -0
- data/mpg123/src/libmpg123/dct64_sse.S +454 -0
- data/mpg123/src/libmpg123/dct64_sse_float.S +401 -0
- data/mpg123/src/libmpg123/dct64_x86_64.S +464 -0
- data/mpg123/src/libmpg123/dct64_x86_64_float.S +426 -0
- data/mpg123/src/libmpg123/debug.h +171 -0
- data/mpg123/src/libmpg123/decode.h +268 -0
- data/mpg123/src/libmpg123/dither.c +119 -0
- data/mpg123/src/libmpg123/dither.h +23 -0
- data/mpg123/src/libmpg123/equalizer.c +17 -0
- data/mpg123/src/libmpg123/equalizer_3dnow.S +70 -0
- data/mpg123/src/libmpg123/feature.c +106 -0
- data/mpg123/src/libmpg123/format.c +521 -0
- data/mpg123/src/libmpg123/frame.c +1046 -0
- data/mpg123/src/libmpg123/frame.h +410 -0
- data/mpg123/src/libmpg123/gapless.h +119 -0
- data/mpg123/src/libmpg123/getbits.h +100 -0
- data/mpg123/src/libmpg123/getcpuflags.S +91 -0
- data/mpg123/src/libmpg123/getcpuflags.h +47 -0
- data/mpg123/src/libmpg123/huffman.h +340 -0
- data/mpg123/src/libmpg123/icy.c +32 -0
- data/mpg123/src/libmpg123/icy.h +38 -0
- data/mpg123/src/libmpg123/icy2utf8.c +438 -0
- data/mpg123/src/libmpg123/icy2utf8.h +10 -0
- data/mpg123/src/libmpg123/id3.c +999 -0
- data/mpg123/src/libmpg123/id3.h +43 -0
- data/mpg123/src/libmpg123/index.c +134 -0
- data/mpg123/src/libmpg123/index.h +59 -0
- data/mpg123/src/libmpg123/intsym.h +256 -0
- data/mpg123/src/libmpg123/l12_integer_tables.h +278 -0
- data/mpg123/src/libmpg123/l2tables.h +164 -0
- data/mpg123/src/libmpg123/l3_integer_tables.h +1002 -0
- data/mpg123/src/libmpg123/layer1.c +155 -0
- data/mpg123/src/libmpg123/layer2.c +371 -0
- data/mpg123/src/libmpg123/layer3.c +2053 -0
- data/mpg123/src/libmpg123/lfs_alias.c +252 -0
- data/mpg123/src/libmpg123/lfs_wrap.c +751 -0
- data/mpg123/src/libmpg123/libmpg123.c +1607 -0
- data/mpg123/src/libmpg123/mangle.h +74 -0
- data/mpg123/src/libmpg123/mpeghead.h +87 -0
- data/mpg123/src/libmpg123/mpg123.h.in +1075 -0
- data/mpg123/src/libmpg123/mpg123lib_intern.h +338 -0
- data/mpg123/src/libmpg123/ntom.c +148 -0
- data/mpg123/src/libmpg123/optimize.c +964 -0
- data/mpg123/src/libmpg123/optimize.h +219 -0
- data/mpg123/src/libmpg123/parse.c +1179 -0
- data/mpg123/src/libmpg123/parse.h +25 -0
- data/mpg123/src/libmpg123/reader.h +137 -0
- data/mpg123/src/libmpg123/readers.c +1235 -0
- data/mpg123/src/libmpg123/sample.h +152 -0
- data/mpg123/src/libmpg123/stringbuf.c +163 -0
- data/mpg123/src/libmpg123/synth.c +816 -0
- data/mpg123/src/libmpg123/synth.h +196 -0
- data/mpg123/src/libmpg123/synth_3dnow.S +318 -0
- data/mpg123/src/libmpg123/synth_3dnowext.S +6 -0
- data/mpg123/src/libmpg123/synth_8bit.c +142 -0
- data/mpg123/src/libmpg123/synth_8bit.h +86 -0
- data/mpg123/src/libmpg123/synth_altivec.c +1057 -0
- data/mpg123/src/libmpg123/synth_arm.S +271 -0
- data/mpg123/src/libmpg123/synth_arm_accurate.S +287 -0
- data/mpg123/src/libmpg123/synth_i486.c +252 -0
- data/mpg123/src/libmpg123/synth_i586.S +336 -0
- data/mpg123/src/libmpg123/synth_i586_dither.S +375 -0
- data/mpg123/src/libmpg123/synth_mmx.S +125 -0
- data/mpg123/src/libmpg123/synth_mono.h +64 -0
- data/mpg123/src/libmpg123/synth_neon.S +123 -0
- data/mpg123/src/libmpg123/synth_neon_accurate.S +173 -0
- data/mpg123/src/libmpg123/synth_neon_float.S +149 -0
- data/mpg123/src/libmpg123/synth_neon_s32.S +168 -0
- data/mpg123/src/libmpg123/synth_ntom.h +213 -0
- data/mpg123/src/libmpg123/synth_real.c +404 -0
- data/mpg123/src/libmpg123/synth_s32.c +411 -0
- data/mpg123/src/libmpg123/synth_sse.S +6 -0
- data/mpg123/src/libmpg123/synth_sse3d.h +246 -0
- data/mpg123/src/libmpg123/synth_sse_accurate.S +294 -0
- data/mpg123/src/libmpg123/synth_sse_float.S +241 -0
- data/mpg123/src/libmpg123/synth_sse_s32.S +306 -0
- data/mpg123/src/libmpg123/synth_stereo_neon.S +175 -0
- data/mpg123/src/libmpg123/synth_stereo_neon_accurate.S +262 -0
- data/mpg123/src/libmpg123/synth_stereo_neon_float.S +220 -0
- data/mpg123/src/libmpg123/synth_stereo_neon_s32.S +247 -0
- data/mpg123/src/libmpg123/synth_stereo_sse_accurate.S +508 -0
- data/mpg123/src/libmpg123/synth_stereo_sse_float.S +416 -0
- data/mpg123/src/libmpg123/synth_stereo_sse_s32.S +540 -0
- data/mpg123/src/libmpg123/synth_stereo_x86_64.S +335 -0
- data/mpg123/src/libmpg123/synth_stereo_x86_64_accurate.S +454 -0
- data/mpg123/src/libmpg123/synth_stereo_x86_64_float.S +396 -0
- data/mpg123/src/libmpg123/synth_stereo_x86_64_s32.S +473 -0
- data/mpg123/src/libmpg123/synth_x86_64.S +244 -0
- data/mpg123/src/libmpg123/synth_x86_64_accurate.S +301 -0
- data/mpg123/src/libmpg123/synth_x86_64_float.S +259 -0
- data/mpg123/src/libmpg123/synth_x86_64_s32.S +312 -0
- data/mpg123/src/libmpg123/synths.h +52 -0
- data/mpg123/src/libmpg123/tabinit.c +294 -0
- data/mpg123/src/libmpg123/tabinit_mmx.S +210 -0
- data/mpg123/src/libmpg123/testcpu.c +35 -0
- data/mpg123/src/libmpg123/true.h +14 -0
- data/mpg123/src/local.c +63 -0
- data/mpg123/src/local.h +21 -0
- data/mpg123/src/metaprint.c +373 -0
- data/mpg123/src/metaprint.h +17 -0
- data/mpg123/src/module.c +306 -0
- data/mpg123/src/module.h +48 -0
- data/mpg123/src/mpg123.c +1405 -0
- data/mpg123/src/mpg123app.h +171 -0
- data/mpg123/src/output/Makefile.am +213 -0
- data/mpg123/src/output/Makefile.in +1238 -0
- data/mpg123/src/output/aix.c +300 -0
- data/mpg123/src/output/alib.c +209 -0
- data/mpg123/src/output/alsa.c +297 -0
- data/mpg123/src/output/arts.c +117 -0
- data/mpg123/src/output/coreaudio.c +370 -0
- data/mpg123/src/output/dummy.c +78 -0
- data/mpg123/src/output/esd.c +167 -0
- data/mpg123/src/output/hp.c +184 -0
- data/mpg123/src/output/jack.c +450 -0
- data/mpg123/src/output/mint.c +197 -0
- data/mpg123/src/output/nas.c +335 -0
- data/mpg123/src/output/openal.c +197 -0
- data/mpg123/src/output/os2.c +665 -0
- data/mpg123/src/output/oss.c +319 -0
- data/mpg123/src/output/portaudio.c +255 -0
- data/mpg123/src/output/pulse.c +164 -0
- data/mpg123/src/output/sdl.c +206 -0
- data/mpg123/src/output/sgi.c +213 -0
- data/mpg123/src/output/sndio.c +161 -0
- data/mpg123/src/output/sun.c +281 -0
- data/mpg123/src/output/win32.c +229 -0
- data/mpg123/src/playlist.c +596 -0
- data/mpg123/src/playlist.h +52 -0
- data/mpg123/src/resolver.c +319 -0
- data/mpg123/src/resolver.h +25 -0
- data/mpg123/src/sfifo.c +146 -0
- data/mpg123/src/sfifo.h +95 -0
- data/mpg123/src/streamdump.c +74 -0
- data/mpg123/src/streamdump.h +20 -0
- data/mpg123/src/term.c +479 -0
- data/mpg123/src/term.h +81 -0
- data/mpg123/src/tests/noise.c +52 -0
- data/mpg123/src/tests/plain_id3.c +109 -0
- data/mpg123/src/tests/seek_accuracy.c +261 -0
- data/mpg123/src/tests/seek_whence.c +56 -0
- data/mpg123/src/tests/testtext.h +34 -0
- data/mpg123/src/tests/text.c +80 -0
- data/mpg123/src/wav.c +464 -0
- data/mpg123/src/wavhead.h +68 -0
- data/mpg123/src/win32_net.c +599 -0
- data/mpg123/src/win32_support.c +191 -0
- data/mpg123/src/win32_support.h +152 -0
- data/mpg123/src/xfermem.c +321 -0
- data/mpg123/src/xfermem.h +74 -0
- data/mpg123/windows-builds.sh +137 -0
- data/msvc/lib/OpenAL32.lib +0 -0
- data/spec/fixtures/heal.ogg +0 -0
- data/spec/fixtures/tone_up.wav +0 -0
- data/spec/seal/buffer_spec.rb +37 -0
- data/spec/seal/core_spec.rb +29 -0
- data/spec/seal/effect_slot_spec.rb +38 -0
- data/spec/seal/listener_spec.rb +33 -0
- data/spec/seal/reverb_spec.rb +51 -0
- data/spec/seal/source_spec.rb +370 -0
- data/spec/seal/stream_spec.rb +38 -0
- data/spec/spec_helper.rb +45 -0
- data/spec/support/attribute_examples.rb +75 -0
- data/spec/support/audio_object_with_format.rb +27 -0
- data/spec/support/movable_object.rb +22 -0
- data/src/libogg/bitwise.c +857 -0
- data/src/libogg/framing.c +2093 -0
- data/src/libvorbis/backends.h +144 -0
- data/src/libvorbis/bitrate.c +253 -0
- data/src/libvorbis/bitrate.h +59 -0
- data/src/libvorbis/block.c +1046 -0
- data/src/libvorbis/codebook.c +484 -0
- data/src/libvorbis/codebook.h +119 -0
- data/src/libvorbis/codec_internal.h +167 -0
- data/src/libvorbis/envelope.c +375 -0
- data/src/libvorbis/envelope.h +80 -0
- data/src/libvorbis/floor0.c +221 -0
- data/src/libvorbis/floor1.c +1100 -0
- data/src/libvorbis/highlevel.h +58 -0
- data/src/libvorbis/info.c +668 -0
- data/src/libvorbis/lookup.c +94 -0
- data/src/libvorbis/lookup.h +32 -0
- data/src/libvorbis/lookup_data.h +192 -0
- data/src/libvorbis/lpc.c +160 -0
- data/src/libvorbis/lpc.h +29 -0
- data/src/libvorbis/lsp.c +456 -0
- data/src/libvorbis/lsp.h +28 -0
- data/src/libvorbis/mapping0.c +816 -0
- data/src/libvorbis/masking.h +785 -0
- data/src/libvorbis/mdct.c +563 -0
- data/src/libvorbis/mdct.h +71 -0
- data/src/libvorbis/misc.h +57 -0
- data/src/libvorbis/os.h +186 -0
- data/src/libvorbis/psy.c +1206 -0
- data/src/libvorbis/psy.h +154 -0
- data/src/libvorbis/registry.c +45 -0
- data/src/libvorbis/registry.h +32 -0
- data/src/libvorbis/res0.c +889 -0
- data/src/libvorbis/scales.h +90 -0
- data/src/libvorbis/sharedbook.c +579 -0
- data/src/libvorbis/smallft.c +1255 -0
- data/src/libvorbis/smallft.h +34 -0
- data/src/libvorbis/synthesis.c +184 -0
- data/src/libvorbis/vorbisfile.c +2337 -0
- data/src/libvorbis/window.c +2135 -0
- data/src/libvorbis/window.h +26 -0
- data/src/rubyext.c +2329 -0
- data/src/seal/buf.c +124 -0
- data/src/seal/core.c +283 -0
- data/src/seal/efs.c +74 -0
- data/src/seal/err.c +118 -0
- data/src/seal/fmt.c +86 -0
- data/src/seal/listener.c +111 -0
- data/src/seal/mpg.c +174 -0
- data/src/seal/mpg.h +24 -0
- data/src/seal/ov.c +180 -0
- data/src/seal/ov.h +22 -0
- data/src/seal/raw.c +59 -0
- data/src/seal/reader.c +102 -0
- data/src/seal/reader.h +59 -0
- data/src/seal/rvb.c +368 -0
- data/src/seal/src.c +654 -0
- data/src/seal/stream.c +109 -0
- data/src/seal/threading.c +66 -0
- data/src/seal/threading.h +20 -0
- data/src/seal/wav.c +297 -0
- data/src/seal/wav.h +23 -0
- data/src/win32api.rb +29 -0
- metadata +563 -0
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
/*
|
|
2
|
+
mpg123lib_intern: Common non-public stuff for libmpg123
|
|
3
|
+
|
|
4
|
+
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
|
|
5
|
+
see COPYING and AUTHORS files in distribution or http://mpg123.org
|
|
6
|
+
|
|
7
|
+
derived from the old mpg123.h
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
#ifndef MPG123_H_INTERN
|
|
11
|
+
#define MPG123_H_INTERN
|
|
12
|
+
|
|
13
|
+
#define MPG123_RATES 9
|
|
14
|
+
#define MPG123_ENCODINGS 12
|
|
15
|
+
|
|
16
|
+
#include "config.h" /* Load this before _anything_ */
|
|
17
|
+
#include "intsym.h" /* Prefixing of internal symbols that still are public in a static lib. */
|
|
18
|
+
|
|
19
|
+
/* ABI conformance for other compilers.
|
|
20
|
+
mpg123 needs 16byte-aligned stack for SSE and friends.
|
|
21
|
+
gcc provides that, but others don't necessarily. */
|
|
22
|
+
#ifdef ABI_ALIGN_FUN
|
|
23
|
+
#ifndef attribute_align_arg
|
|
24
|
+
#if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__>1)
|
|
25
|
+
# define attribute_align_arg __attribute__((force_align_arg_pointer))
|
|
26
|
+
/* The gcc that can align the stack does not need the check... nor does it work with gcc 4.3+, anyway. */
|
|
27
|
+
#else
|
|
28
|
+
|
|
29
|
+
# define attribute_align_arg
|
|
30
|
+
/* Other compilers get code to catch misaligned stack.
|
|
31
|
+
Well, except Sun Studio, which accepts the aligned attribute but does not honor it. */
|
|
32
|
+
#if !defined(__SUNPRO_C)
|
|
33
|
+
# define NEED_ALIGNCHECK
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
#endif
|
|
37
|
+
#endif
|
|
38
|
+
#else
|
|
39
|
+
#define attribute_align_arg
|
|
40
|
+
/* We won't try the align check... */
|
|
41
|
+
#endif
|
|
42
|
+
|
|
43
|
+
/* export DLL symbols */
|
|
44
|
+
#if defined(WIN32) && defined(DYNAMIC_BUILD)
|
|
45
|
+
#define BUILD_MPG123_DLL
|
|
46
|
+
#endif
|
|
47
|
+
#include "compat.h"
|
|
48
|
+
#include "mpg123.h"
|
|
49
|
+
|
|
50
|
+
#define SKIP_JUNK 1
|
|
51
|
+
|
|
52
|
+
#ifndef M_PI
|
|
53
|
+
# define M_PI 3.14159265358979323846
|
|
54
|
+
#endif
|
|
55
|
+
#ifndef M_SQRT2
|
|
56
|
+
# define M_SQRT2 1.41421356237309504880
|
|
57
|
+
#endif
|
|
58
|
+
|
|
59
|
+
#ifdef SUNOS
|
|
60
|
+
#define memmove(dst,src,size) bcopy(src,dst,size)
|
|
61
|
+
#endif
|
|
62
|
+
|
|
63
|
+
/* some stuff has to go back to mpg123.h */
|
|
64
|
+
#ifdef REAL_IS_FLOAT
|
|
65
|
+
# define real float
|
|
66
|
+
# define REAL_SCANF "%f"
|
|
67
|
+
# define REAL_PRINTF "%f"
|
|
68
|
+
#elif defined(REAL_IS_LONG_DOUBLE)
|
|
69
|
+
# define real long double
|
|
70
|
+
# define REAL_SCANF "%Lf"
|
|
71
|
+
# define REAL_PRINTF "%Lf"
|
|
72
|
+
#elif defined(REAL_IS_FIXED)
|
|
73
|
+
/* Disable some output formats for fixed point decoder... */
|
|
74
|
+
|
|
75
|
+
# define real long
|
|
76
|
+
|
|
77
|
+
/*
|
|
78
|
+
for fixed-point decoders, use pre-calculated tables to avoid expensive floating-point maths
|
|
79
|
+
undef this macro for run-time calculation
|
|
80
|
+
*/
|
|
81
|
+
#define PRECALC_TABLES
|
|
82
|
+
|
|
83
|
+
# define REAL_RADIX 24
|
|
84
|
+
# define REAL_FACTOR 16777216.0
|
|
85
|
+
|
|
86
|
+
static inline long double_to_long_rounded(double x, double scalefac)
|
|
87
|
+
{
|
|
88
|
+
x *= scalefac;
|
|
89
|
+
x += (x > 0) ? 0.5 : -0.5;
|
|
90
|
+
return (long)x;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
static inline long scale_rounded(long x, int shift)
|
|
94
|
+
{
|
|
95
|
+
x += (x >> 31);
|
|
96
|
+
x >>= (shift - 1);
|
|
97
|
+
x += (x & 1);
|
|
98
|
+
return (x >> 1);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
# ifdef __GNUC__
|
|
102
|
+
# if defined(OPT_I386)
|
|
103
|
+
/* for i386_nofpu decoder */
|
|
104
|
+
# define REAL_MUL_ASM(x, y, radix) \
|
|
105
|
+
({ \
|
|
106
|
+
long _x=(x), _y=(y); \
|
|
107
|
+
__asm__ ( \
|
|
108
|
+
"imull %1 \n\t" \
|
|
109
|
+
"shrdl %2, %%edx, %0 \n\t" \
|
|
110
|
+
: "+&a" (_x) \
|
|
111
|
+
: "mr" (_y), "I" (radix) \
|
|
112
|
+
: "%edx", "cc" \
|
|
113
|
+
); \
|
|
114
|
+
_x; \
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
# define REAL_MUL_SCALE_LAYER3_ASM(x, y, radix) \
|
|
118
|
+
({ \
|
|
119
|
+
long _x=(x), _y=(y), _radix=(radix); \
|
|
120
|
+
__asm__ ( \
|
|
121
|
+
"imull %1 \n\t" \
|
|
122
|
+
"shrdl %%cl, %%edx, %0 \n\t" \
|
|
123
|
+
: "+&a" (_x) \
|
|
124
|
+
: "mr" (_y), "c" (_radix) \
|
|
125
|
+
: "%edx", "cc" \
|
|
126
|
+
); \
|
|
127
|
+
_x; \
|
|
128
|
+
})
|
|
129
|
+
# elif defined(OPT_PPC)
|
|
130
|
+
/* for powerpc */
|
|
131
|
+
# define REAL_MUL_ASM(x, y, radix) \
|
|
132
|
+
({ \
|
|
133
|
+
long _x=(x), _y=(y), _mull, _mulh; \
|
|
134
|
+
__asm__ ( \
|
|
135
|
+
"mullw %0, %2, %3 \n\t" \
|
|
136
|
+
"mulhw %1, %2, %3 \n\t" \
|
|
137
|
+
"srwi %0, %0, %4 \n\t" \
|
|
138
|
+
"rlwimi %0, %1, %5, 0, %6 \n\t" \
|
|
139
|
+
: "=&r" (_mull), "=&r" (_mulh) \
|
|
140
|
+
: "r" (_x), "r" (_y), "i" (radix), "i" (32-(radix)), "i" ((radix)-1) \
|
|
141
|
+
); \
|
|
142
|
+
_mull; \
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
# define REAL_MUL_SCALE_LAYER3_ASM(x, y, radix) \
|
|
146
|
+
({ \
|
|
147
|
+
long _x=(x), _y=(y), _radix=(radix), _mull, _mulh, _radix2; \
|
|
148
|
+
__asm__ ( \
|
|
149
|
+
"mullw %0, %3, %4 \n\t" \
|
|
150
|
+
"mulhw %1, %3, %4 \n\t" \
|
|
151
|
+
"subfic %2, %5, 32 \n\t" \
|
|
152
|
+
"srw %0, %0, %5 \n\t" \
|
|
153
|
+
"slw %1, %1, %2 \n\t" \
|
|
154
|
+
"or %0, %0, %1 \n\t" \
|
|
155
|
+
: "=&r" (_mull), "=&r" (_mulh), "=&r" (_radix2) \
|
|
156
|
+
: "r" (_x), "r" (_y), "r" (_radix) \
|
|
157
|
+
: "cc" \
|
|
158
|
+
); \
|
|
159
|
+
_mull; \
|
|
160
|
+
})
|
|
161
|
+
# elif defined(OPT_ARM)
|
|
162
|
+
/* for arm */
|
|
163
|
+
# define REAL_MUL_ASM(x, y, radix) \
|
|
164
|
+
({ \
|
|
165
|
+
long _x=(x), _y=(y), _mull, _mulh; \
|
|
166
|
+
__asm__ ( \
|
|
167
|
+
"smull %0, %1, %2, %3 \n\t" \
|
|
168
|
+
"mov %0, %0, lsr %4 \n\t" \
|
|
169
|
+
"orr %0, %0, %1, lsl %5 \n\t" \
|
|
170
|
+
: "=&r" (_mull), "=&r" (_mulh) \
|
|
171
|
+
: "r" (_x), "r" (_y), "M" (radix), "M" (32-(radix)) \
|
|
172
|
+
); \
|
|
173
|
+
_mull; \
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
# define REAL_MUL_SCALE_LAYER3_ASM(x, y, radix) \
|
|
177
|
+
({ \
|
|
178
|
+
long _x=(x), _y=(y), _radix=(radix), _mull, _mulh, _radix2; \
|
|
179
|
+
__asm__ ( \
|
|
180
|
+
"smull %0, %1, %3, %4 \n\t" \
|
|
181
|
+
"mov %0, %0, lsr %5 \n\t" \
|
|
182
|
+
"rsb %2, %5, #32 \n\t" \
|
|
183
|
+
"mov %1, %1, lsl %2 \n\t" \
|
|
184
|
+
"orr %0, %0, %1 \n\t" \
|
|
185
|
+
: "=&r" (_mull), "=&r" (_mulh), "=&r" (_radix2) \
|
|
186
|
+
: "r" (_x), "r" (_y), "r" (_radix) \
|
|
187
|
+
); \
|
|
188
|
+
_mull; \
|
|
189
|
+
})
|
|
190
|
+
# endif
|
|
191
|
+
# endif
|
|
192
|
+
|
|
193
|
+
/* I just changed the (int) to (long) there... seemed right. */
|
|
194
|
+
# define DOUBLE_TO_REAL(x) (double_to_long_rounded(x, REAL_FACTOR))
|
|
195
|
+
# define DOUBLE_TO_REAL_15(x) (double_to_long_rounded(x, 32768.0))
|
|
196
|
+
# define DOUBLE_TO_REAL_POW43(x) (double_to_long_rounded(x, 8192.0))
|
|
197
|
+
# define DOUBLE_TO_REAL_SCALE_LAYER12(x) (double_to_long_rounded(x, 1073741824.0))
|
|
198
|
+
# define DOUBLE_TO_REAL_SCALE_LAYER3(x, y) (double_to_long_rounded(x, pow(2.0,gainpow2_scale[y])))
|
|
199
|
+
# define REAL_TO_DOUBLE(x) ((double)(x) / REAL_FACTOR)
|
|
200
|
+
# ifdef REAL_MUL_ASM
|
|
201
|
+
# define REAL_MUL(x, y) REAL_MUL_ASM(x, y, REAL_RADIX)
|
|
202
|
+
# define REAL_MUL_15(x, y) REAL_MUL_ASM(x, y, 15)
|
|
203
|
+
# define REAL_MUL_SCALE_LAYER12(x, y) REAL_MUL_ASM(x, y, 15 + 30 - REAL_RADIX)
|
|
204
|
+
# else
|
|
205
|
+
# define REAL_MUL(x, y) (((long long)(x) * (long long)(y)) >> REAL_RADIX)
|
|
206
|
+
# define REAL_MUL_15(x, y) (((long long)(x) * (long long)(y)) >> 15)
|
|
207
|
+
# define REAL_MUL_SCALE_LAYER12(x, y) (((long long)(x) * (long long)(y)) >> (15 + 30 - REAL_RADIX))
|
|
208
|
+
# endif
|
|
209
|
+
# ifdef REAL_MUL_SCALE_LAYER3_ASM
|
|
210
|
+
# define REAL_MUL_SCALE_LAYER3(x, y, z) REAL_MUL_SCALE_LAYER3_ASM(x, y, 13 + gainpow2_scale[z] - REAL_RADIX)
|
|
211
|
+
# else
|
|
212
|
+
# define REAL_MUL_SCALE_LAYER3(x, y, z) (((long long)(x) * (long long)(y)) >> (13 + gainpow2_scale[z] - REAL_RADIX))
|
|
213
|
+
# endif
|
|
214
|
+
# define REAL_SCALE_LAYER12(x) ((long)((x) >> (30 - REAL_RADIX)))
|
|
215
|
+
# define REAL_SCALE_LAYER3(x, y) ((long)((x) >> (gainpow2_scale[y] - REAL_RADIX)))
|
|
216
|
+
# ifdef ACCURATE_ROUNDING
|
|
217
|
+
# define REAL_MUL_SYNTH(x, y) REAL_MUL(x, y)
|
|
218
|
+
# define REAL_SCALE_DCT64(x) (x)
|
|
219
|
+
# define REAL_SCALE_WINDOW(x) (x)
|
|
220
|
+
# else
|
|
221
|
+
# define REAL_MUL_SYNTH(x, y) ((x) * (y))
|
|
222
|
+
# define REAL_SCALE_DCT64(x) ((x) >> 8)
|
|
223
|
+
# define REAL_SCALE_WINDOW(x) scale_rounded(x, 16)
|
|
224
|
+
# endif
|
|
225
|
+
# define REAL_SCANF "%ld"
|
|
226
|
+
# define REAL_PRINTF "%ld"
|
|
227
|
+
|
|
228
|
+
#else
|
|
229
|
+
# define real double
|
|
230
|
+
# define REAL_SCANF "%lf"
|
|
231
|
+
# define REAL_PRINTF "%f"
|
|
232
|
+
#endif
|
|
233
|
+
|
|
234
|
+
#ifndef REAL_IS_FIXED
|
|
235
|
+
# if (defined SIZEOF_INT32_T) && (SIZEOF_INT32_T != 4)
|
|
236
|
+
# error "Bad 32bit types!!!"
|
|
237
|
+
# endif
|
|
238
|
+
#endif
|
|
239
|
+
|
|
240
|
+
#ifndef DOUBLE_TO_REAL
|
|
241
|
+
# define DOUBLE_TO_REAL(x) (real)(x)
|
|
242
|
+
#endif
|
|
243
|
+
#ifndef DOUBLE_TO_REAL_15
|
|
244
|
+
# define DOUBLE_TO_REAL_15(x) (real)(x)
|
|
245
|
+
#endif
|
|
246
|
+
#ifndef DOUBLE_TO_REAL_POW43
|
|
247
|
+
# define DOUBLE_TO_REAL_POW43(x) (real)(x)
|
|
248
|
+
#endif
|
|
249
|
+
#ifndef DOUBLE_TO_REAL_SCALE_LAYER12
|
|
250
|
+
# define DOUBLE_TO_REAL_SCALE_LAYER12(x) (real)(x)
|
|
251
|
+
#endif
|
|
252
|
+
#ifndef DOUBLE_TO_REAL_SCALE_LAYER3
|
|
253
|
+
# define DOUBLE_TO_REAL_SCALE_LAYER3(x, y) (real)(x)
|
|
254
|
+
#endif
|
|
255
|
+
#ifndef REAL_TO_DOUBLE
|
|
256
|
+
# define REAL_TO_DOUBLE(x) (x)
|
|
257
|
+
#endif
|
|
258
|
+
|
|
259
|
+
#ifndef REAL_MUL
|
|
260
|
+
# define REAL_MUL(x, y) ((x) * (y))
|
|
261
|
+
#endif
|
|
262
|
+
#ifndef REAL_MUL_SYNTH
|
|
263
|
+
# define REAL_MUL_SYNTH(x, y) ((x) * (y))
|
|
264
|
+
#endif
|
|
265
|
+
#ifndef REAL_MUL_15
|
|
266
|
+
# define REAL_MUL_15(x, y) ((x) * (y))
|
|
267
|
+
#endif
|
|
268
|
+
#ifndef REAL_MUL_SCALE_LAYER12
|
|
269
|
+
# define REAL_MUL_SCALE_LAYER12(x, y) ((x) * (y))
|
|
270
|
+
#endif
|
|
271
|
+
#ifndef REAL_MUL_SCALE_LAYER3
|
|
272
|
+
# define REAL_MUL_SCALE_LAYER3(x, y, z) ((x) * (y))
|
|
273
|
+
#endif
|
|
274
|
+
#ifndef REAL_SCALE_LAYER12
|
|
275
|
+
# define REAL_SCALE_LAYER12(x) (x)
|
|
276
|
+
#endif
|
|
277
|
+
#ifndef REAL_SCALE_LAYER3
|
|
278
|
+
# define REAL_SCALE_LAYER3(x, y) (x)
|
|
279
|
+
#endif
|
|
280
|
+
#ifndef REAL_SCALE_DCT64
|
|
281
|
+
# define REAL_SCALE_DCT64(x) (x)
|
|
282
|
+
#endif
|
|
283
|
+
|
|
284
|
+
/* used to be: AUDIOBUFSIZE = n*64 with n=1,2,3 ...
|
|
285
|
+
now: factor on minimum frame buffer size (which takes upsampling into account) */
|
|
286
|
+
#define AUDIOBUFSIZE 2
|
|
287
|
+
|
|
288
|
+
#include "true.h"
|
|
289
|
+
|
|
290
|
+
#define MAX_NAME_SIZE 81
|
|
291
|
+
#define SBLIMIT 32
|
|
292
|
+
#define SCALE_BLOCK 12
|
|
293
|
+
#define SSLIMIT 18
|
|
294
|
+
|
|
295
|
+
/* Same as MPG_M_* */
|
|
296
|
+
#define MPG_MD_STEREO 0
|
|
297
|
+
#define MPG_MD_JOINT_STEREO 1
|
|
298
|
+
#define MPG_MD_DUAL_CHANNEL 2
|
|
299
|
+
#define MPG_MD_MONO 3
|
|
300
|
+
|
|
301
|
+
/* We support short or float output samples...
|
|
302
|
+
Short integer amplitude is scaled by this. */
|
|
303
|
+
#define SHORT_SCALE 32768
|
|
304
|
+
/* That scales a short-scaled value to a 32bit integer scaled one
|
|
305
|
+
value = 2**31/2**15 */
|
|
306
|
+
#define S32_RESCALE 65536
|
|
307
|
+
|
|
308
|
+
/* Pre Shift fo 16 to 8 bit converter table */
|
|
309
|
+
#define AUSHIFT (3)
|
|
310
|
+
|
|
311
|
+
#include "optimize.h"
|
|
312
|
+
#include "decode.h"
|
|
313
|
+
#include "parse.h"
|
|
314
|
+
#include "frame.h"
|
|
315
|
+
|
|
316
|
+
/* fr is a mpg123_handle* by convention here... */
|
|
317
|
+
#define NOQUIET (!(fr->p.flags & MPG123_QUIET))
|
|
318
|
+
#define VERBOSE (NOQUIET && fr->p.verbose)
|
|
319
|
+
#define VERBOSE2 (NOQUIET && fr->p.verbose > 1)
|
|
320
|
+
#define VERBOSE3 (NOQUIET && fr->p.verbose > 2)
|
|
321
|
+
#define VERBOSE4 (NOQUIET && fr->p.verbose > 3)
|
|
322
|
+
#define PVERB(mp, level) (!((mp)->flags & MPG123_QUIET) && (mp)->verbose >= (level))
|
|
323
|
+
|
|
324
|
+
int decode_update(mpg123_handle *mh);
|
|
325
|
+
/* residing in format.c */
|
|
326
|
+
off_t samples_to_storage(mpg123_handle *fr , off_t s);
|
|
327
|
+
off_t samples_to_bytes(mpg123_handle *fr , off_t s);
|
|
328
|
+
off_t bytes_to_samples(mpg123_handle *fr , off_t b);
|
|
329
|
+
/* Postprocessing format conversion of freshly decoded buffer. */
|
|
330
|
+
void postprocess_buffer(mpg123_handle *fr);
|
|
331
|
+
|
|
332
|
+
/* If networking is enabled and we really mean internal networking, the timeout_read function is available. */
|
|
333
|
+
#if defined (NETWORK) && !defined (WANT_WIN32_SOCKETS)
|
|
334
|
+
/* Does not work with win32 */
|
|
335
|
+
#define TIMEOUT_READ
|
|
336
|
+
#endif
|
|
337
|
+
|
|
338
|
+
#endif
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/*
|
|
2
|
+
ntom.c: N->M down/up sampling; the setup code.
|
|
3
|
+
|
|
4
|
+
copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
|
|
5
|
+
see COPYING and AUTHORS files in distribution or http://mpg123.org
|
|
6
|
+
initially written by Michael Hipp
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#define SAFE_NTOM /* Do not depend on off_t*off_t with big values still being in the range... */
|
|
10
|
+
#include "mpg123lib_intern.h"
|
|
11
|
+
#include "debug.h"
|
|
12
|
+
|
|
13
|
+
int synth_ntom_set_step(mpg123_handle *fr)
|
|
14
|
+
{
|
|
15
|
+
long m,n;
|
|
16
|
+
m = frame_freq(fr);
|
|
17
|
+
n = fr->af.rate;
|
|
18
|
+
if(VERBOSE2)
|
|
19
|
+
fprintf(stderr,"Init rate converter: %ld->%ld\n",m,n);
|
|
20
|
+
|
|
21
|
+
if(n > NTOM_MAX_FREQ || m > NTOM_MAX_FREQ || m <= 0 || n <= 0) {
|
|
22
|
+
if(NOQUIET) error("NtoM converter: illegal rates");
|
|
23
|
+
fr->err = MPG123_BAD_RATE;
|
|
24
|
+
return -1;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
n *= NTOM_MUL;
|
|
28
|
+
fr->ntom_step = (unsigned long) n / m;
|
|
29
|
+
|
|
30
|
+
if(fr->ntom_step > (unsigned long)NTOM_MAX*NTOM_MUL) {
|
|
31
|
+
if(NOQUIET) error3("max. 1:%i conversion allowed (%lu vs %lu)!", NTOM_MAX, fr->ntom_step, (unsigned long)8*NTOM_MUL);
|
|
32
|
+
fr->err = MPG123_BAD_RATE;
|
|
33
|
+
return -1;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
fr->ntom_val[0] = fr->ntom_val[1] = ntom_val(fr, fr->num);
|
|
37
|
+
return 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/*
|
|
41
|
+
The SAFE_NTOM does iterative loops instead of straight multiplication.
|
|
42
|
+
The safety is not just about the algorithm closely mimicking the decoder instead of applying some formula,
|
|
43
|
+
it is more about avoiding multiplication of possibly big sample offsets (a 32bit off_t could overflow too easily).
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
unsigned long ntom_val(mpg123_handle *fr, off_t frame)
|
|
47
|
+
{
|
|
48
|
+
off_t ntm;
|
|
49
|
+
#ifdef SAFE_NTOM /* Carry out the loop, without the threatening integer overflow. */
|
|
50
|
+
off_t f;
|
|
51
|
+
ntm = NTOM_MUL>>1; /* for frame 0 */
|
|
52
|
+
for(f=0; f<frame; ++f) /* for frame > 0 */
|
|
53
|
+
{
|
|
54
|
+
ntm += spf(fr)*fr->ntom_step;
|
|
55
|
+
ntm -= (ntm/NTOM_MUL)*NTOM_MUL;
|
|
56
|
+
}
|
|
57
|
+
#else /* Just make one computation with overall sample offset. */
|
|
58
|
+
ntm = (NTOM_MUL>>1) + spf(fr)*frame*fr->ntom_step;
|
|
59
|
+
ntm -= (ntm/NTOM_MUL)*NTOM_MUL;
|
|
60
|
+
#endif
|
|
61
|
+
return (unsigned long) ntm;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* Set the ntom value for next expected frame to be decoded.
|
|
65
|
+
This is for keeping output consistent across seeks. */
|
|
66
|
+
void ntom_set_ntom(mpg123_handle *fr, off_t num)
|
|
67
|
+
{
|
|
68
|
+
fr->ntom_val[1] = fr->ntom_val[0] = ntom_val(fr, num);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* Carry out the ntom sample count operation for this one frame.
|
|
72
|
+
No fear of integer overflow here. */
|
|
73
|
+
off_t ntom_frame_outsamples(mpg123_handle *fr)
|
|
74
|
+
{
|
|
75
|
+
/* The do this before decoding the separate channels, so there is only one common ntom value. */
|
|
76
|
+
int ntm = fr->ntom_val[0];
|
|
77
|
+
ntm += spf(fr)*fr->ntom_step;
|
|
78
|
+
return ntm/NTOM_MUL;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* Convert frame offset to unadjusted output sample offset. */
|
|
82
|
+
off_t ntom_frmouts(mpg123_handle *fr, off_t frame)
|
|
83
|
+
{
|
|
84
|
+
#ifdef SAFE_NTOM
|
|
85
|
+
off_t f;
|
|
86
|
+
#endif
|
|
87
|
+
off_t soff = 0;
|
|
88
|
+
off_t ntm = ntom_val(fr,0);
|
|
89
|
+
#ifdef SAFE_NTOM
|
|
90
|
+
if(frame <= 0) return 0;
|
|
91
|
+
for(f=0; f<frame; ++f)
|
|
92
|
+
{
|
|
93
|
+
ntm += spf(fr)*fr->ntom_step;
|
|
94
|
+
soff += ntm/NTOM_MUL;
|
|
95
|
+
ntm -= (ntm/NTOM_MUL)*NTOM_MUL;
|
|
96
|
+
}
|
|
97
|
+
#else
|
|
98
|
+
soff = (ntm + frame*(off_t)spf(fr)*(off_t)fr->ntom_step)/(off_t)NTOM_MUL;
|
|
99
|
+
#endif
|
|
100
|
+
return soff;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* Convert input samples to unadjusted output samples. */
|
|
104
|
+
off_t ntom_ins2outs(mpg123_handle *fr, off_t ins)
|
|
105
|
+
{
|
|
106
|
+
off_t soff = 0;
|
|
107
|
+
off_t ntm = ntom_val(fr,0);
|
|
108
|
+
#ifdef SAFE_NTOM
|
|
109
|
+
{
|
|
110
|
+
off_t block = spf(fr);
|
|
111
|
+
if(ins <= 0) return 0;
|
|
112
|
+
do
|
|
113
|
+
{
|
|
114
|
+
off_t nowblock = ins > block ? block : ins;
|
|
115
|
+
ntm += nowblock*fr->ntom_step;
|
|
116
|
+
soff += ntm/NTOM_MUL;
|
|
117
|
+
ntm -= (ntm/NTOM_MUL)*NTOM_MUL;
|
|
118
|
+
ins -= nowblock;
|
|
119
|
+
} while(ins > 0);
|
|
120
|
+
}
|
|
121
|
+
#else
|
|
122
|
+
/* Beware of overflows: when off_t is 32bits, the multiplication blows too easily.
|
|
123
|
+
Of course, it blows for 64bits, too, in theory, but that's for _really_ large files. */
|
|
124
|
+
soff = ((off_t)ntm + (off_t)ins*(off_t)fr->ntom_step)/(off_t)NTOM_MUL;
|
|
125
|
+
#endif
|
|
126
|
+
return soff;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* Determine frame offset from unadjusted output sample offset. */
|
|
130
|
+
off_t ntom_frameoff(mpg123_handle *fr, off_t soff)
|
|
131
|
+
{
|
|
132
|
+
off_t ioff = 0; /* frames or samples */
|
|
133
|
+
off_t ntm = ntom_val(fr,0);
|
|
134
|
+
#ifdef SAFE_NTOM
|
|
135
|
+
if(soff <= 0) return 0;
|
|
136
|
+
for(ioff=0; 1; ++ioff)
|
|
137
|
+
{
|
|
138
|
+
ntm += spf(fr)*fr->ntom_step;
|
|
139
|
+
if(ntm/NTOM_MUL > soff) break;
|
|
140
|
+
soff -= ntm/NTOM_MUL;
|
|
141
|
+
ntm -= (ntm/NTOM_MUL)*NTOM_MUL;
|
|
142
|
+
}
|
|
143
|
+
return ioff;
|
|
144
|
+
#else
|
|
145
|
+
ioff = (soff*(off_t)NTOM_MUL-ntm)/(off_t)fr->ntom_step;
|
|
146
|
+
return ioff/(off_t)spf(fr);
|
|
147
|
+
#endif
|
|
148
|
+
}
|