diff options
Diffstat (limited to '')
-rw-r--r-- | src/audio.c | 43 | ||||
-rw-r--r-- | src/output_internal.h | 6 |
2 files changed, 20 insertions, 29 deletions
diff --git a/src/audio.c b/src/audio.c index f027be588..443f5d82d 100644 --- a/src/audio.c +++ b/src/audio.c @@ -36,9 +36,7 @@ static struct audio_output *audioOutputArray; static unsigned int audioOutputArraySize; 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 */ }; @@ -227,7 +225,7 @@ static void audio_output_wait_all(void) int finished = 1; for (i = 0; i < audioOutputArraySize; ++i) - if (audioDeviceStates[i] == DEVICE_ON && + if (audio_output_is_open(&audioOutputArray[i]) && !audio_output_command_is_finished(&audioOutputArray[i])) finished = 0; @@ -249,24 +247,16 @@ 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 (audio_output_open(audioOutput, - &audio_buffer.format) < 0) - audioDeviceStates[i] = DEVICE_ENABLE; - break; case DEVICE_ENABLE: - if (audio_output_open(audioOutput, - &audio_buffer.format) == 0) - audioDeviceStates[i] = DEVICE_ON; + audio_output_open(audioOutput, &audio_buffer.format); break; case DEVICE_DISABLE: + if (!audio_output_is_open(audioOutput)) + break; + audio_output_cancel(audioOutput); audio_output_wait(audioOutput); audio_output_close(audioOutput); - audioDeviceStates[i] = DEVICE_OFF; } } } @@ -282,7 +272,7 @@ static int flushAudioBuffer(void) syncAudioDeviceStates(); for (i = 0; i < audioOutputArraySize; ++i) - if (audioDeviceStates[i] == DEVICE_ON) + if (audio_output_is_open(&audioOutputArray[i])) audio_output_play(&audioOutputArray[i], audio_buffer.buffer, audio_buffer.position); @@ -293,7 +283,7 @@ static int flushAudioBuffer(void) for (i = 0; i < audioOutputArraySize; ++i) { const struct audio_output *ao = &audioOutputArray[i]; - if (audioDeviceStates[i] != DEVICE_ON) + if (!audio_output_is_open(ao)) continue; if (audio_output_command_is_finished(ao)) { @@ -413,7 +403,7 @@ void dropBufferedAudio(void) audio_buffer.position = 0; for (i = 0; i < audioOutputArraySize; ++i) { - if (audioDeviceStates[i] == DEVICE_ON) + if (audio_output_is_open(&audioOutputArray[i])) audio_output_cancel(&audioOutputArray[i]); } @@ -431,11 +421,8 @@ void closeAudioDevice(void) audio_buffer.size = 0; } - for (i = 0; i < audioOutputArraySize; ++i) { - if (audioDeviceStates[i] == DEVICE_ON) - audioDeviceStates[i] = DEVICE_ENABLE; + for (i = 0; i < audioOutputArraySize; ++i) audio_output_close(&audioOutputArray[i]); - } audioOpened = 0; } @@ -445,7 +432,7 @@ void sendMetadataToAudioDevice(const struct tag *tag) unsigned int i; for (i = 0; i < audioOutputArraySize; ++i) - if (audioDeviceStates[i] == DEVICE_ON) + if (audio_output_is_open(&audioOutputArray[i])) audio_output_send_tag(&audioOutputArray[i], tag); audio_output_wait_all(); @@ -456,8 +443,7 @@ int enableAudioDevice(unsigned int device) if (device >= audioOutputArraySize) return -1; - if (!(audioDeviceStates[device] & 0x01)) - audioDeviceStates[device] = DEVICE_ENABLE; + audioDeviceStates[device] = DEVICE_ENABLE; return 0; } @@ -467,8 +453,7 @@ int disableAudioDevice(unsigned int device) if (device >= audioOutputArraySize) return -1; - if (audioDeviceStates[device] & 0x01) - audioDeviceStates[device] = DEVICE_DISABLE; + audioDeviceStates[device] = DEVICE_DISABLE; return 0; } @@ -484,7 +469,7 @@ void printAudioDevices(struct client *client) "outputenabled: %i\n", i, audioOutputArray[i].name, - audioDeviceStates[i] & 0x01); + audioDeviceStates[i]); } } @@ -495,7 +480,7 @@ void saveAudioDevicesState(FILE *fp) assert(audioOutputArraySize != 0); for (i = 0; i < audioOutputArraySize; i++) { fprintf(fp, AUDIO_DEVICE_STATE "%d:%s\n", - audioDeviceStates[i] & 0x01, + audioDeviceStates[i], audioOutputArray[i].name); } } diff --git a/src/output_internal.h b/src/output_internal.h index 2455a549a..bb5ee43f5 100644 --- a/src/output_internal.h +++ b/src/output_internal.h @@ -110,6 +110,12 @@ struct audio_output { extern struct notify audio_output_client_notify; static inline int +audio_output_is_open(const struct audio_output *ao) +{ + return ao->open; +} + +static inline int audio_output_command_is_finished(const struct audio_output *ao) { return ao->command == AO_COMMAND_NONE; |