src/audio/SDL_audio.c
changeset 322 fd93a09655e3
parent 297 f6ffac90895c
child 398 d219b0e02f5f
equal deleted inserted replaced
321:af42e7c4c860 322:fd93a09655e3
   226 
   226 
   227 	D(bug("CloseAudio..Done, subtask exiting...\n"));
   227 	D(bug("CloseAudio..Done, subtask exiting...\n"));
   228 	audio_configured = 0;
   228 	audio_configured = 0;
   229 #endif
   229 #endif
   230 	return(0);
   230 	return(0);
       
   231 }
       
   232 
       
   233 static void SDL_LockAudio_Default(SDL_AudioDevice *audio)
       
   234 {
       
   235 	if ( audio->thread && (SDL_ThreadID() == audio->threadid) ) {
       
   236 		return;
       
   237 	}
       
   238 	SDL_mutexP(audio->mixer_lock);
       
   239 }
       
   240 
       
   241 static void SDL_UnlockAudio_Default(SDL_AudioDevice *audio)
       
   242 {
       
   243 	if ( audio->thread && (SDL_ThreadID() == audio->threadid) ) {
       
   244 		return;
       
   245 	}
       
   246 	SDL_mutexV(audio->mixer_lock);
   231 }
   247 }
   232 
   248 
   233 int SDL_AudioInit(const char *driver_name)
   249 int SDL_AudioInit(const char *driver_name)
   234 {
   250 {
   235 	SDL_AudioDevice *audio;
   251 	SDL_AudioDevice *audio;
   307 		}
   323 		}
   308 	}
   324 	}
   309 	current_audio = audio;
   325 	current_audio = audio;
   310 	if ( current_audio ) {
   326 	if ( current_audio ) {
   311 		current_audio->name = bootstrap[i]->name;
   327 		current_audio->name = bootstrap[i]->name;
       
   328 		if ( !current_audio->LockAudio && !current_audio->UnlockAudio ) {
       
   329 			current_audio->LockAudio = SDL_LockAudio_Default;
       
   330 			current_audio->UnlockAudio = SDL_UnlockAudio_Default;
       
   331 		}
   312 	}
   332 	}
   313 	return(0);
   333 	return(0);
   314 }
   334 }
   315 
   335 
   316 char *SDL_AudioDriverName(char *namebuf, int maxlen)
   336 char *SDL_AudioDriverName(char *namebuf, int maxlen)
   504 void SDL_LockAudio (void)
   524 void SDL_LockAudio (void)
   505 {
   525 {
   506 	SDL_AudioDevice *audio = current_audio;
   526 	SDL_AudioDevice *audio = current_audio;
   507 
   527 
   508 	/* Obtain a lock on the mixing buffers */
   528 	/* Obtain a lock on the mixing buffers */
   509 	if ( audio ) {
   529 	if ( audio && audio->LockAudio ) {
   510 		if ( audio->thread && (SDL_ThreadID() == audio->threadid) ) {
   530 		audio->LockAudio(audio);
   511 			return;
       
   512 		}
       
   513 		SDL_mutexP(audio->mixer_lock);
       
   514 	}
   531 	}
   515 }
   532 }
   516 
   533 
   517 void SDL_UnlockAudio (void)
   534 void SDL_UnlockAudio (void)
   518 {
   535 {
   519 	SDL_AudioDevice *audio = current_audio;
   536 	SDL_AudioDevice *audio = current_audio;
   520 
   537 
   521 	/* Release lock on the mixing buffers */
   538 	/* Release lock on the mixing buffers */
   522 	if ( audio ) {
   539 	if ( audio && audio->UnlockAudio ) {
   523 		if ( audio->thread && (SDL_ThreadID() == audio->threadid) ) {
   540 		audio->UnlockAudio(audio);
   524 			return;
       
   525 		}
       
   526 		SDL_mutexV(audio->mixer_lock);
       
   527 	}
   541 	}
   528 }
   542 }
   529 
   543 
   530 void SDL_CloseAudio (void)
   544 void SDL_CloseAudio (void)
   531 {
   545 {