summaryrefslogtreecommitdiff
path: root/libs/appleutility/CAAudioFile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/appleutility/CAAudioFile.cpp')
-rw-r--r--libs/appleutility/CAAudioFile.cpp102
1 files changed, 51 insertions, 51 deletions
diff --git a/libs/appleutility/CAAudioFile.cpp b/libs/appleutility/CAAudioFile.cpp
index 1e97de6211..148565e7fb 100644
--- a/libs/appleutility/CAAudioFile.cpp
+++ b/libs/appleutility/CAAudioFile.cpp
@@ -37,7 +37,7 @@
*/
/*=============================================================================
CAAudioFile.cpp
-
+
=============================================================================*/
#include "CAAudioFile.h"
@@ -88,13 +88,13 @@
if (sIndent == 0)
printf("\n");
}
-
+
static void Indent() {
for (int i = sIndent; --i >= 0; ) {
putchar(' '); putchar(' ');
}
}
-
+
const char *mName;
static int sIndent;
};
@@ -126,7 +126,7 @@ CAAudioFile::CAAudioFile() :
mMode(kClosed),
mFileDataOffset(-1),
mFramesToSkipFollowingSeek(0),
-
+
mClientOwnsIOBuffer(false),
mPacketDescs(NULL),
mNumPacketDescs(0),
@@ -229,7 +229,7 @@ void CAAudioFile::CreateNew(const FSRef &parentDir, CFStringRef filename, AudioF
{
LOG_FUNCTION("CAAudioFile::CreateNew", "%p", this);
XThrowIf(mMode != kClosed, kExtAudioFileError_InvalidOperationOrder, "file already open");
-
+
mFileDataFormat = dataFormat;
if (layout) {
mFileChannelLayout = layout;
@@ -249,15 +249,15 @@ void CAAudioFile::FileFormatChanged(const FSRef *parentDir, CFStringRef filename
{
LOG_FUNCTION("CAAudioFile::FileFormatChanged", "%p", this);
XThrowIf(mMode != kPreparingToCreate && mMode != kPreparingToWrite, kExtAudioFileError_InvalidOperationOrder, "new file not prepared");
-
+
UInt32 propertySize;
OSStatus err;
AudioStreamBasicDescription saveFileDataFormat = mFileDataFormat;
-
+
#if VERBOSE_CONVERTER
mFileDataFormat.PrintFormat(stdout, "", "Specified file data format");
#endif
-
+
// Find out the actual format the converter will produce. This is necessary in
// case the bitrate has forced a lower sample rate, which needs to be set correctly
// in the stream description passed to AudioFileCreate.
@@ -286,7 +286,7 @@ void CAAudioFile::FileFormatChanged(const FSRef *parentDir, CFStringRef filename
free(layout);
}
}
-
+
// create the output file
if (mMode == kPreparingToCreate) {
CAStreamBasicDescription newFileDataFormat = mFileDataFormat;
@@ -314,12 +314,12 @@ void CAAudioFile::FileFormatChanged(const FSRef *parentDir, CFStringRef filename
if (mConverter != NULL) {
// encoder
- // get the magic cookie, if any, from the converter
+ // get the magic cookie, if any, from the converter
delete[] mMagicCookie; mMagicCookie = NULL;
mMagicCookieSize = 0;
err = AudioConverterGetPropertyInfo(mConverter, kAudioConverterCompressionMagicCookie, &propertySize, NULL);
-
+
// we can get a noErr result and also a propertySize == 0
// -- if the file format does support magic cookies, but this file doesn't have one.
if (err == noErr && propertySize > 0) {
@@ -338,7 +338,7 @@ void CAAudioFile::FileFormatChanged(const FSRef *parentDir, CFStringRef filename
XThrowIfError(AudioFileSetProperty(mAudioFile, kAudioFilePropertyMagicCookieData, mMagicCookieSize, mMagicCookie), "set audio file's magic cookie");
}
}
-
+
// get maximum packet size
propertySize = sizeof(UInt32);
XThrowIfError(AudioConverterGetProperty(mConverter, kAudioConverterPropertyMaximumOutputPacketSize, &propertySize, &mFileMaxPacketSize), "get audio converter's maximum output packet size");
@@ -347,7 +347,7 @@ void CAAudioFile::FileFormatChanged(const FSRef *parentDir, CFStringRef filename
} else {
InitFileMaxPacketSize();
}
-
+
if (mFileChannelLayout.IsValid() && mFileChannelLayout.NumberChannels() > 2) {
// don't bother tagging mono/stereo files
UInt32 isWritable;
@@ -366,7 +366,7 @@ void CAAudioFile::FileFormatChanged(const FSRef *parentDir, CFStringRef filename
#endif
}
}
-
+
UpdateClientMaxPacketSize(); // also sets mFrame0Offset
mPacketMark = 0;
mFrameMark = 0;
@@ -429,11 +429,11 @@ void CAAudioFile::GetExistingFileInfo()
LOG_FUNCTION("CAAudioFile::GetExistingFileInfo", "%p", this);
UInt32 propertySize;
OSStatus err;
-
+
// get mFileDataFormat
propertySize = sizeof(AudioStreamBasicDescription);
XThrowIfError(AudioFileGetProperty(mAudioFile, kAudioFilePropertyDataFormat, &propertySize, &mFileDataFormat), "get audio file's data format");
-
+
// get mFileChannelLayout
err = AudioFileGetPropertyInfo(mAudioFile, kAudioFilePropertyChannelLayout, &propertySize, NULL);
if (err == noErr && propertySize > 0) {
@@ -450,7 +450,7 @@ void CAAudioFile::GetExistingFileInfo()
}
if (mMode != kReading)
return;
-
+
#if 0
// get mNumberPackets
propertySize = sizeof(mNumberPackets);
@@ -459,7 +459,7 @@ void CAAudioFile::GetExistingFileInfo()
printf("CAAudioFile::GetExistingFileInfo: %qd packets\n", mNumberPackets);
#endif
#endif
-
+
// get mMagicCookie
err = AudioFileGetPropertyInfo(mAudioFile, kAudioFilePropertyMagicCookieData, &propertySize, NULL);
if (err == noErr && propertySize > 0) {
@@ -470,7 +470,7 @@ void CAAudioFile::GetExistingFileInfo()
InitFileMaxPacketSize();
mPacketMark = 0;
mFrameMark = 0;
-
+
UpdateClientMaxPacketSize();
}
@@ -495,9 +495,9 @@ void CAAudioFile::SetClientFormat(const CAStreamBasicDescription &dataFormat, co
{
LOG_FUNCTION("CAAudioFile::SetClientFormat", "%p", this);
XThrowIf(!dataFormat.IsPCM(), kExtAudioFileError_NonPCMClientFormat, "non-PCM client format on audio file");
-
+
bool dataFormatChanging = (mClientDataFormat.mFormatID == 0 || mClientDataFormat != dataFormat);
-
+
if (dataFormatChanging) {
CloseConverter();
if (mWriteBufferList) {
@@ -506,12 +506,12 @@ void CAAudioFile::SetClientFormat(const CAStreamBasicDescription &dataFormat, co
}
mClientDataFormat = dataFormat;
}
-
+
if (layout && layout->IsValid()) {
XThrowIf(layout->NumberChannels() != mClientDataFormat.NumberChannels(), kExtAudioFileError_InvalidChannelMap, "inappropriate channel map");
mClientChannelLayout = *layout;
}
-
+
bool differentLayouts;
if (mClientChannelLayout.IsValid()) {
if (mFileChannelLayout.IsValid()) {
@@ -534,7 +534,7 @@ void CAAudioFile::SetClientFormat(const CAStreamBasicDescription &dataFormat, co
printf("two invalid layouts\n");
#endif
}
-
+
if (mClientDataFormat != mFileDataFormat || differentLayouts) {
// We need an AudioConverter.
if (mMode == kReading) {
@@ -545,7 +545,7 @@ void CAAudioFile::SetClientFormat(const CAStreamBasicDescription &dataFormat, co
if (mConverter == NULL)
XThrowIfError(AudioConverterNew(&mFileDataFormat, &mClientDataFormat, &mConverter),
"create audio converter");
-
+
#if VERBOSE_CONVERTER
printf("CAAudioFile %p -- created converter\n", this);
CAShow(mConverter);
@@ -558,7 +558,7 @@ void CAAudioFile::SetClientFormat(const CAStreamBasicDescription &dataFormat, co
SetConverterChannelLayout(false, mFileChannelLayout);
SetConverterChannelLayout(true, mClientChannelLayout);
-
+
// propagate leading/trailing frame counts
if (mFileDataFormat.mBitsPerChannel == 0) {
UInt32 propertySize;
@@ -592,7 +592,7 @@ void CAAudioFile::SetClientFormat(const CAStreamBasicDescription &dataFormat, co
// _______________________________________________________________________________________
//
-OSStatus CAAudioFile::SetConverterProperty(
+OSStatus CAAudioFile::SetConverterProperty(
AudioConverterPropertyID inPropertyID,
UInt32 inPropertyDataSize,
const void* inPropertyData,
@@ -620,7 +620,7 @@ void CAAudioFile::SetConverterChannelLayout(bool output, const CAAudioChannelLay
{
LOG_FUNCTION("CAAudioFile::SetConverterChannelLayout", "%p", this);
OSStatus err;
-
+
if (layout.IsValid()) {
#if VERBOSE_CHANNELMAP
printf("Setting converter's %s channel layout: %s\n", output ? "output" : "input",
@@ -660,11 +660,11 @@ void CAAudioFile::UpdateClientMaxPacketSize()
AudioConverterPropertyID property = (mMode == kReading) ?
kAudioConverterPropertyMaximumOutputPacketSize :
kAudioConverterPropertyMaximumInputPacketSize;
-
+
UInt32 propertySize = sizeof(UInt32);
XThrowIfError(AudioConverterGetProperty(mConverter, property, &propertySize, &mClientMaxPacketSize),
"get audio converter's maximum packet size");
-
+
if (mFileDataFormat.mBitsPerChannel == 0) {
AudioConverterPrimeInfo primeInfo;
propertySize = sizeof(primeInfo);
@@ -693,7 +693,7 @@ void CAAudioFile::AllocateBuffers(bool okToFail)
}
UInt32 bufferSizeBytes = mIOBufferSizeBytes = std::max(mIOBufferSizeBytes, mFileMaxPacketSize);
// must be big enough for at least one maximum size packet
-
+
if (mIOBufferList.mBuffers[0].mDataByteSize != bufferSizeBytes) {
mIOBufferList.mNumberBuffers = 1;
mIOBufferList.mBuffers[0].mNumberChannels = mFileDataFormat.mChannelsPerFrame;
@@ -705,7 +705,7 @@ void CAAudioFile::AllocateBuffers(bool okToFail)
mIOBufferList.mBuffers[0].mDataByteSize = bufferSizeBytes;
mIOBufferSizePackets = bufferSizeBytes / mFileMaxPacketSize;
}
-
+
UInt32 propertySize = sizeof(UInt32);
UInt32 externallyFramed;
XThrowIfError(AudioFormatGetProperty(kAudioFormatProperty_FormatIsExternallyFramed,
@@ -766,7 +766,7 @@ SInt64 CAAudioFile::PacketToFrame(SInt64 packet) const
{
AudioFramePacketTranslation trans;
UInt32 propertySize;
-
+
switch (mFileDataFormat.mFramesPerPacket) {
case 1:
return packet;
@@ -784,7 +784,7 @@ SInt64 CAAudioFile::FrameToPacket(SInt64 inFrame) const
{
AudioFramePacketTranslation trans;
UInt32 propertySize;
-
+
switch (mFileDataFormat.mFramesPerPacket) {
case 1:
return inFrame;
@@ -815,7 +815,7 @@ void CAAudioFile::SeekToPacket(SInt64 packetNumber)
if (mPacketMark == packetNumber)
return; // already there! don't reset converter
mPacketMark = packetNumber;
-
+
mFrameMark = PacketToFrame(packetNumber) - mFrame0Offset;
mFramesToSkipFollowingSeek = 0;
if (mConverter)
@@ -825,7 +825,7 @@ void CAAudioFile::SeekToPacket(SInt64 packetNumber)
/*
Example: AAC, 1024 frames/packet, 2112 frame offset
-
+
2112
|
Absolute frames: 0 1024 2048 | 3072
@@ -838,7 +838,7 @@ void CAAudioFile::SeekToPacket(SInt64 packetNumber)
* Offset between absolute and client frames is mFrame0Offset.
*** mFrameMark is in client frames ***
-
+
Examples:
clientFrame 0 960 1000 1024
absoluteFrame 2112 3072 3112 3136
@@ -857,7 +857,7 @@ void CAAudioFile::Seek(SInt64 clientFrame)
#if VERBOSE_IO
SInt64 prevFrameMark = mFrameMark;
#endif
-
+
SInt64 packet;
packet = FrameToPacket(clientFrame);
if (packet < 0)
@@ -866,7 +866,7 @@ void CAAudioFile::Seek(SInt64 clientFrame)
// this will have backed up mFrameMark to match the beginning of the packet
mFramesToSkipFollowingSeek = std::max(UInt32(clientFrame - mFrameMark), UInt32(0));
mFrameMark = clientFrame;
-
+
#if VERBOSE_IO
printf("CAAudioFile::SeekToFrame: frame %qd (from %qd), packet %qd, skip %ld frames\n", mFrameMark, prevFrameMark, packet, mFramesToSkipFollowingSeek);
#endif
@@ -889,12 +889,12 @@ void CAAudioFile::Read(UInt32 &ioNumPackets, AudioBufferList *ioData)
AllocateBuffers();
}
UInt32 bufferSizeBytes = ioData->mBuffers[0].mDataByteSize;
- UInt32 maxNumPackets = bufferSizeBytes / mClientMaxPacketSize;
+ UInt32 maxNumPackets = bufferSizeBytes / mClientMaxPacketSize;
// older versions of AudioConverterFillComplexBuffer don't do this, so do our own sanity check
UInt32 nPackets = std::min(ioNumPackets, maxNumPackets);
-
+
mMaxPacketsToRead = ~0UL;
-
+
if (mClientDataFormat.mFramesPerPacket == 1) { // PCM or equivalent
while (mFramesToSkipFollowingSeek > 0) {
UInt32 skipFrames = std::min(mFramesToSkipFollowingSeek, maxNumPackets);
@@ -931,7 +931,7 @@ void CAAudioFile::Read(UInt32 &ioNumPackets, AudioBufferList *ioData)
ioData->mBuffers[i].mDataByteSize = bufferSizeBytes;
}
}
-
+
if (mFileDataFormat.mFramesPerPacket > 0)
// don't read more packets than we are being asked to produce
mMaxPacketsToRead = nPackets / mFileDataFormat.mFramesPerPacket + 1;
@@ -950,7 +950,7 @@ void CAAudioFile::Read(UInt32 &ioNumPackets, AudioBufferList *ioData)
}
if (mClientDataFormat.mFramesPerPacket == 1)
mFrameMark += nPackets;
-
+
ioNumPackets = nPackets;
}
@@ -977,7 +977,7 @@ OSStatus CAAudioFile::ReadInputProc( AudioConverterRef inAudioConverter,
return noErr; // not eofErr; EOF is signified by 0 packets/0 bytes
}
#endif
-
+
// determine how much to read
AudioBufferList *readBuffer;
UInt32 readPackets;
@@ -1003,11 +1003,11 @@ OSStatus CAAudioFile::ReadInputProc( AudioConverterRef inAudioConverter,
#endif
readPackets = This->mMaxPacketsToRead;
}
-
+
// read
UInt32 bytesRead;
OSStatus err;
-
+
StartTiming(This, read);
StartTiming(This, readinconv);
err = AudioFileReadPackets(This->mAudioFile, This->mUseCache, &bytesRead, This->mPacketDescs, This->mPacketMark, &readPackets, readBuffer->mBuffers[0].mData);
@@ -1020,7 +1020,7 @@ OSStatus CAAudioFile::ReadInputProc( AudioConverterRef inAudioConverter,
DebugMessageN1("Error %ld from AudioFileReadPackets!!!\n", err);
return err;
}
-
+
#if VERBOSE_IO
printf("CAAudioFile::ReadInputProc: read %ld packets (%qd-%qd), %ld bytes, err %ld\n", readPackets, This->mPacketMark, This->mPacketMark + readPackets, bytesRead, err);
#if VERBOSE_IO >= 2
@@ -1108,7 +1108,7 @@ void CAAudioFile::FlushEncoder()
OSStatus err;
AudioConverterPrimeInfo primeInfo;
propertySize = sizeof(primeInfo);
-
+
err = AudioConverterGetProperty(mConverter, kAudioConverterPrimeInfo, &propertySize, &primeInfo);
if (err == noErr) {
AudioFilePacketTableInfo pti;
@@ -1165,9 +1165,9 @@ static void hexdump(const void *addr, long len)
{
const Byte *p = (Byte *)addr;
UInt32 offset = 0;
-
+
if (len > 0x400) len = 0x400;
-
+
while (len > 0) {
int n = len > 16 ? 16 : len;
printf("%08lX: ", offset);