diff options
author | Mark Farrugia <mark.farrugia@fiberdyne.com.au> | 2019-04-09 10:49:37 +1000 |
---|---|---|
committer | Mark Farrugia <mark.farrugia@fiberdyne.com.au> | 2019-04-09 10:53:00 +1000 |
commit | 9aaabade8674f8e87621512dfb5389cc3cdbda6e (patch) | |
tree | aee195a0d7fd476ca747d4bfffb8d80f09a7f090 /plugins/alsa/alsa-api-loop.c | |
parent | 12b905077c0316055409fbdf7adef0d3f41cb45e (diff) |
Updates for latest libavirt, adds avirt cleanupguppy_7.0.1guppy/7.0.17.0.1
Cleanup for avirt is introduced. There are still some issues with this when invoked whilst a PCM is active,
This now allows 4A to be restarted without a reboot.
Loops must be deleted last to avoid any cleanup issues, so to enforce this a new transaction API is added: AlsaMixerTransactionObjectAddTail.
Change-Id: Ide4bbb319e8c6a2f4209ab957d80a54690f76de4
Signed-off-by: Mark Farrugia <mark.farrugia@fiberdyne.com.au>
Diffstat (limited to 'plugins/alsa/alsa-api-loop.c')
-rw-r--r-- | plugins/alsa/alsa-api-loop.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/plugins/alsa/alsa-api-loop.c b/plugins/alsa/alsa-api-loop.c index e5e6af5..7e852a8 100644 --- a/plugins/alsa/alsa-api-loop.c +++ b/plugins/alsa/alsa-api-loop.c @@ -159,7 +159,7 @@ STATIC AlsaLoopSubdevT *ProcessOneAvirtSubdev(SoftMixerT *mixer, AlsaSndLoopT *l } error = snd_avirt_stream_new(uid, zone->ccount, - SND_PCM_STREAM_PLAYBACK, "ap_loopback"); + SND_PCM_STREAM_PLAYBACK, "ap_loopback", false); if (error < 0) { AFB_ApiError(mixer->api, "%s: mixer=%s stream=%s could not create AVIRT stream [errno=%d]", @@ -363,7 +363,7 @@ STATIC AlsaSndLoopT *AttachOneLoop(SoftMixerT *mixer, const char *uid, json_obje goto fail_snd_card; } - snd_avirt_card_seal(); + snd_avirt_card_configure(); // try to open sound card control interface loop->sndcard->ctl = AlsaByPathOpenCtl(mixer, loop->uid, loop->sndcard); @@ -413,6 +413,10 @@ static void loopDestroy(SoftMixerT * mixer, void* arg) { mixer->nbLoops--; cds_list_del(&loop->list); + + if (loop->avirt) + snd_avirt_card_unconfigure(); + free(loop); AFB_ApiDebug(mixer->api, "DONE !"); @@ -427,7 +431,8 @@ static AlsaSndLoopT * loopCreate(SoftMixerT *mixer, const char *uid, json_object mixer->nbLoops++; cds_list_add(&newLoop->list, &mixer->loops.list); - AlsaMixerTransactionObjectAdd(mixer->transaction, newLoop, loopDestroy); + /* We need the loops to be at the end of the list, so that they are destroyed last */ + AlsaMixerTransactionObjectAddTail(mixer->transaction, newLoop, loopDestroy); loopsDisplay(mixer); |