Commit f48fde01 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

ALSA: destroy audio-device at exit (refs #6874)

(cherry picked from commit 3b0b4fb354db179353d4d319484f1711f979de58)
parent 8c341e8c
...@@ -148,18 +148,14 @@ static void DumpDeviceStatus (vlc_object_t *obj, snd_pcm_t *pcm) ...@@ -148,18 +148,14 @@ static void DumpDeviceStatus (vlc_object_t *obj, snd_pcm_t *pcm)
*/ */
static void Probe (vlc_object_t *obj, const char *dev) static void Probe (vlc_object_t *obj, const char *dev)
{ {
/* Due to design bug in audio output core, this hack is required: */ vlc_value_t text;
if (var_Type (obj, "audio-device") == 0)
{
/* The variable does not exist - first call. */
vlc_value_t text;
var_Create (obj, "audio-device", VLC_VAR_STRING | VLC_VAR_HASCHOICE); var_Create (obj, "audio-device", VLC_VAR_STRING | VLC_VAR_HASCHOICE);
text.psz_string = _("Audio Device"); text.psz_string = _("Audio Device");
var_Change (obj, "audio-device", VLC_VAR_SETTEXT, &text, NULL); 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_AddCallback (obj, "audio-device", aout_ChannelsRestart, NULL);
var_TriggerCallback (obj, "intf-change"); var_TriggerCallback (obj, "intf-change");
} }
...@@ -176,12 +172,7 @@ static int Open (vlc_object_t *obj) ...@@ -176,12 +172,7 @@ static int Open (vlc_object_t *obj)
audio_output_t *aout = (audio_output_t *)obj; audio_output_t *aout = (audio_output_t *)obj;
/* Get device name */ /* Get device name */
char *device; char *device = var_InheritString (aout, "alsa-audio-device");
if (var_Type (aout, "audio-device"))
device = var_GetString (aout, "audio-device");
else
device = var_InheritString (aout, "alsa-audio-device");
if (unlikely(device == NULL)) if (unlikely(device == NULL))
return VLC_ENOMEM; return VLC_ENOMEM;
...@@ -663,7 +654,18 @@ static void Close (vlc_object_t *obj) ...@@ -663,7 +654,18 @@ static void Close (vlc_object_t *obj)
aout_sys_t *sys = aout->sys; aout_sys_t *sys = aout->sys;
snd_pcm_t *pcm = aout->sys->pcm; 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_DelCallback (obj, "audio-device", aout_ChannelsRestart, NULL);
var_Destroy (obj, "audio-device");
snd_pcm_drop (pcm); snd_pcm_drop (pcm);
snd_pcm_close (pcm); snd_pcm_close (pcm);
free (sys); free (sys);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment