Mercurial > sdl-ios-xcode
diff src/audio/mme/SDL_mmeaudio.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 | d910939febfa |
children | 4da1ee79c9af |
line wrap: on
line diff
--- a/src/audio/mme/SDL_mmeaudio.c Sun May 21 17:27:13 2006 +0000 +++ b/src/audio/mme/SDL_mmeaudio.c Sun May 28 13:04:16 2006 +0000 @@ -32,57 +32,60 @@ static BOOL inUse[NUM_BUFFERS]; /* Audio driver functions */ -static int MME_OpenAudio(_THIS, SDL_AudioSpec *spec); -static void MME_WaitAudio(_THIS); -static Uint8 *MME_GetAudioBuf(_THIS); -static void MME_PlayAudio(_THIS); -static void MME_WaitDone(_THIS); -static void MME_CloseAudio(_THIS); +static int MME_OpenAudio (_THIS, SDL_AudioSpec * spec); +static void MME_WaitAudio (_THIS); +static Uint8 *MME_GetAudioBuf (_THIS); +static void MME_PlayAudio (_THIS); +static void MME_WaitDone (_THIS); +static void MME_CloseAudio (_THIS); /* Audio driver bootstrap functions */ -static int Audio_Available(void) +static int +Audio_Available (void) { - return(1); + return (1); } -static void Audio_DeleteDevice(SDL_AudioDevice *device) +static void +Audio_DeleteDevice (SDL_AudioDevice * device) { - if ( device ) { - if ( device->hidden ) { - SDL_free(device->hidden); - device->hidden = NULL; - } - SDL_free(device); - device = NULL; + if (device) { + if (device->hidden) { + SDL_free (device->hidden); + device->hidden = NULL; + } + SDL_free (device); + device = NULL; } } -static SDL_AudioDevice *Audio_CreateDevice(int devindex) +static SDL_AudioDevice * +Audio_CreateDevice (int devindex) { SDL_AudioDevice *this; /* Initialize all variables that we clean on shutdown */ - this = SDL_malloc(sizeof(SDL_AudioDevice)); - if ( this ) { - SDL_memset(this, 0, (sizeof *this)); - this->hidden = SDL_malloc((sizeof *this->hidden)); + this = SDL_malloc (sizeof (SDL_AudioDevice)); + if (this) { + SDL_memset (this, 0, (sizeof *this)); + this->hidden = SDL_malloc ((sizeof *this->hidden)); } - if ( (this == NULL) || (this->hidden == NULL) ) { - SDL_OutOfMemory(); - if ( this ) { - SDL_free(this); - } - return(0); + if ((this == NULL) || (this->hidden == NULL)) { + SDL_OutOfMemory (); + if (this) { + SDL_free (this); + } + return (0); } - SDL_memset(this->hidden, 0, (sizeof *this->hidden)); + SDL_memset (this->hidden, 0, (sizeof *this->hidden)); /* Set the function pointers */ - this->OpenAudio = MME_OpenAudio; - this->WaitAudio = MME_WaitAudio; - this->PlayAudio = MME_PlayAudio; - this->GetAudioBuf = MME_GetAudioBuf; - this->WaitDone = MME_WaitDone; - this->CloseAudio = MME_CloseAudio; - this->free = Audio_DeleteDevice; + this->OpenAudio = MME_OpenAudio; + this->WaitAudio = MME_WaitAudio; + this->PlayAudio = MME_PlayAudio; + this->GetAudioBuf = MME_GetAudioBuf; + this->WaitDone = MME_WaitDone; + this->CloseAudio = MME_CloseAudio; + this->free = Audio_DeleteDevice; return this; } @@ -92,30 +95,30 @@ Audio_Available, Audio_CreateDevice }; -static void SetMMerror(char *function, MMRESULT code) +static void +SetMMerror (char *function, MMRESULT code) { int len; char errbuf[MAXERRORLENGTH]; - SDL_snprintf(errbuf, SDL_arraysize(errbuf), "%s: ", function); - len = SDL_strlen(errbuf); - waveOutGetErrorText(code, errbuf+len, MAXERRORLENGTH-len); - SDL_SetError("%s",errbuf); + SDL_snprintf (errbuf, SDL_arraysize (errbuf), "%s: ", function); + len = SDL_strlen (errbuf); + waveOutGetErrorText (code, errbuf + len, MAXERRORLENGTH - len); + SDL_SetError ("%s", errbuf); } -static void CALLBACK MME_CALLBACK(HWAVEOUT hwo, - UINT uMsg, - DWORD dwInstance, - LPARAM dwParam1, - LPARAM dwParam2) +static void CALLBACK +MME_CALLBACK (HWAVEOUT hwo, + UINT uMsg, DWORD dwInstance, LPARAM dwParam1, LPARAM dwParam2) { WAVEHDR *wp = (WAVEHDR *) dwParam1; - if ( uMsg == WOM_DONE ) - inUse[wp->dwUser] = FALSE; + if (uMsg == WOM_DONE) + inUse[wp->dwUser] = FALSE; } -static int MME_OpenAudio(_THIS, SDL_AudioSpec *spec) +static int +MME_OpenAudio (_THIS, SDL_AudioSpec * spec) { MMRESULT result; int i; @@ -123,142 +126,147 @@ mixbuf = NULL; /* Set basic WAVE format parameters */ - shm = mmeAllocMem(sizeof(*shm)); - if ( shm == NULL ) { - SDL_SetError("Out of memory: shm"); - return(-1); + shm = mmeAllocMem (sizeof (*shm)); + if (shm == NULL) { + SDL_SetError ("Out of memory: shm"); + return (-1); } shm->sound = 0; shm->wFmt.wf.wFormatTag = WAVE_FORMAT_PCM; /* Determine the audio parameters from the AudioSpec */ - switch ( spec->format & 0xFF ) { - case 8: - /* Unsigned 8 bit audio data */ - spec->format = AUDIO_U8; - shm->wFmt.wBitsPerSample = 8; - break; - case 16: - /* Signed 16 bit audio data */ - spec->format = AUDIO_S16; - shm->wFmt.wBitsPerSample = 16; - break; - default: - SDL_SetError("Unsupported audio format"); - return(-1); + switch (spec->format & 0xFF) { + case 8: + /* Unsigned 8 bit audio data */ + spec->format = AUDIO_U8; + shm->wFmt.wBitsPerSample = 8; + break; + case 16: + /* Signed 16 bit audio data */ + spec->format = AUDIO_S16; + shm->wFmt.wBitsPerSample = 16; + break; + default: + SDL_SetError ("Unsupported audio format"); + return (-1); } shm->wFmt.wf.nChannels = spec->channels; shm->wFmt.wf.nSamplesPerSec = spec->freq; shm->wFmt.wf.nBlockAlign = - shm->wFmt.wf.nChannels * shm->wFmt.wBitsPerSample / 8; + shm->wFmt.wf.nChannels * shm->wFmt.wBitsPerSample / 8; shm->wFmt.wf.nAvgBytesPerSec = - shm->wFmt.wf.nSamplesPerSec * shm->wFmt.wf.nBlockAlign; + shm->wFmt.wf.nSamplesPerSec * shm->wFmt.wf.nBlockAlign; /* Check the buffer size -- minimum of 1/4 second (word aligned) */ - if ( spec->samples < (spec->freq/4) ) - spec->samples = ((spec->freq/4)+3)&~3; + if (spec->samples < (spec->freq / 4)) + spec->samples = ((spec->freq / 4) + 3) & ~3; /* Update the fragment size as size in bytes */ - SDL_CalculateAudioSpec(spec); + SDL_CalculateAudioSpec (spec); /* Open the audio device */ - result = waveOutOpen(&(shm->sound), - WAVE_MAPPER, - &(shm->wFmt.wf), - MME_CALLBACK, - NULL, - (CALLBACK_FUNCTION|WAVE_OPEN_SHAREABLE)); - if ( result != MMSYSERR_NOERROR ) { - SetMMerror("waveOutOpen()", result); - return(-1); + result = waveOutOpen (&(shm->sound), + WAVE_MAPPER, + &(shm->wFmt.wf), + MME_CALLBACK, + NULL, (CALLBACK_FUNCTION | WAVE_OPEN_SHAREABLE)); + if (result != MMSYSERR_NOERROR) { + SetMMerror ("waveOutOpen()", result); + return (-1); } /* Create the sound buffers */ - mixbuf = (Uint8 *)mmeAllocBuffer(NUM_BUFFERS * (spec->size)); - if ( mixbuf == NULL ) { - SDL_SetError("Out of memory: mixbuf"); - return(-1); + mixbuf = (Uint8 *) mmeAllocBuffer (NUM_BUFFERS * (spec->size)); + if (mixbuf == NULL) { + SDL_SetError ("Out of memory: mixbuf"); + return (-1); } for (i = 0; i < NUM_BUFFERS; i++) { - shm->wHdr[i].lpData = &mixbuf[i * (spec->size)]; - shm->wHdr[i].dwBufferLength = spec->size; - shm->wHdr[i].dwFlags = 0; - shm->wHdr[i].dwUser = i; - shm->wHdr[i].dwLoops = 0; /* loop control counter */ - shm->wHdr[i].lpNext = NULL; /* reserved for driver */ - shm->wHdr[i].reserved = 0; - inUse[i] = FALSE; + shm->wHdr[i].lpData = &mixbuf[i * (spec->size)]; + shm->wHdr[i].dwBufferLength = spec->size; + shm->wHdr[i].dwFlags = 0; + shm->wHdr[i].dwUser = i; + shm->wHdr[i].dwLoops = 0; /* loop control counter */ + shm->wHdr[i].lpNext = NULL; /* reserved for driver */ + shm->wHdr[i].reserved = 0; + inUse[i] = FALSE; } next_buffer = 0; return 0; } -static void MME_WaitAudio(_THIS) +static void +MME_WaitAudio (_THIS) { - while ( inUse[next_buffer] ) { - mmeWaitForCallbacks(); - mmeProcessCallbacks(); + while (inUse[next_buffer]) { + mmeWaitForCallbacks (); + mmeProcessCallbacks (); } } -static Uint8 *MME_GetAudioBuf(_THIS) +static Uint8 * +MME_GetAudioBuf (_THIS) { Uint8 *retval; inUse[next_buffer] = TRUE; - retval = (Uint8 *)(shm->wHdr[next_buffer].lpData); + retval = (Uint8 *) (shm->wHdr[next_buffer].lpData); return retval; } -static void MME_PlayAudio(_THIS) +static void +MME_PlayAudio (_THIS) { /* Queue it up */ - waveOutWrite(shm->sound, &(shm->wHdr[next_buffer]), sizeof(WAVEHDR)); - next_buffer = (next_buffer+1)%NUM_BUFFERS; + waveOutWrite (shm->sound, &(shm->wHdr[next_buffer]), sizeof (WAVEHDR)); + next_buffer = (next_buffer + 1) % NUM_BUFFERS; } -static void MME_WaitDone(_THIS) +static void +MME_WaitDone (_THIS) { MMRESULT result; int i; - if ( shm->sound ) { - for (i = 0; i < NUM_BUFFERS; i++) - while ( inUse[i] ) { - mmeWaitForCallbacks(); - mmeProcessCallbacks(); - } - result = waveOutReset(shm->sound); - if ( result != MMSYSERR_NOERROR ) - SetMMerror("waveOutReset()", result); - mmeProcessCallbacks(); + if (shm->sound) { + for (i = 0; i < NUM_BUFFERS; i++) + while (inUse[i]) { + mmeWaitForCallbacks (); + mmeProcessCallbacks (); + } + result = waveOutReset (shm->sound); + if (result != MMSYSERR_NOERROR) + SetMMerror ("waveOutReset()", result); + mmeProcessCallbacks (); } } -static void MME_CloseAudio(_THIS) +static void +MME_CloseAudio (_THIS) { MMRESULT result; - if ( mixbuf ) { - result = mmeFreeBuffer(mixbuf); - if (result != MMSYSERR_NOERROR ) - SetMMerror("mmeFreeBuffer", result); - mixbuf = NULL; + if (mixbuf) { + result = mmeFreeBuffer (mixbuf); + if (result != MMSYSERR_NOERROR) + SetMMerror ("mmeFreeBuffer", result); + mixbuf = NULL; } - if ( shm ) { - if ( shm->sound ) { - result = waveOutClose(shm->sound); - if (result != MMSYSERR_NOERROR ) - SetMMerror("waveOutClose()", result); - mmeProcessCallbacks(); - } - result = mmeFreeMem(shm); - if (result != MMSYSERR_NOERROR ) - SetMMerror("mmeFreeMem()", result); - shm = NULL; + if (shm) { + if (shm->sound) { + result = waveOutClose (shm->sound); + if (result != MMSYSERR_NOERROR) + SetMMerror ("waveOutClose()", result); + mmeProcessCallbacks (); + } + result = mmeFreeMem (shm); + if (result != MMSYSERR_NOERROR) + SetMMerror ("mmeFreeMem()", result); + shm = NULL; } } +/* vi: set ts=4 sw=4 expandtab: */