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

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