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

Rémi Denis-Courmont remi at remlab.net
Tue Feb 27 14:21:28 CET 2018


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.
-- 
Remi Denis-Courmont


More information about the vlc-devel mailing list