diff options
author | Eric Wong <normalperson@yhbt.net> | 2006-07-30 23:32:54 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2006-07-30 23:32:54 +0000 |
commit | 44f9e16922a08db82b267ce8f567453a19c7c100 (patch) | |
tree | 65a09540a211f8b95cafc1a56d8a3f5222e5b0a7 /src/volume.c | |
parent | 12aec5738b8333a0dd676871bbfb6d6762ea87a5 (diff) | |
download | mpd-44f9e16922a08db82b267ce8f567453a19c7c100.tar.gz mpd-44f9e16922a08db82b267ce8f567453a19c7c100.tar.xz mpd-44f9e16922a08db82b267ce8f567453a19c7c100.zip |
software volume can now be saved and read from the state file
git-svn-id: https://svn.musicpd.org/mpd/trunk@4495 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to 'src/volume.c')
-rw-r--r-- | src/volume.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/volume.c b/src/volume.c index 7d4fce584..de631ab8c 100644 --- a/src/volume.c +++ b/src/volume.c @@ -21,6 +21,9 @@ #include "conf.h" #include "log.h" #include "player.h" +#include "state_file.h" +#include "gcc.h" +#include "utils.h" #include <math.h> #include <stdlib.h> @@ -44,6 +47,7 @@ #define VOLUME_MIXER_OSS_DEFAULT "/dev/mixer" #define VOLUME_MIXER_ALSA_DEFAULT "default" #define VOLUME_MIXER_ALSA_CONTROL_DEFAULT "PCM" +#define SW_VOLUME_STATE "sw_volume: " #ifdef HAVE_OSS #define VOLUME_MIXER_TYPE_DEFAULT VOLUME_MIXER_TYPE_OSS @@ -515,3 +519,34 @@ int changeVolumeLevel(int fd, int change, int rel) break; } } + +void read_sw_volume_state(FILE *fp) +{ + /* strlen(SW_VOLUME_STATE) + strlen('100') + '\0' */ + #define bufsize 16 + char buf[bufsize]; + const size_t len = strlen(SW_VOLUME_STATE); + char *end = NULL; + long int sv; + + if (volume_mixerType != VOLUME_MIXER_TYPE_SOFTWARE) + return; + while (myFgets(buf, bufsize, fp)) { + if (strncmp(buf, SW_VOLUME_STATE, len)) + continue; + sv = strtol(buf + len, &end, 10); + if (mpd_likely(!*end)) + changeSoftwareVolume(STDERR_FILENO, sv, 0); + else + ERROR("Can't parse software volume: %s\n", buf); + return; + } + #undef bufsize +} + +void save_sw_volume_state(FILE *fp) +{ + if (volume_mixerType == VOLUME_MIXER_TYPE_SOFTWARE) + fprintf(fp, SW_VOLUME_STATE "%d\n", volume_softwareSet); +} + |