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
This commit is contained in:
parent
12aec5738b
commit
44f9e16922
|
@ -24,6 +24,7 @@
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
#include "playlist.h"
|
#include "playlist.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#include "volume.h"
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -35,6 +36,7 @@ static struct _sf_cb {
|
||||||
void (*reader)(FILE *);
|
void (*reader)(FILE *);
|
||||||
void (*writer)(FILE *);
|
void (*writer)(FILE *);
|
||||||
} sf_callbacks [] = {
|
} sf_callbacks [] = {
|
||||||
|
{ read_sw_volume_state, save_sw_volume_state },
|
||||||
{ readAudioDevicesState, saveAudioDevicesState },
|
{ readAudioDevicesState, saveAudioDevicesState },
|
||||||
{ readPlaylistState, savePlaylistState },
|
{ readPlaylistState, savePlaylistState },
|
||||||
};
|
};
|
||||||
|
|
35
src/volume.c
35
src/volume.c
|
@ -21,6 +21,9 @@
|
||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
|
#include "state_file.h"
|
||||||
|
#include "gcc.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -44,6 +47,7 @@
|
||||||
#define VOLUME_MIXER_OSS_DEFAULT "/dev/mixer"
|
#define VOLUME_MIXER_OSS_DEFAULT "/dev/mixer"
|
||||||
#define VOLUME_MIXER_ALSA_DEFAULT "default"
|
#define VOLUME_MIXER_ALSA_DEFAULT "default"
|
||||||
#define VOLUME_MIXER_ALSA_CONTROL_DEFAULT "PCM"
|
#define VOLUME_MIXER_ALSA_CONTROL_DEFAULT "PCM"
|
||||||
|
#define SW_VOLUME_STATE "sw_volume: "
|
||||||
|
|
||||||
#ifdef HAVE_OSS
|
#ifdef HAVE_OSS
|
||||||
#define VOLUME_MIXER_TYPE_DEFAULT VOLUME_MIXER_TYPE_OSS
|
#define VOLUME_MIXER_TYPE_DEFAULT VOLUME_MIXER_TYPE_OSS
|
||||||
|
@ -515,3 +519,34 @@ int changeVolumeLevel(int fd, int change, int rel)
|
||||||
break;
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,4 +37,8 @@ int getVolumeLevel();
|
||||||
|
|
||||||
int changeVolumeLevel(int fd, int change, int rel);
|
int changeVolumeLevel(int fd, int change, int rel);
|
||||||
|
|
||||||
|
void read_sw_volume_state(FILE *fp);
|
||||||
|
|
||||||
|
void save_sw_volume_state(FILE *fp);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue