Statistics
| Branch: | Revision:

root / audio / audio_int.h @ 1d6e34fd

History | View | Annotate | Download (4.5 kB)

1
/*
2
 * QEMU Audio subsystem header
3
 * 
4
 * Copyright (c) 2003-2004 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_INT_H
25
#define QEMU_AUDIO_INT_H
26

    
27
#include "vl.h"
28

    
29
struct pcm_ops;
30

    
31
typedef struct HWVoice {
32
    int active;
33
    int enabled;
34
    int pending_disable;
35
    int valid;
36
    int freq;
37

    
38
    f_sample *clip;
39
    audfmt_e fmt;
40
    int nchannels;
41

    
42
    int align;
43
    int shift;
44

    
45
    int rpos;
46
    int bufsize;
47

    
48
    int bytes_per_second;
49
    st_sample_t *mix_buf;
50

    
51
    int samples;
52
    int64_t old_ticks;
53
    int nb_voices;
54
    struct SWVoice **pvoice;
55
    struct pcm_ops *pcm_ops;
56
} HWVoice;
57

    
58
extern struct pcm_ops no_pcm_ops;
59
extern struct audio_output_driver no_output_driver;
60

    
61
extern struct pcm_ops oss_pcm_ops;
62
extern struct audio_output_driver oss_output_driver;
63

    
64
extern struct pcm_ops sdl_pcm_ops;
65
extern struct audio_output_driver sdl_output_driver;
66

    
67
extern struct pcm_ops wav_pcm_ops;
68
extern struct audio_output_driver wav_output_driver;
69

    
70
extern struct pcm_ops fmod_pcm_ops;
71
extern struct audio_output_driver fmod_output_driver;
72

    
73
struct audio_output_driver {
74
    const char *name;
75
    void *(*init) (void);
76
    void (*fini) (void *);
77
    struct pcm_ops *pcm_ops;
78
    int can_be_default;
79
    int max_voices;
80
    int voice_size;
81
};
82

    
83
typedef struct AudioState {
84
    int fixed_format;
85
    int fixed_freq;
86
    int fixed_channels;
87
    int fixed_fmt;
88
    int nb_hw_voices;
89
    int64_t ticks_threshold;
90
    int freq_threshold;
91
    void *opaque;
92
    struct audio_output_driver *drv;
93
} AudioState;
94
extern AudioState audio_state;
95

    
96
struct SWVoice {
97
    int freq;
98
    audfmt_e fmt;
99
    int nchannels;
100

    
101
    int shift;
102
    int align;
103

    
104
    t_sample *conv;
105

    
106
    int left;
107
    int pos;
108
    int bytes_per_second;
109
    int64_t ratio;
110
    st_sample_t *buf;
111
    void *rate;
112

    
113
    int wpos;
114
    int live;
115
    int active;
116
    int64_t old_ticks;
117
    HWVoice *hw;
118
    char *name;
119
};
120

    
121
struct pcm_ops {
122
    int  (*init)  (HWVoice *hw, int freq, int nchannels, audfmt_e fmt);
123
    void (*fini)  (HWVoice *hw);
124
    void (*run)   (HWVoice *hw);
125
    int  (*write) (SWVoice *sw, void *buf, int size);
126
    int  (*ctl)   (HWVoice *hw, int cmd, ...);
127
};
128

    
129
void      pcm_sw_free_resources (SWVoice *sw);
130
int       pcm_sw_alloc_resources (SWVoice *sw);
131
void      pcm_sw_fini (SWVoice *sw);
132
int       pcm_sw_init (SWVoice *sw, HWVoice *hw, int freq,
133
                       int nchannels, audfmt_e fmt);
134

    
135
void      pcm_hw_clear (HWVoice *hw, void *buf, int len);
136
HWVoice * pcm_hw_find_any (HWVoice *hw);
137
HWVoice * pcm_hw_find_any_active (HWVoice *hw);
138
HWVoice * pcm_hw_find_any_passive (HWVoice *hw);
139
HWVoice * pcm_hw_find_specific (HWVoice *hw, int freq,
140
                                int nchannels, audfmt_e fmt);
141
HWVoice * pcm_hw_add (int freq, int nchannels, audfmt_e fmt);
142
int       pcm_hw_add_sw (HWVoice *hw, SWVoice *sw);
143
int       pcm_hw_del_sw (HWVoice *hw, SWVoice *sw);
144
SWVoice * pcm_create_voice_pair (int freq, int nchannels, audfmt_e fmt);
145

    
146
void      pcm_hw_free_resources (HWVoice *hw);
147
int       pcm_hw_alloc_resources (HWVoice *hw);
148
void      pcm_hw_fini (HWVoice *hw);
149
void      pcm_hw_gc (HWVoice *hw);
150
int       pcm_hw_get_live (HWVoice *hw);
151
int       pcm_hw_get_live2 (HWVoice *hw, int *nb_active);
152
void      pcm_hw_dec_live (HWVoice *hw, int decr);
153
int       pcm_hw_write (SWVoice *sw, void *buf, int len);
154

    
155
int         audio_get_conf_int (const char *key, int defval);
156
const char *audio_get_conf_str (const char *key, const char *defval);
157

    
158
struct audio_output_driver;
159

    
160
#define VOICE_ENABLE 1
161
#define VOICE_DISABLE 2
162

    
163
#endif /* audio_int.h */