forked from len0rd/rockbox
		
	SDL: Convert to SDL2's AudioDevice() API
This lets us _demand_ a sane audio configuration that doesn't require us to convert sample formats. (Windows always seems to want us to supply 32-bit floating point) Change-Id: I19113363b33ae99be33afceec50a319c182e9b29
This commit is contained in:
		
							parent
							
								
									da8bde0860
								
							
						
					
					
						commit
						b3dac27aa6
					
				
					 1 changed files with 11 additions and 6 deletions
				
			
		|  | @ -57,6 +57,7 @@ static const void *pcm_data; | |||
| static size_t pcm_data_size; | ||||
| static size_t pcm_sample_bytes; | ||||
| static size_t pcm_channel_bytes; | ||||
| static SDL_AudioDeviceID pcm_devid = 0; | ||||
| 
 | ||||
| static struct pcm_udata | ||||
| { | ||||
|  | @ -97,9 +98,10 @@ static void pcm_dma_apply_settings_nolock(void) | |||
|         (void (SDLCALL *)(void *userdata, | ||||
|             Uint8 *stream, int len))sdl_audio_callback; | ||||
|     wanted_spec.userdata = &udata; | ||||
|     SDL_CloseAudio(); | ||||
|     if (pcm_devid) | ||||
|         SDL_CloseAudioDevice(pcm_devid); | ||||
|     /* Open the audio device and start playing sound! */ | ||||
|     if(SDL_OpenAudio(&wanted_spec, &obtained) < 0) { | ||||
|     if((pcm_devid = SDL_OpenAudioDevice(NULL, 0, &wanted_spec, &obtained, 0)) == 0) { | ||||
|         DEBUGF("Unable to open audio: %s\n", SDL_GetError()); | ||||
|         return; | ||||
|     } | ||||
|  | @ -115,6 +117,10 @@ static void pcm_dma_apply_settings_nolock(void) | |||
|     case AUDIO_S16MSB: | ||||
|         pcm_channel_bytes = 2; | ||||
|         break; | ||||
|     case AUDIO_F32MSB: | ||||
|     case AUDIO_F32LSB: | ||||
|         pcm_channel_bytes = 4; | ||||
|         break; | ||||
|     default: | ||||
|         DEBUGF("Unknown sample format obtained: %u\n", | ||||
|                 (unsigned)obtained.format); | ||||
|  | @ -143,12 +149,12 @@ void pcm_play_dma_start(const void *addr, size_t size) | |||
|     pcm_data = addr; | ||||
|     pcm_data_size = size; | ||||
| 
 | ||||
|     SDL_PauseAudio(0); | ||||
|     SDL_PauseAudioDevice(pcm_devid, 0); | ||||
| } | ||||
| 
 | ||||
| void pcm_play_dma_stop(void) | ||||
| { | ||||
|     SDL_PauseAudio(1); | ||||
|     SDL_PauseAudioDevice(pcm_devid, 1); | ||||
| #ifdef DEBUG | ||||
|     if (udata.debug != NULL) { | ||||
|         fclose(udata.debug); | ||||
|  | @ -205,8 +211,7 @@ static void write_to_soundcard(struct pcm_udata *udata) | |||
|             } | ||||
| #endif | ||||
|             free(cvt.buf); | ||||
|         } | ||||
|         else { | ||||
|         } else { | ||||
|             /* Convert is bad, so do silence */ | ||||
|             Uint32 num = wr*obtained.channels; | ||||
|             udata->num_in = rd; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue