From fb065187e4ee9e0d1709b344ec01bb426ff1e43b Mon Sep 17 00:00:00 2001 From: bellard Date: Tue, 9 Nov 2004 23:09:44 +0000 Subject: audio clean up (initial patch by malc) git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1131 c046a42c-6fe2-441c-8c8c-71466251a162 --- audio/audio_int.h | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 audio/audio_int.h (limited to 'audio/audio_int.h') diff --git a/audio/audio_int.h b/audio/audio_int.h new file mode 100644 index 0000000000..599d3b0614 --- /dev/null +++ b/audio/audio_int.h @@ -0,0 +1,161 @@ +/* + * QEMU Audio subsystem header + * + * Copyright (c) 2003-2004 Vassili Karpov (malc) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#ifndef QEMU_AUDIO_INT_H +#define QEMU_AUDIO_INT_H + +#include "vl.h" + +struct pcm_ops; + +typedef struct HWVoice { + int active; + int enabled; + int pending_disable; + int valid; + int freq; + + f_sample *clip; + audfmt_e fmt; + int nchannels; + + int align; + int shift; + + int rpos; + int bufsize; + + int bytes_per_second; + st_sample_t *mix_buf; + + int samples; + int64_t old_ticks; + int nb_voices; + struct SWVoice **pvoice; + struct pcm_ops *pcm_ops; +} HWVoice; + +extern struct pcm_ops oss_pcm_ops; +extern struct audio_output_driver oss_output_driver; + +extern struct pcm_ops sdl_pcm_ops; +extern struct audio_output_driver sdl_output_driver; + +extern struct pcm_ops wav_pcm_ops; +extern struct audio_output_driver wav_output_driver; + +extern struct pcm_ops fmod_pcm_ops; +extern struct audio_output_driver fmod_output_driver; + +struct audio_output_driver { + const char *name; + void *(*init) (void); + void (*fini) (void *); + struct pcm_ops *pcm_ops; + int can_be_default; + int max_voices; + int voice_size; +}; + +typedef struct AudioState { + int fixed_format; + int fixed_freq; + int fixed_channels; + int fixed_fmt; + int nb_hw_voices; + int voice_size; + int64_t ticks_threshold; + int freq_threshold; + void *opaque; + struct audio_output_driver *drv; +} AudioState; +extern AudioState audio_state; + +struct SWVoice { + int freq; + audfmt_e fmt; + int nchannels; + + int shift; + int align; + + t_sample *conv; + + int left; + int pos; + int bytes_per_second; + int64_t ratio; + st_sample_t *buf; + void *rate; + + int wpos; + int live; + int active; + int64_t old_ticks; + HWVoice *hw; + char *name; +}; + +struct pcm_ops { + int (*init) (HWVoice *hw, int freq, int nchannels, audfmt_e fmt); + void (*fini) (HWVoice *hw); + void (*run) (HWVoice *hw); + int (*write) (SWVoice *sw, void *buf, int size); + int (*ctl) (HWVoice *hw, int cmd, ...); +}; + +void pcm_sw_free_resources (SWVoice *sw); +int pcm_sw_alloc_resources (SWVoice *sw); +void pcm_sw_fini (SWVoice *sw); +int pcm_sw_init (SWVoice *sw, HWVoice *hw, int freq, + int nchannels, audfmt_e fmt); + +void pcm_hw_clear (HWVoice *hw, void *buf, int len); +HWVoice * pcm_hw_find_any (HWVoice *hw); +HWVoice * pcm_hw_find_any_active (HWVoice *hw); +HWVoice * pcm_hw_find_any_passive (HWVoice *hw); +HWVoice * pcm_hw_find_specific (HWVoice *hw, int freq, + int nchannels, audfmt_e fmt); +HWVoice * pcm_hw_add (int freq, int nchannels, audfmt_e fmt); +int pcm_hw_add_sw (HWVoice *hw, SWVoice *sw); +int pcm_hw_del_sw (HWVoice *hw, SWVoice *sw); +SWVoice * pcm_create_voice_pair (int freq, int nchannels, audfmt_e fmt); + +void pcm_hw_free_resources (HWVoice *hw); +int pcm_hw_alloc_resources (HWVoice *hw); +void pcm_hw_fini (HWVoice *hw); +void pcm_hw_gc (HWVoice *hw); +int pcm_hw_get_live (HWVoice *hw); +int pcm_hw_get_live2 (HWVoice *hw, int *nb_active); +void pcm_hw_dec_live (HWVoice *hw, int decr); +int pcm_hw_write (SWVoice *sw, void *buf, int len); + +int audio_get_conf_int (const char *key, int defval); +const char *audio_get_conf_str (const char *key, const char *defval); + +struct audio_output_driver; + +#define VOICE_ENABLE 1 +#define VOICE_DISABLE 2 + +#endif /* audio_int.h */ -- cgit v1.2.1