Mercurial > almixer_isolated
diff ALmixer.c @ 45:a44114dc8631
merged
author | Eric Wing <ewing@anscamobile.com> |
---|---|
date | Tue, 13 Sep 2011 18:11:12 -0700 |
parents | 56855942fdc6 |
children | 9b772c81b550 |
line wrap: on
line diff
--- a/ALmixer.c Tue Aug 30 19:43:49 2011 -0700 +++ b/ALmixer.c Tue Sep 13 18:11:12 2011 -0700 @@ -2820,11 +2820,11 @@ ALmixer_Channel_List[channel].alsource, AL_SOURCE_STATE, &state ); - if((error = alGetError()) != AL_NO_ERROR) - { - fprintf(stderr, "29Testing error: %s\n", - alGetString(error)); - } + if((error = alGetError()) != AL_NO_ERROR) + { + fprintf(stderr, "Internal_PauseChannel specific channel error: %s\n", + alGetString(error)); + } if(AL_PLAYING == state) { /* Count the actual number of channels being paused */ @@ -2903,11 +2903,11 @@ ALmixer_Channel_List[i].alsource, AL_SOURCE_STATE, &state ); - if((error = alGetError()) != AL_NO_ERROR) - { - fprintf(stderr, "30Testing error: %s\n", - alGetString(error)); - } + if((error = alGetError()) != AL_NO_ERROR) + { + fprintf(stderr, "Internal_PauseChannel all channels error: %s\n", + alGetString(error)); + } if(AL_PLAYING == state) { /* Count the actual number of channels being paused */ @@ -5232,15 +5232,16 @@ ALuint number_of_buffers_to_queue_this_pass = ALmixer_Channel_List[i].almixer_data->num_target_buffers_per_pass; ALuint current_count_of_buffer_queue_passes = 0; -#if 0 - /********* Remove this **********/ - fprintf(stderr, "For Streamed\n"); +/* fprintf(stderr, "For Streamed\n"); */ alGetSourcei( ALmixer_Channel_List[i].alsource, AL_SOURCE_STATE, &state ); - switch(state) { +#if 0 + /********* Remove this **********/ + switch(state) + { case AL_PLAYING: fprintf(stderr, "Channel '%d' is PLAYING\n", i); break; @@ -7462,18 +7463,9 @@ { return; } -#ifdef ENABLE_ALMIXER_THREADS - /* Kill bookkeeping thread to help minimize wasted CPU resources */ - - /* Is locking really necessary here? */ -/* SDL_LockMutex(s_simpleLock); */ - g_StreamThreadEnabled = AL_FALSE; -/* SDL_UnlockMutex(s_simpleLock); */ - - SDL_WaitThread(Stream_Thread_global, NULL); - Stream_Thread_global = NULL; - -#endif + + ALmixer_SuspendUpdates(); + s_interruptionContext = alcGetCurrentContext(); if(NULL != s_interruptionContext) { @@ -7513,15 +7505,8 @@ alcProcessContext(s_interruptionContext); s_interruptionContext = NULL; } -#ifdef ENABLE_ALMIXER_THREADS - g_StreamThreadEnabled = AL_TRUE; - - Stream_Thread_global = SDL_CreateThread(Stream_Data_Thread_Callback, NULL); - if(NULL == Stream_Thread_global) - { - fprintf(stderr, "Critical Error: Could not create bookkeeping thread in EndInterruption\n"); - } -#endif + + ALmixer_ResumeUpdates(); g_inInterruption = AL_FALSE; } @@ -7535,6 +7520,62 @@ return g_inInterruption; } +void ALmixer_SuspendUpdates() +{ + if(AL_TRUE == ALmixer_AreUpdatesSuspended()) + { + return; + } +#ifdef ENABLE_ALMIXER_THREADS + /* Kill bookkeeping thread to help minimize wasted CPU resources */ + + /* Is locking really necessary here? */ + /* SDL_LockMutex(s_simpleLock); */ + g_StreamThreadEnabled = AL_FALSE; + /* SDL_UnlockMutex(s_simpleLock); */ + + SDL_WaitThread(Stream_Thread_global, NULL); + Stream_Thread_global = NULL; +#endif +} + +void ALmixer_ResumeUpdates() +{ + if(AL_FALSE == ALmixer_AreUpdatesSuspended()) + { + return; + } + +#ifdef ENABLE_ALMIXER_THREADS + /* This must be set before the thread is created to prevent the thread from exiting. */ + g_StreamThreadEnabled = AL_TRUE; + + Stream_Thread_global = SDL_CreateThread(Stream_Data_Thread_Callback, NULL); + if(NULL == Stream_Thread_global) + { + fprintf(stderr, "Critical Error: Could not create bookkeeping thread in EndInterruption\n"); + } + /* Note: Only a few platforms change the priority. See implementation for notes. */ + Internal_LowerThreadPriority(Stream_Thread_global); +#endif +} + +ALboolean ALmixer_AreUpdatesSuspended() +{ +#ifdef ENABLE_ALMIXER_THREADS + if(AL_FALSE == g_StreamThreadEnabled) + { + return AL_TRUE; + } + else + { + return AL_FALSE; + } +#else + return AL_FALSE; +#endif +} + /* Keep the return value void to allow easy use with * atexit() */ @@ -8487,6 +8528,10 @@ target.channels = 0; target.rate = 0; + if(0 == buffersize) + { + buffersize = ALMIXER_DEFAULT_BUFFERSIZE; + } #if 0 /* This requires my new additions to SDL_sound. It will * convert the sample to the proper endian order.