aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/audio.c22
-rw-r--r--src/audio.h2
-rw-r--r--src/main.c1
-rw-r--r--src/playerData.c21
-rw-r--r--src/playerData.h8
5 files changed, 14 insertions, 40 deletions
diff --git a/src/audio.c b/src/audio.c
index 3c5ef4478..50b54cb7d 100644
--- a/src/audio.c
+++ b/src/audio.c
@@ -37,14 +37,16 @@ static AudioFormat *audio_configFormat;
static AudioOutput *audioOutputArray;
static unsigned int audioOutputArraySize;
-#define DEVICE_OFF 0x00
-#define DEVICE_ENABLE 0x01 /* currently off, but to be turned on */
-#define DEVICE_ON 0x03
-#define DEVICE_DISABLE 0x04 /* currently on, but to be turned off */
+enum ad_state {
+ DEVICE_OFF = 0x00,
+ DEVICE_ENABLE = 0x01, /* currently off, but to be turned on */
+ DEVICE_ON = 0x03,
+ DEVICE_DISABLE = 0x04 /* currently on, but to be turned off */
+};
/* the audioEnabledArray should be stuck into shared memory, and then disable
and enable in playAudio() routine */
-static mpd_uint8 *audioDeviceStates;
+static enum ad_state *audioDeviceStates;
static mpd_uint8 audioOpened;
@@ -52,7 +54,7 @@ static size_t audioBufferSize;
static char *audioBuffer;
static size_t audioBufferPos;
-unsigned int audio_device_count(void)
+static unsigned int audio_output_count(void)
{
unsigned int nr = 0;
ConfigParam *param = NULL;
@@ -103,8 +105,9 @@ void initAudioDriver(void)
loadAudioDrivers();
- audioOutputArraySize = audio_device_count();
- audioDeviceStates = (getPlayerData())->audioDeviceStates;
+ audioOutputArraySize = audio_output_count();
+ audioDeviceStates = xmalloc(sizeof(enum ad_state) *
+ audioOutputArraySize);
audioOutputArray = xmalloc(sizeof(AudioOutput) * audioOutputArraySize);
for (i = 0; i < audioOutputArraySize; i++)
@@ -273,6 +276,8 @@ static void syncAudioDeviceStates(void)
for (i = 0; i < audioOutputArraySize; ++i) {
audioOutput = &audioOutputArray[i];
switch (audioDeviceStates[i]) {
+ case DEVICE_OFF:
+ break;
case DEVICE_ON:
/* This will reopen only if the audio format changed */
if (openAudioOutput(audioOutput, &audio_format) < 0)
@@ -286,7 +291,6 @@ static void syncAudioDeviceStates(void)
dropBufferedAudioOutput(audioOutput);
closeAudioOutput(audioOutput);
audioDeviceStates[i] = DEVICE_OFF;
- break;
}
}
}
diff --git a/src/audio.h b/src/audio.h
index 71d79ec84..eab83916a 100644
--- a/src/audio.h
+++ b/src/audio.h
@@ -31,8 +31,6 @@ typedef struct _AudioFormat {
volatile mpd_sint8 bits;
} AudioFormat;
-unsigned int audio_device_count(void);
-
static inline double audioFormatSizeToTime(const AudioFormat * af)
{
return 8.0 / af->bits / af->channels / af->sampleRate;
diff --git a/src/main.c b/src/main.c
index 6bfc22d7d..a838d0349 100644
--- a/src/main.c
+++ b/src/main.c
@@ -464,7 +464,6 @@ int main(int argc, char *argv[])
finishInputPlugins();
cleanUpPidFile();
finishConf();
- freePlayerData();
close_log_files();
return EXIT_SUCCESS;
diff --git a/src/playerData.c b/src/playerData.c
index 103ec2980..3934d0c6f 100644
--- a/src/playerData.c
+++ b/src/playerData.c
@@ -21,12 +21,10 @@
#include "log.h"
#include "utils.h"
-unsigned int buffered_before_play;
-
#define DEFAULT_BUFFER_SIZE 2048
#define DEFAULT_BUFFER_BEFORE_PLAY 10
-static PlayerData playerData_pd;
+unsigned int buffered_before_play;
PlayerControl pc;
DecoderControl dc;
OutputBuffer ob;
@@ -39,7 +37,6 @@ void initPlayerData(void)
size_t bufferSize = DEFAULT_BUFFER_SIZE;
unsigned int buffered_chunks;
ConfigParam *param;
- size_t device_array_size = audio_device_count() * sizeof(mpd_sint8);
param = getConfigParam(CONF_AUDIO_BUFFER_SIZE);
@@ -75,8 +72,6 @@ void initPlayerData(void)
buffered_before_play = buffered_chunks;
}
- playerData_pd.audioDeviceStates = xmalloc(device_array_size);
-
ob_init(buffered_chunks);
notify_init(&pc.notify);
@@ -92,18 +87,4 @@ void initPlayerData(void)
dc.error = DECODE_ERROR_NOERROR;
}
-PlayerData *getPlayerData(void)
-{
- return &playerData_pd;
-}
-
-void freePlayerData(void)
-{
- /* We don't want to release this memory until we know our player and
- * decoder have exited. Otherwise, their signal handlers will want to
- * access playerData_pd and we need to keep it available for them */
- waitpid(-1, NULL, 0);
- ob_free();
- free(playerData_pd.audioDeviceStates);
-}
diff --git a/src/playerData.h b/src/playerData.h
index fccc758da..cf7f72cf0 100644
--- a/src/playerData.h
+++ b/src/playerData.h
@@ -30,14 +30,6 @@ extern PlayerControl pc;
extern DecoderControl dc;
extern OutputBuffer ob;
-typedef struct _PlayerData {
- mpd_uint8 *audioDeviceStates;
-} PlayerData;
-
void initPlayerData(void);
-PlayerData *getPlayerData(void);
-
-void freePlayerData(void);
-
#endif