output: removed DEVICE_ON, DEVICE_OFF
To check whether a device is really on or off, we should rather check audio_output.open, instead of managing another variable. Wrap audio_output.open in the inline function audio_output_is_open() and use it instead of DEVICE_ON and DEVICE_OFF.
This commit is contained in:
		
							
								
								
									
										39
									
								
								src/audio.c
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								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,7 +443,6 @@ int enableAudioDevice(unsigned int device) | ||||
| 	if (device >= audioOutputArraySize) | ||||
| 		return -1; | ||||
|  | ||||
| 	if (!(audioDeviceStates[device] & 0x01)) | ||||
| 	audioDeviceStates[device] = DEVICE_ENABLE; | ||||
|  | ||||
| 	return 0; | ||||
| @@ -467,7 +453,6 @@ int disableAudioDevice(unsigned int device) | ||||
| 	if (device >= audioOutputArraySize) | ||||
| 		return -1; | ||||
|  | ||||
| 	if (audioDeviceStates[device] & 0x01) | ||||
| 	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); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -109,6 +109,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) | ||||
| { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Max Kellermann
					Max Kellermann