mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-02 07:05:24 +00:00
19c8f95e49
--HG-- rename : modules/libfishsound/AUTHORS => media/libfishsound/AUTHORS rename : modules/libfishsound/COPYING => media/libfishsound/COPYING rename : modules/libfishsound/ChangeLog => media/libfishsound/ChangeLog rename : modules/libfishsound/Makefile.in => media/libfishsound/Makefile.in rename : modules/libfishsound/README => media/libfishsound/README rename : modules/libfishsound/README_MOZILLA => media/libfishsound/README_MOZILLA rename : modules/libfishsound/include/Makefile.in => media/libfishsound/include/Makefile.in rename : modules/libfishsound/include/fishsound/Makefile.in => media/libfishsound/include/fishsound/Makefile.in rename : modules/libfishsound/include/fishsound/comments.h => media/libfishsound/include/fishsound/comments.h rename : modules/libfishsound/include/fishsound/config.h => media/libfishsound/include/fishsound/config.h rename : modules/libfishsound/include/fishsound/constants.h => media/libfishsound/include/fishsound/constants.h rename : modules/libfishsound/include/fishsound/decode.h => media/libfishsound/include/fishsound/decode.h rename : modules/libfishsound/include/fishsound/deprecated.h => media/libfishsound/include/fishsound/deprecated.h rename : modules/libfishsound/include/fishsound/encode.h => media/libfishsound/include/fishsound/encode.h rename : modules/libfishsound/include/fishsound/fishsound.h => media/libfishsound/include/fishsound/fishsound.h rename : modules/libfishsound/src/Makefile.in => media/libfishsound/src/Makefile.in rename : modules/libfishsound/src/libfishsound/Makefile.in => media/libfishsound/src/libfishsound/Makefile.in rename : modules/libfishsound/src/libfishsound/config.h => media/libfishsound/src/libfishsound/config.h rename : modules/libfishsound/src/libfishsound/convert.h => media/libfishsound/src/libfishsound/convert.h rename : modules/libfishsound/src/libfishsound/convert_c.h => media/libfishsound/src/libfishsound/convert_c.h rename : modules/libfishsound/src/libfishsound/convert_oil.h => media/libfishsound/src/libfishsound/convert_oil.h rename : modules/libfishsound/src/libfishsound/fishsound.c => media/libfishsound/src/libfishsound/fishsound.c rename : modules/libfishsound/src/libfishsound/fishsound_comments.c => media/libfishsound/src/libfishsound/fishsound_comments.c rename : modules/libfishsound/src/libfishsound/fishsound_decode.c => media/libfishsound/src/libfishsound/fishsound_decode.c rename : modules/libfishsound/src/libfishsound/fishsound_encode.c => media/libfishsound/src/libfishsound/fishsound_encode.c rename : modules/libfishsound/src/libfishsound/fishsound_flac.c => media/libfishsound/src/libfishsound/fishsound_flac.c rename : modules/libfishsound/src/libfishsound/fishsound_speex.c => media/libfishsound/src/libfishsound/fishsound_speex.c rename : modules/libfishsound/src/libfishsound/fishsound_vorbis.c => media/libfishsound/src/libfishsound/fishsound_vorbis.c rename : modules/libfishsound/src/libfishsound/fs_compat.h => media/libfishsound/src/libfishsound/fs_compat.h rename : modules/libfishsound/src/libfishsound/fs_vector.c => media/libfishsound/src/libfishsound/fs_vector.c rename : modules/libfishsound/src/libfishsound/fs_vector.h => media/libfishsound/src/libfishsound/fs_vector.h rename : modules/libfishsound/src/libfishsound/private.h => media/libfishsound/src/libfishsound/private.h rename : modules/libfishsound/update.sh => media/libfishsound/update.sh rename : modules/libogg/AUTHORS => media/libogg/AUTHORS rename : modules/libogg/CHANGES => media/libogg/CHANGES rename : modules/libogg/COPYING => media/libogg/COPYING rename : modules/libogg/Makefile.in => media/libogg/Makefile.in rename : modules/libogg/README => media/libogg/README rename : modules/libogg/README_MOZILLA => media/libogg/README_MOZILLA rename : modules/libogg/include/Makefile.in => media/libogg/include/Makefile.in rename : modules/libogg/include/ogg/Makefile.in => media/libogg/include/ogg/Makefile.in rename : modules/libogg/include/ogg/config_types.h => media/libogg/include/ogg/config_types.h rename : modules/libogg/include/ogg/ogg.h => media/libogg/include/ogg/ogg.h rename : modules/libogg/include/ogg/os_types.h => media/libogg/include/ogg/os_types.h rename : modules/libogg/src/Makefile.in => media/libogg/src/Makefile.in rename : modules/libogg/src/bitwise.c => media/libogg/src/bitwise.c rename : modules/libogg/src/framing.c => media/libogg/src/framing.c rename : modules/libogg/src/ogg_bitwise.c => media/libogg/src/ogg_bitwise.c rename : modules/libogg/src/ogg_framing.c => media/libogg/src/ogg_framing.c rename : modules/libogg/update.sh => media/libogg/update.sh rename : modules/liboggplay/Makefile.in => media/liboggplay/Makefile.in rename : modules/liboggplay/README => media/liboggplay/README rename : modules/liboggplay/README_MOZILLA => media/liboggplay/README_MOZILLA rename : modules/liboggplay/include/Makefile.in => media/liboggplay/include/Makefile.in rename : modules/liboggplay/include/oggplay/Makefile.in => media/liboggplay/include/oggplay/Makefile.in rename : modules/liboggplay/include/oggplay/config_win32.h => media/liboggplay/include/oggplay/config_win32.h rename : modules/liboggplay/include/oggplay/oggplay.h => media/liboggplay/include/oggplay/oggplay.h rename : modules/liboggplay/include/oggplay/oggplay_callback_info.h => media/liboggplay/include/oggplay/oggplay_callback_info.h rename : modules/liboggplay/include/oggplay/oggplay_enums.h => media/liboggplay/include/oggplay/oggplay_enums.h rename : modules/liboggplay/include/oggplay/oggplay_query.h => media/liboggplay/include/oggplay/oggplay_query.h rename : modules/liboggplay/include/oggplay/oggplay_reader.h => media/liboggplay/include/oggplay/oggplay_reader.h rename : modules/liboggplay/include/oggplay/oggplay_seek.h => media/liboggplay/include/oggplay/oggplay_seek.h rename : modules/liboggplay/include/oggplay/oggplay_tools.h => media/liboggplay/include/oggplay/oggplay_tools.h rename : modules/liboggplay/src/Makefile.in => media/liboggplay/src/Makefile.in rename : modules/liboggplay/src/liboggplay/Makefile.in => media/liboggplay/src/liboggplay/Makefile.in rename : modules/liboggplay/src/liboggplay/config.h => media/liboggplay/src/liboggplay/config.h rename : modules/liboggplay/src/liboggplay/oggplay.c => media/liboggplay/src/liboggplay/oggplay.c rename : modules/liboggplay/src/liboggplay/oggplay_buffer.c => media/liboggplay/src/liboggplay/oggplay_buffer.c rename : modules/liboggplay/src/liboggplay/oggplay_buffer.h => media/liboggplay/src/liboggplay/oggplay_buffer.h rename : modules/liboggplay/src/liboggplay/oggplay_callback.c => media/liboggplay/src/liboggplay/oggplay_callback.c rename : modules/liboggplay/src/liboggplay/oggplay_callback.h => media/liboggplay/src/liboggplay/oggplay_callback.h rename : modules/liboggplay/src/liboggplay/oggplay_callback_info.c => media/liboggplay/src/liboggplay/oggplay_callback_info.c rename : modules/liboggplay/src/liboggplay/oggplay_data.c => media/liboggplay/src/liboggplay/oggplay_data.c rename : modules/liboggplay/src/liboggplay/oggplay_data.h => media/liboggplay/src/liboggplay/oggplay_data.h rename : modules/liboggplay/src/liboggplay/oggplay_file_reader.c => media/liboggplay/src/liboggplay/oggplay_file_reader.c rename : modules/liboggplay/src/liboggplay/oggplay_file_reader.h => media/liboggplay/src/liboggplay/oggplay_file_reader.h rename : modules/liboggplay/src/liboggplay/oggplay_private.h => media/liboggplay/src/liboggplay/oggplay_private.h rename : modules/liboggplay/src/liboggplay/oggplay_query.c => media/liboggplay/src/liboggplay/oggplay_query.c rename : modules/liboggplay/src/liboggplay/oggplay_seek.c => media/liboggplay/src/liboggplay/oggplay_seek.c rename : modules/liboggplay/src/liboggplay/oggplay_tcp_reader.c => media/liboggplay/src/liboggplay/oggplay_tcp_reader.c rename : modules/liboggplay/src/liboggplay/oggplay_tcp_reader.h => media/liboggplay/src/liboggplay/oggplay_tcp_reader.h rename : modules/liboggplay/src/liboggplay/oggplay_tools.c => media/liboggplay/src/liboggplay/oggplay_tools.c rename : modules/liboggplay/src/liboggplay/oggplay_yuv2rgb.c => media/liboggplay/src/liboggplay/oggplay_yuv2rgb.c rename : modules/liboggplay/src/liboggplay/std_semaphore.h => media/liboggplay/src/liboggplay/std_semaphore.h rename : modules/liboggplay/update.sh => media/liboggplay/update.sh rename : modules/liboggplay_audio/Makefile.in => media/liboggplay_audio/Makefile.in rename : modules/liboggplay_audio/README_MOZILLA => media/liboggplay_audio/README_MOZILLA rename : modules/liboggplay_audio/sydney_audio.h => media/liboggplay_audio/sydney_audio.h rename : modules/liboggplay_audio/sydney_audio_alsa.c => media/liboggplay_audio/sydney_audio_alsa.c rename : modules/liboggplay_audio/sydney_audio_mac.c => media/liboggplay_audio/sydney_audio_mac.c rename : modules/liboggplay_audio/sydney_audio_oss.c => media/liboggplay_audio/sydney_audio_oss.c rename : modules/liboggplay_audio/sydney_audio_waveapi.c => media/liboggplay_audio/sydney_audio_waveapi.c rename : modules/liboggplay_audio/update.sh => media/liboggplay_audio/update.sh rename : modules/liboggz/AUTHORS => media/liboggz/AUTHORS rename : modules/liboggz/COPYING => media/liboggz/COPYING rename : modules/liboggz/ChangeLog => media/liboggz/ChangeLog rename : modules/liboggz/Makefile.in => media/liboggz/Makefile.in rename : modules/liboggz/README => media/liboggz/README rename : modules/liboggz/README_MOZILLA => media/liboggz/README_MOZILLA rename : modules/liboggz/include/Makefile.in => media/liboggz/include/Makefile.in rename : modules/liboggz/include/oggz/Makefile.in => media/liboggz/include/oggz/Makefile.in rename : modules/liboggz/include/oggz/config.h => media/liboggz/include/oggz/config.h rename : modules/liboggz/include/oggz/config_win32.h => media/liboggz/include/oggz/config_win32.h rename : modules/liboggz/include/oggz/oggz.h => media/liboggz/include/oggz/oggz.h rename : modules/liboggz/include/oggz/oggz_comments.h => media/liboggz/include/oggz/oggz_comments.h rename : modules/liboggz/include/oggz/oggz_constants.h => media/liboggz/include/oggz/oggz_constants.h rename : modules/liboggz/include/oggz/oggz_deprecated.h => media/liboggz/include/oggz/oggz_deprecated.h rename : modules/liboggz/include/oggz/oggz_io.h => media/liboggz/include/oggz/oggz_io.h rename : modules/liboggz/include/oggz/oggz_off_t.h => media/liboggz/include/oggz/oggz_off_t.h rename : modules/liboggz/include/oggz/oggz_off_t_generated.h => media/liboggz/include/oggz/oggz_off_t_generated.h rename : modules/liboggz/include/oggz/oggz_read.h => media/liboggz/include/oggz/oggz_read.h rename : modules/liboggz/include/oggz/oggz_seek.h => media/liboggz/include/oggz/oggz_seek.h rename : modules/liboggz/include/oggz/oggz_stream.h => media/liboggz/include/oggz/oggz_stream.h rename : modules/liboggz/include/oggz/oggz_table.h => media/liboggz/include/oggz/oggz_table.h rename : modules/liboggz/include/oggz/oggz_write.h => media/liboggz/include/oggz/oggz_write.h rename : modules/liboggz/src/Makefile.in => media/liboggz/src/Makefile.in rename : modules/liboggz/src/liboggz/Makefile.in => media/liboggz/src/liboggz/Makefile.in rename : modules/liboggz/src/liboggz/metric_internal.c => media/liboggz/src/liboggz/metric_internal.c rename : modules/liboggz/src/liboggz/oggz.c => media/liboggz/src/liboggz/oggz.c rename : modules/liboggz/src/liboggz/oggz_auto.c => media/liboggz/src/liboggz/oggz_auto.c rename : modules/liboggz/src/liboggz/oggz_auto.h => media/liboggz/src/liboggz/oggz_auto.h rename : modules/liboggz/src/liboggz/oggz_byteorder.h => media/liboggz/src/liboggz/oggz_byteorder.h rename : modules/liboggz/src/liboggz/oggz_comments.c => media/liboggz/src/liboggz/oggz_comments.c rename : modules/liboggz/src/liboggz/oggz_compat.h => media/liboggz/src/liboggz/oggz_compat.h rename : modules/liboggz/src/liboggz/oggz_dlist.c => media/liboggz/src/liboggz/oggz_dlist.c rename : modules/liboggz/src/liboggz/oggz_dlist.h => media/liboggz/src/liboggz/oggz_dlist.h rename : modules/liboggz/src/liboggz/oggz_io.c => media/liboggz/src/liboggz/oggz_io.c rename : modules/liboggz/src/liboggz/oggz_macros.h => media/liboggz/src/liboggz/oggz_macros.h rename : modules/liboggz/src/liboggz/oggz_private.h => media/liboggz/src/liboggz/oggz_private.h rename : modules/liboggz/src/liboggz/oggz_read.c => media/liboggz/src/liboggz/oggz_read.c rename : modules/liboggz/src/liboggz/oggz_seek.c => media/liboggz/src/liboggz/oggz_seek.c rename : modules/liboggz/src/liboggz/oggz_stream.c => media/liboggz/src/liboggz/oggz_stream.c rename : modules/liboggz/src/liboggz/oggz_stream.h => media/liboggz/src/liboggz/oggz_stream.h rename : modules/liboggz/src/liboggz/oggz_stream_private.h => media/liboggz/src/liboggz/oggz_stream_private.h rename : modules/liboggz/src/liboggz/oggz_table.c => media/liboggz/src/liboggz/oggz_table.c rename : modules/liboggz/src/liboggz/oggz_vector.c => media/liboggz/src/liboggz/oggz_vector.c rename : modules/liboggz/src/liboggz/oggz_vector.h => media/liboggz/src/liboggz/oggz_vector.h rename : modules/liboggz/src/liboggz/oggz_write.c => media/liboggz/src/liboggz/oggz_write.c rename : modules/liboggz/update.sh => media/liboggz/update.sh rename : modules/libtheora/AUTHORS => media/libtheora/AUTHORS rename : modules/libtheora/CHANGES => media/libtheora/CHANGES rename : modules/libtheora/COPYING => media/libtheora/COPYING rename : modules/libtheora/LICENSE => media/libtheora/LICENSE rename : modules/libtheora/Makefile.in => media/libtheora/Makefile.in rename : modules/libtheora/README => media/libtheora/README rename : modules/libtheora/README_MOZILLA => media/libtheora/README_MOZILLA rename : modules/libtheora/changeset_r15144.diff => media/libtheora/changeset_r15144.diff rename : modules/libtheora/include/Makefile.in => media/libtheora/include/Makefile.in rename : modules/libtheora/include/theora/Makefile.in => media/libtheora/include/theora/Makefile.in rename : modules/libtheora/include/theora/codec.h => media/libtheora/include/theora/codec.h rename : modules/libtheora/include/theora/config.h => media/libtheora/include/theora/config.h rename : modules/libtheora/include/theora/theora.h => media/libtheora/include/theora/theora.h rename : modules/libtheora/include/theora/theoradec.h => media/libtheora/include/theora/theoradec.h rename : modules/libtheora/lib/Makefile.in => media/libtheora/lib/Makefile.in rename : modules/libtheora/lib/config.h => media/libtheora/lib/config.h rename : modules/libtheora/lib/cpu.c => media/libtheora/lib/cpu.c rename : modules/libtheora/lib/cpu.h => media/libtheora/lib/cpu.h rename : modules/libtheora/lib/dec/apiwrapper.c => media/libtheora/lib/dec/apiwrapper.c rename : modules/libtheora/lib/dec/apiwrapper.h => media/libtheora/lib/dec/apiwrapper.h rename : modules/libtheora/lib/dec/bitwise.c => media/libtheora/lib/dec/bitwise.c rename : modules/libtheora/lib/dec/bitwise.h => media/libtheora/lib/dec/bitwise.h rename : modules/libtheora/lib/dec/dct.h => media/libtheora/lib/dec/dct.h rename : modules/libtheora/lib/dec/decapiwrapper.c => media/libtheora/lib/dec/decapiwrapper.c rename : modules/libtheora/lib/dec/decinfo.c => media/libtheora/lib/dec/decinfo.c rename : modules/libtheora/lib/dec/decint.h => media/libtheora/lib/dec/decint.h rename : modules/libtheora/lib/dec/decode.c => media/libtheora/lib/dec/decode.c rename : modules/libtheora/lib/dec/dequant.c => media/libtheora/lib/dec/dequant.c rename : modules/libtheora/lib/dec/dequant.h => media/libtheora/lib/dec/dequant.h rename : modules/libtheora/lib/dec/enquant.h => media/libtheora/lib/dec/enquant.h rename : modules/libtheora/lib/dec/fragment.c => media/libtheora/lib/dec/fragment.c rename : modules/libtheora/lib/dec/huffdec.c => media/libtheora/lib/dec/huffdec.c rename : modules/libtheora/lib/dec/huffdec.h => media/libtheora/lib/dec/huffdec.h rename : modules/libtheora/lib/dec/huffman.h => media/libtheora/lib/dec/huffman.h rename : modules/libtheora/lib/dec/idct.c => media/libtheora/lib/dec/idct.c rename : modules/libtheora/lib/dec/idct.h => media/libtheora/lib/dec/idct.h rename : modules/libtheora/lib/dec/info.c => media/libtheora/lib/dec/info.c rename : modules/libtheora/lib/dec/internal.c => media/libtheora/lib/dec/internal.c rename : modules/libtheora/lib/dec/ocintrin.h => media/libtheora/lib/dec/ocintrin.h rename : modules/libtheora/lib/dec/quant.c => media/libtheora/lib/dec/quant.c rename : modules/libtheora/lib/dec/quant.h => media/libtheora/lib/dec/quant.h rename : modules/libtheora/lib/dec/state.c => media/libtheora/lib/dec/state.c rename : modules/libtheora/lib/dec/x86/mmxfrag.c => media/libtheora/lib/dec/x86/mmxfrag.c rename : modules/libtheora/lib/dec/x86/mmxidct.c => media/libtheora/lib/dec/x86/mmxidct.c rename : modules/libtheora/lib/dec/x86/mmxstate.c => media/libtheora/lib/dec/x86/mmxstate.c rename : modules/libtheora/lib/dec/x86/x86int.h => media/libtheora/lib/dec/x86/x86int.h rename : modules/libtheora/lib/dec/x86/x86state.c => media/libtheora/lib/dec/x86/x86state.c rename : modules/libtheora/lib/internal.h => media/libtheora/lib/internal.h rename : modules/libtheora/update.sh => media/libtheora/update.sh rename : modules/libvorbis/AUTHORS => media/libvorbis/AUTHORS rename : modules/libvorbis/COPYING => media/libvorbis/COPYING rename : modules/libvorbis/Makefile.in => media/libvorbis/Makefile.in rename : modules/libvorbis/README => media/libvorbis/README rename : modules/libvorbis/README_MOZILLA => media/libvorbis/README_MOZILLA rename : modules/libvorbis/include/Makefile.in => media/libvorbis/include/Makefile.in rename : modules/libvorbis/include/vorbis/Makefile.in => media/libvorbis/include/vorbis/Makefile.in rename : modules/libvorbis/include/vorbis/codec.h => media/libvorbis/include/vorbis/codec.h rename : modules/libvorbis/lib/Makefile.in => media/libvorbis/lib/Makefile.in rename : modules/libvorbis/lib/backends.h => media/libvorbis/lib/backends.h rename : modules/libvorbis/lib/bitrate.h => media/libvorbis/lib/bitrate.h rename : modules/libvorbis/lib/codebook.h => media/libvorbis/lib/codebook.h rename : modules/libvorbis/lib/codec_internal.h => media/libvorbis/lib/codec_internal.h rename : modules/libvorbis/lib/envelope.h => media/libvorbis/lib/envelope.h rename : modules/libvorbis/lib/highlevel.h => media/libvorbis/lib/highlevel.h rename : modules/libvorbis/lib/lookup.h => media/libvorbis/lib/lookup.h rename : modules/libvorbis/lib/lookup_data.h => media/libvorbis/lib/lookup_data.h rename : modules/libvorbis/lib/lpc.h => media/libvorbis/lib/lpc.h rename : modules/libvorbis/lib/lsp.h => media/libvorbis/lib/lsp.h rename : modules/libvorbis/lib/masking.h => media/libvorbis/lib/masking.h rename : modules/libvorbis/lib/mdct.h => media/libvorbis/lib/mdct.h rename : modules/libvorbis/lib/misc.h => media/libvorbis/lib/misc.h rename : modules/libvorbis/lib/os.h => media/libvorbis/lib/os.h rename : modules/libvorbis/lib/psy.h => media/libvorbis/lib/psy.h rename : modules/libvorbis/lib/registry.h => media/libvorbis/lib/registry.h rename : modules/libvorbis/lib/scales.h => media/libvorbis/lib/scales.h rename : modules/libvorbis/lib/smallft.h => media/libvorbis/lib/smallft.h rename : modules/libvorbis/lib/vorbis_analysis.c => media/libvorbis/lib/vorbis_analysis.c rename : modules/libvorbis/lib/vorbis_bitrate.c => media/libvorbis/lib/vorbis_bitrate.c rename : modules/libvorbis/lib/vorbis_block.c => media/libvorbis/lib/vorbis_block.c rename : modules/libvorbis/lib/vorbis_codebook.c => media/libvorbis/lib/vorbis_codebook.c rename : modules/libvorbis/lib/vorbis_envelope.c => media/libvorbis/lib/vorbis_envelope.c rename : modules/libvorbis/lib/vorbis_floor0.c => media/libvorbis/lib/vorbis_floor0.c rename : modules/libvorbis/lib/vorbis_floor1.c => media/libvorbis/lib/vorbis_floor1.c rename : modules/libvorbis/lib/vorbis_info.c => media/libvorbis/lib/vorbis_info.c rename : modules/libvorbis/lib/vorbis_lookup.c => media/libvorbis/lib/vorbis_lookup.c rename : modules/libvorbis/lib/vorbis_lpc.c => media/libvorbis/lib/vorbis_lpc.c rename : modules/libvorbis/lib/vorbis_lsp.c => media/libvorbis/lib/vorbis_lsp.c rename : modules/libvorbis/lib/vorbis_mapping0.c => media/libvorbis/lib/vorbis_mapping0.c rename : modules/libvorbis/lib/vorbis_mdct.c => media/libvorbis/lib/vorbis_mdct.c rename : modules/libvorbis/lib/vorbis_psy.c => media/libvorbis/lib/vorbis_psy.c rename : modules/libvorbis/lib/vorbis_registry.c => media/libvorbis/lib/vorbis_registry.c rename : modules/libvorbis/lib/vorbis_res0.c => media/libvorbis/lib/vorbis_res0.c rename : modules/libvorbis/lib/vorbis_sharedbook.c => media/libvorbis/lib/vorbis_sharedbook.c rename : modules/libvorbis/lib/vorbis_smallft.c => media/libvorbis/lib/vorbis_smallft.c rename : modules/libvorbis/lib/vorbis_synthesis.c => media/libvorbis/lib/vorbis_synthesis.c rename : modules/libvorbis/lib/vorbis_window.c => media/libvorbis/lib/vorbis_window.c rename : modules/libvorbis/lib/window.h => media/libvorbis/lib/window.h rename : modules/libvorbis/todo.txt => media/libvorbis/todo.txt rename : modules/libvorbis/update.sh => media/libvorbis/update.sh
415 lines
13 KiB
C
415 lines
13 KiB
C
#ifndef foosydneyhfoo
|
|
#define foosydneyhfoo
|
|
|
|
/* Requirements:
|
|
|
|
- In sync mode, the device will automatically write data so that an initial read causes writes
|
|
of zeros to be issued to that one can do "while (1); {read(); write()}
|
|
|
|
- All functions are thread-safe and can be called in any thread context. None of the functions is
|
|
async-signal safe.
|
|
|
|
- It is assumed that duplex streams have a single clock (synchronised)
|
|
*/
|
|
|
|
#include <sys/types.h>
|
|
#if !defined (WIN32)
|
|
#include <sys/param.h>
|
|
#include <inttypes.h>
|
|
#else
|
|
#include <stddef.h>
|
|
#endif
|
|
|
|
/* Detect byte order, based on sys/param.h */
|
|
#undef SA_LITTLE_ENDIAN
|
|
#undef SA_BIG_ENDIAN
|
|
|
|
#if defined(__BYTE_ORDER)
|
|
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
|
# define SA_LITTLE_ENDIAN 1
|
|
# elif __BYTE_ORDER == __BIG_ENDIAN
|
|
# define SA_BIG_ENDIAN 1
|
|
# endif
|
|
#elif defined(WIN32)
|
|
# define SA_LITTLE_ENDIAN 1
|
|
#elif defined(__APPLE__)
|
|
# if defined(__BIG_ENDIAN__)
|
|
# define SA_BIG_ENDIAN 1
|
|
# else
|
|
# define SA_LITTLE_ENDIAN 1
|
|
# endif
|
|
#else
|
|
# error "Cannot determine byte order!"
|
|
#endif
|
|
|
|
#if defined(WIN32)
|
|
#if !defined(int32_t)
|
|
typedef __int32 int32_t;
|
|
#endif
|
|
#if !defined(int64_t)
|
|
typedef __int64 int64_t;
|
|
#endif
|
|
#endif
|
|
|
|
typedef struct sa_stream sa_stream_t;
|
|
|
|
#if defined(WIN32)
|
|
// (left << 16 | right) (16 bits per channel)
|
|
#define SA_VOLUME_MUTED ((int32_t) (0x00000000))
|
|
#else
|
|
/** Volume that corresponds to muted in/out */
|
|
#define SA_VOLUME_MUTED ((int32_t) (-0x80000000))
|
|
#endif
|
|
|
|
/** Ways to express seek offsets for pread/pwrite */
|
|
typedef enum {
|
|
SA_SEEK_RELATIVE,
|
|
SA_SEEK_ABSOLUTE,
|
|
SA_SEEK_RELATIVE_END,
|
|
_SA_SEEK_MAX
|
|
} sa_seek_t;
|
|
|
|
/** Supported formats */
|
|
typedef enum {
|
|
SA_PCM_FORMAT_U8,
|
|
SA_PCM_FORMAT_ULAW,
|
|
SA_PCM_FORMAT_ALAW,
|
|
SA_PCM_FORMAT_S16_LE,
|
|
SA_PCM_FORMAT_S16_BE,
|
|
SA_PCM_FORMAT_S24_LE,
|
|
SA_PCM_FORMAT_S24_BE,
|
|
SA_PCM_FORMAT_S32_LE,
|
|
SA_PCM_FORMAT_S32_BE,
|
|
SA_PCM_FORMAT_FLOAT32_LE,
|
|
SA_PCM_FORMAT_FLOAT32_BE,
|
|
_SA_PCM_FORMAT_MAX
|
|
} sa_pcm_format_t;
|
|
|
|
/* Native/reverse endianness definitions for PCM */
|
|
#ifdef SA_LITTLE_ENDIAN
|
|
#define SA_PCM_FORMAT_S16_NE SA_PCM_FORMAT_S16_LE
|
|
#define SA_PCM_FORMAT_S24_NE SA_PCM_FORMAT_S24_LE
|
|
#define SA_PCM_FORMAT_S32_NE SA_PCM_FORMAT_S32_LE
|
|
#define SA_PCM_FORMAT_FLOAT32_NE SA_PCM_FORMAT_FLOAT32_LE
|
|
#define SA_PCM_FORMAT_S16_RE SA_PCM_FORMAT_S16_BE
|
|
#define SA_PCM_FORMAT_S24_RE SA_PCM_FORMAT_S24_BE
|
|
#define SA_PCM_FORMAT_S32_RE SA_PCM_FORMAT_S32_BE
|
|
#define SA_PCM_FORMAT_FLOAT32_RE SA_PCM_FORMAT_FLOAT32_BE
|
|
#else
|
|
#define SA_PCM_FORMAT_S16_NE SA_PCM_FORMAT_S16_BE
|
|
#define SA_PCM_FORMAT_S24_NE SA_PCM_FORMAT_S24_BE
|
|
#define SA_PCM_FORMAT_S32_NE SA_PCM_FORMAT_S32_BE
|
|
#define SA_PCM_FORMAT_FLOAT32_NE SA_PCM_FORMAT_FLOAT32_BE
|
|
#define SA_PCM_FORMAT_S16_RE SA_PCM_FORMAT_S16_LE
|
|
#define SA_PCM_FORMAT_S24_RE SA_PCM_FORMAT_S24_LE
|
|
#define SA_PCM_FORMAT_S32_RE SA_PCM_FORMAT_S32_LE
|
|
#define SA_PCM_FORMAT_FLOAT32_RE SA_PCM_FORMAT_FLOAT32_LE
|
|
#endif
|
|
|
|
#define SA_CODEC_MPEG "mpeg"
|
|
#define SA_CODEC_AC3 "ac3"
|
|
#define SA_CODEC_GSM "gsm"
|
|
#define SA_CODEC_VORBIS "vorbis"
|
|
#define SA_CODEC_SPEEX "speex"
|
|
|
|
/** Device opening modes */
|
|
typedef enum {
|
|
SA_MODE_WRONLY = 1,
|
|
SA_MODE_RDONLY = 2,
|
|
SA_MODE_RDWR = 3,
|
|
_SA_MODE_MAX = 4
|
|
} sa_mode_t;
|
|
|
|
/** Error codes */
|
|
typedef enum {
|
|
SA_SUCCESS = 0,
|
|
SA_ERROR_NOT_SUPPORTED = -1,
|
|
SA_ERROR_INVALID = -2,
|
|
SA_ERROR_STATE = -3,
|
|
SA_ERROR_OOM = -4,
|
|
SA_ERROR_NO_DEVICE = -5,
|
|
SA_ERROR_NO_DRIVER = -6,
|
|
SA_ERROR_NO_CODEC = -7,
|
|
SA_ERROR_NO_PCM_FORMAT = -7,
|
|
SA_ERROR_SYSTEM = -8,
|
|
SA_ERROR_NO_INIT = -9,
|
|
SA_ERROR_NO_META = -10,
|
|
SA_ERROR_NO_DATA = -11,
|
|
SA_ERROR_NO_SPACE = -12,
|
|
_SA_ERROR_MAX = -13
|
|
} sa_error_t;
|
|
|
|
/** Possible events for notifications */
|
|
typedef enum {
|
|
SA_NOTIFY_REQUEST_START,
|
|
SA_NOTIFY_REQUEST_STOP,
|
|
SA_NOTIFY_CHANGED_READ_VOLUME,
|
|
SA_NOTIFY_CHANGED_WRITE_VOLUME,
|
|
SA_NOTIFY_CHANGED_DEVICE,
|
|
_SA_NOTIFY_MAX
|
|
} sa_notify_t;
|
|
|
|
/** Classes of events */
|
|
typedef enum {
|
|
SA_EVENT_REQUEST_IO,
|
|
SA_EVENT_INIT_THREAD,
|
|
SA_EVENT_NOTIFY,
|
|
SA_EVENT_ERROR,
|
|
_SA_EVENT_MAX
|
|
} sa_event_t;
|
|
|
|
/** List of sample position queries */
|
|
typedef enum {
|
|
SA_POSITION_WRITE_DELAY,
|
|
SA_POSITION_WRITE_HARDWARE,
|
|
SA_POSITION_WRITE_SOFTWARE,
|
|
SA_POSITION_READ_DELAY,
|
|
SA_POSITION_READ_HARDWARE,
|
|
SA_POSITION_READ_SOFTWARE,
|
|
SA_POSITION_DUPLEX_DELAY,
|
|
_SA_POSITION_MAX
|
|
} sa_position_t;
|
|
|
|
/* Channel positions */
|
|
typedef enum {
|
|
SA_CHANNEL_MONO,
|
|
SA_CHANNEL_LEFT,
|
|
SA_CHANNEL_RIGHT,
|
|
SA_CHANNEL_CENTER,
|
|
SA_CHANNEL_FRONT_LEFT,
|
|
SA_CHANNEL_FRONT_RIGHT,
|
|
SA_CHANNEL_FRONT_CENTER,
|
|
SA_CHANNEL_REAR_LEFT,
|
|
SA_CHANNEL_REAR_RIGHT,
|
|
SA_CHANNEL_REAR_CENTER,
|
|
SA_CHANNEL_LFE,
|
|
SA_CHANNEL_FRONT_LEFT_OF_CENTER,
|
|
SA_CHANNEL_FRONT_RIGHT_OF_CENTER,
|
|
SA_CHANNEL_SIDE_LEFT,
|
|
SA_CHANNEL_SIDE_RIGHT,
|
|
SA_CHANNEL_TOP_CENTER,
|
|
SA_CHANNEL_TOP_FRONT_LEFT,
|
|
SA_CHANNEL_TOP_FRONT_RIGHT,
|
|
SA_CHANNEL_TOP_FRONT_CENTER,
|
|
SA_CHANNEL_TOP_REAR_LEFT,
|
|
SA_CHANNEL_TOP_REAR_RIGHT,
|
|
SA_CHANNEL_TOP_REAR_CENTER,
|
|
SA_CHANNEL_AUX0,
|
|
SA_CHANNEL_AUX1,
|
|
SA_CHANNEL_AUX2,
|
|
SA_CHANNEL_AUX3,
|
|
SA_CHANNEL_AUX4,
|
|
SA_CHANNEL_AUX5,
|
|
SA_CHANNEL_AUX6,
|
|
SA_CHANNEL_AUX7,
|
|
SA_CHANNEL_AUX8,
|
|
SA_CHANNEL_AUX9,
|
|
SA_CHANNEL_AUX10,
|
|
SA_CHANNEL_AUX11,
|
|
SA_CHANNEL_AUX12,
|
|
SA_CHANNEL_AUX13,
|
|
SA_CHANNEL_AUX14,
|
|
SA_CHANNEL_AUX15,
|
|
SA_CHANNEL_AUX16,
|
|
SA_CHANNEL_AUX17,
|
|
SA_CHANNEL_AUX18,
|
|
SA_CHANNEL_AUX19,
|
|
SA_CHANNEL_AUX20,
|
|
SA_CHANNEL_AUX21,
|
|
SA_CHANNEL_AUX22,
|
|
SA_CHANNEL_AUX23,
|
|
SA_CHANNEL_AUX24,
|
|
SA_CHANNEL_AUX25,
|
|
SA_CHANNEL_AUX26,
|
|
SA_CHANNEL_AUX27,
|
|
SA_CHANNEL_AUX28,
|
|
SA_CHANNEL_AUX29,
|
|
SA_CHANNEL_AUX30,
|
|
SA_CHANNEL_AUX31,
|
|
_SA_CHANNEL_MAX
|
|
} sa_channel_t;
|
|
|
|
typedef enum {
|
|
SA_STATE_INIT,
|
|
SA_STATE_RUNNING,
|
|
SA_STATE_STOPPED,
|
|
/* put more stuff */
|
|
_SA_STATE_MAX
|
|
} sa_state_t;
|
|
|
|
typedef enum {
|
|
SA_XRUN_MODE_STOP,
|
|
SA_XRUN_MODE_SPIN,
|
|
_SA_XRUN_MODE_MAX
|
|
} sa_xrun_mode_t;
|
|
|
|
typedef enum {
|
|
SA_ADJUST_UP = 1,
|
|
SA_ADJUST_DOWN = -1,
|
|
SA_ADJUST_NONE = 0
|
|
} sa_adjust_t;
|
|
|
|
/* Some kind of meta information. */
|
|
#define SA_META_CLIENT_NAME "sydney.client-name" /* utf-8 */
|
|
#define SA_META_PROCESS_ID "sydney.process-id" /* getpid() */
|
|
#define SA_META_LANGUAGE "sydney.language" /* de_DE and similar */
|
|
|
|
/* Some kind of meta information. Not filled in */
|
|
#define SA_META_STREAM_NAME "sydney.stream-name" /* utf-8 */
|
|
#define SA_META_ICON_NAME "sydney.icon-name" /* file name (no slashes) */
|
|
#define SA_META_ICON_PNG "sydney.icon-png" /* PNG blob */
|
|
#define SA_META_ROLE "sydney.role" /* one of: "music", "phone", "game", "event" */
|
|
#define SA_META_X11_DISPLAY "sydney.x11-display" /* X11 display */
|
|
#define SA_META_X11_WINDOW "sydney.x11-window" /* X11 window id */
|
|
|
|
/** Main callback function */
|
|
typedef int (*sa_event_callback_t)(sa_stream_t *s, sa_event_t event);
|
|
|
|
/** Create an opaque (e.g. AC3) codec stream */
|
|
int sa_stream_create_opaque(sa_stream_t **s, const char *client_name, sa_mode_t mode, const char *codec);
|
|
|
|
/** Normal way to open a PCM device */
|
|
int sa_stream_create_pcm(sa_stream_t **s, const char *client_name, sa_mode_t mode, sa_pcm_format_t format, unsigned int rate, unsigned int nchannels);
|
|
|
|
/** Initialise the device */
|
|
int sa_stream_open(sa_stream_t *s);
|
|
|
|
/** Close/destroy everything */
|
|
int sa_stream_destroy(sa_stream_t *s);
|
|
|
|
/* "Soft" params */
|
|
int sa_stream_set_write_lower_watermark(sa_stream_t *s, size_t size);
|
|
int sa_stream_set_read_lower_watermark(sa_stream_t *s, size_t size);
|
|
int sa_stream_set_write_upper_watermark(sa_stream_t *s, size_t size);
|
|
int sa_stream_set_read_upper_watermark(sa_stream_t *s, size_t size);
|
|
|
|
/** Set the mapping between channels and the loudspeakers */
|
|
int sa_stream_set_channel_map(sa_stream_t *s, const sa_channel_t map[], unsigned int n);
|
|
|
|
/** Whether xruns cause the card to reset */
|
|
int sa_stream_set_xrun_mode(sa_stream_t *s, sa_xrun_mode_t mode);
|
|
|
|
/** Set the device to non-interleaved mode */
|
|
int sa_stream_set_non_interleaved(sa_stream_t *s, int enable);
|
|
|
|
/** Require dynamic sample rate */
|
|
int sa_stream_set_dynamic_rate(sa_stream_t *s, int enable);
|
|
|
|
/** Select driver */
|
|
int sa_stream_set_driver(sa_stream_t *s, const char *driver);
|
|
|
|
/** Start callback */
|
|
int sa_stream_start_thread(sa_stream_t *s, sa_event_callback_t callback);
|
|
|
|
/** Start callback */
|
|
int sa_stream_stop_thread(sa_stream_t *s);
|
|
|
|
/** Change the device connected to the stream */
|
|
int sa_stream_change_device(sa_stream_t *s, const char *device_name);
|
|
|
|
/** volume in hundreths of dB*/
|
|
int sa_stream_change_read_volume(sa_stream_t *s, const int32_t vol[], unsigned int n);
|
|
|
|
/** volume in hundreths of dB*/
|
|
int sa_stream_change_write_volume(sa_stream_t *s, const int32_t vol[], unsigned int n);
|
|
|
|
/** Change the sampling rate */
|
|
int sa_stream_change_rate(sa_stream_t *s, unsigned int rate);
|
|
|
|
/** Change some meta data that is attached to the stream */
|
|
int sa_stream_change_meta_data(sa_stream_t *s, const char *name, const void *data, size_t size);
|
|
|
|
/** Associate opaque user data */
|
|
int sa_stream_change_user_data(sa_stream_t *s, const void *value);
|
|
|
|
/* Hardware-related. This is implementation-specific and hardware specific. */
|
|
int sa_stream_set_adjust_rate(sa_stream_t *s, sa_adjust_t direction);
|
|
int sa_stream_set_adjust_nchannels(sa_stream_t *s, sa_adjust_t direction);
|
|
int sa_stream_set_adjust_pcm_format(sa_stream_t *s, sa_adjust_t direction);
|
|
int sa_stream_set_adjust_watermarks(sa_stream_t *s, sa_adjust_t direction);
|
|
|
|
/* Query functions */
|
|
|
|
int sa_stream_get_mode(sa_stream_t *s, sa_mode_t *access_mode);
|
|
int sa_stream_get_codec(sa_stream_t *s, char *codec, size_t *size);
|
|
int sa_stream_get_pcm_format(sa_stream_t *s, sa_pcm_format_t *format);
|
|
int sa_stream_get_rate(sa_stream_t *s, unsigned int *rate);
|
|
int sa_stream_get_nchannels(sa_stream_t *s, int *nchannels);
|
|
int sa_stream_get_user_data(sa_stream_t *s, void **value);
|
|
int sa_stream_get_write_lower_watermark(sa_stream_t *s, size_t *size);
|
|
int sa_stream_get_read_lower_watermark(sa_stream_t *s, size_t *size);
|
|
int sa_stream_get_write_upper_watermark(sa_stream_t *s, size_t *size);
|
|
int sa_stream_get_read_upper_watermark(sa_stream_t *s, size_t *size);
|
|
int sa_stream_get_channel_map(sa_stream_t *s, sa_channel_t map[], unsigned int *n);
|
|
int sa_stream_get_xrun_mode(sa_stream_t *s, sa_xrun_mode_t *mode);
|
|
int sa_stream_get_non_interleaved(sa_stream_t *s, int *enabled);
|
|
int sa_stream_get_dynamic_rate(sa_stream_t *s, int *enabled);
|
|
int sa_stream_get_driver(sa_stream_t *s, char *driver_name, size_t *size);
|
|
int sa_stream_get_device(sa_stream_t *s, char *device_name, size_t *size);
|
|
int sa_stream_get_read_volume(sa_stream_t *s, int32_t vol[], unsigned int *n);
|
|
int sa_stream_get_write_volume(sa_stream_t *s, int32_t vol[], unsigned int *n);
|
|
int sa_stream_get_meta_data(sa_stream_t *s, const char *name, void*data, size_t *size);
|
|
int sa_stream_get_adjust_rate(sa_stream_t *s, sa_adjust_t *direction);
|
|
int sa_stream_get_adjust_nchannels(sa_stream_t *s, sa_adjust_t *direction);
|
|
int sa_stream_get_adjust_pcm_format(sa_stream_t *s, sa_adjust_t *direction);
|
|
int sa_stream_get_adjust_watermarks(sa_stream_t *s, sa_adjust_t *direction);
|
|
|
|
/** Get current state of the audio device */
|
|
int sa_stream_get_state(sa_stream_t *s, sa_state_t *state);
|
|
|
|
/** Obtain the error code */
|
|
int sa_stream_get_event_error(sa_stream_t *s, sa_error_t *error);
|
|
|
|
/** Obtain the notification code */
|
|
int sa_stream_get_event_notify(sa_stream_t *s, sa_notify_t *notify);
|
|
|
|
/** sync/timing */
|
|
int sa_stream_get_position(sa_stream_t *s, sa_position_t position, int64_t *pos);
|
|
|
|
|
|
/* Blocking IO calls */
|
|
|
|
/** Interleaved capture function */
|
|
int sa_stream_read(sa_stream_t *s, void *data, size_t nbytes);
|
|
/** Non-interleaved capture function */
|
|
int sa_stream_read_ni(sa_stream_t *s, unsigned int channel, void *data, size_t nbytes);
|
|
|
|
/** Interleaved playback function */
|
|
int sa_stream_write(sa_stream_t *s, const void *data, size_t nbytes);
|
|
/** Non-interleaved playback function */
|
|
int sa_stream_write_ni(sa_stream_t *s, unsigned int channel, const void *data, size_t nbytes);
|
|
/** Interleaved playback function with seek offset */
|
|
int sa_stream_pwrite(sa_stream_t *s, const void *data, size_t nbytes, int64_t offset, sa_seek_t whence);
|
|
/** Non-interleaved playback function with seek offset */
|
|
int sa_stream_pwrite_ni(sa_stream_t *s, unsigned int channel, const void *data, size_t nbytes, int64_t offset, sa_seek_t whence);
|
|
|
|
|
|
/** Query how much can be read without blocking */
|
|
int sa_stream_get_read_size(sa_stream_t *s, size_t *size);
|
|
/** Query how much can be written without blocking */
|
|
int sa_stream_get_write_size(sa_stream_t *s, size_t *size);
|
|
|
|
|
|
/* Control/xrun */
|
|
|
|
/** Resume playing after a pause */
|
|
int sa_stream_resume(sa_stream_t *s);
|
|
|
|
/** Pause audio playback (do not empty the buffer) */
|
|
int sa_stream_pause(sa_stream_t *s);
|
|
|
|
/** Block until all audio has been played */
|
|
int sa_stream_drain(sa_stream_t *s);
|
|
|
|
/** Return a human readable error */
|
|
const char *sa_strerror(int code);
|
|
|
|
/* Extensions */
|
|
int
|
|
sa_stream_set_volume_abs(sa_stream_t *s, float vol);
|
|
|
|
int
|
|
sa_stream_get_volume_abs(sa_stream_t *s, float *vol);
|
|
|
|
#endif
|