X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=audio%2Faudio_template.h;h=99b27b285e38acf2fe9069c0b4d9396ce13bdc34;hb=c36ed06e9159fa484b711dfdd27ec64d7ac3d17a;hp=14c648c05fe9b372f0f56bb5d1361949b772bf74;hpb=cb4f03e874e112d3df79b3cbe1903d28985371a7;p=mirror_qemu.git diff --git a/audio/audio_template.h b/audio/audio_template.h index 14c648c05f..99b27b285e 100644 --- a/audio/audio_template.h +++ b/audio/audio_template.h @@ -71,10 +71,7 @@ static void glue (audio_init_nb_voices_, TYPE) (struct audio_driver *drv) static void glue (audio_pcm_hw_free_resources_, TYPE) (HW *hw) { - if (HWBUF) { - qemu_free (HWBUF); - } - + g_free (HWBUF); HWBUF = NULL; } @@ -92,9 +89,7 @@ static int glue (audio_pcm_hw_alloc_resources_, TYPE) (HW *hw) static void glue (audio_pcm_sw_free_resources_, TYPE) (SW *sw) { - if (sw->buf) { - qemu_free (sw->buf); - } + g_free (sw->buf); if (sw->rate) { st_rate_stop (sw->rate); @@ -108,11 +103,7 @@ static int glue (audio_pcm_sw_alloc_resources_, TYPE) (SW *sw) { int samples; -#ifdef DAC - samples = sw->hw->samples; -#else samples = ((int64_t) sw->hw->samples << 32) / sw->ratio; -#endif sw->buf = audio_calloc (AUDIO_FUNC, samples, sizeof (struct st_sample)); if (!sw->buf) { @@ -127,7 +118,7 @@ static int glue (audio_pcm_sw_alloc_resources_, TYPE) (SW *sw) sw->rate = st_rate_start (sw->hw->info.freq, sw->info.freq); #endif if (!sw->rate) { - qemu_free (sw->buf); + g_free (sw->buf); sw->buf = NULL; return -1; } @@ -164,10 +155,10 @@ static int glue (audio_pcm_sw_init_, TYPE) ( [sw->info.swap_endianness] [audio_bits_to_index (sw->info.bits)]; - sw->name = qemu_strdup (name); + sw->name = g_strdup (name); err = glue (audio_pcm_sw_alloc_resources_, TYPE) (sw); if (err) { - qemu_free (sw->name); + g_free (sw->name); sw->name = NULL; } return err; @@ -176,10 +167,8 @@ static int glue (audio_pcm_sw_init_, TYPE) ( static void glue (audio_pcm_sw_fini_, TYPE) (SW *sw) { glue (audio_pcm_sw_free_resources_, TYPE) (sw); - if (sw->name) { - qemu_free (sw->name); - sw->name = NULL; - } + g_free (sw->name); + sw->name = NULL; } static void glue (audio_pcm_hw_add_sw_, TYPE) (HW *hw, SW *sw) @@ -202,10 +191,10 @@ static void glue (audio_pcm_hw_gc_, TYPE) (HW **hwp) audio_detach_capture (hw); #endif QLIST_REMOVE (hw, entries); + glue (hw->pcm_ops->fini_, TYPE) (hw); glue (s->nb_hw_voices_, TYPE) += 1; glue (audio_pcm_hw_free_resources_ ,TYPE) (hw); - glue (hw->pcm_ops->fini_, TYPE) (hw); - qemu_free (hw); + g_free (hw); *hwp = NULL; } } @@ -267,11 +256,13 @@ static HW *glue (audio_pcm_hw_add_new_, TYPE) (struct audsettings *as) } hw->pcm_ops = drv->pcm_ops; + hw->ctl_caps = drv->ctl_caps; + QLIST_INIT (&hw->sw_head); #ifdef DAC QLIST_INIT (&hw->cap_head); #endif - if (glue (hw->pcm_ops->init_, TYPE) (hw, as)) { + if (glue (hw->pcm_ops->init_, TYPE) (hw, as, s->drv_opaque)) { goto err0; } @@ -304,7 +295,7 @@ static HW *glue (audio_pcm_hw_add_new_, TYPE) (struct audsettings *as) err1: glue (hw->pcm_ops->fini_, TYPE) (hw); err0: - qemu_free (hw); + g_free (hw); return NULL; } @@ -372,7 +363,7 @@ err3: glue (audio_pcm_hw_del_sw_, TYPE) (sw); glue (audio_pcm_hw_gc_, TYPE) (&hw); err2: - qemu_free (sw); + g_free (sw); err1: return NULL; } @@ -382,7 +373,7 @@ 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) (&sw->hw); - qemu_free (sw); + g_free (sw); } void glue (AUD_close_, TYPE) (QEMUSoundCard *card, SW *sw) @@ -407,13 +398,6 @@ SW *glue (AUD_open_, TYPE) ( ) { AudioState *s = &glob_audio_state; -#ifdef DAC - int live = 0; - SW *old_sw = NULL; -#endif - - ldebug ("open %s, freq %d, nchannels %d, fmt %d\n", - name, as->freq, as->nchannels, as->fmt); if (audio_bug (AUDIO_FUNC, !card || !name || !callback_fn || !as)) { dolog ("card=%p name=%p callback_fn=%p as=%p\n", @@ -421,6 +405,9 @@ SW *glue (AUD_open_, TYPE) ( goto fail; } + ldebug ("open %s, freq %d, nchannels %d, fmt %d\n", + name, as->freq, as->nchannels, as->fmt); + if (audio_bug (AUDIO_FUNC, audio_validate_settings (as))) { audio_print_settings (as); goto fail; @@ -435,29 +422,6 @@ SW *glue (AUD_open_, TYPE) ( return sw; } -#ifdef DAC - if (conf.plive && sw && (!sw->active && !sw->empty)) { - live = sw->total_hw_samples_mixed; - -#ifdef DEBUG_PLIVE - dolog ("Replacing voice %s with %d live samples\n", SW_NAME (sw), live); - dolog ("Old %s freq %d, bits %d, channels %d\n", - SW_NAME (sw), sw->info.freq, sw->info.bits, sw->info.nchannels); - dolog ("New %s freq %d, bits %d, channels %d\n", - name, - freq, - (fmt == AUD_FMT_S16 || fmt == AUD_FMT_U16) ? 16 : 8, - nchannels); -#endif - - if (live) { - old_sw = sw; - old_sw->callback.fn = NULL; - sw = NULL; - } - } -#endif - if (!glue (conf.fixed_, TYPE).enabled && sw) { glue (AUD_close_, TYPE) (card, sw); sw = NULL; @@ -485,32 +449,16 @@ SW *glue (AUD_open_, TYPE) ( } } - if (sw) { - sw->card = card; - sw->vol = nominal_volume; - sw->callback.fn = callback_fn; - sw->callback.opaque = callback_opaque; - -#ifdef DAC - if (live) { - int mixed = - (live << old_sw->info.shift) - * old_sw->info.bytes_per_second - / sw->info.bytes_per_second; - -#ifdef DEBUG_PLIVE - dolog ("Silence will be mixed %d\n", mixed); -#endif - sw->total_hw_samples_mixed += mixed; - } -#endif + sw->card = card; + sw->vol = nominal_volume; + sw->callback.fn = callback_fn; + sw->callback.opaque = callback_opaque; #ifdef DEBUG_AUDIO - dolog ("%s\n", name); - audio_pcm_print_info ("hw", &sw->hw->info); - audio_pcm_print_info ("sw", &sw->info); + dolog ("%s\n", name); + audio_pcm_print_info ("hw", &sw->hw->info); + audio_pcm_print_info ("sw", &sw->info); #endif - } return sw; @@ -543,7 +491,7 @@ uint64_t glue (AUD_get_elapsed_usec_, TYPE) (SW *sw, QEMUAudioTimeStamp *ts) cur_ts = sw->hw->ts_helper; old_ts = ts->old_ts; - /* dolog ("cur %lld old %lld\n", cur_ts, old_ts); */ + /* dolog ("cur %" PRId64 " old %" PRId64 "\n", cur_ts, old_ts); */ if (cur_ts >= old_ts) { delta = cur_ts - old_ts;