Skip to content

Commit

Permalink
fix crash for linearPcmData
Browse files Browse the repository at this point in the history
  • Loading branch information
msching committed Apr 9, 2015
1 parent 481be7a commit 75f2cd7
Showing 1 changed file with 29 additions and 7 deletions.
36 changes: 29 additions & 7 deletions MCSimpleAudioPlayerDemo/MCSimpleAudioPlayer/MCAudioFile.m
Original file line number Diff line number Diff line change
Expand Up @@ -239,10 +239,19 @@ - (NSArray *)parseData:(BOOL *)isEof
UInt32 ioNumBytes = ioNumPackets * _maxPacketSize;
void * outBuffer = (void *)malloc(ioNumBytes);

UInt32 descSize = sizeof(AudioStreamPacketDescription) * ioNumPackets;
AudioStreamPacketDescription * outPacketDescriptions = (AudioStreamPacketDescription *)malloc(descSize);
AudioStreamPacketDescription * outPacketDescriptions = NULL;
OSStatus status = noErr;
if (_format.mFormatID != kAudioFormatLinearPCM)
{
UInt32 descSize = sizeof(AudioStreamPacketDescription) * ioNumPackets;
outPacketDescriptions = (AudioStreamPacketDescription *)malloc(descSize);
status = AudioFileReadPacketData(_audioFileID, false, &ioNumBytes, outPacketDescriptions, _packetOffset, &ioNumPackets, outBuffer);
}
else
{
status = AudioFileReadPackets(_audioFileID, false, &ioNumBytes, outPacketDescriptions, _packetOffset, &ioNumPackets, outBuffer);
}

OSStatus status = AudioFileReadPacketData(_audioFileID, false, &ioNumBytes, outPacketDescriptions, _packetOffset, &ioNumPackets, outBuffer);
if (status != noErr)
{
*isEof = status == kAudioFileEndOfFileError;
Expand All @@ -262,10 +271,23 @@ - (NSArray *)parseData:(BOOL *)isEof
NSMutableArray *parsedDataArray = [[NSMutableArray alloc] init];
for (int i = 0; i < ioNumPackets; ++i)
{
AudioStreamPacketDescription packetDescriptioin = outPacketDescriptions[i];
MCParsedAudioData *parsedData = [MCParsedAudioData parsedAudioDataWithBytes:outBuffer + packetDescriptioin.mStartOffset
packetDescription:packetDescriptioin];
[parsedDataArray addObject:parsedData];
AudioStreamPacketDescription packetDescription;
if (outPacketDescriptions)
{
packetDescription = outPacketDescriptions[i];
}
else
{
packetDescription.mStartOffset = i * _format.mBytesPerPacket;
packetDescription.mDataByteSize = _format.mBytesPerPacket;
packetDescription.mVariableFramesInPacket = _format.mFramesPerPacket;
}
MCParsedAudioData *parsedData = [MCParsedAudioData parsedAudioDataWithBytes:outBuffer + packetDescription.mStartOffset
packetDescription:packetDescription];
if (parsedData)
{
[parsedDataArray addObject:parsedData];
}
}
return parsedDataArray;
}
Expand Down

0 comments on commit 75f2cd7

Please sign in to comment.