Annotation of qemu/audio/audio_int.h, revision 1.1.1.8

1.1       root        1: /*
                      2:  * QEMU Audio subsystem header
1.1.1.2   root        3:  *
                      4:  * Copyright (c) 2003-2005 Vassili Karpov (malc)
                      5:  *
1.1       root        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: 
1.1.1.2   root       27: #ifdef CONFIG_COREAUDIO
                     28: #define FLOAT_MIXENG
                     29: /* #define RECIPROCAL */
                     30: #endif
                     31: #include "mixeng.h"
                     32: 
                     33: struct audio_pcm_ops;
                     34: 
                     35: typedef enum {
                     36:     AUD_OPT_INT,
                     37:     AUD_OPT_FMT,
                     38:     AUD_OPT_STR,
                     39:     AUD_OPT_BOOL
                     40: } audio_option_tag_e;
                     41: 
                     42: struct audio_option {
                     43:     const char *name;
                     44:     audio_option_tag_e tag;
                     45:     void *valp;
                     46:     const char *descr;
1.1.1.4   root       47:     int *overriddenp;
                     48:     int overridden;
1.1.1.2   root       49: };
1.1       root       50: 
1.1.1.2   root       51: struct audio_callback {
                     52:     void *opaque;
1.1.1.7   root       53:     audio_callback_fn fn;
1.1.1.2   root       54: };
1.1       root       55: 
1.1.1.2   root       56: struct audio_pcm_info {
                     57:     int bits;
                     58:     int sign;
                     59:     int freq;
                     60:     int nchannels;
                     61:     int align;
                     62:     int shift;
                     63:     int bytes_per_second;
1.1.1.3   root       64:     int swap_endianness;
1.1.1.2   root       65: };
                     66: 
1.1.1.3   root       67: typedef struct SWVoiceCap SWVoiceCap;
                     68: 
1.1.1.2   root       69: typedef struct HWVoiceOut {
1.1       root       70:     int enabled;
1.1.1.7   root       71:     int poll_mode;
1.1       root       72:     int pending_disable;
1.1.1.2   root       73:     struct audio_pcm_info info;
1.1       root       74: 
                     75:     f_sample *clip;
                     76: 
                     77:     int rpos;
1.1.1.2   root       78:     uint64_t ts_helper;
1.1       root       79: 
1.1.1.5   root       80:     struct st_sample *mix_buf;
1.1       root       81: 
                     82:     int samples;
1.1.1.7   root       83:     QLIST_HEAD (sw_out_listhead, SWVoiceOut) sw_head;
                     84:     QLIST_HEAD (sw_cap_listhead, SWVoiceCap) cap_head;
1.1.1.2   root       85:     struct audio_pcm_ops *pcm_ops;
1.1.1.7   root       86:     QLIST_ENTRY (HWVoiceOut) entries;
1.1.1.2   root       87: } HWVoiceOut;
1.1       root       88: 
1.1.1.2   root       89: typedef struct HWVoiceIn {
                     90:     int enabled;
1.1.1.7   root       91:     int poll_mode;
1.1.1.2   root       92:     struct audio_pcm_info info;
1.1       root       93: 
1.1.1.2   root       94:     t_sample *conv;
1.1       root       95: 
1.1.1.2   root       96:     int wpos;
                     97:     int total_samples_captured;
                     98:     uint64_t ts_helper;
1.1       root       99: 
1.1.1.5   root      100:     struct st_sample *conv_buf;
1.1       root      101: 
1.1.1.2   root      102:     int samples;
1.1.1.7   root      103:     QLIST_HEAD (sw_in_listhead, SWVoiceIn) sw_head;
1.1.1.2   root      104:     struct audio_pcm_ops *pcm_ops;
1.1.1.7   root      105:     QLIST_ENTRY (HWVoiceIn) entries;
1.1.1.2   root      106: } HWVoiceIn;
1.1       root      107: 
1.1.1.2   root      108: struct SWVoiceOut {
1.1.1.6   root      109:     QEMUSoundCard *card;
1.1.1.2   root      110:     struct audio_pcm_info info;
1.1       root      111:     t_sample *conv;
                    112:     int64_t ratio;
1.1.1.5   root      113:     struct st_sample *buf;
1.1       root      114:     void *rate;
1.1.1.2   root      115:     int total_hw_samples_mixed;
                    116:     int active;
                    117:     int empty;
                    118:     HWVoiceOut *hw;
                    119:     char *name;
1.1.1.5   root      120:     struct mixeng_volume vol;
1.1.1.2   root      121:     struct audio_callback callback;
1.1.1.7   root      122:     QLIST_ENTRY (SWVoiceOut) entries;
1.1.1.2   root      123: };
1.1       root      124: 
1.1.1.2   root      125: struct SWVoiceIn {
1.1.1.6   root      126:     QEMUSoundCard *card;
1.1       root      127:     int active;
1.1.1.2   root      128:     struct audio_pcm_info info;
                    129:     int64_t ratio;
                    130:     void *rate;
                    131:     int total_hw_samples_acquired;
1.1.1.5   root      132:     struct st_sample *buf;
1.1.1.2   root      133:     f_sample *clip;
                    134:     HWVoiceIn *hw;
1.1       root      135:     char *name;
1.1.1.5   root      136:     struct mixeng_volume vol;
1.1.1.2   root      137:     struct audio_callback callback;
1.1.1.7   root      138:     QLIST_ENTRY (SWVoiceIn) entries;
1.1.1.2   root      139: };
                    140: 
                    141: struct audio_driver {
                    142:     const char *name;
                    143:     const char *descr;
                    144:     struct audio_option *options;
                    145:     void *(*init) (void);
                    146:     void (*fini) (void *);
                    147:     struct audio_pcm_ops *pcm_ops;
                    148:     int can_be_default;
                    149:     int max_voices_out;
                    150:     int max_voices_in;
                    151:     int voice_size_out;
                    152:     int voice_size_in;
1.1       root      153: };
                    154: 
