Changeset 1017

Show
Ignore:
Timestamp:
10/20/07 11:58:35 (15 months ago)
Author:
stephen_booth
Message:

Pass ScheduledAudioRegion? to callback

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/Audio/AudioScheduler.m

    r913 r1017  
    6060scheduledAudioSliceCompletionProc(void *userData, ScheduledAudioSlice *slice) 
    6161{ 
    62         NSAutoreleasePool       *pool           = [[NSAutoreleasePool alloc] init]; 
    63         AudioScheduler          *scheduler      = (AudioScheduler *)userData; 
     62        NSCParameterAssert(NULL != userData); 
     63        NSCParameterAssert(NULL != slice); 
     64         
     65        NSAutoreleasePool               *pool           = [[NSAutoreleasePool alloc] init]; 
     66        NSArray                                 *dataArray      = (NSArray *)userData; 
     67        AudioScheduler                  *scheduler      = (AudioScheduler *)[dataArray objectAtIndex:0]; 
     68        ScheduledAudioRegion    *region         = (ScheduledAudioRegion *)[dataArray objectAtIndex:1]; 
    6469 
    6570#if DEBUG 
     
    7277 
    7378                // Update the scheduler 
    74                 [scheduler setRegionBeingRendered:[scheduler regionBeingScheduled]]; 
     79                [scheduler setRegionBeingRendered:region]; 
    7580 
    7681                // Notify the delegate 
     
    101106        } 
    102107 
     108        [dataArray release]; 
    103109        [pool release]; 
    104110} 
     
    449455                                        } 
    450456                                         
     457                                        // To handle the case where the file contains fewer frames than the buffer, 
     458                                        // pass the region and self to the callback proc to ensure that the callback 
     459                                        // knows the ScheduledAudioRegion the audio that was just rendered came from 
     460                                        NSArray *array = [[NSArray alloc] initWithObjects:self, [self regionBeingScheduled], nil];                                       
     461                                         
    451462                                        // Schedule it 
    452463                                        slice->mTimeStamp.mFlags                = kAudioTimeStampSampleTimeValid; 
    453464                                        slice->mTimeStamp.mSampleTime   = [self scheduledStartTime].mSampleTime + [self framesScheduled]; 
    454465                                        slice->mCompletionProc                  = scheduledAudioSliceCompletionProc; 
    455                                         slice->mCompletionProcUserData  = (void *)self; 
     466                                        slice->mCompletionProcUserData  = (void *)array; 
    456467                                        slice->mFlags                                   = 0; 
    457468                                        slice->mNumberFrames                    = frameCount;