vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Sun May 27 19:50:19 2012 +0300| [3b0b4fb354db179353d4d319484f1711f979de58] | committer: Rémi Denis-Courmont
ALSA: destroy audio-device at exit (refs #6874) > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=3b0b4fb354db179353d4d319484f1711f979de58 --- modules/audio_output/alsa.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/modules/audio_output/alsa.c b/modules/audio_output/alsa.c index 1864878..6fc4ad7 100644 --- a/modules/audio_output/alsa.c +++ b/modules/audio_output/alsa.c @@ -149,18 +149,14 @@ static void DumpDeviceStatus (vlc_object_t *obj, snd_pcm_t *pcm) */ static void Probe (vlc_object_t *obj, const char *dev) { - /* Due to design bug in audio output core, this hack is required: */ - if (var_Type (obj, "audio-device") == 0) - { - /* The variable does not exist - first call. */ - vlc_value_t text; + vlc_value_t text; - var_Create (obj, "audio-device", VLC_VAR_STRING | VLC_VAR_HASCHOICE); - text.psz_string = _("Audio Device"); - var_Change (obj, "audio-device", VLC_VAR_SETTEXT, &text, NULL); + var_Create (obj, "audio-device", VLC_VAR_STRING | VLC_VAR_HASCHOICE); + text.psz_string = _("Audio Device"); + var_Change (obj, "audio-device", VLC_VAR_SETTEXT, &text, NULL); + + GetDevices (obj, NULL, dev); - GetDevices (obj, NULL, dev); - } var_AddCallback (obj, "audio-device", aout_ChannelsRestart, NULL); var_TriggerCallback (obj, "intf-change"); } @@ -178,12 +174,7 @@ static int Open (vlc_object_t *obj) audio_output_t *aout = (audio_output_t *)obj; /* Get device name */ - char *device; - - if (var_Type (aout, "audio-device")) - device = var_GetString (aout, "audio-device"); - else - device = var_InheritString (aout, "alsa-audio-device"); + char *device = var_InheritString (aout, "alsa-audio-device"); if (unlikely(device == NULL)) return VLC_ENOMEM; @@ -694,7 +685,18 @@ static void Close (vlc_object_t *obj) aout_sys_t *sys = aout->sys; snd_pcm_t *pcm = aout->sys->pcm; + /* FIXME: ugly hack so selected ALSA device survives restart */ + char *device = var_InheritString (obj, "audio-device"); + if (device != NULL) + { + if (!var_Type (obj, "alsa-audio-device")) + var_Create (obj, "alsa-audio-device", VLC_VAR_STRING); + var_SetString (obj, "alsa-audio-device", device); + free (device); + } + var_DelCallback (obj, "audio-device", aout_ChannelsRestart, NULL); + var_Destroy (obj, "audio-device"); snd_pcm_drop (pcm); snd_pcm_close (pcm); free (sys); _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
