symbian-qemu-0.9.1-12/qemu-symbian-svp/audio/audio.h
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 /*
       
     2  * QEMU Audio subsystem header
       
     3  *
       
     4  * Copyright (c) 2003-2005 Vassili Karpov (malc)
       
     5  *
       
     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_H
       
    25 #define QEMU_AUDIO_H
       
    26 
       
    27 #include "config-host.h"
       
    28 #include "sys-queue.h"
       
    29 
       
    30 typedef void (*audio_callback_fn_t) (void *opaque, int avail);
       
    31 
       
    32 typedef enum {
       
    33     AUD_FMT_U8,
       
    34     AUD_FMT_S8,
       
    35     AUD_FMT_U16,
       
    36     AUD_FMT_S16,
       
    37     AUD_FMT_U32,
       
    38     AUD_FMT_S32
       
    39 } audfmt_e;
       
    40 
       
    41 #ifdef WORDS_BIGENDIAN
       
    42 #define AUDIO_HOST_ENDIANNESS 1
       
    43 #else
       
    44 #define AUDIO_HOST_ENDIANNESS 0
       
    45 #endif
       
    46 
       
    47 struct audsettings {
       
    48     int freq;
       
    49     int nchannels;
       
    50     audfmt_e fmt;
       
    51     int endianness;
       
    52 };
       
    53 
       
    54 typedef enum {
       
    55     AUD_CNOTIFY_ENABLE,
       
    56     AUD_CNOTIFY_DISABLE
       
    57 } audcnotification_e;
       
    58 
       
    59 struct audio_capture_ops {
       
    60     void (*notify) (void *opaque, audcnotification_e cmd);
       
    61     void (*capture) (void *opaque, void *buf, int size);
       
    62     void (*destroy) (void *opaque);
       
    63 };
       
    64 
       
    65 struct capture_ops {
       
    66     void (*info) (void *opaque);
       
    67     void (*destroy) (void *opaque);
       
    68 };
       
    69 
       
    70 typedef struct CaptureState {
       
    71     void *opaque;
       
    72     struct capture_ops ops;
       
    73     LIST_ENTRY (CaptureState) entries;
       
    74 } CaptureState;
       
    75 
       
    76 typedef struct SWVoiceOut SWVoiceOut;
       
    77 typedef struct CaptureVoiceOut CaptureVoiceOut;
       
    78 typedef struct SWVoiceIn SWVoiceIn;
       
    79 
       
    80 typedef struct QEMUSoundCard {
       
    81     AudioState *audio;
       
    82     char *name;
       
    83     LIST_ENTRY (QEMUSoundCard) entries;
       
    84 } QEMUSoundCard;
       
    85 
       
    86 typedef struct QEMUAudioTimeStamp {
       
    87     uint64_t old_ts;
       
    88 } QEMUAudioTimeStamp;
       
    89 
       
    90 void AUD_vlog (const char *cap, const char *fmt, va_list ap);
       
    91 void AUD_log (const char *cap, const char *fmt, ...)
       
    92 #ifdef __GNUC__
       
    93     __attribute__ ((__format__ (__printf__, 2, 3)))
       
    94 #endif
       
    95     ;
       
    96 
       
    97 AudioState *AUD_init (void);
       
    98 void AUD_help (void);
       
    99 void AUD_register_card (AudioState *s, const char *name, QEMUSoundCard *card);
       
   100 void AUD_remove_card (QEMUSoundCard *card);
       
   101 CaptureVoiceOut *AUD_add_capture (
       
   102     AudioState *s,
       
   103     struct audsettings *as,
       
   104     struct audio_capture_ops *ops,
       
   105     void *opaque
       
   106     );
       
   107 void AUD_del_capture (CaptureVoiceOut *cap, void *cb_opaque);
       
   108 
       
   109 SWVoiceOut *AUD_open_out (
       
   110     QEMUSoundCard *card,
       
   111     SWVoiceOut *sw,
       
   112     const char *name,
       
   113     void *callback_opaque,
       
   114     audio_callback_fn_t callback_fn,
       
   115     struct audsettings *settings
       
   116     );
       
   117 
       
   118 void AUD_close_out (QEMUSoundCard *card, SWVoiceOut *sw);
       
   119 int  AUD_write (SWVoiceOut *sw, void *pcm_buf, int size);
       
   120 int  AUD_get_buffer_size_out (SWVoiceOut *sw);
       
   121 void AUD_set_active_out (SWVoiceOut *sw, int on);
       
   122 int  AUD_is_active_out (SWVoiceOut *sw);
       
   123 
       
   124 void     AUD_init_time_stamp_out (SWVoiceOut *sw, QEMUAudioTimeStamp *ts);
       
   125 uint64_t AUD_get_elapsed_usec_out (SWVoiceOut *sw, QEMUAudioTimeStamp *ts);
       
   126 
       
   127 void AUD_set_volume_out (SWVoiceOut *sw, int mute, uint8_t lvol, uint8_t rvol);
       
   128 void AUD_set_volume_in (SWVoiceIn *sw, int mute, uint8_t lvol, uint8_t rvol);
       
   129 
       
   130 SWVoiceIn *AUD_open_in (
       
   131     QEMUSoundCard *card,
       
   132     SWVoiceIn *sw,
       
   133     const char *name,
       
   134     void *callback_opaque,
       
   135     audio_callback_fn_t callback_fn,
       
   136     struct audsettings *settings
       
   137     );
       
   138 
       
   139 void AUD_close_in (QEMUSoundCard *card, SWVoiceIn *sw);
       
   140 int  AUD_read (SWVoiceIn *sw, void *pcm_buf, int size);
       
   141 void AUD_set_active_in (SWVoiceIn *sw, int on);
       
   142 int  AUD_is_active_in (SWVoiceIn *sw);
       
   143 
       
   144 void     AUD_init_time_stamp_in (SWVoiceIn *sw, QEMUAudioTimeStamp *ts);
       
   145 uint64_t AUD_get_elapsed_usec_in (SWVoiceIn *sw, QEMUAudioTimeStamp *ts);
       
   146 
       
   147 static inline void *advance (void *p, int incr)
       
   148 {
       
   149     uint8_t *d = p;
       
   150     return (d + incr);
       
   151 }
       
   152 
       
   153 uint32_t popcount (uint32_t u);
       
   154 uint32_t lsbindex (uint32_t u);
       
   155 
       
   156 #ifdef __GNUC__
       
   157 #define audio_MIN(a, b) ( __extension__ ({      \
       
   158     __typeof (a) ta = a;                        \
       
   159     __typeof (b) tb = b;                        \
       
   160     ((ta)>(tb)?(tb):(ta));                      \
       
   161 }))
       
   162 
       
   163 #define audio_MAX(a, b) ( __extension__ ({      \
       
   164     __typeof (a) ta = a;                        \
       
   165     __typeof (b) tb = b;                        \
       
   166     ((ta)<(tb)?(tb):(ta));                      \
       
   167 }))
       
   168 #else
       
   169 #define audio_MIN(a, b) ((a)>(b)?(b):(a))
       
   170 #define audio_MAX(a, b) ((a)<(b)?(b):(a))
       
   171 #endif
       
   172 
       
   173 int wav_start_capture (CaptureState *s, const char *path, int freq,
       
   174                        int bits, int nchannels);
       
   175 
       
   176 #endif  /* audio.h */