Patch: Add 'MUTEON' and 'MUTEOFF' options to the SVDRP VOLU command

Message ID 14358675.91UhXQkOyA@nop
State New
Headers

Commit Message

Sebastian Frei March 21, 2013, 7:48 p.m. UTC
  Hi all,

I made a tiny patch to extend the SVDRP VOLU command.
Up until now VDR only had an option to _toggle_ the current audio muted status,
but no options to force the audio muted status on or off. I want to mute the
audio via SVDRP and unmute it again later.

My usecase: I'm running mpd on the same host as VDR, if I start playing music
with mpd from my tablet I can mute VDR automatically with a shell script and
unmute it again after stopping the music.
Using the (already implemented) VOLU 0 command also mutes the audio, but the
previous audio volume gets lost, so you cannot unmute audio again and return to
the previous volume.

Best regards
Sebastian
  

Comments

Hardy Flor March 21, 2013, 8:40 p.m. UTC | #1
Hi Sebastian Frei,

with  ... &&(!cDevice::PrimaryDevice()->IsMute())) is the command not 
recognized and the string "Unknown option: MuteON" will return, when you 
call svdr more than one with "MuteON".

Hardy
  
Klaus Schmidinger March 22, 2013, 9:15 a.m. UTC | #2
On 21.03.2013 20:48, Sebastian Frei wrote:
> Hi all,
>
> I made a tiny patch to extend the SVDRP VOLU command.

There will be no more changes for version 2.0.
I'll look at this again after that.

> Up until now VDR only had an option to _toggle_ the current audio muted status,
> but no options to force the audio muted status on or off. I want to mute the
> audio via SVDRP and unmute it again later.
>
> My usecase: I'm running mpd on the same host as VDR, if I start playing music
> with mpd from my tablet I can mute VDR automatically with a shell script and
> unmute it again after stopping the music.
> Using the (already implemented) VOLU 0 command also mutes the audio, but the
> previous audio volume gets lost, so you cannot unmute audio again and return to
> the previous volume.

You could query the current volume level with a plain VOLU command, store that
value and use it later.

Klaus
  

Patch

--- vdr-1.7.41/svdrp.c	2013-02-17 14:17:36.000000000 +0100
+++ vdr-1.7.41.mute/svdrp.c	2013-03-21 20:30:53.440746278 +0100
@@ -317,12 +317,13 @@ 
   "UPDR\n"
   "    Initiates a re-read of the recordings directory, which is the SVDRP\n"
   "    equivalent to 'touch .update'.",
-  "VOLU [ <number> | + | - | mute ]\n"
+  "VOLU [ <number> | + | - | mute | muteon | muteoff ]\n"
   "    Set the audio volume to the given number (which is limited to the range\n"
   "    0...255). If the special options '+' or '-' are given, the volume will\n"
   "    be turned up or down, respectively. The option 'mute' will toggle the\n"
-  "    audio muting. If no option is given, the current audio volume level will\n"
-  "    be returned.",
+  "    audio muting, 'muteon' will turn muting on, 'muteoff' will turn muting\n"
+  "    off.  If no option is given, the current audio volume level will be\n"
+  "    returned.",
   "QUIT\n"
   "    Exit vdr (SVDRP).\n"
   "    You can also hit Ctrl-D to exit.",
@@ -1609,6 +1610,10 @@ 
         cDevice::PrimaryDevice()->SetVolume(-VOLUMEDELTA);
      else if (strcasecmp(Option, "MUTE") == 0)
         cDevice::PrimaryDevice()->ToggleMute();
+     else if ((strcasecmp(Option, "MUTEON") == 0)&&(!cDevice::PrimaryDevice()->IsMute()))
+        cDevice::PrimaryDevice()->ToggleMute();
+     else if ((strcasecmp(Option, "MUTEOFF") == 0)&&(cDevice::PrimaryDevice()->IsMute()))
+        cDevice::PrimaryDevice()->ToggleMute();
      else {
         Reply(501, "Unknown option: \"%s\"", Option);
         return;