|
|
1.1 ! root 1: /* ! 2: * QEMU Audio subsystem header ! 3: * ! 4: * Copyright (c) 2003-2004 Vassili Karpov (malc) ! 5: * ! 6: * Permission is hereby granted, free of charge, to any person obtaining a copy ! 7: * of this software and associated documentation files (the "Software"), to deal ! 8: * in the Software without restriction, including without limitation the rights ! 9: * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ! 10: * copies of the Software, and to permit persons to whom the Software is ! 11: * furnished to do so, subject to the following conditions: ! 12: * ! 13: * The above copyright notice and this permission notice shall be included in ! 14: * all copies or substantial portions of the Software. ! 15: * ! 16: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ! 17: * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ! 18: * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ! 19: * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ! 20: * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ! 21: * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ! 22: * THE SOFTWARE. ! 23: */ ! 24: #ifndef QEMU_AUDIO_INT_H ! 25: #define QEMU_AUDIO_INT_H ! 26: ! 27: #include "vl.h" ! 28: ! 29: struct pcm_ops; ! 30: ! 31: typedef struct HWVoice { ! 32: int active; ! 33: int enabled; ! 34: int pending_disable; ! 35: int valid; ! 36: int freq; ! 37: ! 38: f_sample *clip; ! 39: audfmt_e fmt; ! 40: int nchannels; ! 41: ! 42: int align; ! 43: int shift; ! 44: ! 45: int rpos; ! 46: int bufsize; ! 47: ! 48: int bytes_per_second; ! 49: st_sample_t *mix_buf; ! 50: ! 51: int samples; ! 52: int64_t old_ticks; ! 53: int nb_voices; ! 54: struct SWVoice **pvoice; ! 55: struct pcm_ops *pcm_ops; ! 56: } HWVoice; ! 57: ! 58: extern struct pcm_ops no_pcm_ops; ! 59: extern struct audio_output_driver no_output_driver; ! 60: ! 61: extern struct pcm_ops oss_pcm_ops; ! 62: extern struct audio_output_driver oss_output_driver; ! 63: ! 64: extern struct pcm_ops sdl_pcm_ops; ! 65: extern struct audio_output_driver sdl_output_driver; ! 66: ! 67: extern struct pcm_ops wav_pcm_ops; ! 68: extern struct audio_output_driver wav_output_driver; ! 69: ! 70: extern struct pcm_ops fmod_pcm_ops; ! 71: extern struct audio_output_driver fmod_output_driver; ! 72: ! 73: struct audio_output_driver { ! 74: const char *name; ! 75: void *(*init) (void); ! 76: void (*fini) (void *); ! 77: struct pcm_ops *pcm_ops; ! 78: int can_be_default; ! 79: int max_voices; ! 80: int voice_size; ! 81: }; ! 82: ! 83: typedef struct AudioState { ! 84: int fixed_format; ! 85: int fixed_freq; ! 86: int fixed_channels; ! 87: int fixed_fmt; ! 88: int nb_hw_voices; ! 89: int64_t ticks_threshold; ! 90: int freq_threshold; ! 91: void *opaque; ! 92: struct audio_output_driver *drv; ! 93: } AudioState; ! 94: extern AudioState audio_state; ! 95: ! 96: struct SWVoice { ! 97: int freq; ! 98: audfmt_e fmt; ! 99: int nchannels; ! 100: ! 101: int shift; ! 102: int align; ! 103: ! 104: t_sample *conv; ! 105: ! 106: int left; ! 107: int pos; ! 108: int bytes_per_second; ! 109: int64_t ratio; ! 110: st_sample_t *buf; ! 111: void *rate; ! 112: ! 113: int wpos; ! 114: int live; ! 115: int active; ! 116: int64_t old_ticks; ! 117: HWVoice *hw; ! 118: char *name; ! 119: }; ! 120: ! 121: struct pcm_ops { ! 122: int (*init) (HWVoice *hw, int freq, int nchannels, audfmt_e fmt); ! 123: void (*fini) (HWVoice *hw); ! 124: void (*run) (HWVoice *hw); ! 125: int (*write) (SWVoice *sw, void *buf, int size); ! 126: int (*ctl) (HWVoice *hw, int cmd, ...); ! 127: }; ! 128: ! 129: void pcm_sw_free_resources (SWVoice *sw); ! 130: int pcm_sw_alloc_resources (SWVoice *sw); ! 131: void pcm_sw_fini (SWVoice *sw); ! 132: int pcm_sw_init (SWVoice *sw, HWVoice *hw, int freq, ! 133: int nchannels, audfmt_e fmt); ! 134: ! 135: void pcm_hw_clear (HWVoice *hw, void *buf, int len); ! 136: HWVoice * pcm_hw_find_any (HWVoice *hw); ! 137: HWVoice * pcm_hw_find_any_active (HWVoice *hw); ! 138: HWVoice * pcm_hw_find_any_passive (HWVoice *hw); ! 139: HWVoice * pcm_hw_find_specific (HWVoice *hw, int freq, ! 140: int nchannels, audfmt_e fmt); ! 141: HWVoice * pcm_hw_add (int freq, int nchannels, audfmt_e fmt); ! 142: int pcm_hw_add_sw (HWVoice *hw, SWVoice *sw); ! 143: int pcm_hw_del_sw (HWVoice *hw, SWVoice *sw); ! 144: SWVoice * pcm_create_voice_pair (int freq, int nchannels, audfmt_e fmt); ! 145: ! 146: void pcm_hw_free_resources (HWVoice *hw); ! 147: int pcm_hw_alloc_resources (HWVoice *hw); ! 148: void pcm_hw_fini (HWVoice *hw); ! 149: void pcm_hw_gc (HWVoice *hw); ! 150: int pcm_hw_get_live (HWVoice *hw); ! 151: int pcm_hw_get_live2 (HWVoice *hw, int *nb_active); ! 152: void pcm_hw_dec_live (HWVoice *hw, int decr); ! 153: int pcm_hw_write (SWVoice *sw, void *buf, int len); ! 154: ! 155: int audio_get_conf_int (const char *key, int defval); ! 156: const char *audio_get_conf_str (const char *key, const char *defval); ! 157: ! 158: struct audio_output_driver; ! 159: ! 160: #define VOICE_ENABLE 1 ! 161: #define VOICE_DISABLE 2 ! 162: ! 163: #endif /* audio_int.h */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.