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

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.7 ! root      212: extern struct audio_driver winwave_audio_driver;
1.1.1.5   root      213: extern struct mixeng_volume nominal_volume;
1.1.1.2   root      214: 
1.1.1.5   root      215: void audio_pcm_init_info (struct audio_pcm_info *info, struct audsettings *as);
1.1.1.2   root      216: void audio_pcm_info_clear_buf (struct audio_pcm_info *info, void *buf, int len);
                    217: 
                    218: int  audio_pcm_sw_write (SWVoiceOut *sw, void *buf, int len);
                    219: int  audio_pcm_hw_get_live_in (HWVoiceIn *hw);
                    220: 
                    221: int  audio_pcm_sw_read (SWVoiceIn *sw, void *buf, int len);
1.1.1.7 ! root      222: 
        !           223: int audio_pcm_hw_clip_out (HWVoiceOut *hw, void *pcm_buf,
        !           224:                            int live, int pending);
1.1       root      225: 
1.1.1.2   root      226: int audio_bug (const char *funcname, int cond);
                    227: void *audio_calloc (const char *funcname, int nmemb, size_t size);
1.1       root      228: 
1.1.1.7 ! root      229: void audio_run (const char *msg);
        !           230: 
1.1       root      231: #define VOICE_ENABLE 1
                    232: #define VOICE_DISABLE 2
                    233: 
1.1.1.2   root      234: static inline int audio_ring_dist (int dst, int src, int len)
                    235: {
                    236:     return (dst >= src) ? (dst - src) : (len - src + dst);
                    237: }
                    238: 
                    239: #if defined __GNUC__
                    240: #define GCC_ATTR __attribute__ ((__unused__, __format__ (__printf__, 1, 2)))
                    241: #define GCC_FMT_ATTR(n, m) __attribute__ ((__format__ (__printf__, n, m)))
                    242: #else
                    243: #define GCC_ATTR /**/
                    244: #define GCC_FMT_ATTR(n, m)
                    245: #endif
                    246: 
                    247: static void GCC_ATTR dolog (const char *fmt, ...)
                    248: {
                    249:     va_list ap;
                    250: 
                    251:     va_start (ap, fmt);
                    252:     AUD_vlog (AUDIO_CAP, fmt, ap);
                    253:     va_end (ap);
                    254: }
                    255: 
                    256: #ifdef DEBUG
                    257: static void GCC_ATTR ldebug (const char *fmt, ...)
                    258: {
                    259:     va_list ap;
                    260: 
                    261:     va_start (ap, fmt);
                    262:     AUD_vlog (AUDIO_CAP, fmt, ap);
                    263:     va_end (ap);
                    264: }
                    265: #else
                    266: #if defined NDEBUG && defined __GNUC__
                    267: #define ldebug(...)
                    268: #elif defined NDEBUG && defined _MSC_VER
                    269: #define ldebug __noop
                    270: #else
                    271: static void GCC_ATTR ldebug (const char *fmt, ...)
                    272: {
                    273:     (void) fmt;
                    274: }
                    275: #endif
                    276: #endif
                    277: 
                    278: #undef GCC_ATTR
                    279: 
                    280: #define AUDIO_STRINGIFY_(n) #n
                    281: #define AUDIO_STRINGIFY(n) AUDIO_STRINGIFY_(n)
                    282: 
                    283: #if defined _MSC_VER || defined __GNUC__
                    284: #define AUDIO_FUNC __FUNCTION__
                    285: #else
                    286: #define AUDIO_FUNC __FILE__ ":" AUDIO_STRINGIFY (__LINE__)
                    287: #endif
                    288: 
1.1       root      289: #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.