Fixed potential crash in handleAudioPackets

This commit is contained in:
Thong Nguyen 2014-01-27 16:22:51 +00:00
parent ca80243083
commit 6af12221e5
1 changed files with 21 additions and 23 deletions

View File

@ -949,27 +949,29 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ
if (audioQueue == nil)
{
if (currentlyReadingEntry == currentlyPlayingEntry && currentlyReadingEntry != nil)
if (currentlyPlayingEntry == nil)
{
[self createAudioQueue];
return;
}
if (audioQueue == nil)
[self createAudioQueue];
if (audioQueue == nil)
{
return;
}
if (self.internalState == AudioPlayerInternalStateStopped)
{
if (stopReason == AudioPlayerStopReasonEof)
{
stopReason = AudioPlayerStopReasonNoStop;
self.internalState = AudioPlayerInternalStateWaitingForData;
}
else
{
return;
}
if (self.internalState == AudioPlayerInternalStateStopped)
{
if (stopReason == AudioPlayerStopReasonEof)
{
stopReason = AudioPlayerStopReasonNoStop;
self.internalState = AudioPlayerInternalStateWaitingForData;
}
else
{
return;
}
}
}
}
else if (memcmp(&currentAudioStreamBasicDescription, &currentlyReadingEntry->audioStreamBasicDescription, sizeof(currentAudioStreamBasicDescription)) != 0)
@ -1032,7 +1034,7 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ
{
[self enqueueBuffer];
if (disposeWasRequested || seekToTimeWasRequested || self.internalState == AudioPlayerInternalStateStopped || self.internalState == AudioPlayerInternalStateStopping || self.internalState == AudioPlayerInternalStateDisposed)
if (audioQueue == nil || disposeWasRequested || seekToTimeWasRequested || self.internalState == AudioPlayerInternalStateStopped || self.internalState == AudioPlayerInternalStateStopping || self.internalState == AudioPlayerInternalStateDisposed)
{
return;
}
@ -1060,7 +1062,7 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ
{
[self enqueueBuffer];
if (disposeWasRequested || seekToTimeWasRequested || self.internalState == AudioPlayerInternalStateStopped || self.internalState == AudioPlayerInternalStateStopping || self.internalState == AudioPlayerInternalStateDisposed)
if (audioQueue == nil || disposeWasRequested || seekToTimeWasRequested || self.internalState == AudioPlayerInternalStateStopped || self.internalState == AudioPlayerInternalStateStopping || self.internalState == AudioPlayerInternalStateDisposed)
{
return;
}
@ -1081,7 +1083,7 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ
{
[self enqueueBuffer];
if (disposeWasRequested || seekToTimeWasRequested || self.internalState == AudioPlayerInternalStateStopped || self.internalState == AudioPlayerInternalStateStopping || self.internalState == AudioPlayerInternalStateDisposed)
if (audioQueue == nil || disposeWasRequested || seekToTimeWasRequested || self.internalState == AudioPlayerInternalStateStopped || self.internalState == AudioPlayerInternalStateStopping || self.internalState == AudioPlayerInternalStateDisposed)
{
return;
}
@ -1276,10 +1278,6 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ
&& self.internalState != AudioPlayerInternalStateWaitingForData
&& [self moreFramesAreDefinitelyAvailableToPlay])
{
if ([self moreFramesAreDefinitelyAvailableToPlay])
{
}
AudioQueuePause(audioQueue);
self->rebufferingStartFrames = [self currentTimeInFrames];