[vlc-commits] cli: mostly restore 3.0 volume scale
Rémi Denis-Courmont
git at videolan.org
Sun Nov 22 17:00:20 CET 2020
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Nov 22 17:57:55 2020 +0200| [80b8c8254cb2fddd59d31ba3a46a6640d7ef23da] | committer: Rémi Denis-Courmont
cli: mostly restore 3.0 volume scale
Integers 2...512 use the old scale (mostly fixes #25143).
Floating point values are taken as is.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=80b8c8254cb2fddd59d31ba3a46a6640d7ef23da
---
modules/control/cli/player.c | 22 ++++++++++++++++++----
1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/modules/control/cli/player.c b/modules/control/cli/player.c
index 557a0d31b8..4528475c2f 100644
--- a/modules/control/cli/player.c
+++ b/modules/control/cli/player.c
@@ -610,14 +610,28 @@ static int PlayerFullscreen(intf_thread_t *intf, const char *const *args,
static int Volume(intf_thread_t *intf, const char *const *args, size_t count)
{
- const char *arg = count > 1 ? args[1] : "";
vlc_player_t *player = vlc_playlist_GetPlayer(intf->p_sys->playlist);
vlc_player_Lock(player);
- if ( *arg )
+ if (count == 2)
{
- /* Set. */
- float volume = atol(arg) / 100.f;
+ /* NOTE: For unfortunate hysterical raisins, integer value above 1 are
+ * interpreted in a scale of 256 parts. Floating point values are taken
+ * as ratio as usual in the VLC code.
+ * Yes, this sucks (hopefully nobody uses volume 1/256).
+ */
+ char *end;
+ unsigned long ul = strtoul(args[1], &end, 10);
+ float volume;
+
+ static_assert ((AOUT_VOLUME_DEFAULT & (AOUT_VOLUME_DEFAULT - 1)) == 0,
+ "AOUT_VOLUME_DEFAULT must be a power of two.");
+
+ if (*end == '\0' && ul > 1 && ul <= AOUT_VOLUME_MAX)
+ volume = ldexpf(ul, -ctz(AOUT_VOLUME_DEFAULT));
+ else
+ volume = atof(args[1]);
+
vlc_player_aout_SetVolume(player, volume);
}
else
More information about the vlc-commits
mailing list