Mercurial > sdl-ios-xcode
diff src/cdrom/macosx/AudioFileReaderThread.c @ 1895:c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 10 Jul 2006 21:04:37 +0000 |
parents | dc6b59e925a2 |
children | e1da92da346c |
line wrap: on
line diff
--- a/src/cdrom/macosx/AudioFileReaderThread.c Thu Jul 06 18:01:37 2006 +0000 +++ b/src/cdrom/macosx/AudioFileReaderThread.c Mon Jul 10 21:04:37 2006 +0000 @@ -28,7 +28,7 @@ AudioFileManager.cpp */ #include "AudioFilePlayer.h" -#include <mach/mach.h> /* used for setting policy of thread */ +#include <mach/mach.h> /* used for setting policy of thread */ #include "SDLOSXCAGuard.h" #include <pthread.h> @@ -42,56 +42,64 @@ } FileData; -typedef struct S_FileReaderThread { +typedef struct S_FileReaderThread +{ /*public:*/ - SDLOSXCAGuard* (*GetGuard)(struct S_FileReaderThread *frt); - void (*AddReader)(struct S_FileReaderThread *frt); - void (*RemoveReader)(struct S_FileReaderThread *frt, AudioFileManager* inItem); - int (*TryNextRead)(struct S_FileReaderThread *frt, AudioFileManager* inItem); + SDLOSXCAGuard *(*GetGuard) (struct S_FileReaderThread * frt); + void (*AddReader) (struct S_FileReaderThread * frt); + void (*RemoveReader) (struct S_FileReaderThread * frt, + AudioFileManager * inItem); + int (*TryNextRead) (struct S_FileReaderThread * frt, + AudioFileManager * inItem); - int mThreadShouldDie; - + int mThreadShouldDie; + /*private:*/ - /*typedef std::list<AudioFileManager*> FileData;*/ + /*typedef std::list<AudioFileManager*> FileData; */ - SDLOSXCAGuard *mGuard; - UInt32 mThreadPriority; - - int mNumReaders; - FileData *mFileData; + SDLOSXCAGuard *mGuard; + UInt32 mThreadPriority; + + int mNumReaders; + FileData *mFileData; - void (*ReadNextChunk)(struct S_FileReaderThread *frt); - int (*StartFixedPriorityThread)(struct S_FileReaderThread *frt); - /*static*/ - UInt32 (*GetThreadBasePriority)(pthread_t inThread); - /*static*/ - void* (*DiskReaderEntry)(void *inRefCon); + void (*ReadNextChunk) (struct S_FileReaderThread * frt); + int (*StartFixedPriorityThread) (struct S_FileReaderThread * frt); + /*static */ + UInt32(*GetThreadBasePriority) (pthread_t inThread); + /*static */ + void *(*DiskReaderEntry) (void *inRefCon); } FileReaderThread; -static SDLOSXCAGuard* FileReaderThread_GetGuard(FileReaderThread *frt) +static SDLOSXCAGuard * +FileReaderThread_GetGuard(FileReaderThread * frt) { return frt->mGuard; } /* returns 1 if succeeded */ -static int FileReaderThread_TryNextRead (FileReaderThread *frt, AudioFileManager* inItem) +static int +FileReaderThread_TryNextRead(FileReaderThread * frt, + AudioFileManager * inItem) { int didLock = 0; int succeeded = 0; - if (frt->mGuard->Try(frt->mGuard, &didLock)) - { - /*frt->mFileData.push_back (inItem);*/ + if (frt->mGuard->Try(frt->mGuard, &didLock)) { + /*frt->mFileData.push_back (inItem); */ /* !!! FIXME: this could be faster with a "tail" member. --ryan. */ FileData *i = frt->mFileData; FileData *prev = NULL; - FileData *newfd = (FileData *) SDL_malloc(sizeof (FileData)); + FileData *newfd = (FileData *) SDL_malloc(sizeof(FileData)); newfd->obj = inItem; newfd->next = NULL; - while (i != NULL) { prev = i; i = i->next; } + while (i != NULL) { + prev = i; + i = i->next; + } if (prev == NULL) frt->mFileData = newfd; else @@ -103,36 +111,35 @@ if (didLock) frt->mGuard->Unlock(frt->mGuard); } - + return succeeded; } -static void FileReaderThread_AddReader(FileReaderThread *frt) +static void +FileReaderThread_AddReader(FileReaderThread * frt) { - if (frt->mNumReaders == 0) - { + if (frt->mNumReaders == 0) { frt->mThreadShouldDie = 0; - frt->StartFixedPriorityThread (frt); + frt->StartFixedPriorityThread(frt); } frt->mNumReaders++; } -static void FileReaderThread_RemoveReader (FileReaderThread *frt, AudioFileManager* inItem) +static void +FileReaderThread_RemoveReader(FileReaderThread * frt, + AudioFileManager * inItem) { - if (frt->mNumReaders > 0) - { + if (frt->mNumReaders > 0) { int bNeedsRelease = frt->mGuard->Lock(frt->mGuard); - - /*frt->mFileData.remove (inItem);*/ + + /*frt->mFileData.remove (inItem); */ FileData *i = frt->mFileData; FileData *prev = NULL; - while (i != NULL) - { + while (i != NULL) { FileData *next = i->next; if (i->obj != inItem) prev = i; - else - { + else { if (prev == NULL) frt->mFileData = next; else @@ -144,181 +151,212 @@ if (--frt->mNumReaders == 0) { frt->mThreadShouldDie = 1; - frt->mGuard->Notify(frt->mGuard); /* wake up thread so it will quit */ - frt->mGuard->Wait(frt->mGuard); /* wait for thread to die */ + frt->mGuard->Notify(frt->mGuard); /* wake up thread so it will quit */ + frt->mGuard->Wait(frt->mGuard); /* wait for thread to die */ } - if (bNeedsRelease) frt->mGuard->Unlock(frt->mGuard); - } + if (bNeedsRelease) + frt->mGuard->Unlock(frt->mGuard); + } } -static int FileReaderThread_StartFixedPriorityThread (FileReaderThread *frt) +static int +FileReaderThread_StartFixedPriorityThread(FileReaderThread * frt) { - pthread_attr_t theThreadAttrs; - pthread_t pThread; + pthread_attr_t theThreadAttrs; + pthread_t pThread; OSStatus result = pthread_attr_init(&theThreadAttrs); - if (result) return 0; /*THROW_RESULT("pthread_attr_init - Thread attributes could not be created.")*/ - - result = pthread_attr_setdetachstate(&theThreadAttrs, PTHREAD_CREATE_DETACHED); - if (result) return 0; /*THROW_RESULT("pthread_attr_setdetachstate - Thread attributes could not be detached.")*/ - - result = pthread_create (&pThread, &theThreadAttrs, frt->DiskReaderEntry, frt); - if (result) return 0; /*THROW_RESULT("pthread_create - Create and start the thread.")*/ - + if (result) + return 0; /*THROW_RESULT("pthread_attr_init - Thread attributes could not be created.") */ + + result = + pthread_attr_setdetachstate(&theThreadAttrs, PTHREAD_CREATE_DETACHED); + if (result) + return 0; /*THROW_RESULT("pthread_attr_setdetachstate - Thread attributes could not be detached.") */ + + result = + pthread_create(&pThread, &theThreadAttrs, frt->DiskReaderEntry, frt); + if (result) + return 0; /*THROW_RESULT("pthread_create - Create and start the thread.") */ + pthread_attr_destroy(&theThreadAttrs); - + /* we've now created the thread and started it we'll now set the priority of the thread to the nominated priority and we'll also make the thread fixed */ - thread_extended_policy_data_t theFixedPolicy; - thread_precedence_policy_data_t thePrecedencePolicy; - SInt32 relativePriority; - + thread_extended_policy_data_t theFixedPolicy; + thread_precedence_policy_data_t thePrecedencePolicy; + SInt32 relativePriority; + /* make thread fixed */ - theFixedPolicy.timeshare = 0; /* set to 1 for a non-fixed thread */ - result = thread_policy_set (pthread_mach_thread_np(pThread), THREAD_EXTENDED_POLICY, (thread_policy_t)&theFixedPolicy, THREAD_EXTENDED_POLICY_COUNT); - if (result) return 0; /*THROW_RESULT("thread_policy - Couldn't set thread as fixed priority.")*/ + theFixedPolicy.timeshare = 0; /* set to 1 for a non-fixed thread */ + result = + thread_policy_set(pthread_mach_thread_np(pThread), + THREAD_EXTENDED_POLICY, + (thread_policy_t) & theFixedPolicy, + THREAD_EXTENDED_POLICY_COUNT); + if (result) + return 0; /*THROW_RESULT("thread_policy - Couldn't set thread as fixed priority.") */ /* set priority */ /* precedency policy's "importance" value is relative to spawning thread's priority */ - relativePriority = frt->mThreadPriority - frt->GetThreadBasePriority(pthread_self()); - + relativePriority = + frt->mThreadPriority - frt->GetThreadBasePriority(pthread_self()); + thePrecedencePolicy.importance = relativePriority; - result = thread_policy_set (pthread_mach_thread_np(pThread), THREAD_PRECEDENCE_POLICY, (thread_policy_t)&thePrecedencePolicy, THREAD_PRECEDENCE_POLICY_COUNT); - if (result) return 0; /*THROW_RESULT("thread_policy - Couldn't set thread priority.")*/ + result = + thread_policy_set(pthread_mach_thread_np(pThread), + THREAD_PRECEDENCE_POLICY, + (thread_policy_t) & thePrecedencePolicy, + THREAD_PRECEDENCE_POLICY_COUNT); + if (result) + return 0; /*THROW_RESULT("thread_policy - Couldn't set thread priority.") */ return 1; } -static UInt32 FileReaderThread_GetThreadBasePriority (pthread_t inThread) +static UInt32 +FileReaderThread_GetThreadBasePriority(pthread_t inThread) { - thread_basic_info_data_t threadInfo; - policy_info_data_t thePolicyInfo; - unsigned int count; - + thread_basic_info_data_t threadInfo; + policy_info_data_t thePolicyInfo; + unsigned int count; + /* get basic info */ count = THREAD_BASIC_INFO_COUNT; - thread_info (pthread_mach_thread_np (inThread), THREAD_BASIC_INFO, (integer_t*)&threadInfo, &count); - + thread_info(pthread_mach_thread_np(inThread), THREAD_BASIC_INFO, + (integer_t *) & threadInfo, &count); + switch (threadInfo.policy) { - case POLICY_TIMESHARE: - count = POLICY_TIMESHARE_INFO_COUNT; - thread_info(pthread_mach_thread_np (inThread), THREAD_SCHED_TIMESHARE_INFO, (integer_t*)&(thePolicyInfo.ts), &count); - return thePolicyInfo.ts.base_priority; - break; - - case POLICY_FIFO: - count = POLICY_FIFO_INFO_COUNT; - thread_info(pthread_mach_thread_np (inThread), THREAD_SCHED_FIFO_INFO, (integer_t*)&(thePolicyInfo.fifo), &count); - if (thePolicyInfo.fifo.depressed) { - return thePolicyInfo.fifo.depress_priority; - } else { - return thePolicyInfo.fifo.base_priority; - } - break; - - case POLICY_RR: - count = POLICY_RR_INFO_COUNT; - thread_info(pthread_mach_thread_np (inThread), THREAD_SCHED_RR_INFO, (integer_t*)&(thePolicyInfo.rr), &count); - if (thePolicyInfo.rr.depressed) { - return thePolicyInfo.rr.depress_priority; - } else { - return thePolicyInfo.rr.base_priority; - } - break; + case POLICY_TIMESHARE: + count = POLICY_TIMESHARE_INFO_COUNT; + thread_info(pthread_mach_thread_np(inThread), + THREAD_SCHED_TIMESHARE_INFO, + (integer_t *) & (thePolicyInfo.ts), &count); + return thePolicyInfo.ts.base_priority; + break; + + case POLICY_FIFO: + count = POLICY_FIFO_INFO_COUNT; + thread_info(pthread_mach_thread_np(inThread), + THREAD_SCHED_FIFO_INFO, + (integer_t *) & (thePolicyInfo.fifo), &count); + if (thePolicyInfo.fifo.depressed) { + return thePolicyInfo.fifo.depress_priority; + } else { + return thePolicyInfo.fifo.base_priority; + } + break; + + case POLICY_RR: + count = POLICY_RR_INFO_COUNT; + thread_info(pthread_mach_thread_np(inThread), + THREAD_SCHED_RR_INFO, + (integer_t *) & (thePolicyInfo.rr), &count); + if (thePolicyInfo.rr.depressed) { + return thePolicyInfo.rr.depress_priority; + } else { + return thePolicyInfo.rr.base_priority; + } + break; } - + return 0; } -static void *FileReaderThread_DiskReaderEntry (void *inRefCon) +static void * +FileReaderThread_DiskReaderEntry(void *inRefCon) { - FileReaderThread *frt = (FileReaderThread *)inRefCon; + FileReaderThread *frt = (FileReaderThread *) inRefCon; frt->ReadNextChunk(frt); - #if DEBUG - printf ("finished with reading file\n"); - #endif - +#if DEBUG + printf("finished with reading file\n"); +#endif + return 0; } -static void FileReaderThread_ReadNextChunk (FileReaderThread *frt) +static void +FileReaderThread_ReadNextChunk(FileReaderThread * frt) { OSStatus result; - UInt32 dataChunkSize; - AudioFileManager* theItem = 0; + UInt32 dataChunkSize; + AudioFileManager *theItem = 0; - for (;;) - { - { /* this is a scoped based lock */ + for (;;) { + { /* this is a scoped based lock */ int bNeedsRelease = frt->mGuard->Lock(frt->mGuard); - + if (frt->mThreadShouldDie) { frt->mGuard->Notify(frt->mGuard); - if (bNeedsRelease) frt->mGuard->Unlock(frt->mGuard); - return; - } - - /*if (frt->mFileData.empty())*/ - if (frt->mFileData == NULL) - { - frt->mGuard->Wait(frt->mGuard); - } - - /* kill thread */ - if (frt->mThreadShouldDie) { - - frt->mGuard->Notify(frt->mGuard); - if (bNeedsRelease) frt->mGuard->Unlock(frt->mGuard); + if (bNeedsRelease) + frt->mGuard->Unlock(frt->mGuard); return; } - /*theItem = frt->mFileData.front();*/ - /*frt->mFileData.pop_front();*/ + /*if (frt->mFileData.empty()) */ + if (frt->mFileData == NULL) { + frt->mGuard->Wait(frt->mGuard); + } + + /* kill thread */ + if (frt->mThreadShouldDie) { + + frt->mGuard->Notify(frt->mGuard); + if (bNeedsRelease) + frt->mGuard->Unlock(frt->mGuard); + return; + } + + /*theItem = frt->mFileData.front(); */ + /*frt->mFileData.pop_front(); */ theItem = NULL; - if (frt->mFileData != NULL) - { + if (frt->mFileData != NULL) { FileData *next = frt->mFileData->next; theItem = frt->mFileData->obj; SDL_free(frt->mFileData); frt->mFileData = next; } - if (bNeedsRelease) frt->mGuard->Unlock(frt->mGuard); + if (bNeedsRelease) + frt->mGuard->Unlock(frt->mGuard); } - - if ((theItem->mFileLength - theItem->mReadFilePosition) < theItem->mChunkSize) + + if ((theItem->mFileLength - theItem->mReadFilePosition) < + theItem->mChunkSize) dataChunkSize = theItem->mFileLength - theItem->mReadFilePosition; else dataChunkSize = theItem->mChunkSize; - - /* this is the exit condition for the thread */ + + /* this is the exit condition for the thread */ if (dataChunkSize <= 0) { theItem->mFinishedReadingData = 1; continue; } - /* construct pointer */ - char* writePtr = (char *) (theItem->GetFileBuffer(theItem) + - (theItem->mWriteToFirstBuffer ? 0 : theItem->mChunkSize)); - - /* read data */ + /* construct pointer */ + char *writePtr = (char *) (theItem->GetFileBuffer(theItem) + + (theItem-> + mWriteToFirstBuffer ? 0 : theItem-> + mChunkSize)); + + /* read data */ result = theItem->Read(theItem, writePtr, &dataChunkSize); if (result != noErr && result != eofErr) { - AudioFilePlayer *afp = (AudioFilePlayer *) theItem->GetParent(theItem); + AudioFilePlayer *afp = + (AudioFilePlayer *) theItem->GetParent(theItem); afp->DoNotification(afp, result); continue; } - - if (dataChunkSize != theItem->mChunkSize) - { + + if (dataChunkSize != theItem->mChunkSize) { writePtr += dataChunkSize; /* can't exit yet.. we still have to pass the partial buffer back */ SDL_memset(writePtr, 0, (theItem->mChunkSize - dataChunkSize)); } - + theItem->mWriteToFirstBuffer = !theItem->mWriteToFirstBuffer; /* switch buffers */ - + if (result == eofErr) theItem->mReadFilePosition = theItem->mFileLength; else @@ -326,30 +364,30 @@ } } -void delete_FileReaderThread(FileReaderThread *frt) +void +delete_FileReaderThread(FileReaderThread * frt) { - if (frt != NULL) - { + if (frt != NULL) { delete_SDLOSXCAGuard(frt->mGuard); SDL_free(frt); } } -FileReaderThread *new_FileReaderThread () +FileReaderThread * +new_FileReaderThread() { - FileReaderThread *frt = (FileReaderThread *) SDL_malloc(sizeof (FileReaderThread)); + FileReaderThread *frt = + (FileReaderThread *) SDL_malloc(sizeof(FileReaderThread)); if (frt == NULL) return NULL; - SDL_memset(frt, '\0', sizeof (*frt)); + SDL_memset(frt, '\0', sizeof(*frt)); frt->mGuard = new_SDLOSXCAGuard(); - if (frt->mGuard == NULL) - { + if (frt->mGuard == NULL) { SDL_free(frt); return NULL; } - - #define SET_FILEREADERTHREAD_METHOD(m) frt->m = FileReaderThread_##m +#define SET_FILEREADERTHREAD_METHOD(m) frt->m = FileReaderThread_##m SET_FILEREADERTHREAD_METHOD(GetGuard); SET_FILEREADERTHREAD_METHOD(AddReader); SET_FILEREADERTHREAD_METHOD(RemoveReader); @@ -358,7 +396,7 @@ SET_FILEREADERTHREAD_METHOD(StartFixedPriorityThread); SET_FILEREADERTHREAD_METHOD(GetThreadBasePriority); SET_FILEREADERTHREAD_METHOD(DiskReaderEntry); - #undef SET_FILEREADERTHREAD_METHOD +#undef SET_FILEREADERTHREAD_METHOD frt->mThreadPriority = 62; return frt; @@ -368,184 +406,200 @@ static FileReaderThread *sReaderThread; -static int AudioFileManager_DoConnect (AudioFileManager *afm) +static int +AudioFileManager_DoConnect(AudioFileManager * afm) { - if (!afm->mIsEngaged) - { + if (!afm->mIsEngaged) { OSStatus result; - /*afm->mReadFilePosition = 0;*/ + /*afm->mReadFilePosition = 0; */ afm->mFinishedReadingData = 0; afm->mNumTimesAskedSinceFinished = 0; afm->mLockUnsuccessful = 0; - + UInt32 dataChunkSize; - + if ((afm->mFileLength - afm->mReadFilePosition) < afm->mChunkSize) dataChunkSize = afm->mFileLength - afm->mReadFilePosition; else dataChunkSize = afm->mChunkSize; - + result = afm->Read(afm, afm->mFileBuffer, &dataChunkSize); - if (result) return 0; /*THROW_RESULT("AudioFileManager::DoConnect(): Read")*/ + if (result) + return 0; /*THROW_RESULT("AudioFileManager::DoConnect(): Read") */ afm->mReadFilePosition += dataChunkSize; - + afm->mWriteToFirstBuffer = 0; afm->mReadFromFirstBuffer = 1; sReaderThread->AddReader(sReaderThread); - + afm->mIsEngaged = 1; } /* - else - throw static_cast<OSStatus>(-1); */ /* thread has already been started */ + else + throw static_cast<OSStatus>(-1); *//* thread has already been started */ return 1; } -static void AudioFileManager_Disconnect (AudioFileManager *afm) +static void +AudioFileManager_Disconnect(AudioFileManager * afm) { - if (afm->mIsEngaged) - { - sReaderThread->RemoveReader (sReaderThread, afm); + if (afm->mIsEngaged) { + sReaderThread->RemoveReader(sReaderThread, afm); afm->mIsEngaged = 0; } } -static OSStatus AudioFileManager_Read(AudioFileManager *afm, char *buffer, UInt32 *len) +static OSStatus +AudioFileManager_Read(AudioFileManager * afm, char *buffer, UInt32 * len) { - return FSReadFork (afm->mForkRefNum, - fsFromStart, - afm->mReadFilePosition + afm->mAudioDataOffset, - *len, - buffer, - len); + return FSReadFork(afm->mForkRefNum, + fsFromStart, + afm->mReadFilePosition + afm->mAudioDataOffset, + *len, buffer, len); } -static OSStatus AudioFileManager_GetFileData (AudioFileManager *afm, void** inOutData, UInt32 *inOutDataSize) +static OSStatus +AudioFileManager_GetFileData(AudioFileManager * afm, void **inOutData, + UInt32 * inOutDataSize) { - if (afm->mFinishedReadingData) - { + if (afm->mFinishedReadingData) { ++afm->mNumTimesAskedSinceFinished; *inOutDataSize = 0; *inOutData = 0; return noErr; } - + if (afm->mReadFromFirstBuffer == afm->mWriteToFirstBuffer) { - #if DEBUG - printf ("* * * * * * * Can't keep up with reading file\n"); - #endif - - afm->mParent->DoNotification (afm->mParent, kAudioFilePlayErr_FilePlayUnderrun); +#if DEBUG + printf("* * * * * * * Can't keep up with reading file\n"); +#endif + + afm->mParent->DoNotification(afm->mParent, + kAudioFilePlayErr_FilePlayUnderrun); *inOutDataSize = 0; *inOutData = 0; } else { *inOutDataSize = afm->mChunkSize; - *inOutData = afm->mReadFromFirstBuffer ? afm->mFileBuffer : (afm->mFileBuffer + afm->mChunkSize); + *inOutData = + afm->mReadFromFirstBuffer ? afm->mFileBuffer : (afm-> + mFileBuffer + + afm->mChunkSize); } - afm->mLockUnsuccessful = !sReaderThread->TryNextRead (sReaderThread, afm); - + afm->mLockUnsuccessful = !sReaderThread->TryNextRead(sReaderThread, afm); + afm->mReadFromFirstBuffer = !afm->mReadFromFirstBuffer; return noErr; } -static void AudioFileManager_AfterRender (AudioFileManager *afm) +static void +AudioFileManager_AfterRender(AudioFileManager * afm) { - if (afm->mNumTimesAskedSinceFinished > 0) - { + if (afm->mNumTimesAskedSinceFinished > 0) { int didLock = 0; SDLOSXCAGuard *guard = sReaderThread->GetGuard(sReaderThread); if (guard->Try(guard, &didLock)) { - afm->mParent->DoNotification (afm->mParent, kAudioFilePlay_FileIsFinished); + afm->mParent->DoNotification(afm->mParent, + kAudioFilePlay_FileIsFinished); if (didLock) guard->Unlock(guard); } } if (afm->mLockUnsuccessful) - afm->mLockUnsuccessful = !sReaderThread->TryNextRead (sReaderThread, afm); + afm->mLockUnsuccessful = + !sReaderThread->TryNextRead(sReaderThread, afm); } -static void AudioFileManager_SetPosition (AudioFileManager *afm, SInt64 pos) +static void +AudioFileManager_SetPosition(AudioFileManager * afm, SInt64 pos) { if (pos < 0 || pos >= afm->mFileLength) { - SDL_SetError ("AudioFileManager::SetPosition - position invalid: %d filelen=%d\n", - (unsigned int)pos, (unsigned int)afm->mFileLength); + SDL_SetError + ("AudioFileManager::SetPosition - position invalid: %d filelen=%d\n", + (unsigned int) pos, (unsigned int) afm->mFileLength); pos = 0; } - + afm->mReadFilePosition = pos; } - -static void AudioFileManager_SetEndOfFile (AudioFileManager *afm, SInt64 pos) + +static void +AudioFileManager_SetEndOfFile(AudioFileManager * afm, SInt64 pos) { if (pos <= 0 || pos > afm->mFileLength) { - SDL_SetError ("AudioFileManager::SetEndOfFile - position beyond actual eof\n"); + SDL_SetError + ("AudioFileManager::SetEndOfFile - position beyond actual eof\n"); pos = afm->mFileLength; } - + afm->mFileLength = pos; } -static const char *AudioFileManager_GetFileBuffer(AudioFileManager *afm) +static const char * +AudioFileManager_GetFileBuffer(AudioFileManager * afm) { return afm->mFileBuffer; } -const AudioFilePlayer *AudioFileManager_GetParent(AudioFileManager *afm) +const AudioFilePlayer * +AudioFileManager_GetParent(AudioFileManager * afm) { return afm->mParent; } -static int AudioFileManager_GetByteCounter(AudioFileManager *afm) +static int +AudioFileManager_GetByteCounter(AudioFileManager * afm) { return afm->mByteCounter; } -static OSStatus AudioFileManager_FileInputProc (void *inRefCon, - AudioUnitRenderActionFlags inActionFlags, - const AudioTimeStamp *inTimeStamp, - UInt32 inBusNumber, - AudioBuffer *ioData) +static OSStatus +AudioFileManager_FileInputProc(void *inRefCon, + AudioUnitRenderActionFlags inActionFlags, + const AudioTimeStamp * inTimeStamp, + UInt32 inBusNumber, AudioBuffer * ioData) { - AudioFileManager* afm = (AudioFileManager*)inRefCon; + AudioFileManager *afm = (AudioFileManager *) inRefCon; return afm->Render(afm, ioData); } -static OSStatus AudioFileManager_Render (AudioFileManager *afm, AudioBuffer *ioData) +static OSStatus +AudioFileManager_Render(AudioFileManager * afm, AudioBuffer * ioData) { OSStatus result = noErr; - - if (afm->mBufferOffset >= afm->mBufferSize) { - result = afm->GetFileData(afm, &afm->mTmpBuffer, &afm->mBufferSize); - if (result) { - SDL_SetError ("AudioConverterFillBuffer:%ld\n", result); - afm->mParent->DoNotification(afm->mParent, result); - return result; - } + + if (afm->mBufferOffset >= afm->mBufferSize) { + result = afm->GetFileData(afm, &afm->mTmpBuffer, &afm->mBufferSize); + if (result) { + SDL_SetError("AudioConverterFillBuffer:%ld\n", result); + afm->mParent->DoNotification(afm->mParent, result); + return result; + } - afm->mBufferOffset = 0; - } - + afm->mBufferOffset = 0; + } + if (ioData->mDataByteSize > afm->mBufferSize - afm->mBufferOffset) - ioData->mDataByteSize = afm->mBufferSize - afm->mBufferOffset; - ioData->mData = (char *)afm->mTmpBuffer + afm->mBufferOffset; + ioData->mDataByteSize = afm->mBufferSize - afm->mBufferOffset; + ioData->mData = (char *) afm->mTmpBuffer + afm->mBufferOffset; afm->mBufferOffset += ioData->mDataByteSize; - - afm->mByteCounter += ioData->mDataByteSize; - afm->AfterRender(afm); + + afm->mByteCounter += ioData->mDataByteSize; + afm->AfterRender(afm); return result; } -void delete_AudioFileManager (AudioFileManager *afm) +void +delete_AudioFileManager(AudioFileManager * afm) { if (afm != NULL) { if (afm->mFileBuffer) { @@ -557,26 +611,25 @@ } -AudioFileManager *new_AudioFileManager(AudioFilePlayer *inParent, - SInt16 inForkRefNum, - SInt64 inFileLength, - UInt32 inChunkSize) +AudioFileManager * +new_AudioFileManager(AudioFilePlayer * inParent, + SInt16 inForkRefNum, + SInt64 inFileLength, UInt32 inChunkSize) { AudioFileManager *afm; - if (sReaderThread == NULL) - { + if (sReaderThread == NULL) { sReaderThread = new_FileReaderThread(); if (sReaderThread == NULL) return NULL; } - afm = (AudioFileManager *) SDL_malloc(sizeof (AudioFileManager)); + afm = (AudioFileManager *) SDL_malloc(sizeof(AudioFileManager)); if (afm == NULL) return NULL; - SDL_memset(afm, '\0', sizeof (*afm)); + SDL_memset(afm, '\0', sizeof(*afm)); - #define SET_AUDIOFILEMANAGER_METHOD(m) afm->m = AudioFileManager_##m +#define SET_AUDIOFILEMANAGER_METHOD(m) afm->m = AudioFileManager_##m SET_AUDIOFILEMANAGER_METHOD(Disconnect); SET_AUDIOFILEMANAGER_METHOD(DoConnect); SET_AUDIOFILEMANAGER_METHOD(Read); @@ -589,7 +642,7 @@ SET_AUDIOFILEMANAGER_METHOD(GetFileData); SET_AUDIOFILEMANAGER_METHOD(AfterRender); SET_AUDIOFILEMANAGER_METHOD(FileInputProc); - #undef SET_AUDIOFILEMANAGER_METHOD +#undef SET_AUDIOFILEMANAGER_METHOD afm->mParent = inParent; afm->mForkRefNum = inForkRefNum; @@ -597,9 +650,10 @@ afm->mBufferOffset = inChunkSize; afm->mChunkSize = inChunkSize; afm->mFileLength = inFileLength; - afm->mFileBuffer = (char*) SDL_malloc(afm->mChunkSize * 2); + afm->mFileBuffer = (char *) SDL_malloc(afm->mChunkSize * 2); FSGetForkPosition(afm->mForkRefNum, &afm->mAudioDataOffset); - assert (afm->mFileBuffer != NULL); + assert(afm->mFileBuffer != NULL); return afm; } +/* vi: set ts=4 sw=4 expandtab: */