1.1.1.2   root      155: struct audio_pcm_ops {
1.1.1.5   root      156:     int  (*init_out)(HWVoiceOut *hw, struct audsettings *as);
1.1.1.2   root      157:     void (*fini_out)(HWVoiceOut *hw);
1.1.1.7   root      158:     int  (*run_out) (HWVoiceOut *hw, int live);
1.1.1.2   root      159:     int  (*write)   (SWVoiceOut *sw, void *buf, int size);
                    160:     int  (*ctl_out) (HWVoiceOut *hw, int cmd, ...);
                    161: 
1.1.1.5   root      162:     int  (*init_in) (HWVoiceIn *hw, struct audsettings *as);
1.1.1.2   root      163:     void (*fini_in) (HWVoiceIn *hw);
                    164:     int  (*run_in)  (HWVoiceIn *hw);
                    165:     int  (*read)    (SWVoiceIn *sw, void *buf, int size);
                    166:     int  (*ctl_in)  (HWVoiceIn *hw, int cmd, ...);
                    167: };
1.1       root      168: 
1.1.1.3   root      169: struct capture_callback {
                    170:     struct audio_capture_ops ops;
                    171:     void *opaque;
1.1.1.7   root      172:     QLIST_ENTRY (capture_callback) entries;
1.1.1.3   root      173: };
                    174: 
                    175: struct CaptureVoiceOut {
                    176:     HWVoiceOut hw;
                    177:     void *buf;
1.1.1.7   root      178:     QLIST_HEAD (cb_listhead, capture_callback) cb_head;
                    179:     QLIST_ENTRY (CaptureVoiceOut) entries;
1.1.1.3   root      180: };
                    181: 
                    182: struct SWVoiceCap {
                    183:     SWVoiceOut sw;
                    184:     CaptureVoiceOut *cap;
1.1.1.7   root      185:     QLIST_ENTRY (SWVoiceCap) entries;
1.1.1.3   root      186: };
                    187: 
