Mercurial > sdl-ios-xcode
diff src/audio/mint/SDL_mintaudio.c @ 1662:782fd950bd46 SDL-1.3
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid.
The code is now run through a consistent indent format:
indent -i4 -nut -nsc -br -ce
The headers are being converted to automatically generate doxygen documentation.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 28 May 2006 13:04:16 +0000 |
parents | 14717b52abc0 |
children | 4da1ee79c9af |
line wrap: on
line diff
--- a/src/audio/mint/SDL_mintaudio.c Sun May 21 17:27:13 2006 +0000 +++ b/src/audio/mint/SDL_mintaudio.c Sun May 28 13:04:16 2006 +0000 @@ -40,12 +40,12 @@ /* The audio device */ SDL_AudioDevice *SDL_MintAudio_device; -Uint8 *SDL_MintAudio_audiobuf[2]; /* Pointers to buffers */ -unsigned long SDL_MintAudio_audiosize; /* Length of audio buffer=spec->size */ -volatile unsigned short SDL_MintAudio_numbuf; /* Buffer to play */ +Uint8 *SDL_MintAudio_audiobuf[2]; /* Pointers to buffers */ +unsigned long SDL_MintAudio_audiosize; /* Length of audio buffer=spec->size */ +volatile unsigned short SDL_MintAudio_numbuf; /* Buffer to play */ volatile unsigned short SDL_MintAudio_mutex; volatile unsigned long SDL_MintAudio_clocktics; -cookie_stfa_t *SDL_MintAudio_stfa; +cookie_stfa_t *SDL_MintAudio_stfa; /* MiNT thread variables */ SDL_bool SDL_MintAudio_mint_present; @@ -55,139 +55,154 @@ /* The callback function, called by each driver whenever needed */ -void SDL_MintAudio_Callback(void) +void +SDL_MintAudio_Callback (void) { - Uint8 *buffer; - SDL_AudioDevice *audio = SDL_MintAudio_device; + Uint8 *buffer; + SDL_AudioDevice *audio = SDL_MintAudio_device; - buffer = SDL_MintAudio_audiobuf[SDL_MintAudio_numbuf]; - SDL_memset(buffer, audio->spec.silence, audio->spec.size); + buffer = SDL_MintAudio_audiobuf[SDL_MintAudio_numbuf]; + SDL_memset (buffer, audio->spec.silence, audio->spec.size); - if (audio->paused) - return; + if (audio->paused) + return; - if (audio->convert.needed) { - int silence; + if (audio->convert.needed) { + int silence; - if ( audio->convert.src_format == AUDIO_U8 ) { - silence = 0x80; - } else { - silence = 0; - } - SDL_memset(audio->convert.buf, silence, audio->convert.len); - audio->spec.callback(audio->spec.userdata, - (Uint8 *)audio->convert.buf,audio->convert.len); - SDL_ConvertAudio(&audio->convert); - SDL_memcpy(buffer, audio->convert.buf, audio->convert.len_cvt); - } else { - audio->spec.callback(audio->spec.userdata, buffer, audio->spec.size); - } + if (audio->convert.src_format == AUDIO_U8) { + silence = 0x80; + } else { + silence = 0; + } + SDL_memset (audio->convert.buf, silence, audio->convert.len); + audio->spec.callback (audio->spec.userdata, + (Uint8 *) audio->convert.buf, + audio->convert.len); + SDL_ConvertAudio (&audio->convert); + SDL_memcpy (buffer, audio->convert.buf, audio->convert.len_cvt); + } else { + audio->spec.callback (audio->spec.userdata, buffer, audio->spec.size); + } } /* Add a new frequency/clock/predivisor to the current list */ -void SDL_MintAudio_AddFrequency(_THIS, Uint32 frequency, Uint32 clock, - Uint32 prediv, int gpio_bits) +void +SDL_MintAudio_AddFrequency (_THIS, Uint32 frequency, Uint32 clock, + Uint32 prediv, int gpio_bits) { - int i, p; + int i, p; + + if (MINTAUDIO_freqcount == MINTAUDIO_maxfreqs) { + return; + } - if (MINTAUDIO_freqcount==MINTAUDIO_maxfreqs) { - return; - } + /* Search where to insert the frequency (highest first) */ + for (p = 0; p < MINTAUDIO_freqcount; p++) { + if (frequency > MINTAUDIO_frequencies[p].frequency) { + break; + } + } - /* Search where to insert the frequency (highest first) */ - for (p=0; p<MINTAUDIO_freqcount; p++) { - if (frequency > MINTAUDIO_frequencies[p].frequency) { - break; - } - } + /* Put all following ones farer */ + if (MINTAUDIO_freqcount > 0) { + for (i = MINTAUDIO_freqcount; i > p; i--) { + SDL_memcpy (&MINTAUDIO_frequencies[i], + &MINTAUDIO_frequencies[i - 1], + sizeof (mint_frequency_t)); + } + } - /* Put all following ones farer */ - if (MINTAUDIO_freqcount>0) { - for (i=MINTAUDIO_freqcount; i>p; i--) { - SDL_memcpy(&MINTAUDIO_frequencies[i], &MINTAUDIO_frequencies[i-1], sizeof(mint_frequency_t)); - } - } + /* And insert new one */ + MINTAUDIO_frequencies[p].frequency = frequency; + MINTAUDIO_frequencies[p].masterclock = clock; + MINTAUDIO_frequencies[p].predivisor = prediv; + MINTAUDIO_frequencies[p].gpio_bits = gpio_bits; - /* And insert new one */ - MINTAUDIO_frequencies[p].frequency = frequency; - MINTAUDIO_frequencies[p].masterclock = clock; - MINTAUDIO_frequencies[p].predivisor = prediv; - MINTAUDIO_frequencies[p].gpio_bits = gpio_bits; - - MINTAUDIO_freqcount++; + MINTAUDIO_freqcount++; } /* Search for the nearest frequency */ -int SDL_MintAudio_SearchFrequency(_THIS, int desired_freq) +int +SDL_MintAudio_SearchFrequency (_THIS, int desired_freq) { - int i; + int i; - /* Only 1 freq ? */ - if (MINTAUDIO_freqcount==1) { - return 0; - } + /* Only 1 freq ? */ + if (MINTAUDIO_freqcount == 1) { + return 0; + } - /* Check the array */ - for (i=0; i<MINTAUDIO_freqcount; i++) { - if (desired_freq >= ((MINTAUDIO_frequencies[i].frequency+ - MINTAUDIO_frequencies[i+1].frequency)>>1)) { - return i; - } - } + /* Check the array */ + for (i = 0; i < MINTAUDIO_freqcount; i++) { + if (desired_freq >= ((MINTAUDIO_frequencies[i].frequency + + MINTAUDIO_frequencies[i + 1].frequency) >> 1)) { + return i; + } + } - /* Not in the array, give the latest */ - return MINTAUDIO_freqcount-1; + /* Not in the array, give the latest */ + return MINTAUDIO_freqcount - 1; } /* The thread function, used under MiNT with xbios */ -int SDL_MintAudio_Thread(long param) +int +SDL_MintAudio_Thread (long param) { - SndBufPtr pointers; - SDL_bool buffers_filled[2] = {SDL_FALSE, SDL_FALSE}; + SndBufPtr pointers; + SDL_bool buffers_filled[2] = { SDL_FALSE, SDL_FALSE }; - SDL_MintAudio_thread_finished = SDL_FALSE; - while (!SDL_MintAudio_quit_thread) { - if (Buffptr(&pointers)!=0) - continue; + SDL_MintAudio_thread_finished = SDL_FALSE; + while (!SDL_MintAudio_quit_thread) { + if (Buffptr (&pointers) != 0) + continue; - if (( (unsigned long)pointers.play>=(unsigned long)SDL_MintAudio_audiobuf[0]) - && ( (unsigned long)pointers.play<=(unsigned long)SDL_MintAudio_audiobuf[1])) - { - /* DMA is reading buffer #0, setup buffer #1 if not already done */ - if (!buffers_filled[1]) { - SDL_MintAudio_numbuf = 1; - SDL_MintAudio_Callback(); - Setbuffer(0, SDL_MintAudio_audiobuf[1], SDL_MintAudio_audiobuf[1] + SDL_MintAudio_audiosize); - buffers_filled[1]=SDL_TRUE; - buffers_filled[0]=SDL_FALSE; - } - } else { - /* DMA is reading buffer #1, setup buffer #0 if not already done */ - if (!buffers_filled[0]) { - SDL_MintAudio_numbuf = 0; - SDL_MintAudio_Callback(); - Setbuffer(0, SDL_MintAudio_audiobuf[0], SDL_MintAudio_audiobuf[0] + SDL_MintAudio_audiosize); - buffers_filled[0]=SDL_TRUE; - buffers_filled[1]=SDL_FALSE; - } - } + if (((unsigned long) pointers.play >= + (unsigned long) SDL_MintAudio_audiobuf[0]) + && ((unsigned long) pointers.play <= + (unsigned long) SDL_MintAudio_audiobuf[1])) { + /* DMA is reading buffer #0, setup buffer #1 if not already done */ + if (!buffers_filled[1]) { + SDL_MintAudio_numbuf = 1; + SDL_MintAudio_Callback (); + Setbuffer (0, SDL_MintAudio_audiobuf[1], + SDL_MintAudio_audiobuf[1] + + SDL_MintAudio_audiosize); + buffers_filled[1] = SDL_TRUE; + buffers_filled[0] = SDL_FALSE; + } + } else { + /* DMA is reading buffer #1, setup buffer #0 if not already done */ + if (!buffers_filled[0]) { + SDL_MintAudio_numbuf = 0; + SDL_MintAudio_Callback (); + Setbuffer (0, SDL_MintAudio_audiobuf[0], + SDL_MintAudio_audiobuf[0] + + SDL_MintAudio_audiosize); + buffers_filled[0] = SDL_TRUE; + buffers_filled[1] = SDL_FALSE; + } + } - usleep(100); - } - SDL_MintAudio_thread_finished = SDL_TRUE; - return 0; + usleep (100); + } + SDL_MintAudio_thread_finished = SDL_TRUE; + return 0; } -void SDL_MintAudio_WaitThread(void) +void +SDL_MintAudio_WaitThread (void) { - if (!SDL_MintAudio_mint_present) - return; + if (!SDL_MintAudio_mint_present) + return; - if (SDL_MintAudio_thread_finished) - return; + if (SDL_MintAudio_thread_finished) + return; - SDL_MintAudio_quit_thread = SDL_TRUE; - while (!SDL_MintAudio_thread_finished) { - Syield(); - } + SDL_MintAudio_quit_thread = SDL_TRUE; + while (!SDL_MintAudio_thread_finished) { + Syield (); + } } + +/* vi: set ts=4 sw=4 expandtab: */