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

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