1.1.1.2   root      188: struct AudioState {
                    189:     struct audio_driver *drv;
                    190:     void *drv_opaque;
                    191: 
                    192:     QEMUTimer *ts;
1.1.1.7   root      193:     QLIST_HEAD (card_listhead, QEMUSoundCard) card_head;
                    194:     QLIST_HEAD (hw_in_listhead, HWVoiceIn) hw_head_in;
                    195:     QLIST_HEAD (hw_out_listhead, HWVoiceOut) hw_head_out;
                    196:     QLIST_HEAD (cap_listhead, CaptureVoiceOut) cap_head;
1.1.1.2   root      197:     int nb_hw_voices_out;
                    198:     int nb_hw_voices_in;
1.1.1.5   root      199:     int vm_running;
1.1.1.2   root      200: };
                    201: 
                    202: extern struct audio_driver no_audio_driver;
                    203: extern struct audio_driver oss_audio_driver;
                    204: extern struct audio_driver sdl_audio_driver;
                    205: extern struct audio_driver wav_audio_driver;
                    206: extern struct audio_driver fmod_audio_driver;
                    207: extern struct audio_driver alsa_audio_driver;
                    208: extern struct audio_driver coreaudio_audio_driver;
                    209: extern struct audio_driver dsound_audio_driver;
1.1.1.5   root      210: extern struct audio_driver esd_audio_driver;
                    211: extern struct audio_driver pa_audio_driver;
1.1.1.8 ! root      212: extern struct audio_driver spice_audio_driver;
1.1.1.7   root      213: extern struct audio_driver winwave_audio_driver;
1.1.1.8 ! root      214: extern const struct mixeng_volume nominal_volume;
1.1.1.2   root      215: 
1.1.1.5   root      216: void audio_pcm_init_info (struct audio_pcm_info *info, struct audsettings *as);
1.1.1.2   root      217: void audio_pcm_info_clear_buf (struct audio_pcm_info *info, void *buf, int len);
                    218: 
                    219: int  audio_pcm_sw_write (SWVoiceOut *sw, void *buf, int len);
                    220: int  audio_pcm_hw_get_live_in (HWVoiceIn *hw);
                    221: 
                    222: int  audio_pcm_sw_read (SWVoiceIn *sw, void *buf, int len);
1.1.1.7   root      223: 
                    224: int audio_pcm_hw_clip_out (HWVoiceOut *hw, void *pcm_buf,
                    225:                            int live, int pending);
1.1       root      226: 
1.1.1.2   root      227: int audio_bug (const char *funcname, int cond);
                    228: void *audio_calloc (const char *funcname, int nmemb, size_t size);
1.1       root      229: 
1.1.1.7   root      230: void audio_run (const char *msg);
                    231: 
1.1       root      232: #define VOICE_ENABLE 1
                    233: #define VOICE_DISABLE 2
                    234: 
1.1.1.2   root      235: static inline int audio_ring_dist (int dst, int src, int len)
                    236: {
                    237:     return (dst >= src) ? (dst - src) : (len - src + dst);
                    238: }
                    239: 
                    240: static void GCC_ATTR dolog (const char *fmt, ...)
                    241: {
                    242:     va_list ap;
                    243: 
                    244:     va_start (ap, fmt);
                    245:     AUD_vlog (AUDIO_CAP, fmt, ap);
                    246:     va_end (ap);
                    247: }
                    248: 
                    249: #ifdef DEBUG
                    250: static void GCC_ATTR ldebug (const char *fmt, ...)
                    251: {
                    252:     va_list ap;
                    253: 
                    254:     va_start (ap, fmt);
                    255:     AUD_vlog (AUDIO_CAP, fmt, ap);
                    256:     va_end (ap);
                    257: }
                    258: #else
                    259: #if defined NDEBUG && defined __GNUC__
                    260: #define ldebug(...)
                    261: #elif defined NDEBUG && defined _MSC_VER
                    262: #define ldebug __noop
                    263: #else
                    264: static void GCC_ATTR ldebug (const char *fmt, ...)
                    265: {
                    266:     (void) fmt;
                    267: }
                    268: #endif
                    269: #endif
                    270: 
                    271: #undef GCC_ATTR
                    272: 
                    273: #define AUDIO_STRINGIFY_(n) #n
                    274: #define AUDIO_STRINGIFY(n) AUDIO_STRINGIFY_(n)
                    275: 
                    276: #if defined _MSC_VER || defined __GNUC__
                    277: #define AUDIO_FUNC __FUNCTION__
                    278: #else
                    279: #define AUDIO_FUNC __FILE__ ":" AUDIO_STRINGIFY (__LINE__)
                    280: #endif
                    281: 
1.1       root      282: #endif /* audio_int.h */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.