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

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.9 ! root       85:     int ctl_caps;
1.1.1.2   root       86:     struct audio_pcm_ops *pcm_ops;
1.1.1.7   root       87:     QLIST_ENTRY (HWVoiceOut) entries;
1.1.1.2   root       88: } HWVoiceOut;
1.1       root       89: 
1.1.1.2   root       90: typedef struct HWVoiceIn {
                     91:     int enabled;
1.1.1.7   root       92:     int poll_mode;
1.1.1.2   root       93:     struct audio_pcm_info info;
1.1       root       94: 
1.1.1.2   root       95:     t_sample *conv;
1.1       root       96: 
1.1.1.2   root       97:     int wpos;
                     98:     int total_samples_captured;
                     99:     uint64_t ts_helper;
1.1       root      100: 
1.1.1.5   root      101:     struct st_sample *conv_buf;
1.1       root      102: 
1.1.1.2   root      103:     int samples;
1.1.1.7   root      104:     QLIST_HEAD (sw_in_listhead, SWVoiceIn) sw_head;
1.1.1.9 ! root      105:     int ctl_caps;
1.1.1.2   root      106:     struct audio_pcm_ops *pcm_ops;
1.1.1.7   root      107:     QLIST_ENTRY (HWVoiceIn) entries;
1.1.1.2   root      108: } HWVoiceIn;
1.1       root      109: 
1.1.1.2   root      110: struct SWVoiceOut {
1.1.1.6   root      111:     QEMUSoundCard *card;
1.1.1.2   root      112:     struct audio_pcm_info info;
1.1       root      113:     t_sample *conv;
                    114:     int64_t ratio;
1.1.1.5   root      115:     struct st_sample *buf;
1.1       root      116:     void *rate;
1.1.1.2   root      117:     int total_hw_samples_mixed;
                    118:     int active;
                    119:     int empty;
                    120:     HWVoiceOut *hw;
                    121:     char *name;
1.1.1.5   root      122:     struct mixeng_volume vol;
1.1.1.2   root      123:     struct audio_callback callback;
1.1.1.7   root      124:     QLIST_ENTRY (SWVoiceOut) entries;
1.1.1.2   root      125: };
1.1       root      126: 
1.1.1.2   root      127: struct SWVoiceIn {
1.1.1.6   root      128:     QEMUSoundCard *card;
1.1       root      129:     int active;
1.1.1.2   root      130:     struct audio_pcm_info info;
                    131:     int64_t ratio;
                    132:     void *rate;
                    133:     int total_hw_samples_acquired;
1.1.1.5   root      134:     struct st_sample *buf;
1.1.1.2   root      135:     f_sample *clip;
                    136:     HWVoiceIn *hw;
1.1       root      137:     char *name;
1.1.1.5   root      138:     struct mixeng_volume vol;
1.1.1.2   root      139:     struct audio_callback callback;
1.1.1.7   root      140:     QLIST_ENTRY (SWVoiceIn) entries;
1.1.1.2   root      141: };
                    142: 
                    143: struct audio_driver {
                    144:     const char *name;
                    145:     const char *descr;
                    146:     struct audio_option *options;
                    147:     void *(*init) (void);
                    148:     void (*fini) (void *);
                    149:     struct audio_pcm_ops *pcm_ops;
                    150:     int can_be_default;
                    151:     int max_voices_out;
                    152:     int max_voices_in;
                    153:     int voice_size_out;
                    154:     int voice_size_in;
1.1.1.9 ! root      155:     int ctl_caps;
1.1       root      156: };
                    157: 
1.1.1.2   root      158: struct audio_pcm_ops {
1.1.1.5   root      159:     int  (*init_out)(HWVoiceOut *hw, struct audsettings *as);
1.1.1.2   root      160:     void (*fini_out)(HWVoiceOut *hw);
1.1.1.7   root      161:     int  (*run_out) (HWVoiceOut *hw, int live);
1.1.1.2   root      162:     int  (*write)   (SWVoiceOut *sw, void *buf, int size);
                    163:     int  (*ctl_out) (HWVoiceOut *hw, int cmd, ...);
                    164: 
1.1.1.5   root      165:     int  (*init_in) (HWVoiceIn *hw, struct audsettings *as);
1.1.1.2   root      166:     void (*fini_in) (HWVoiceIn *hw);
                    167:     int  (*run_in)  (HWVoiceIn *hw);
                    168:     int  (*read)    (SWVoiceIn *sw, void *buf, int size);
                    169:     int  (*ctl_in)  (HWVoiceIn *hw, int cmd, ...);
                    170: };
1.1       root      171: 
1.1.1.3   root      172: struct capture_callback {
                    173:     struct audio_capture_ops ops;
                    174:     void *opaque;
1.1.1.7   root      175:     QLIST_ENTRY (capture_callback) entries;
1.1.1.3   root      176: };
                    177: 
                    178: struct CaptureVoiceOut {
                    179:     HWVoiceOut hw;
                    180:     void *buf;
1.1.1.7   root      181:     QLIST_HEAD (cb_listhead, capture_callback) cb_head;
                    182:     QLIST_ENTRY (CaptureVoiceOut) entries;
1.1.1.3   root      183: };
                    184: 
                    185: struct SWVoiceCap {
                    186:     SWVoiceOut sw;
                    187:     CaptureVoiceOut *cap;
1.1.1.7   root      188:     QLIST_ENTRY (SWVoiceCap) entries;
1.1.1.3   root      189: };
                    190: 
1.1.1.2   root      191: struct AudioState {
                    192:     struct audio_driver *drv;
                    193:     void *drv_opaque;
                    194: 
                    195:     QEMUTimer *ts;
1.1.1.7   root      196:     QLIST_HEAD (card_listhead, QEMUSoundCard) card_head;
                    197:     QLIST_HEAD (hw_in_listhead, HWVoiceIn) hw_head_in;
                    198:     QLIST_HEAD (hw_out_listhead, HWVoiceOut) hw_head_out;
                    199:     QLIST_HEAD (cap_listhead, CaptureVoiceOut) cap_head;
1.1.1.2   root      200:     int nb_hw_voices_out;
                    201:     int nb_hw_voices_in;
1.1.1.5   root      202:     int vm_running;
1.1.1.2   root      203: };
                    204: 
                    205: extern struct audio_driver no_audio_driver;
                    206: extern struct audio_driver oss_audio_driver;
                    207: extern struct audio_driver sdl_audio_driver;
                    208: extern struct audio_driver wav_audio_driver;
                    209: extern struct audio_driver fmod_audio_driver;
                    210: extern struct audio_driver alsa_audio_driver;
                    211: extern struct audio_driver coreaudio_audio_driver;
                    212: extern struct audio_driver dsound_audio_driver;
1.1.1.5   root      213: extern struct audio_driver esd_audio_driver;
                    214: extern struct audio_driver pa_audio_driver;
1.1.1.8   root      215: extern struct audio_driver spice_audio_driver;
1.1.1.7   root      216: extern struct audio_driver winwave_audio_driver;
1.1.1.8   root      217: extern const struct mixeng_volume nominal_volume;
1.1.1.2   root      218: 
1.1.1.5   root      219: void audio_pcm_init_info (struct audio_pcm_info *info, struct audsettings *as);
1.1.1.2   root      220: void audio_pcm_info_clear_buf (struct audio_pcm_info *info, void *buf, int len);
                    221: 
                    222: int  audio_pcm_sw_write (SWVoiceOut *sw, void *buf, int len);
                    223: int  audio_pcm_hw_get_live_in (HWVoiceIn *hw);
                    224: 
                    225: int  audio_pcm_sw_read (SWVoiceIn *sw, void *buf, int len);
1.1.1.7   root      226: 
                    227: int audio_pcm_hw_clip_out (HWVoiceOut *hw, void *pcm_buf,
                    228:                            int live, int pending);
1.1       root      229: 
1.1.1.2   root      230: int audio_bug (const char *funcname, int cond);
                    231: void *audio_calloc (const char *funcname, int nmemb, size_t size);
1.1       root      232: 
1.1.1.7   root      233: void audio_run (const char *msg);
                    234: 
1.1       root      235: #define VOICE_ENABLE 1
                    236: #define VOICE_DISABLE 2
1.1.1.9 ! root      237: #define VOICE_VOLUME 3
        !           238: 
        !           239: #define VOICE_VOLUME_CAP (1 << VOICE_VOLUME)
1.1       root      240: 
1.1.1.2   root      241: static inline int audio_ring_dist (int dst, int src, int len)
                    242: {
                    243:     return (dst >= src) ? (dst - src) : (len - src + dst);
                    244: }
                    245: 
                    246: static void GCC_ATTR dolog (const char *fmt, ...)
                    247: {
                    248:     va_list ap;
                    249: 
                    250:     va_start (ap, fmt);
                    251:     AUD_vlog (AUDIO_CAP, fmt, ap);
                    252:     va_end (ap);
                    253: }
                    254: 
                    255: #ifdef DEBUG
                    256: static void GCC_ATTR ldebug (const char *fmt, ...)
                    257: {
                    258:     va_list ap;
                    259: 
                    260:     va_start (ap, fmt);
                    261:     AUD_vlog (AUDIO_CAP, fmt, ap);
                    262:     va_end (ap);
                    263: }
                    264: #else
                    265: #if defined NDEBUG && defined __GNUC__
                    266: #define ldebug(...)
                    267: #elif defined NDEBUG && defined _MSC_VER
                    268: #define ldebug __noop
                    269: #else
                    270: static void GCC_ATTR ldebug (const char *fmt, ...)
                    271: {
                    272:     (void) fmt;
                    273: }
                    274: #endif
                    275: #endif
                    276: 
                    277: #undef GCC_ATTR
                    278: 
                    279: #define AUDIO_STRINGIFY_(n) #n
                    280: #define AUDIO_STRINGIFY(n) AUDIO_STRINGIFY_(n)
                    281: 
                    282: #if defined _MSC_VER || defined __GNUC__
                    283: #define AUDIO_FUNC __FUNCTION__
                    284: #else
                    285: #define AUDIO_FUNC __FILE__ ":" AUDIO_STRINGIFY (__LINE__)
                    286: #endif
                    287: 
1.1       root      288: #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.