[vlc-devel] [PATCH 1/2] mmdevice: handle "--no-volume-save"

Thomas Guillem thomas at gllm.fr
Tue Feb 27 14:37:38 CET 2018



On Tue, Feb 27, 2018, at 14:21, Rémi Denis-Courmont wrote:
> Le 27 février 2018 14:59:48 GMT+02:00, Thomas Guillem <thomas at gllm.fr> a écrit :
> >It's handled the other way around than old aout modules.
> >
> >By default, "volume-save" is true and we keep the current behavior (the
> >volume
> >is saved by Windows for this session). If "volume-save" is false, then
> >we use
> >the prefered volume set by the user "mmdevice-volume".
> >
> >This reverts commit 6bbc6b6cb191f1a4dd29bd059c90e9cbaf0edb16.
> >
> >Fixes #19664
> >---
> > modules/audio_output/mmdevice.c | 26 ++++++++++++++++++++------
> > 1 file changed, 20 insertions(+), 6 deletions(-)
> >
> >diff --git a/modules/audio_output/mmdevice.c
> >b/modules/audio_output/mmdevice.c
> >index ca142f5d6a..7980125cec 100644
> >--- a/modules/audio_output/mmdevice.c
> >+++ b/modules/audio_output/mmdevice.c
> >@@ -197,7 +197,7 @@ static void Flush(audio_output_t *aout, bool wait)
> >     vlc_FromHR(aout, hr);
> > }
> > 
> >-static int VolumeSet(audio_output_t *aout, float vol)
> >+static int VolumeSetLocked(audio_output_t *aout, float vol)
> > {
> >     aout_sys_t *sys = aout->sys;
> >     float gain = 1.f;
> >@@ -212,12 +212,20 @@ static int VolumeSet(audio_output_t *aout, float
> >vol)
> > 
> >     aout_GainRequest(aout, gain);
> > 
> >-    EnterCriticalSection(&sys->lock);
> >     sys->gain = gain;
> >     sys->requested_volume = vol;
> >+    return 0;
> >+}
> >+
> >+static int VolumeSet(audio_output_t *aout, float vol)
> >+{
> >+    aout_sys_t *sys = aout->sys;
> >+
> >+    EnterCriticalSection(&sys->lock);
> >+    int ret = VolumeSetLocked(aout, vol);
> >     WakeConditionVariable(&sys->work);
> >     LeaveCriticalSection(&sys->lock);
> >-    return 0;
> >+    return ret;
> > }
> > 
> > static int MuteSet(audio_output_t *aout, bool mute)
> >@@ -1266,9 +1274,6 @@ static void Stop(audio_output_t *aout)
> > 
> > static int Open(vlc_object_t *obj)
> > {
> >-    if (!var_InheritBool(obj, "volume-save"))
> >-        return VLC_EGENERIC;
> >-
> >     audio_output_t *aout = (audio_output_t *)obj;
> > 
> >     aout_sys_t *sys = malloc(sizeof (*sys));
> >@@ -1291,6 +1296,10 @@ static int Open(vlc_object_t *obj)
> >     sys->requested_volume = -1.f;
> >     sys->requested_mute = -1;
> >     sys->acquired_device = NULL;
> >+
> >+    if (!var_InheritBool(aout, "volume-save"))
> >+        VolumeSetLocked(aout, var_InheritFloat(aout,
> >"mmdevice-volume"));
> >+
> >     InitializeCriticalSection(&sys->lock);
> >     InitializeConditionVariable(&sys->work);
> >     InitializeConditionVariable(&sys->ready);
> >@@ -1475,6 +1484,9 @@ static const char *const
> >ppsz_mmdevice_passthrough_texts[] = {
> > #define DEVICE_TEXT N_("Output device")
> > #define DEVICE_LONGTEXT N_("Select your audio output device")
> > 
> >+#define VOLUME_TEXT N_("Audio volume")
> >+#define VOLUME_LONGTEXT N_("Audio volume in hundredths of decibels
> >(dB).")
> >+
> > vlc_module_begin()
> >     set_shortname("MMDevice")
> >     set_description(N_("Windows Multimedia Device output"))
> >@@ -1491,4 +1503,6 @@ vlc_module_begin()
> >                              ppsz_mmdevice_passthrough_texts )
> >add_string("mmdevice-audio-device", NULL, DEVICE_TEXT, DEVICE_LONGTEXT,
> >false)
> >         change_string_cb(ReloadAudioDevices)
> >+    add_float("mmdevice-volume", 1.f, VOLUME_TEXT, VOLUME_LONGTEXT,
> >true)
> >+        change_float_range( 0.f, 1.25f )
> > vlc_module_end()
> >-- 
> >2.11.0
> >
> >_______________________________________________
> >vlc-devel mailing list
> >To unsubscribe or modify your subscription options:
> >https://mailman.videolan.org/listinfo/vlc-devel
> 
> This is wrong. It will corrupt the volume saved in the OS, thus messing 
> with other instances and LibVLC apps.

It's already the case without this patch. If 2 programs based on LibVLC are used, they will mess each others, changing the last volume used of the other.

> -- 
> Remi Denis-Courmont
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list