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,191 @@
|
|
|
1
|
+
#include "config.h"
|
|
2
|
+
#include "mpg123app.h"
|
|
3
|
+
#include "debug.h"
|
|
4
|
+
|
|
5
|
+
#ifdef WANT_WIN32_UNICODE
|
|
6
|
+
|
|
7
|
+
/* Obscure and undocumented call from MS C Runtime "MSVCRT.DLL" */
|
|
8
|
+
typedef struct
|
|
9
|
+
{
|
|
10
|
+
int newmode;
|
|
11
|
+
} _startupinfo;
|
|
12
|
+
|
|
13
|
+
int __cdecl __declspec(dllimport) __wgetmainargs (
|
|
14
|
+
int *_Argc,
|
|
15
|
+
wchar_t ***_Argv,
|
|
16
|
+
wchar_t ***_Env,
|
|
17
|
+
int _DoWildCard,
|
|
18
|
+
_startupinfo * _StartInfo
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
int win32_cmdline_utf8(int * argc, char *** argv)
|
|
22
|
+
{
|
|
23
|
+
int argcounter, ret;
|
|
24
|
+
wchar_t **argv_wide;
|
|
25
|
+
wchar_t **env;
|
|
26
|
+
char *argvptr;
|
|
27
|
+
_startupinfo startup;
|
|
28
|
+
|
|
29
|
+
/* That's too lame. */
|
|
30
|
+
if(argv == NULL || argc == NULL) return -1;
|
|
31
|
+
|
|
32
|
+
startup.newmode = 0;
|
|
33
|
+
ret = __wgetmainargs(argc, &argv_wide,&env,1, &startup);
|
|
34
|
+
*argv = (char **)calloc(sizeof (char *), *argc);
|
|
35
|
+
if(*argv == NULL){ error("Cannot allocate memory for command line."); return -1; }
|
|
36
|
+
|
|
37
|
+
for(argcounter = 0; argcounter < *argc; argcounter++)
|
|
38
|
+
{
|
|
39
|
+
win32_wide_utf8(argv_wide[argcounter], &argvptr, NULL);
|
|
40
|
+
(*argv)[argcounter] = argvptr;
|
|
41
|
+
}
|
|
42
|
+
return ret;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
void win32_cmdline_free(int argc, char **argv)
|
|
46
|
+
{
|
|
47
|
+
int i;
|
|
48
|
+
if(argv == NULL) return;
|
|
49
|
+
for(i=0; i<argc; ++i) free(argv[i]);
|
|
50
|
+
}
|
|
51
|
+
#endif /* WANT_WIN32_UNICODE */
|
|
52
|
+
|
|
53
|
+
void win32_set_priority (const int arg)
|
|
54
|
+
{
|
|
55
|
+
DWORD proc_result = 0;
|
|
56
|
+
HANDLE current_proc = NULL;
|
|
57
|
+
if(arg)
|
|
58
|
+
{
|
|
59
|
+
if((current_proc = GetCurrentProcess()))
|
|
60
|
+
{
|
|
61
|
+
switch(arg)
|
|
62
|
+
{
|
|
63
|
+
case -2: proc_result = SetPriorityClass(current_proc, IDLE_PRIORITY_CLASS); break;
|
|
64
|
+
case -1: proc_result = SetPriorityClass(current_proc, BELOW_NORMAL_PRIORITY_CLASS); break;
|
|
65
|
+
case 0: proc_result = SetPriorityClass(current_proc, NORMAL_PRIORITY_CLASS); break; /*default priority*/
|
|
66
|
+
case 1: proc_result = SetPriorityClass(current_proc, ABOVE_NORMAL_PRIORITY_CLASS); break;
|
|
67
|
+
case 2: proc_result = SetPriorityClass(current_proc, HIGH_PRIORITY_CLASS); break;
|
|
68
|
+
case 3: proc_result = SetPriorityClass(current_proc, REALTIME_PRIORITY_CLASS); break;
|
|
69
|
+
default: fprintf(stderr,"Unknown priority class specified\n");
|
|
70
|
+
}
|
|
71
|
+
if(!proc_result) fprintf(stderr,"SetPriorityClass failed\n");
|
|
72
|
+
}
|
|
73
|
+
else fprintf(stderr,"GetCurrentProcess failed\n");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
#ifdef WANT_WIN32_FIFO
|
|
78
|
+
static HANDLE fifohandle;
|
|
79
|
+
static OVERLAPPED ov1;
|
|
80
|
+
|
|
81
|
+
VOID CALLBACK ReadComplete(
|
|
82
|
+
DWORD dwErrorCode,
|
|
83
|
+
DWORD dwNumberOfBytesTransfered,
|
|
84
|
+
LPOVERLAPPED lpOverlapped
|
|
85
|
+
)
|
|
86
|
+
{
|
|
87
|
+
/* Reset OVERLAPPED structure */
|
|
88
|
+
debug("ReadFileEx completed");
|
|
89
|
+
memset(lpOverlapped,0,sizeof(OVERLAPPED));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
ssize_t win32_fifo_read(void *buf, size_t nbyte)
|
|
94
|
+
{
|
|
95
|
+
int check;
|
|
96
|
+
DWORD re;
|
|
97
|
+
DWORD readbuff;
|
|
98
|
+
DWORD available;
|
|
99
|
+
debug1("Reading pipe handle %p", fifohandle);
|
|
100
|
+
if (!fifohandle) return 0;
|
|
101
|
+
|
|
102
|
+
available = win32_fifo_read_peek(NULL);
|
|
103
|
+
if (!available) return 0;
|
|
104
|
+
|
|
105
|
+
/* This looks more like a hack than a proper check */
|
|
106
|
+
readbuff = (nbyte > available) ? available : nbyte;
|
|
107
|
+
debug("Starting ReadFileEx");
|
|
108
|
+
check = ReadFileEx(fifohandle,buf,readbuff,&ov1,&ReadComplete);
|
|
109
|
+
WaitForSingleObjectEx(fifohandle,INFINITE,TRUE);
|
|
110
|
+
debug1("Read %ld bytes from pipe", readbuff);
|
|
111
|
+
return (!check) ? 0 : readbuff;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/* function should be able to tell if bytes are
|
|
115
|
+
available and return immediately on overlapped
|
|
116
|
+
asynchrounous pipes, like unix select() */
|
|
117
|
+
DWORD win32_fifo_read_peek(struct timeval *tv)
|
|
118
|
+
{
|
|
119
|
+
DWORD ret = 0;
|
|
120
|
+
DWORD err, timer;
|
|
121
|
+
|
|
122
|
+
timer = (tv) ? tv -> tv_sec * 1000 : INFINITE;
|
|
123
|
+
|
|
124
|
+
debug1("Peeking on pipe handle %p", fifohandle);
|
|
125
|
+
|
|
126
|
+
SetLastError(0);
|
|
127
|
+
if(!fifohandle) return 0;
|
|
128
|
+
PeekNamedPipe(fifohandle, NULL, 0, NULL, &ret, NULL);
|
|
129
|
+
err = GetLastError();
|
|
130
|
+
debug1("Waiting %d msec for pipe to be ready", timer);
|
|
131
|
+
debug1("GetLastError was %ld", err);
|
|
132
|
+
if(err == ERROR_BROKEN_PIPE)
|
|
133
|
+
{
|
|
134
|
+
debug("Broken pipe, disconnecting");
|
|
135
|
+
DisconnectNamedPipe(fifohandle);
|
|
136
|
+
ConnectNamedPipe(fifohandle,&ov1);
|
|
137
|
+
WaitForSingleObjectEx(fifohandle,timer,TRUE);
|
|
138
|
+
}
|
|
139
|
+
else if(err == ERROR_BAD_PIPE)
|
|
140
|
+
{
|
|
141
|
+
debug("Bad pipe, Waiting for connect");
|
|
142
|
+
DisconnectNamedPipe(fifohandle);
|
|
143
|
+
ConnectNamedPipe(fifohandle,&ov1);
|
|
144
|
+
WaitForSingleObjectEx(fifohandle,timer,TRUE);
|
|
145
|
+
}
|
|
146
|
+
debug2("peek %d bytes, error %d",ret, err);
|
|
147
|
+
return ret;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
void win32_fifo_close(void)
|
|
151
|
+
{
|
|
152
|
+
debug1("Attempting to close handle %p", fifohandle);
|
|
153
|
+
if(fifohandle)
|
|
154
|
+
{
|
|
155
|
+
DisconnectNamedPipe(fifohandle);
|
|
156
|
+
CloseHandle(fifohandle);
|
|
157
|
+
}
|
|
158
|
+
fifohandle = NULL;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
int win32_fifo_mkfifo(const char *path)
|
|
162
|
+
{
|
|
163
|
+
HANDLE ret;
|
|
164
|
+
win32_fifo_close();
|
|
165
|
+
#ifdef WANT_WIN32_UNICODE
|
|
166
|
+
wchar_t *str;
|
|
167
|
+
if(win32_utf8_wide(path,&str,NULL) == 0)
|
|
168
|
+
{
|
|
169
|
+
fprintf(stderr,"Cannot get FIFO name, likely out of memory\n");
|
|
170
|
+
return -1;
|
|
171
|
+
}
|
|
172
|
+
#if (DEBUG == 1)
|
|
173
|
+
fwprintf(stderr,L"CreateNamedPipeW %ws\n", str);
|
|
174
|
+
#endif
|
|
175
|
+
ret = CreateNamedPipeW(str,PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED,PIPE_TYPE_BYTE,1,255,255,0,NULL);
|
|
176
|
+
free(str);
|
|
177
|
+
#else
|
|
178
|
+
#if (DEBUG == 1)
|
|
179
|
+
fprintf(stderr,"CreateNamedPipeA %s\n", path);
|
|
180
|
+
#endif
|
|
181
|
+
ret = CreateNamedPipeA(path,PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED,PIPE_TYPE_BYTE,1,255,255,0,NULL);
|
|
182
|
+
#endif /* WANT_WIN32_UNICODE */
|
|
183
|
+
if(ret == INVALID_HANDLE_VALUE) return -1;
|
|
184
|
+
|
|
185
|
+
fifohandle = ret;
|
|
186
|
+
/* Wait for client */
|
|
187
|
+
ConnectNamedPipe(fifohandle,&ov1);
|
|
188
|
+
WaitForSingleObjectEx(fifohandle,INFINITE,TRUE);
|
|
189
|
+
return 0;
|
|
190
|
+
}
|
|
191
|
+
#endif /* WANT_WIN32_FIFO */
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Win32 support helper file
|
|
3
|
+
|
|
4
|
+
This file is only for use with the mpg123 frontend.
|
|
5
|
+
win32 support helpers for libmpg123 are in src/libmpg123/compat.h
|
|
6
|
+
*/
|
|
7
|
+
#ifndef MPG123_WIN32_SUPPORT_H
|
|
8
|
+
#define MPG123_WIN32_SUPPORT_H
|
|
9
|
+
|
|
10
|
+
#include "config.h"
|
|
11
|
+
#include "mpg123.h"
|
|
12
|
+
#ifdef HAVE_WINDOWS_H
|
|
13
|
+
|
|
14
|
+
#define WIN32_LEAN_AND_MEAN 1
|
|
15
|
+
#include <stdlib.h>
|
|
16
|
+
#include <stdio.h>
|
|
17
|
+
#include <string.h>
|
|
18
|
+
#include <wchar.h>
|
|
19
|
+
#include <windows.h>
|
|
20
|
+
#include <winnls.h>
|
|
21
|
+
#include <shellapi.h>
|
|
22
|
+
#include <mmsystem.h>
|
|
23
|
+
|
|
24
|
+
#if defined (HAVE_WS2TCPIP_H) && !defined (__CYGWIN__)
|
|
25
|
+
#include <winsock2.h>
|
|
26
|
+
#include <ws2tcpip.h>
|
|
27
|
+
#endif
|
|
28
|
+
|
|
29
|
+
#if defined (WANT_WIN32_SOCKETS) /*conflict with gethostname and select in select.h and unistd.h */
|
|
30
|
+
/*
|
|
31
|
+
Note: Do not treat return values as valid file/socket handles, they only indicate success/failure.
|
|
32
|
+
file descriptors are ignored, only the local ws.local_socket is used for storing socket handle,
|
|
33
|
+
so the socket handle is always associated with the last call to win32_net_http_open
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Opens an http URL
|
|
38
|
+
* @param[in] url URL to open
|
|
39
|
+
* @param[out] hd http data info
|
|
40
|
+
* @return -1 for failure, 1 for success
|
|
41
|
+
*/
|
|
42
|
+
int win32_net_http_open(char* url, struct httpdata *hd);
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Reads from network socket
|
|
46
|
+
* @param[in] filedes Value is ignored, last open connection is used.
|
|
47
|
+
* @param[out] buf buffer to store data.
|
|
48
|
+
* @param[in] nbyte bytes to read.
|
|
49
|
+
* @return bytes read successfully from socket
|
|
50
|
+
*/
|
|
51
|
+
ssize_t win32_net_read (int fildes, void *buf, size_t nbyte);
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Writes to network socket
|
|
55
|
+
* @param[in] filedes Value is ignored, last open connection is used.
|
|
56
|
+
* @param[in] buf buffer to read data from.
|
|
57
|
+
* @param[in] nbyte bytes to write.
|
|
58
|
+
* @return bytes written successfully to socket
|
|
59
|
+
*/
|
|
60
|
+
ssize_t win32_net_write (int fildes, const void *buf, size_t nbyte);
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Similar to fgets - get a string from a stream
|
|
64
|
+
* @param[out] s buffer to Write to
|
|
65
|
+
* @param[in] n bytes of data to read.
|
|
66
|
+
* @param[in] stream ignored for compatiblity, last open connection is used.
|
|
67
|
+
* @return pointer to s if successful, NULL if failture
|
|
68
|
+
*/
|
|
69
|
+
char *win32_net_fgets(char *s, int n, int stream);
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Initialize Winsock 2.2.
|
|
73
|
+
*/
|
|
74
|
+
void win32_net_init (void);
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Shutdown all win32 sockets.
|
|
78
|
+
*/
|
|
79
|
+
void win32_net_deinit (void);
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Close last open socket.
|
|
83
|
+
* @param[in] sock value is ignored.
|
|
84
|
+
*/
|
|
85
|
+
void win32_net_close (int sock);
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Set reader callback for mpg123_open_fd
|
|
89
|
+
* @param[in] fr pointer to a mpg123_handle struct.
|
|
90
|
+
*/
|
|
91
|
+
void win32_net_replace (mpg123_handle *fr);
|
|
92
|
+
#endif
|
|
93
|
+
|
|
94
|
+
#ifdef WANT_WIN32_UNICODE
|
|
95
|
+
/**
|
|
96
|
+
* Put the windows command line into argv / argc, encoded in UTF-8.
|
|
97
|
+
* You are supposed to free up resources by calling win32_cmdline_free with the values you got from this one.
|
|
98
|
+
* @return 0 on success, -1 on error */
|
|
99
|
+
int win32_cmdline_utf8(int * argc, char *** argv);
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Free up cmdline memory (the argv itself, theoretically hidden resources, too).
|
|
103
|
+
*/
|
|
104
|
+
void win32_cmdline_free(int argc, char **argv);
|
|
105
|
+
|
|
106
|
+
#endif /* WIN32_WANT_UNICODE */
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Set process priority
|
|
110
|
+
* @param arg -2: Idle, -1, bellow normal, 0, normal (ignored), 1 above normal, 2 highest, 3 realtime
|
|
111
|
+
*/
|
|
112
|
+
void win32_set_priority (const int arg);
|
|
113
|
+
|
|
114
|
+
#ifdef WANT_WIN32_FIFO
|
|
115
|
+
/**
|
|
116
|
+
* win32_fifo_mkfifo
|
|
117
|
+
* Creates a named pipe of path.
|
|
118
|
+
* Should be closed with win32_fifo_close.
|
|
119
|
+
* @param[in] path Path of pipe, should be in form of "\\.\pipe\pipename".
|
|
120
|
+
* @return -1 on failure, 0 otherwise.
|
|
121
|
+
* @see win32_fifo_close
|
|
122
|
+
*/
|
|
123
|
+
int win32_fifo_mkfifo(const char *path);
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
*win32_fifo_close
|
|
127
|
+
* Closes previously open pipe
|
|
128
|
+
*/
|
|
129
|
+
void win32_fifo_close(void);
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* win32_fifo_read_peek
|
|
133
|
+
* Checks how many bytes in fifo is pending read operation
|
|
134
|
+
* Only the tv_sec member in timeval is evaluated! No microsecond precision.
|
|
135
|
+
* @param[in] tv contains information on block duration
|
|
136
|
+
* @return bytes available
|
|
137
|
+
*/
|
|
138
|
+
DWORD win32_fifo_read_peek(struct timeval *tv);
|
|
139
|
+
|
|
140
|
+
/***
|
|
141
|
+
* win32_fifo_read
|
|
142
|
+
* Read up to nbyte of data from open pipe into buf
|
|
143
|
+
* @param[in] buf Pointer to buffer.
|
|
144
|
+
* @param[in] nbyte Number of bytes to read up to.
|
|
145
|
+
* @return Number of bytes actually read.
|
|
146
|
+
*/
|
|
147
|
+
ssize_t win32_fifo_read(void *buf, size_t nbyte);
|
|
148
|
+
#endif /* #ifdef WANT_WIN32_FIFO */
|
|
149
|
+
|
|
150
|
+
#endif /* HAVE_WINDOWS_H */
|
|
151
|
+
#endif /* MPG123_WIN32_SUPPORT_H */
|
|
152
|
+
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
/*
|
|
2
|
+
xfermem: unidirectional fast pipe
|
|
3
|
+
|
|
4
|
+
copyright ?-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 Oliver Fromme
|
|
7
|
+
old timestamp: Sun Apr 6 02:26:26 MET DST 1997
|
|
8
|
+
|
|
9
|
+
See xfermem.h for documentation/description.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
#ifndef NOXFERMEM
|
|
14
|
+
|
|
15
|
+
#include "mpg123app.h"
|
|
16
|
+
#include <string.h>
|
|
17
|
+
#include <errno.h>
|
|
18
|
+
#include <sys/uio.h>
|
|
19
|
+
#include <sys/mman.h>
|
|
20
|
+
#include <sys/socket.h>
|
|
21
|
+
#include <fcntl.h>
|
|
22
|
+
|
|
23
|
+
#ifndef HAVE_MMAP
|
|
24
|
+
#include <sys/ipc.h>
|
|
25
|
+
#include <sys/shm.h>
|
|
26
|
+
#endif
|
|
27
|
+
|
|
28
|
+
#include "debug.h"
|
|
29
|
+
|
|
30
|
+
#if defined (HAVE_MMAP) && defined(MAP_ANONYMOUS) && !defined(MAP_ANON)
|
|
31
|
+
#define MAP_ANON MAP_ANONYMOUS
|
|
32
|
+
#endif
|
|
33
|
+
|
|
34
|
+
void xfermem_init (txfermem **xf, size_t bufsize, size_t msize, size_t skipbuf)
|
|
35
|
+
{
|
|
36
|
+
size_t regsize = bufsize + msize + skipbuf + sizeof(txfermem);
|
|
37
|
+
|
|
38
|
+
#ifdef HAVE_MMAP
|
|
39
|
+
# ifdef MAP_ANON
|
|
40
|
+
if ((*xf = (txfermem *) mmap(0, regsize, PROT_READ | PROT_WRITE,
|
|
41
|
+
MAP_ANON | MAP_SHARED, -1, 0)) == (txfermem *) -1) {
|
|
42
|
+
perror ("mmap()");
|
|
43
|
+
exit (1);
|
|
44
|
+
}
|
|
45
|
+
# else
|
|
46
|
+
int devzero;
|
|
47
|
+
if ((devzero = open("/dev/zero", O_RDWR, 0)) == -1) {
|
|
48
|
+
perror ("open(/dev/zero)");
|
|
49
|
+
exit (1);
|
|
50
|
+
}
|
|
51
|
+
if ((*xf = (txfermem *) mmap(0, regsize, PROT_READ | PROT_WRITE,
|
|
52
|
+
MAP_SHARED, devzero, 0)) == (txfermem *) -1) {
|
|
53
|
+
perror ("mmap()");
|
|
54
|
+
exit (1);
|
|
55
|
+
}
|
|
56
|
+
close (devzero);
|
|
57
|
+
# endif
|
|
58
|
+
#else
|
|
59
|
+
struct shmid_ds shmemds;
|
|
60
|
+
int shmemid;
|
|
61
|
+
if ((shmemid = shmget(IPC_PRIVATE, regsize, IPC_CREAT | 0600)) == -1) {
|
|
62
|
+
perror ("shmget()");
|
|
63
|
+
exit (1);
|
|
64
|
+
}
|
|
65
|
+
if ((*xf = (txfermem *) shmat(shmemid, 0, 0)) == (txfermem *) -1) {
|
|
66
|
+
perror ("shmat()");
|
|
67
|
+
shmctl (shmemid, IPC_RMID, &shmemds);
|
|
68
|
+
exit (1);
|
|
69
|
+
}
|
|
70
|
+
if (shmctl(shmemid, IPC_RMID, &shmemds) == -1) {
|
|
71
|
+
perror ("shmctl()");
|
|
72
|
+
xfermem_done (*xf);
|
|
73
|
+
exit (1);
|
|
74
|
+
}
|
|
75
|
+
#endif
|
|
76
|
+
if (socketpair(AF_UNIX, SOCK_STREAM, 0, (*xf)->fd) < 0) {
|
|
77
|
+
perror ("socketpair()");
|
|
78
|
+
xfermem_done (*xf);
|
|
79
|
+
exit (1);
|
|
80
|
+
}
|
|
81
|
+
(*xf)->freeindex = (*xf)->readindex = 0;
|
|
82
|
+
(*xf)->wakeme[0] = (*xf)->wakeme[1] = FALSE;
|
|
83
|
+
(*xf)->data = ((byte *) *xf) + sizeof(txfermem) + msize;
|
|
84
|
+
(*xf)->metadata = ((byte *) *xf) + sizeof(txfermem);
|
|
85
|
+
(*xf)->size = bufsize;
|
|
86
|
+
(*xf)->metasize = msize + skipbuf;
|
|
87
|
+
(*xf)->justwait = 0;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
void xfermem_done (txfermem *xf)
|
|
91
|
+
{
|
|
92
|
+
if(!xf)
|
|
93
|
+
return;
|
|
94
|
+
#ifdef HAVE_MMAP
|
|
95
|
+
munmap ((caddr_t) xf, xf->size + xf->metasize + sizeof(txfermem));
|
|
96
|
+
#else
|
|
97
|
+
if (shmdt((void *) xf) == -1) {
|
|
98
|
+
perror ("shmdt()");
|
|
99
|
+
exit (1);
|
|
100
|
+
}
|
|
101
|
+
#endif
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
void xfermem_init_writer (txfermem *xf)
|
|
105
|
+
{
|
|
106
|
+
if(xf)
|
|
107
|
+
close (xf->fd[XF_READER]);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
void xfermem_init_reader (txfermem *xf)
|
|
111
|
+
{
|
|
112
|
+
if(xf)
|
|
113
|
+
close (xf->fd[XF_WRITER]);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
size_t xfermem_get_freespace (txfermem *xf)
|
|
117
|
+
{
|
|
118
|
+
size_t freeindex, readindex;
|
|
119
|
+
|
|
120
|
+
if(!xf)
|
|
121
|
+
return 0;
|
|
122
|
+
|
|
123
|
+
if ((freeindex = xf->freeindex) < 0
|
|
124
|
+
|| (readindex = xf->readindex) < 0)
|
|
125
|
+
return (0);
|
|
126
|
+
if (readindex > freeindex)
|
|
127
|
+
return ((readindex - freeindex) - 1);
|
|
128
|
+
else
|
|
129
|
+
return ((xf->size - (freeindex - readindex)) - 1);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
size_t xfermem_get_usedspace (txfermem *xf)
|
|
133
|
+
{
|
|
134
|
+
size_t freeindex, readindex;
|
|
135
|
+
|
|
136
|
+
if(!xf)
|
|
137
|
+
return 0;
|
|
138
|
+
|
|
139
|
+
if ((freeindex = xf->freeindex) < 0
|
|
140
|
+
|| (readindex = xf->readindex) < 0)
|
|
141
|
+
return (0);
|
|
142
|
+
if (freeindex >= readindex)
|
|
143
|
+
return (freeindex - readindex);
|
|
144
|
+
else
|
|
145
|
+
return (xf->size - (readindex - freeindex));
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
int xfermem_getcmd (int fd, int block)
|
|
149
|
+
{
|
|
150
|
+
fd_set selfds;
|
|
151
|
+
byte cmd;
|
|
152
|
+
|
|
153
|
+
for (;;) {
|
|
154
|
+
struct timeval selto = {0, 0};
|
|
155
|
+
|
|
156
|
+
FD_ZERO (&selfds);
|
|
157
|
+
FD_SET (fd, &selfds);
|
|
158
|
+
#ifdef HPUX
|
|
159
|
+
switch (select(FD_SETSIZE, (int *) &selfds, NULL, NULL, block ? NULL : &selto)) {
|
|
160
|
+
#else
|
|
161
|
+
switch (select(FD_SETSIZE, &selfds, NULL, NULL, block ? NULL : &selto)) {
|
|
162
|
+
#endif
|
|
163
|
+
case 0:
|
|
164
|
+
if (!block)
|
|
165
|
+
return (0);
|
|
166
|
+
continue;
|
|
167
|
+
case -1:
|
|
168
|
+
if (errno == EINTR)
|
|
169
|
+
continue;
|
|
170
|
+
return (-2);
|
|
171
|
+
case 1:
|
|
172
|
+
if (FD_ISSET(fd, &selfds))
|
|
173
|
+
switch (read(fd, &cmd, 1)) {
|
|
174
|
+
case 0: /* EOF */
|
|
175
|
+
return (-1);
|
|
176
|
+
case -1:
|
|
177
|
+
if (errno == EINTR)
|
|
178
|
+
continue;
|
|
179
|
+
return (-3);
|
|
180
|
+
case 1:
|
|
181
|
+
return (cmd);
|
|
182
|
+
default: /* ?!? */
|
|
183
|
+
return (-4);
|
|
184
|
+
}
|
|
185
|
+
else /* ?!? */
|
|
186
|
+
return (-5);
|
|
187
|
+
default: /* ?!? */
|
|
188
|
+
return (-6);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
int xfermem_putcmd (int fd, byte cmd)
|
|
194
|
+
{
|
|
195
|
+
for (;;) {
|
|
196
|
+
switch (write(fd, &cmd, 1)) {
|
|
197
|
+
case 1:
|
|
198
|
+
return (1);
|
|
199
|
+
case -1:
|
|
200
|
+
if (errno != EINTR)
|
|
201
|
+
return (-1);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
int xfermem_block (int readwrite, txfermem *xf)
|
|
207
|
+
{
|
|
208
|
+
int myfd = xf->fd[readwrite];
|
|
209
|
+
int result;
|
|
210
|
+
|
|
211
|
+
xf->wakeme[readwrite] = TRUE;
|
|
212
|
+
if (xf->wakeme[1 - readwrite])
|
|
213
|
+
xfermem_putcmd (myfd, XF_CMD_WAKEUP);
|
|
214
|
+
result = xfermem_getcmd(myfd, TRUE);
|
|
215
|
+
xf->wakeme[readwrite] = FALSE;
|
|
216
|
+
return ((result <= 0) ? -1 : result);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* Parallel-safe code to signal a process and wait for it to respond. */
|
|
220
|
+
int xfermem_sigblock(int readwrite, txfermem *xf, int pid, int signal)
|
|
221
|
+
{
|
|
222
|
+
int myfd = xf->fd[readwrite];
|
|
223
|
+
int result;
|
|
224
|
+
|
|
225
|
+
xf->wakeme[readwrite] = TRUE;
|
|
226
|
+
kill(pid, signal);
|
|
227
|
+
|
|
228
|
+
/* not sure about that block... here */
|
|
229
|
+
if (xf->wakeme[1 - readwrite])
|
|
230
|
+
xfermem_putcmd (myfd, XF_CMD_WAKEUP);
|
|
231
|
+
|
|
232
|
+
result = xfermem_getcmd(myfd, TRUE);
|
|
233
|
+
xf->wakeme[readwrite] = FALSE;
|
|
234
|
+
|
|
235
|
+
return ((result <= 0) ? -1 : result);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
int xfermem_write(txfermem *xf, byte *buffer, size_t bytes)
|
|
239
|
+
{
|
|
240
|
+
if(buffer == NULL || bytes < 1) return FALSE;
|
|
241
|
+
|
|
242
|
+
/* You weren't so braindead to have not allocated enough space at all, right? */
|
|
243
|
+
while (xfermem_get_freespace(xf) < bytes)
|
|
244
|
+
{
|
|
245
|
+
int cmd = xfermem_block(XF_WRITER, xf);
|
|
246
|
+
if (cmd == XF_CMD_TERMINATE || cmd < 0)
|
|
247
|
+
{
|
|
248
|
+
error("failed to wait for free space");
|
|
249
|
+
return TRUE; /* Failure. */
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/* Now we have enough space. copy the memory, possibly with the wrap. */
|
|
253
|
+
if(xf->size - xf->freeindex >= bytes)
|
|
254
|
+
{ /* one block of free memory */
|
|
255
|
+
memcpy(xf->data+xf->freeindex, buffer, bytes);
|
|
256
|
+
}
|
|
257
|
+
else
|
|
258
|
+
{ /* two blocks */
|
|
259
|
+
size_t endblock = xf->size - xf->freeindex;
|
|
260
|
+
memcpy(xf->data+xf->freeindex, buffer, endblock);
|
|
261
|
+
memcpy(xf->data, buffer + endblock, bytes-endblock);
|
|
262
|
+
}
|
|
263
|
+
/* Advance the free space pointer, including the wrap. */
|
|
264
|
+
xf->freeindex = (xf->freeindex + bytes) % xf->size;
|
|
265
|
+
/* Wake up the buffer process if necessary. */
|
|
266
|
+
debug("write waking");
|
|
267
|
+
if(xf->wakeme[XF_READER])
|
|
268
|
+
return xfermem_putcmd(xf->fd[XF_WRITER], XF_CMD_WAKEUP_INFO) < 0 ? TRUE : FALSE;
|
|
269
|
+
|
|
270
|
+
return FALSE;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
#else /* stubs for generic / win32 */
|
|
274
|
+
|
|
275
|
+
#include "mpg123app.h"
|
|
276
|
+
#include "xfermem.h"
|
|
277
|
+
|
|
278
|
+
void xfermem_init (txfermem **xf, size_t bufsize, size_t msize, size_t skipbuf)
|
|
279
|
+
{
|
|
280
|
+
}
|
|
281
|
+
void xfermem_done (txfermem *xf)
|
|
282
|
+
{
|
|
283
|
+
}
|
|
284
|
+
void xfermem_init_writer (txfermem *xf)
|
|
285
|
+
{
|
|
286
|
+
}
|
|
287
|
+
void xfermem_init_reader (txfermem *xf)
|
|
288
|
+
{
|
|
289
|
+
}
|
|
290
|
+
size_t xfermem_get_freespace (txfermem *xf)
|
|
291
|
+
{
|
|
292
|
+
return 0;
|
|
293
|
+
}
|
|
294
|
+
size_t xfermem_get_usedspace (txfermem *xf)
|
|
295
|
+
{
|
|
296
|
+
return 0;
|
|
297
|
+
}
|
|
298
|
+
int xfermem_write(txfermem *xf, byte *buffer, size_t bytes)
|
|
299
|
+
{
|
|
300
|
+
return FALSE;
|
|
301
|
+
}
|
|
302
|
+
int xfermem_getcmd (int fd, int block)
|
|
303
|
+
{
|
|
304
|
+
return 0;
|
|
305
|
+
}
|
|
306
|
+
int xfermem_putcmd (int fd, byte cmd)
|
|
307
|
+
{
|
|
308
|
+
return 0;
|
|
309
|
+
}
|
|
310
|
+
int xfermem_block (int readwrite, txfermem *xf)
|
|
311
|
+
{
|
|
312
|
+
return 0;
|
|
313
|
+
}
|
|
314
|
+
int xfermem_sigblock (int readwrite, txfermem *xf, int pid, int signal)
|
|
315
|
+
{
|
|
316
|
+
return 0;
|
|
317
|
+
}
|
|
318
|
+
#endif
|
|
319
|
+
|
|
320
|
+
/* eof */
|
|
321
|
+
|