Mercurial > sdl-ios-xcode
diff src/audio/mint/SDL_mintaudio.c @ 961:185acc07127a
Date: Fri, 29 Oct 2004 11:47:09 +0200
From: Patrice Mandin
Subject: Reworked audio drivers for Atari platform
These are reworked audio drivers for the Atari platform.
Previous drivers were missing some features:
- Test external clock plugged to DSP port on Atari Falcon 030.
- Ability to select internal or external clock.
So now, I generate a list of frequencies available, with the master clock
and predivisor to use. One big caveat to this: I do not have an external
clock, so I hope it works.
author | Patrice Mandin <patmandin@gmail.com> |
---|---|
date | Fri, 29 Oct 2004 09:56:53 +0000 |
parents | b8d311d90021 |
children | 2eca15c3f609 |
line wrap: on
line diff
--- a/src/audio/mint/SDL_mintaudio.c Sat Oct 09 22:11:45 2004 +0000 +++ b/src/audio/mint/SDL_mintaudio.c Fri Oct 29 09:56:53 2004 +0000 @@ -41,6 +41,7 @@ unsigned long SDL_MintAudio_audiosize; /* Length of audio buffer=spec->size */ unsigned short SDL_MintAudio_numbuf; /* Buffer to play */ unsigned short SDL_MintAudio_mutex; +unsigned long SDL_MintAudio_clocktics; cookie_stfa_t *SDL_MintAudio_stfa; /* The callback function, called by each driver whenever needed */ @@ -64,30 +65,57 @@ } } -/* Simple function to search for the nearest frequency */ -int SDL_MintAudio_SearchFrequency(_THIS, int falcon_codec, int desired_freq) +/* Add a new frequency/clock/predivisor to the current list */ +void SDL_MintAudio_AddFrequency(_THIS, Uint32 frequency, Uint32 clock, Uint32 prediv) +{ + int i, p; + + 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; + } + } + + /* Put all following ones farer */ + if (MINTAUDIO_freqcount>0) { + for (i=MINTAUDIO_freqcount; i>p; i--) { + MINTAUDIO_frequencies[i].frequency = MINTAUDIO_frequencies[i-1].frequency; + MINTAUDIO_frequencies[i].masterclock = MINTAUDIO_frequencies[i-1].masterclock; + MINTAUDIO_frequencies[i].predivisor = MINTAUDIO_frequencies[i-1].predivisor; + } + } + + /* And insert new one */ + MINTAUDIO_frequencies[p].frequency = frequency; + MINTAUDIO_frequencies[p].masterclock = clock; + MINTAUDIO_frequencies[p].predivisor = prediv; + + MINTAUDIO_freqcount++; +} + +/* Search for the nearest frequency */ +int SDL_MintAudio_SearchFrequency(_THIS, int desired_freq) { int i; /* Only 1 freq ? */ - if (MINTAUDIO_nfreq==1) { - return(MINTAUDIO_sfreq); + if (MINTAUDIO_freqcount==1) { + return 0; } /* Check the array */ - for (i=MINTAUDIO_sfreq; i<MINTAUDIO_nfreq-1; i++) { - /* Remove unusable falcon codec frequencies */ - if (falcon_codec) { - if ((i==6) || (i==8) || (i==10)) { - continue; - } - } - - if (desired_freq >= ((MINTAUDIO_hardfreq[i]+MINTAUDIO_hardfreq[i+1])>>1)) { + 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_nfreq-1; + return MINTAUDIO_freqcount-1; }