Loading audio/audio.c +33 −38 Original line number Diff line number Diff line Loading @@ -707,11 +707,11 @@ static void noop_conv (struct st_sample *dst, const void *src, } static CaptureVoiceOut *audio_pcm_capture_find_specific ( AudioState *s, struct audsettings *as ) { CaptureVoiceOut *cap; AudioState *s = &glob_audio_state; for (cap = s->cap_head.lh_first; cap; cap = cap->entries.le_next) { if (audio_pcm_info_eq (&cap->hw.info, as)) { Loading Loading @@ -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; audio_detach_capture (hw); Loading Loading @@ -1295,7 +1296,7 @@ static void audio_run_out (AudioState *s) HWVoiceOut *hw = NULL; 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 live, free, nb_live, cleanup_required, prev_rpos; Loading Loading @@ -1390,7 +1391,7 @@ static void audio_run_out (AudioState *s) #ifdef DEBUG_PLIVE dolog ("Finishing with old voice\n"); #endif audio_close_out (s, sw); audio_close_out (sw); } sw = sw1; } Loading @@ -1402,7 +1403,7 @@ static void audio_run_in (AudioState *s) { 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; int captured, min; Loading Loading @@ -1610,8 +1611,8 @@ static int audio_driver_init (AudioState *s, struct audio_driver *drv) s->drv_opaque = drv->init (); if (s->drv_opaque) { audio_init_nb_voices_out (s, drv); audio_init_nb_voices_in (s, drv); audio_init_nb_voices_out (drv); audio_init_nb_voices_in (drv); s->drv = drv; return 0; } Loading @@ -1630,11 +1631,11 @@ static void audio_vm_change_state_handler (void *opaque, int running, int op = running ? VOICE_ENABLE : VOICE_DISABLE; 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); } 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); } } Loading @@ -1645,7 +1646,7 @@ static void audio_atexit (void) HWVoiceOut *hwo = 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; hwo->pcm_ops->ctl_out (hwo, VOICE_DISABLE); Loading @@ -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->fini_in (hwi); } Loading Loading @@ -1689,22 +1690,7 @@ static int audio_load (QEMUFile *f, void *opaque, int version_id) return 0; } void AUD_register_card (AudioState *s, const char *name, QEMUSoundCard *card) { 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) static void audio_init (void) { size_t i; int done = 0; Loading @@ -1712,7 +1698,7 @@ AudioState *AUD_init (void) AudioState *s = &glob_audio_state; if (s->drv) { return s; return; } LIST_INIT (&s->hw_head_out); Loading Loading @@ -1804,24 +1790,33 @@ AudioState *AUD_init (void) LIST_INIT (&s->card_head); register_savevm ("audio", 0, 1, audio_save, audio_load, s); 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 ( AudioState *s, struct audsettings *as, struct audio_capture_ops *ops, void *cb_opaque ) { AudioState *s = &glob_audio_state; CaptureVoiceOut *cap; struct capture_callback *cb; if (!s) { /* XXX suppress */ s = &glob_audio_state; } if (audio_validate_settings (as)) { dolog ("Invalid settings were passed when trying to add capture\n"); audio_print_settings (as); Loading @@ -1837,7 +1832,7 @@ CaptureVoiceOut *AUD_add_capture ( cb->ops = *ops; cb->opaque = cb_opaque; cap = audio_pcm_capture_find_specific (s, as); cap = audio_pcm_capture_find_specific (as); if (cap) { LIST_INSERT_HEAD (&cap->cb_head, cb, entries); return cap; Loading Loading @@ -1887,8 +1882,8 @@ CaptureVoiceOut *AUD_add_capture ( LIST_INSERT_HEAD (&cap->cb_head, cb, entries); hw = NULL; while ((hw = audio_pcm_hw_find_any_out (s, hw))) { audio_attach_capture (s, hw); while ((hw = audio_pcm_hw_find_any_out (hw))) { audio_attach_capture (hw); } return cap; Loading audio/audio.h +1 −4 Original line number Diff line number Diff line Loading @@ -78,7 +78,6 @@ typedef struct CaptureVoiceOut CaptureVoiceOut; typedef struct SWVoiceIn SWVoiceIn; typedef struct QEMUSoundCard { AudioState *audio; char *name; LIST_ENTRY (QEMUSoundCard) entries; } QEMUSoundCard; Loading @@ -94,12 +93,10 @@ void AUD_log (const char *cap, const char *fmt, ...) #endif ; AudioState *AUD_init (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); CaptureVoiceOut *AUD_add_capture ( AudioState *s, struct audsettings *as, struct audio_capture_ops *ops, void *opaque Loading audio/audio_int.h +2 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,7 @@ typedef struct HWVoiceIn { } HWVoiceIn; struct SWVoiceOut { QEMUSoundCard *card; struct audio_pcm_info info; t_sample *conv; int64_t ratio; Loading @@ -120,6 +121,7 @@ struct SWVoiceOut { }; struct SWVoiceIn { QEMUSoundCard *card; int active; struct audio_pcm_info info; int64_t ratio; Loading audio/audio_template.h +31 −37 Original line number Diff line number Diff line Loading @@ -36,11 +36,9 @@ #define HWBUF hw->conv_buf #endif static void glue (audio_init_nb_voices_, TYPE) ( AudioState *s, struct audio_driver *drv ) static void glue (audio_init_nb_voices_, TYPE) (struct audio_driver *drv) { AudioState *s = &glob_audio_state; int max_voices = glue (drv->max_voices_, TYPE); int voice_size = glue (drv->voice_size_, TYPE); Loading Loading @@ -194,8 +192,9 @@ static void glue (audio_pcm_hw_del_sw_, TYPE) (SW *sw) 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; if (!hw->sw_head.lh_first) { Loading @@ -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) { return hw; } Loading @@ -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) ( AudioState *s, HW *hw, 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)) { return hw; } Loading @@ -240,10 +239,10 @@ static HW *glue (audio_pcm_hw_find_specific_, TYPE) ( return NULL; } static HW *glue (audio_pcm_hw_add_new_, TYPE) (AudioState *s, struct audsettings *as) static HW *glue (audio_pcm_hw_add_new_, TYPE) (struct audsettings *as) { HW *hw; AudioState *s = &glob_audio_state; struct audio_driver *drv = s->drv; if (!glue (s->nb_hw_voices_, TYPE)) { Loading Loading @@ -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); glue (s->nb_hw_voices_, TYPE) -= 1; #ifdef DAC audio_attach_capture (s, hw); audio_attach_capture (hw); #endif return hw; Loading @@ -309,33 +308,31 @@ static HW *glue (audio_pcm_hw_add_new_, TYPE) (AudioState *s, return NULL; } static HW *glue (audio_pcm_hw_add_, TYPE) (AudioState *s, struct audsettings *as) static HW *glue (audio_pcm_hw_add_, TYPE) (struct audsettings *as) { HW *hw; 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) { 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) { return hw; } hw = glue (audio_pcm_hw_add_new_, TYPE) (s, as); hw = glue (audio_pcm_hw_add_new_, TYPE) (as); if (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) ( AudioState *s, const char *sw_name, struct audsettings *as ) Loading @@ -358,7 +355,7 @@ static SW *glue (audio_pcm_create_voice_pair_, TYPE) ( goto err1; } hw = glue (audio_pcm_hw_add_, TYPE) (s, &hw_as); hw = glue (audio_pcm_hw_add_, TYPE) (&hw_as); if (!hw) { goto err2; } Loading @@ -373,31 +370,30 @@ static SW *glue (audio_pcm_create_voice_pair_, TYPE) ( err3: glue (audio_pcm_hw_del_sw_, TYPE) (sw); glue (audio_pcm_hw_gc_, TYPE) (s, &hw); glue (audio_pcm_hw_gc_, TYPE) (&hw); err2: qemu_free (sw); err1: 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_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); } void glue (AUD_close_, TYPE) (QEMUSoundCard *card, SW *sw) { if (sw) { if (audio_bug (AUDIO_FUNC, !card || !card->audio)) { dolog ("card=%p card->audio=%p\n", card, card ? card->audio : NULL); if (audio_bug (AUDIO_FUNC, !card)) { dolog ("card=%p\n", card); return; } glue (audio_close_, TYPE) (card->audio, sw); glue (audio_close_, TYPE) (sw); } } Loading @@ -410,7 +406,7 @@ SW *glue (AUD_open_, TYPE) ( struct audsettings *as ) { AudioState *s; AudioState *s = &glob_audio_state; #ifdef DAC int live = 0; SW *old_sw = NULL; Loading @@ -419,15 +415,12 @@ SW *glue (AUD_open_, TYPE) ( ldebug ("open %s, freq %d, nchannels %d, fmt %d\n", name, as->freq, as->nchannels, as->fmt); if (audio_bug (AUDIO_FUNC, !card || !card->audio || !name || !callback_fn || !as)) { dolog ("card=%p card->audio=%p name=%p callback_fn=%p as=%p\n", card, card ? card->audio : NULL, name, callback_fn, as); if (audio_bug (AUDIO_FUNC, !card || !name || !callback_fn || !as)) { dolog ("card=%p name=%p callback_fn=%p as=%p\n", card, name, callback_fn, as); goto fail; } s = card->audio; if (audio_bug (AUDIO_FUNC, audio_validate_settings (as))) { audio_print_settings (as); goto fail; Loading Loading @@ -485,7 +478,7 @@ SW *glue (AUD_open_, TYPE) ( } } else { sw = glue (audio_pcm_create_voice_pair_, TYPE) (s, name, as); sw = glue (audio_pcm_create_voice_pair_, TYPE) (name, as); if (!sw) { dolog ("Failed to create voice `%s'\n", name); return NULL; Loading @@ -493,6 +486,7 @@ SW *glue (AUD_open_, TYPE) ( } if (sw) { sw->card = card; sw->vol = nominal_volume; sw->callback.fn = callback_fn; sw->callback.opaque = callback_opaque; Loading audio/wavcapture.c +1 −1 Original line number Diff line number Diff line Loading @@ -145,7 +145,7 @@ int wav_start_capture (CaptureState *s, const char *path, int freq, 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) { monitor_printf(mon, "Failed to add audio capture\n"); qemu_free (wav->path); Loading Loading
audio/audio.c +33 −38 Original line number Diff line number Diff line Loading @@ -707,11 +707,11 @@ static void noop_conv (struct st_sample *dst, const void *src, } static CaptureVoiceOut *audio_pcm_capture_find_specific ( AudioState *s, struct audsettings *as ) { CaptureVoiceOut *cap; AudioState *s = &glob_audio_state; for (cap = s->cap_head.lh_first; cap; cap = cap->entries.le_next) { if (audio_pcm_info_eq (&cap->hw.info, as)) { Loading Loading @@ -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; audio_detach_capture (hw); Loading Loading @@ -1295,7 +1296,7 @@ static void audio_run_out (AudioState *s) HWVoiceOut *hw = NULL; 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 live, free, nb_live, cleanup_required, prev_rpos; Loading Loading @@ -1390,7 +1391,7 @@ static void audio_run_out (AudioState *s) #ifdef DEBUG_PLIVE dolog ("Finishing with old voice\n"); #endif audio_close_out (s, sw); audio_close_out (sw); } sw = sw1; } Loading @@ -1402,7 +1403,7 @@ static void audio_run_in (AudioState *s) { 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; int captured, min; Loading Loading @@ -1610,8 +1611,8 @@ static int audio_driver_init (AudioState *s, struct audio_driver *drv) s->drv_opaque = drv->init (); if (s->drv_opaque) { audio_init_nb_voices_out (s, drv); audio_init_nb_voices_in (s, drv); audio_init_nb_voices_out (drv); audio_init_nb_voices_in (drv); s->drv = drv; return 0; } Loading @@ -1630,11 +1631,11 @@ static void audio_vm_change_state_handler (void *opaque, int running, int op = running ? VOICE_ENABLE : VOICE_DISABLE; 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); } 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); } } Loading @@ -1645,7 +1646,7 @@ static void audio_atexit (void) HWVoiceOut *hwo = 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; hwo->pcm_ops->ctl_out (hwo, VOICE_DISABLE); Loading @@ -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->fini_in (hwi); } Loading Loading @@ -1689,22 +1690,7 @@ static int audio_load (QEMUFile *f, void *opaque, int version_id) return 0; } void AUD_register_card (AudioState *s, const char *name, QEMUSoundCard *card) { 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) static void audio_init (void) { size_t i; int done = 0; Loading @@ -1712,7 +1698,7 @@ AudioState *AUD_init (void) AudioState *s = &glob_audio_state; if (s->drv) { return s; return; } LIST_INIT (&s->hw_head_out); Loading Loading @@ -1804,24 +1790,33 @@ AudioState *AUD_init (void) LIST_INIT (&s->card_head); register_savevm ("audio", 0, 1, audio_save, audio_load, s); 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 ( AudioState *s, struct audsettings *as, struct audio_capture_ops *ops, void *cb_opaque ) { AudioState *s = &glob_audio_state; CaptureVoiceOut *cap; struct capture_callback *cb; if (!s) { /* XXX suppress */ s = &glob_audio_state; } if (audio_validate_settings (as)) { dolog ("Invalid settings were passed when trying to add capture\n"); audio_print_settings (as); Loading @@ -1837,7 +1832,7 @@ CaptureVoiceOut *AUD_add_capture ( cb->ops = *ops; cb->opaque = cb_opaque; cap = audio_pcm_capture_find_specific (s, as); cap = audio_pcm_capture_find_specific (as); if (cap) { LIST_INSERT_HEAD (&cap->cb_head, cb, entries); return cap; Loading Loading @@ -1887,8 +1882,8 @@ CaptureVoiceOut *AUD_add_capture ( LIST_INSERT_HEAD (&cap->cb_head, cb, entries); hw = NULL; while ((hw = audio_pcm_hw_find_any_out (s, hw))) { audio_attach_capture (s, hw); while ((hw = audio_pcm_hw_find_any_out (hw))) { audio_attach_capture (hw); } return cap; Loading
audio/audio.h +1 −4 Original line number Diff line number Diff line Loading @@ -78,7 +78,6 @@ typedef struct CaptureVoiceOut CaptureVoiceOut; typedef struct SWVoiceIn SWVoiceIn; typedef struct QEMUSoundCard { AudioState *audio; char *name; LIST_ENTRY (QEMUSoundCard) entries; } QEMUSoundCard; Loading @@ -94,12 +93,10 @@ void AUD_log (const char *cap, const char *fmt, ...) #endif ; AudioState *AUD_init (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); CaptureVoiceOut *AUD_add_capture ( AudioState *s, struct audsettings *as, struct audio_capture_ops *ops, void *opaque Loading
audio/audio_int.h +2 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,7 @@ typedef struct HWVoiceIn { } HWVoiceIn; struct SWVoiceOut { QEMUSoundCard *card; struct audio_pcm_info info; t_sample *conv; int64_t ratio; Loading @@ -120,6 +121,7 @@ struct SWVoiceOut { }; struct SWVoiceIn { QEMUSoundCard *card; int active; struct audio_pcm_info info; int64_t ratio; Loading
audio/audio_template.h +31 −37 Original line number Diff line number Diff line Loading @@ -36,11 +36,9 @@ #define HWBUF hw->conv_buf #endif static void glue (audio_init_nb_voices_, TYPE) ( AudioState *s, struct audio_driver *drv ) static void glue (audio_init_nb_voices_, TYPE) (struct audio_driver *drv) { AudioState *s = &glob_audio_state; int max_voices = glue (drv->max_voices_, TYPE); int voice_size = glue (drv->voice_size_, TYPE); Loading Loading @@ -194,8 +192,9 @@ static void glue (audio_pcm_hw_del_sw_, TYPE) (SW *sw) 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; if (!hw->sw_head.lh_first) { Loading @@ -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) { return hw; } Loading @@ -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) ( AudioState *s, HW *hw, 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)) { return hw; } Loading @@ -240,10 +239,10 @@ static HW *glue (audio_pcm_hw_find_specific_, TYPE) ( return NULL; } static HW *glue (audio_pcm_hw_add_new_, TYPE) (AudioState *s, struct audsettings *as) static HW *glue (audio_pcm_hw_add_new_, TYPE) (struct audsettings *as) { HW *hw; AudioState *s = &glob_audio_state; struct audio_driver *drv = s->drv; if (!glue (s->nb_hw_voices_, TYPE)) { Loading Loading @@ -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); glue (s->nb_hw_voices_, TYPE) -= 1; #ifdef DAC audio_attach_capture (s, hw); audio_attach_capture (hw); #endif return hw; Loading @@ -309,33 +308,31 @@ static HW *glue (audio_pcm_hw_add_new_, TYPE) (AudioState *s, return NULL; } static HW *glue (audio_pcm_hw_add_, TYPE) (AudioState *s, struct audsettings *as) static HW *glue (audio_pcm_hw_add_, TYPE) (struct audsettings *as) { HW *hw; 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) { 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) { return hw; } hw = glue (audio_pcm_hw_add_new_, TYPE) (s, as); hw = glue (audio_pcm_hw_add_new_, TYPE) (as); if (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) ( AudioState *s, const char *sw_name, struct audsettings *as ) Loading @@ -358,7 +355,7 @@ static SW *glue (audio_pcm_create_voice_pair_, TYPE) ( goto err1; } hw = glue (audio_pcm_hw_add_, TYPE) (s, &hw_as); hw = glue (audio_pcm_hw_add_, TYPE) (&hw_as); if (!hw) { goto err2; } Loading @@ -373,31 +370,30 @@ static SW *glue (audio_pcm_create_voice_pair_, TYPE) ( err3: glue (audio_pcm_hw_del_sw_, TYPE) (sw); glue (audio_pcm_hw_gc_, TYPE) (s, &hw); glue (audio_pcm_hw_gc_, TYPE) (&hw); err2: qemu_free (sw); err1: 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_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); } void glue (AUD_close_, TYPE) (QEMUSoundCard *card, SW *sw) { if (sw) { if (audio_bug (AUDIO_FUNC, !card || !card->audio)) { dolog ("card=%p card->audio=%p\n", card, card ? card->audio : NULL); if (audio_bug (AUDIO_FUNC, !card)) { dolog ("card=%p\n", card); return; } glue (audio_close_, TYPE) (card->audio, sw); glue (audio_close_, TYPE) (sw); } } Loading @@ -410,7 +406,7 @@ SW *glue (AUD_open_, TYPE) ( struct audsettings *as ) { AudioState *s; AudioState *s = &glob_audio_state; #ifdef DAC int live = 0; SW *old_sw = NULL; Loading @@ -419,15 +415,12 @@ SW *glue (AUD_open_, TYPE) ( ldebug ("open %s, freq %d, nchannels %d, fmt %d\n", name, as->freq, as->nchannels, as->fmt); if (audio_bug (AUDIO_FUNC, !card || !card->audio || !name || !callback_fn || !as)) { dolog ("card=%p card->audio=%p name=%p callback_fn=%p as=%p\n", card, card ? card->audio : NULL, name, callback_fn, as); if (audio_bug (AUDIO_FUNC, !card || !name || !callback_fn || !as)) { dolog ("card=%p name=%p callback_fn=%p as=%p\n", card, name, callback_fn, as); goto fail; } s = card->audio; if (audio_bug (AUDIO_FUNC, audio_validate_settings (as))) { audio_print_settings (as); goto fail; Loading Loading @@ -485,7 +478,7 @@ SW *glue (AUD_open_, TYPE) ( } } else { sw = glue (audio_pcm_create_voice_pair_, TYPE) (s, name, as); sw = glue (audio_pcm_create_voice_pair_, TYPE) (name, as); if (!sw) { dolog ("Failed to create voice `%s'\n", name); return NULL; Loading @@ -493,6 +486,7 @@ SW *glue (AUD_open_, TYPE) ( } if (sw) { sw->card = card; sw->vol = nominal_volume; sw->callback.fn = callback_fn; sw->callback.opaque = callback_opaque; Loading
audio/wavcapture.c +1 −1 Original line number Diff line number Diff line Loading @@ -145,7 +145,7 @@ int wav_start_capture (CaptureState *s, const char *path, int freq, 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) { monitor_printf(mon, "Failed to add audio capture\n"); qemu_free (wav->path); Loading