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

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