Remove any pretense that there can be more than one AudioState

This commit is contained in:
malc 2009-05-14 03:11:35 +04:00
parent b36aa85c7b
commit 1a7dafce1d
16 changed files with 80 additions and 103 deletions

View File

@ -707,11 +707,11 @@ static void noop_conv (struct st_sample *dst, const void *src,
} }
static CaptureVoiceOut *audio_pcm_capture_find_specific ( static CaptureVoiceOut *audio_pcm_capture_find_specific (
AudioState *s,
struct audsettings *as struct audsettings *as
) )
{ {
CaptureVoiceOut *cap; CaptureVoiceOut *cap;
AudioState *s = &glob_audio_state;
for (cap = s->cap_head.lh_first; cap; cap = cap->entries.le_next) { for (cap = s->cap_head.lh_first; cap; cap = cap->entries.le_next) {
if (audio_pcm_info_eq (&cap->hw.info, as)) { if (audio_pcm_info_eq (&cap->hw.info, as)) {
@ -786,8 +786,9 @@ static void audio_detach_capture (HWVoiceOut *hw)
} }
} }
static int audio_attach_capture (AudioState *s, HWVoiceOut *hw) static int audio_attach_capture (HWVoiceOut *hw)
{ {
AudioState *s = &glob_audio_state;
CaptureVoiceOut *cap; CaptureVoiceOut *cap;
audio_detach_capture (hw); audio_detach_capture (hw);
@ -1295,7 +1296,7 @@ static void audio_run_out (AudioState *s)
HWVoiceOut *hw = NULL; HWVoiceOut *hw = NULL;
SWVoiceOut *sw; SWVoiceOut *sw;
while ((hw = audio_pcm_hw_find_any_enabled_out (s, hw))) { while ((hw = audio_pcm_hw_find_any_enabled_out (hw))) {
int played; int played;
int live, free, nb_live, cleanup_required, prev_rpos; int live, free, nb_live, cleanup_required, prev_rpos;
@ -1390,7 +1391,7 @@ static void audio_run_out (AudioState *s)
#ifdef DEBUG_PLIVE #ifdef DEBUG_PLIVE
dolog ("Finishing with old voice\n"); dolog ("Finishing with old voice\n");
#endif #endif
audio_close_out (s, sw); audio_close_out (sw);
} }
sw = sw1; sw = sw1;
} }
@ -1402,7 +1403,7 @@ static void audio_run_in (AudioState *s)
{ {
HWVoiceIn *hw = NULL; HWVoiceIn *hw = NULL;
while ((hw = audio_pcm_hw_find_any_enabled_in (s, hw))) { while ((hw = audio_pcm_hw_find_any_enabled_in (hw))) {
SWVoiceIn *sw; SWVoiceIn *sw;
int captured, min; int captured, min;
@ -1610,8 +1611,8 @@ static int audio_driver_init (AudioState *s, struct audio_driver *drv)
s->drv_opaque = drv->init (); s->drv_opaque = drv->init ();
if (s->drv_opaque) { if (s->drv_opaque) {
audio_init_nb_voices_out (s, drv); audio_init_nb_voices_out (drv);
audio_init_nb_voices_in (s, drv); audio_init_nb_voices_in (drv);
s->drv = drv; s->drv = drv;
return 0; return 0;
} }
@ -1630,11 +1631,11 @@ static void audio_vm_change_state_handler (void *opaque, int running,
int op = running ? VOICE_ENABLE : VOICE_DISABLE; int op = running ? VOICE_ENABLE : VOICE_DISABLE;
s->vm_running = running; s->vm_running = running;
while ((hwo = audio_pcm_hw_find_any_enabled_out (s, hwo))) { while ((hwo = audio_pcm_hw_find_any_enabled_out (hwo))) {
hwo->pcm_ops->ctl_out (hwo, op); hwo->pcm_ops->ctl_out (hwo, op);
} }
while ((hwi = audio_pcm_hw_find_any_enabled_in (s, hwi))) { while ((hwi = audio_pcm_hw_find_any_enabled_in (hwi))) {
hwi->pcm_ops->ctl_in (hwi, op); hwi->pcm_ops->ctl_in (hwi, op);
} }
} }
@ -1645,7 +1646,7 @@ static void audio_atexit (void)
HWVoiceOut *hwo = NULL; HWVoiceOut *hwo = NULL;
HWVoiceIn *hwi = NULL; HWVoiceIn *hwi = NULL;
while ((hwo = audio_pcm_hw_find_any_enabled_out (s, hwo))) { while ((hwo = audio_pcm_hw_find_any_enabled_out (hwo))) {
SWVoiceCap *sc; SWVoiceCap *sc;
hwo->pcm_ops->ctl_out (hwo, VOICE_DISABLE); hwo->pcm_ops->ctl_out (hwo, VOICE_DISABLE);
@ -1661,7 +1662,7 @@ static void audio_atexit (void)
} }
} }
while ((hwi = audio_pcm_hw_find_any_enabled_in (s, hwi))) { while ((hwi = audio_pcm_hw_find_any_enabled_in (hwi))) {
hwi->pcm_ops->ctl_in (hwi, VOICE_DISABLE); hwi->pcm_ops->ctl_in (hwi, VOICE_DISABLE);
hwi->pcm_ops->fini_in (hwi); hwi->pcm_ops->fini_in (hwi);
} }
@ -1689,22 +1690,7 @@ static int audio_load (QEMUFile *f, void *opaque, int version_id)
return 0; return 0;
} }
void AUD_register_card (AudioState *s, const char *name, QEMUSoundCard *card) static void audio_init (void)
{
card->audio = s;
card->name = qemu_strdup (name);
memset (&card->entries, 0, sizeof (card->entries));
LIST_INSERT_HEAD (&s->card_head, card, entries);
}
void AUD_remove_card (QEMUSoundCard *card)
{
LIST_REMOVE (card, entries);
card->audio = NULL;
qemu_free (card->name);
}
AudioState *AUD_init (void)
{ {
size_t i; size_t i;
int done = 0; int done = 0;
@ -1712,7 +1698,7 @@ AudioState *AUD_init (void)
AudioState *s = &glob_audio_state; AudioState *s = &glob_audio_state;
if (s->drv) { if (s->drv) {
return s; return;
} }
LIST_INIT (&s->hw_head_out); LIST_INIT (&s->hw_head_out);
@ -1804,24 +1790,33 @@ AudioState *AUD_init (void)
LIST_INIT (&s->card_head); LIST_INIT (&s->card_head);
register_savevm ("audio", 0, 1, audio_save, audio_load, s); register_savevm ("audio", 0, 1, audio_save, audio_load, s);
qemu_mod_timer (s->ts, qemu_get_clock (vm_clock) + conf.period.ticks); qemu_mod_timer (s->ts, qemu_get_clock (vm_clock) + conf.period.ticks);
return s;
} }
void AUD_register_card (const char *name, QEMUSoundCard *card)
{
audio_init ();
card->name = qemu_strdup (name);
memset (&card->entries, 0, sizeof (card->entries));
LIST_INSERT_HEAD (&glob_audio_state.card_head, card, entries);
}
void AUD_remove_card (QEMUSoundCard *card)
{
LIST_REMOVE (card, entries);
qemu_free (card->name);
}
CaptureVoiceOut *AUD_add_capture ( CaptureVoiceOut *AUD_add_capture (
AudioState *s,
struct audsettings *as, struct audsettings *as,
struct audio_capture_ops *ops, struct audio_capture_ops *ops,
void *cb_opaque void *cb_opaque
) )
{ {
AudioState *s = &glob_audio_state;
CaptureVoiceOut *cap; CaptureVoiceOut *cap;
struct capture_callback *cb; struct capture_callback *cb;
if (!s) {
/* XXX suppress */
s = &glob_audio_state;
}
if (audio_validate_settings (as)) { if (audio_validate_settings (as)) {
dolog ("Invalid settings were passed when trying to add capture\n"); dolog ("Invalid settings were passed when trying to add capture\n");
audio_print_settings (as); audio_print_settings (as);
@ -1837,7 +1832,7 @@ CaptureVoiceOut *AUD_add_capture (
cb->ops = *ops; cb->ops = *ops;
cb->opaque = cb_opaque; cb->opaque = cb_opaque;
cap = audio_pcm_capture_find_specific (s, as); cap = audio_pcm_capture_find_specific (as);
if (cap) { if (cap) {
LIST_INSERT_HEAD (&cap->cb_head, cb, entries); LIST_INSERT_HEAD (&cap->cb_head, cb, entries);
return cap; return cap;
@ -1887,8 +1882,8 @@ CaptureVoiceOut *AUD_add_capture (
LIST_INSERT_HEAD (&cap->cb_head, cb, entries); LIST_INSERT_HEAD (&cap->cb_head, cb, entries);
hw = NULL; hw = NULL;
while ((hw = audio_pcm_hw_find_any_out (s, hw))) { while ((hw = audio_pcm_hw_find_any_out (hw))) {
audio_attach_capture (s, hw); audio_attach_capture (hw);
} }
return cap; return cap;

View File

@ -78,7 +78,6 @@ typedef struct CaptureVoiceOut CaptureVoiceOut;
typedef struct SWVoiceIn SWVoiceIn; typedef struct SWVoiceIn SWVoiceIn;
typedef struct QEMUSoundCard { typedef struct QEMUSoundCard {
AudioState *audio;
char *name; char *name;
LIST_ENTRY (QEMUSoundCard) entries; LIST_ENTRY (QEMUSoundCard) entries;
} QEMUSoundCard; } QEMUSoundCard;
@ -94,12 +93,10 @@ void AUD_log (const char *cap, const char *fmt, ...)
#endif #endif
; ;
AudioState *AUD_init (void);
void AUD_help (void); void AUD_help (void);
void AUD_register_card (AudioState *s, const char *name, QEMUSoundCard *card); void AUD_register_card (const char *name, QEMUSoundCard *card);
void AUD_remove_card (QEMUSoundCard *card); void AUD_remove_card (QEMUSoundCard *card);
CaptureVoiceOut *AUD_add_capture ( CaptureVoiceOut *AUD_add_capture (
AudioState *s,
struct audsettings *as, struct audsettings *as,
struct audio_capture_ops *ops, struct audio_capture_ops *ops,
void *opaque void *opaque

View File

@ -104,6 +104,7 @@ typedef struct HWVoiceIn {
} HWVoiceIn; } HWVoiceIn;
struct SWVoiceOut { struct SWVoiceOut {
QEMUSoundCard *card;
struct audio_pcm_info info; struct audio_pcm_info info;
t_sample *conv; t_sample *conv;
int64_t ratio; int64_t ratio;
@ -120,6 +121,7 @@ struct SWVoiceOut {
}; };
struct SWVoiceIn { struct SWVoiceIn {
QEMUSoundCard *card;
int active; int active;
struct audio_pcm_info info; struct audio_pcm_info info;
int64_t ratio; int64_t ratio;

View File

@ -36,11 +36,9 @@
#define HWBUF hw->conv_buf #define HWBUF hw->conv_buf
#endif #endif
static void glue (audio_init_nb_voices_, TYPE) ( static void glue (audio_init_nb_voices_, TYPE) (struct audio_driver *drv)
AudioState *s,
struct audio_driver *drv
)
{ {
AudioState *s = &glob_audio_state;
int max_voices = glue (drv->max_voices_, TYPE); int max_voices = glue (drv->max_voices_, TYPE);
int voice_size = glue (drv->voice_size_, TYPE); int voice_size = glue (drv->voice_size_, TYPE);
@ -194,8 +192,9 @@ static void glue (audio_pcm_hw_del_sw_, TYPE) (SW *sw)
LIST_REMOVE (sw, entries); LIST_REMOVE (sw, entries);
} }
static void glue (audio_pcm_hw_gc_, TYPE) (AudioState *s, HW **hwp) static void glue (audio_pcm_hw_gc_, TYPE) (HW **hwp)
{ {
AudioState *s = &glob_audio_state;
HW *hw = *hwp; HW *hw = *hwp;
if (!hw->sw_head.lh_first) { if (!hw->sw_head.lh_first) {
@ -211,14 +210,15 @@ static void glue (audio_pcm_hw_gc_, TYPE) (AudioState *s, HW **hwp)
} }
} }
static HW *glue (audio_pcm_hw_find_any_, TYPE) (AudioState *s, HW *hw) static HW *glue (audio_pcm_hw_find_any_, TYPE) (HW *hw)
{ {
return hw ? hw->entries.le_next : s->glue (hw_head_, TYPE).lh_first; AudioState *s = &glob_audio_state;
return hw ? hw->entries.le_next : glue (s->hw_head_, TYPE).lh_first;
} }
static HW *glue (audio_pcm_hw_find_any_enabled_, TYPE) (AudioState *s, HW *hw) static HW *glue (audio_pcm_hw_find_any_enabled_, TYPE) (HW *hw)
{ {
while ((hw = glue (audio_pcm_hw_find_any_, TYPE) (s, hw))) { while ((hw = glue (audio_pcm_hw_find_any_, TYPE) (hw))) {
if (hw->enabled) { if (hw->enabled) {
return hw; return hw;
} }
@ -227,12 +227,11 @@ static HW *glue (audio_pcm_hw_find_any_enabled_, TYPE) (AudioState *s, HW *hw)
} }
static HW *glue (audio_pcm_hw_find_specific_, TYPE) ( static HW *glue (audio_pcm_hw_find_specific_, TYPE) (
AudioState *s,
HW *hw, HW *hw,
struct audsettings *as struct audsettings *as
) )
{ {
while ((hw = glue (audio_pcm_hw_find_any_, TYPE) (s, hw))) { while ((hw = glue (audio_pcm_hw_find_any_, TYPE) (hw))) {
if (audio_pcm_info_eq (&hw->info, as)) { if (audio_pcm_info_eq (&hw->info, as)) {
return hw; return hw;
} }
@ -240,10 +239,10 @@ static HW *glue (audio_pcm_hw_find_specific_, TYPE) (
return NULL; return NULL;
} }
static HW *glue (audio_pcm_hw_add_new_, TYPE) (AudioState *s, static HW *glue (audio_pcm_hw_add_new_, TYPE) (struct audsettings *as)
struct audsettings *as)
{ {
HW *hw; HW *hw;
AudioState *s = &glob_audio_state;
struct audio_driver *drv = s->drv; struct audio_driver *drv = s->drv;
if (!glue (s->nb_hw_voices_, TYPE)) { if (!glue (s->nb_hw_voices_, TYPE)) {
@ -298,7 +297,7 @@ static HW *glue (audio_pcm_hw_add_new_, TYPE) (AudioState *s,
LIST_INSERT_HEAD (&s->glue (hw_head_, TYPE), hw, entries); LIST_INSERT_HEAD (&s->glue (hw_head_, TYPE), hw, entries);
glue (s->nb_hw_voices_, TYPE) -= 1; glue (s->nb_hw_voices_, TYPE) -= 1;
#ifdef DAC #ifdef DAC
audio_attach_capture (s, hw); audio_attach_capture (hw);
#endif #endif
return hw; return hw;
@ -309,33 +308,31 @@ static HW *glue (audio_pcm_hw_add_new_, TYPE) (AudioState *s,
return NULL; return NULL;
} }
static HW *glue (audio_pcm_hw_add_, TYPE) (AudioState *s, static HW *glue (audio_pcm_hw_add_, TYPE) (struct audsettings *as)
struct audsettings *as)
{ {
HW *hw; HW *hw;
if (glue (conf.fixed_, TYPE).enabled && glue (conf.fixed_, TYPE).greedy) { if (glue (conf.fixed_, TYPE).enabled && glue (conf.fixed_, TYPE).greedy) {
hw = glue (audio_pcm_hw_add_new_, TYPE) (s, as); hw = glue (audio_pcm_hw_add_new_, TYPE) (as);
if (hw) { if (hw) {
return hw; return hw;
} }
} }
hw = glue (audio_pcm_hw_find_specific_, TYPE) (s, NULL, as); hw = glue (audio_pcm_hw_find_specific_, TYPE) (NULL, as);
if (hw) { if (hw) {
return hw; return hw;
} }
hw = glue (audio_pcm_hw_add_new_, TYPE) (s, as); hw = glue (audio_pcm_hw_add_new_, TYPE) (as);
if (hw) { if (hw) {
return hw; return hw;
} }
return glue (audio_pcm_hw_find_any_, TYPE) (s, NULL); return glue (audio_pcm_hw_find_any_, TYPE) (NULL);
} }
static SW *glue (audio_pcm_create_voice_pair_, TYPE) ( static SW *glue (audio_pcm_create_voice_pair_, TYPE) (
AudioState *s,
const char *sw_name, const char *sw_name,
struct audsettings *as struct audsettings *as
) )
@ -358,7 +355,7 @@ static SW *glue (audio_pcm_create_voice_pair_, TYPE) (
goto err1; goto err1;
} }
hw = glue (audio_pcm_hw_add_, TYPE) (s, &hw_as); hw = glue (audio_pcm_hw_add_, TYPE) (&hw_as);
if (!hw) { if (!hw) {
goto err2; goto err2;
} }
@ -373,31 +370,30 @@ static SW *glue (audio_pcm_create_voice_pair_, TYPE) (
err3: err3:
glue (audio_pcm_hw_del_sw_, TYPE) (sw); glue (audio_pcm_hw_del_sw_, TYPE) (sw);
glue (audio_pcm_hw_gc_, TYPE) (s, &hw); glue (audio_pcm_hw_gc_, TYPE) (&hw);
err2: err2:
qemu_free (sw); qemu_free (sw);
err1: err1:
return NULL; return NULL;
} }
static void glue (audio_close_, TYPE) (AudioState *s, SW *sw) static void glue (audio_close_, TYPE) (SW *sw)
{ {
glue (audio_pcm_sw_fini_, TYPE) (sw); glue (audio_pcm_sw_fini_, TYPE) (sw);
glue (audio_pcm_hw_del_sw_, TYPE) (sw); glue (audio_pcm_hw_del_sw_, TYPE) (sw);
glue (audio_pcm_hw_gc_, TYPE) (s, &sw->hw); glue (audio_pcm_hw_gc_, TYPE) (&sw->hw);
qemu_free (sw); qemu_free (sw);
} }
void glue (AUD_close_, TYPE) (QEMUSoundCard *card, SW *sw) void glue (AUD_close_, TYPE) (QEMUSoundCard *card, SW *sw)
{ {
if (sw) { if (sw) {
if (audio_bug (AUDIO_FUNC, !card || !card->audio)) { if (audio_bug (AUDIO_FUNC, !card)) {
dolog ("card=%p card->audio=%p\n", dolog ("card=%p\n", card);
card, card ? card->audio : NULL);
return; return;
} }
glue (audio_close_, TYPE) (card->audio, sw); glue (audio_close_, TYPE) (sw);
} }
} }
@ -410,7 +406,7 @@ SW *glue (AUD_open_, TYPE) (
struct audsettings *as struct audsettings *as
) )
{ {
AudioState *s; AudioState *s = &glob_audio_state;
#ifdef DAC #ifdef DAC
int live = 0; int live = 0;
SW *old_sw = NULL; SW *old_sw = NULL;
@ -419,15 +415,12 @@ SW *glue (AUD_open_, TYPE) (
ldebug ("open %s, freq %d, nchannels %d, fmt %d\n", ldebug ("open %s, freq %d, nchannels %d, fmt %d\n",
name, as->freq, as->nchannels, as->fmt); name, as->freq, as->nchannels, as->fmt);
if (audio_bug (AUDIO_FUNC, if (audio_bug (AUDIO_FUNC, !card || !name || !callback_fn || !as)) {
!card || !card->audio || !name || !callback_fn || !as)) { dolog ("card=%p name=%p callback_fn=%p as=%p\n",
dolog ("card=%p card->audio=%p name=%p callback_fn=%p as=%p\n", card, name, callback_fn, as);
card, card ? card->audio : NULL, name, callback_fn, as);
goto fail; goto fail;
} }
s = card->audio;
if (audio_bug (AUDIO_FUNC, audio_validate_settings (as))) { if (audio_bug (AUDIO_FUNC, audio_validate_settings (as))) {
audio_print_settings (as); audio_print_settings (as);
goto fail; goto fail;
@ -485,7 +478,7 @@ SW *glue (AUD_open_, TYPE) (
} }
} }
else { else {
sw = glue (audio_pcm_create_voice_pair_, TYPE) (s, name, as); sw = glue (audio_pcm_create_voice_pair_, TYPE) (name, as);
if (!sw) { if (!sw) {
dolog ("Failed to create voice `%s'\n", name); dolog ("Failed to create voice `%s'\n", name);
return NULL; return NULL;
@ -493,6 +486,7 @@ SW *glue (AUD_open_, TYPE) (
} }
if (sw) { if (sw) {
sw->card = card;
sw->vol = nominal_volume; sw->vol = nominal_volume;
sw->callback.fn = callback_fn; sw->callback.fn = callback_fn;
sw->callback.opaque = callback_opaque; sw->callback.opaque = callback_opaque;

View File

@ -145,7 +145,7 @@ int wav_start_capture (CaptureState *s, const char *path, int freq,
qemu_put_buffer (wav->f, hdr, sizeof (hdr)); qemu_put_buffer (wav->f, hdr, sizeof (hdr));
cap = AUD_add_capture (NULL, &as, &ops, wav); cap = AUD_add_capture (&as, &ops, wav);
if (!cap) { if (!cap) {
monitor_printf(mon, "Failed to add audio capture\n"); monitor_printf(mon, "Failed to add audio capture\n");
qemu_free (wav->path); qemu_free (wav->path);

View File

@ -1310,7 +1310,6 @@ static void ac97_on_reset (void *opaque)
int ac97_init (PCIBus *bus) int ac97_init (PCIBus *bus)
{ {
AudioState *audio = AUD_init();
PCIAC97LinkState *d; PCIAC97LinkState *d;
AC97LinkState *s; AC97LinkState *s;
uint8_t *c; uint8_t *c;
@ -1371,7 +1370,7 @@ int ac97_init (PCIBus *bus)
pci_register_io_region (&d->dev, 1, 64 * 4, PCI_ADDRESS_SPACE_IO, ac97_map); pci_register_io_region (&d->dev, 1, 64 * 4, PCI_ADDRESS_SPACE_IO, ac97_map);
register_savevm ("ac97", 0, 2, ac97_save, ac97_load, s); register_savevm ("ac97", 0, 2, ac97_save, ac97_load, s);
qemu_register_reset (ac97_on_reset, s); qemu_register_reset (ac97_on_reset, s);
AUD_register_card (audio, "ac97", &s->card); AUD_register_card ("ac97", &s->card);
ac97_on_reset (s); ac97_on_reset (s);
return 0; return 0;
} }

View File

@ -278,7 +278,6 @@ static void Adlib_fini (AdlibState *s)
int Adlib_init (qemu_irq *pic) int Adlib_init (qemu_irq *pic)
{ {
AudioState *audio = AUD_init();
AdlibState *s = &glob_adlib; AdlibState *s = &glob_adlib;
struct audsettings as; struct audsettings as;
@ -308,7 +307,7 @@ int Adlib_init (qemu_irq *pic)
as.fmt = AUD_FMT_S16; as.fmt = AUD_FMT_S16;
as.endianness = AUDIO_HOST_ENDIANNESS; as.endianness = AUDIO_HOST_ENDIANNESS;
AUD_register_card (audio, "adlib", &s->card); AUD_register_card ("adlib", &s->card);
s->voice = AUD_open_out ( s->voice = AUD_open_out (
&s->card, &s->card,

View File

@ -638,7 +638,6 @@ static int cs_load(QEMUFile *f, void *opaque, int version_id)
int cs4231a_init (qemu_irq *pic) int cs4231a_init (qemu_irq *pic)
{ {
AudioState *audio = AUD_init();
int i; int i;
CSState *s; CSState *s;
@ -660,6 +659,6 @@ int cs4231a_init (qemu_irq *pic)
qemu_register_reset (cs_reset, s); qemu_register_reset (cs_reset, s);
cs_reset (s); cs_reset (s);
AUD_register_card (audio,"cs4231a", &s->card); AUD_register_card ("cs4231a", &s->card);
return 0; return 0;
} }

View File

@ -1007,7 +1007,6 @@ static void es1370_on_reset (void *opaque)
int es1370_init (PCIBus *bus) int es1370_init (PCIBus *bus)
{ {
AudioState *audio = AUD_init();
PCIES1370State *d; PCIES1370State *d;
ES1370State *s; ES1370State *s;
uint8_t *c; uint8_t *c;
@ -1058,7 +1057,7 @@ int es1370_init (PCIBus *bus)
register_savevm ("es1370", 0, 2, es1370_save, es1370_load, s); register_savevm ("es1370", 0, 2, es1370_save, es1370_load, s);
qemu_register_reset (es1370_on_reset, s); qemu_register_reset (es1370_on_reset, s);
AUD_register_card (audio, "es1370", &s->card); AUD_register_card ("es1370", &s->card);
es1370_reset (s); es1370_reset (s);
return 0; return 0;
} }

View File

@ -252,13 +252,12 @@ static int GUS_load (QEMUFile *f, void *opaque, int version_id)
int GUS_init (qemu_irq *pic) int GUS_init (qemu_irq *pic)
{ {
AudioState *audio = AUD_init();
GUSState *s; GUSState *s;
struct audsettings as; struct audsettings as;
s = qemu_mallocz (sizeof (*s)); s = qemu_mallocz (sizeof (*s));
AUD_register_card (audio, "gus", &s->card); AUD_register_card ("gus", &s->card);
as.freq = conf.freq; as.freq = conf.freq;
as.nchannels = 2; as.nchannels = 2;

View File

@ -1973,7 +1973,7 @@ struct omap_eac_s *omap_eac_init(struct omap_target_agent_s *ta,
omap_eac_reset(s); omap_eac_reset(s);
#ifdef HAS_AUDIO #ifdef HAS_AUDIO
AUD_register_card(AUD_init(), "OMAP EAC", &s->codec.card); AUD_register_card("OMAP EAC", &s->codec.card);
iomemtype = cpu_register_io_memory(0, omap_eac_readfn, iomemtype = cpu_register_io_memory(0, omap_eac_readfn,
omap_eac_writefn, s); omap_eac_writefn, s);

View File

@ -98,11 +98,10 @@ static void pcspk_callback(void *opaque, int free)
int pcspk_audio_init(qemu_irq *pic) int pcspk_audio_init(qemu_irq *pic)
{ {
AudioState *audio = AUD_init();
PCSpkState *s = &pcspk_state; PCSpkState *s = &pcspk_state;
struct audsettings as = {PCSPK_SAMPLE_RATE, 1, AUD_FMT_U8, 0}; struct audsettings as = {PCSPK_SAMPLE_RATE, 1, AUD_FMT_U8, 0};
AUD_register_card(audio, s_spk, &s->card); AUD_register_card(s_spk, &s->card);
s->voice = AUD_open_out(&s->card, s->voice, s_spk, s, pcspk_callback, &as); s->voice = AUD_open_out(&s->card, s->voice, s_spk, s, pcspk_callback, &as);
if (!s->voice) { if (!s->voice) {

View File

@ -1400,7 +1400,6 @@ static int SB_load (QEMUFile *f, void *opaque, int version_id)
int SB16_init (qemu_irq *pic) int SB16_init (qemu_irq *pic)
{ {
AudioState *audio = AUD_init();
SB16State *s; SB16State *s;
int i; int i;
static const uint8_t dsp_write_ports[] = {0x6, 0xc}; static const uint8_t dsp_write_ports[] = {0x6, 0xc};
@ -1447,6 +1446,6 @@ int SB16_init (qemu_irq *pic)
s->can_write = 1; s->can_write = 1;
register_savevm ("sb16", 0, 1, SB_save, SB_load, s); register_savevm ("sb16", 0, 1, SB_save, SB_load, s);
AUD_register_card (audio, "sb16", &s->card); AUD_register_card ("sb16", &s->card);
return 0; return 0;
} }

View File

@ -82,7 +82,6 @@ typedef struct {
SWVoiceOut *dac_voice[1]; SWVoiceOut *dac_voice[1];
int i2s_rx_rate; int i2s_rx_rate;
int i2s_tx_rate; int i2s_tx_rate;
AudioState *audio;
int tr[8]; int tr[8];
@ -1117,7 +1116,6 @@ uWireSlave *tsc2102_init(qemu_irq pint)
s->pint = pint; s->pint = pint;
s->model = 0x2102; s->model = 0x2102;
s->name = "tsc2102"; s->name = "tsc2102";
s->audio = AUD_init();;
s->tr[0] = 0; s->tr[0] = 0;
s->tr[1] = 1; s->tr[1] = 1;
@ -1143,7 +1141,7 @@ uWireSlave *tsc2102_init(qemu_irq pint)
qemu_add_mouse_event_handler(tsc210x_touchscreen_event, s, 1, qemu_add_mouse_event_handler(tsc210x_touchscreen_event, s, 1,
"QEMU TSC2102-driven Touchscreen"); "QEMU TSC2102-driven Touchscreen");
AUD_register_card(s->audio, s->name, &s->card); AUD_register_card(s->name, &s->card);
qemu_register_reset((void *) tsc210x_reset, s); qemu_register_reset((void *) tsc210x_reset, s);
register_savevm(s->name, -1, 0, register_savevm(s->name, -1, 0,
@ -1169,7 +1167,6 @@ uWireSlave *tsc2301_init(qemu_irq penirq, qemu_irq kbirq, qemu_irq dav)
s->davint = dav; s->davint = dav;
s->model = 0x2301; s->model = 0x2301;
s->name = "tsc2301"; s->name = "tsc2301";
s->audio = AUD_init();
s->tr[0] = 0; s->tr[0] = 0;
s->tr[1] = 1; s->tr[1] = 1;
@ -1195,7 +1192,7 @@ uWireSlave *tsc2301_init(qemu_irq penirq, qemu_irq kbirq, qemu_irq dav)
qemu_add_mouse_event_handler(tsc210x_touchscreen_event, s, 1, qemu_add_mouse_event_handler(tsc210x_touchscreen_event, s, 1,
"QEMU TSC2301-driven Touchscreen"); "QEMU TSC2301-driven Touchscreen");
AUD_register_card(s->audio, s->name, &s->card); AUD_register_card(s->name, &s->card);
qemu_register_reset((void *) tsc210x_reset, s); qemu_register_reset((void *) tsc210x_reset, s);
register_savevm(s->name, -1, 0, tsc210x_save, tsc210x_load, s); register_savevm(s->name, -1, 0, tsc210x_save, tsc210x_load, s);

View File

@ -647,14 +647,13 @@ static int wm8750_load(QEMUFile *f, void *opaque, int version_id)
i2c_slave *wm8750_init(i2c_bus *bus) i2c_slave *wm8750_init(i2c_bus *bus)
{ {
AudioState *audio = AUD_init();
WM8750State *s = (WM8750State *) WM8750State *s = (WM8750State *)
i2c_slave_init(bus, 0, sizeof(WM8750State)); i2c_slave_init(bus, 0, sizeof(WM8750State));
s->i2c.event = wm8750_event; s->i2c.event = wm8750_event;
s->i2c.recv = wm8750_rx; s->i2c.recv = wm8750_rx;
s->i2c.send = wm8750_tx; s->i2c.send = wm8750_tx;
AUD_register_card(audio, CODEC, &s->card); AUD_register_card(CODEC, &s->card);
wm8750_reset(&s->i2c); wm8750_reset(&s->i2c);
register_savevm(CODEC, -1, 0, wm8750_save, wm8750_load, s); register_savevm(CODEC, -1, 0, wm8750_save, wm8750_load, s);

2
vnc.c
View File

@ -855,7 +855,7 @@ static void audio_add(VncState *vs)
ops.destroy = audio_capture_destroy; ops.destroy = audio_capture_destroy;
ops.capture = audio_capture; ops.capture = audio_capture;
vs->audio_cap = AUD_add_capture(NULL, &vs->as, &ops, vs); vs->audio_cap = AUD_add_capture(&vs->as, &ops, vs);
if (!vs->audio_cap) { if (!vs->audio_cap) {
monitor_printf(mon, "Failed to add audio capture\n"); monitor_printf(mon, "Failed to add audio capture\n");
} }