summaryrefslogtreecommitdiff
path: root/libs/appleutility
diff options
context:
space:
mode:
authorDoug McLain <doug@nostar.net>2008-06-02 05:02:28 +0000
committerDoug McLain <doug@nostar.net>2008-06-02 05:02:28 +0000
commit9c0d7d72d70082a54f823cd44c0ccda5da64bb6f (patch)
tree96ec400b83b8c1c06852b1936f684b5fbcd47a79 /libs/appleutility
parent2f3f697bb8e185eb43c2c50b4eefc2bcb937f269 (diff)
remove empty sigc++2 directory
git-svn-id: svn://localhost/ardour2/branches/3.0@3432 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/appleutility')
-rw-r--r--libs/appleutility/AUOutputBL.cpp160
-rw-r--r--libs/appleutility/AUOutputBL.h115
-rw-r--r--libs/appleutility/AUParamInfo.cpp134
-rw-r--r--libs/appleutility/AUParamInfo.h107
-rw-r--r--libs/appleutility/CAAUParameter.cpp316
-rw-r--r--libs/appleutility/CAAUParameter.h187
-rw-r--r--libs/appleutility/CAAudioChannelLayout.cpp138
-rw-r--r--libs/appleutility/CAAudioChannelLayout.h162
-rw-r--r--libs/appleutility/CAAudioChannelLayoutObject.cpp199
-rw-r--r--libs/appleutility/CAAudioFile.cpp1241
-rw-r--r--libs/appleutility/CAAudioFile.h439
-rw-r--r--libs/appleutility/CAAudioUnit.cpp1202
-rw-r--r--libs/appleutility/CAAudioUnit.h383
-rw-r--r--libs/appleutility/CABufferList.cpp179
-rw-r--r--libs/appleutility/CABufferList.h300
-rw-r--r--libs/appleutility/CACFDictionary.cpp478
-rw-r--r--libs/appleutility/CACFDictionary.h141
-rw-r--r--libs/appleutility/CACFNumber.cpp65
-rw-r--r--libs/appleutility/CACFNumber.h102
-rw-r--r--libs/appleutility/CACFString.cpp106
-rw-r--r--libs/appleutility/CACFString.h156
-rw-r--r--libs/appleutility/CAComponent.cpp257
-rw-r--r--libs/appleutility/CAComponent.h120
-rw-r--r--libs/appleutility/CAComponentDescription.cpp123
-rw-r--r--libs/appleutility/CAComponentDescription.h148
-rw-r--r--libs/appleutility/CAConditionalMacros.h74
-rw-r--r--libs/appleutility/CADebugMacros.cpp84
-rw-r--r--libs/appleutility/CADebugMacros.h414
-rw-r--r--libs/appleutility/CAMath.h64
-rw-r--r--libs/appleutility/CAReferenceCounted.h83
-rw-r--r--libs/appleutility/CAStreamBasicDescription.cpp520
-rw-r--r--libs/appleutility/CAStreamBasicDescription.h224
-rw-r--r--libs/appleutility/CAXException.cpp45
-rw-r--r--libs/appleutility/CAXException.h158
-rw-r--r--libs/appleutility/SConscript22
35 files changed, 0 insertions, 8646 deletions
diff --git a/libs/appleutility/AUOutputBL.cpp b/libs/appleutility/AUOutputBL.cpp
deleted file mode 100644
index 8509f46288..0000000000
--- a/libs/appleutility/AUOutputBL.cpp
+++ /dev/null
@@ -1,160 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- AUOutputBL.h
-
-=============================================================================*/
-#include "AUOutputBL.h"
-
-/*
-struct AudioBufferList
-{
- UInt32 mNumberBuffers;
- AudioBuffer mBuffers[1];
-};
-struct AudioBuffer
-{
- UInt32 mNumberChannels; // number of interleaved channels in the buffer
- UInt32 mDataByteSize; // the size of the buffer pointed to by mData
- void* mData; // the pointer to the buffer
-};
-*/
-
-AUOutputBL::AUOutputBL (const CAStreamBasicDescription &inDesc, UInt32 inDefaultNumFrames)
- : mFormat (inDesc),
- mBufferMemory(NULL),
- mBufferList (NULL),
- mNumberBuffers (0), // keep this here, so can ensure integrity of ABL
- mBufferSize (0),
- mFrames(inDefaultNumFrames)
-{
- mNumberBuffers = mFormat.IsInterleaved() ? 1 : mFormat.NumberChannels();
- mBufferList = reinterpret_cast<AudioBufferList*>(new Byte[sizeof(UInt32) + (mNumberBuffers * sizeof(AudioBuffer))]);
-}
-
-AUOutputBL::~AUOutputBL()
-{
- if (mBufferMemory)
- delete[] mBufferMemory;
-
- if (mBufferList)
- delete [] mBufferList;
-}
-
-void AUOutputBL::Prepare (UInt32 inNumFrames, bool inWantNullBufferIfAllocated)
-{
- UInt32 channelsPerBuffer = mFormat.IsInterleaved() ? mFormat.NumberChannels() : 1;
-
- if (mBufferMemory == NULL || inWantNullBufferIfAllocated)
- {
- mBufferList->mNumberBuffers = mNumberBuffers;
- AudioBuffer *buf = &mBufferList->mBuffers[0];
- for (UInt32 i = 0; i < mNumberBuffers; ++i, ++buf) {
- buf->mNumberChannels = channelsPerBuffer;
- buf->mDataByteSize = mFormat.FramesToBytes (inNumFrames);
- buf->mData = NULL;
- }
- }
- else
- {
- UInt32 nBytes = mFormat.FramesToBytes (inNumFrames);
- if ((nBytes * mNumberBuffers) > AllocatedBytes())
- throw OSStatus(-10874);//(kAudioUnitErr_TooManyFramesToProcess);
-
- mBufferList->mNumberBuffers = mNumberBuffers;
- AudioBuffer *buf = &mBufferList->mBuffers[0];
- Byte* p = mBufferMemory;
- for (UInt32 i = 0; i < mNumberBuffers; ++i, ++buf) {
- buf->mNumberChannels = channelsPerBuffer;
- buf->mDataByteSize = nBytes;
- buf->mData = p;
- p += mBufferSize;
- }
- }
-}
-
-
-void AUOutputBL::Allocate (UInt32 inNumFrames)
-{
- if (inNumFrames)
- {
- UInt32 nBytes = mFormat.FramesToBytes (inNumFrames);
-
- if (nBytes <= AllocatedBytes())
- return;
-
- // align successive buffers for Altivec and to take alternating
- // cache line hits by spacing them by odd multiples of 16
- if (mNumberBuffers > 1)
- nBytes = (nBytes + (0x10 - (nBytes & 0xF))) | 0x10;
-
- mBufferSize = nBytes;
-
- UInt32 memorySize = mBufferSize * mNumberBuffers;
- Byte *newMemory = new Byte[memorySize];
- memset(newMemory, 0, memorySize); // make buffer "hot"
-
- Byte *oldMemory = mBufferMemory;
- mBufferMemory = newMemory;
- delete[] oldMemory;
-
- mFrames = inNumFrames;
- }
- else
- {
- if (mBufferMemory) {
- delete [] mBufferMemory;
- mBufferMemory = NULL;
- }
- mBufferSize = 0;
- mFrames = 0;
- }
-}
-
-#if DEBUG
-void AUOutputBL::Print()
-{
- printf ("AUOutputBL::Print\n");
- mFormat.Print();
- printf ("Num Buffers:%ld, mFrames:%ld, allocatedMemory:%c\n", mBufferList->mNumberBuffers, mFrames, (mBufferMemory != NULL ? 'T' : 'F'));
- AudioBuffer *buf = &mBufferList->mBuffers[0];
- for (UInt32 i = 0; i < mBufferList->mNumberBuffers; ++i, ++buf)
- printf ("\tBuffer:%ld, Size:%ld, Chans:%ld, Buffer:%X\n", i, buf->mDataByteSize, buf->mNumberChannels, int(buf->mData));
-}
-#endif
-
diff --git a/libs/appleutility/AUOutputBL.h b/libs/appleutility/AUOutputBL.h
deleted file mode 100644
index b80588abac..0000000000
--- a/libs/appleutility/AUOutputBL.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- AUOutputBL.h
-
-=============================================================================*/
-
-#ifndef __AUOutputBL_h__
-#define __AUOutputBL_h__
-
-#include "CAStreamBasicDescription.h"
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <CoreServices/CoreServices.h>
-#else
- #include <AssertMacros.h>
-#endif
-
-// ____________________________________________________________________________
-//
-// AUOutputBL - Simple Buffer List wrapper targetted to use with retrieving AU output
-// Works in one of two ways (both adjustable)... Can use it with NULL pointers, or allocate
-// memory to receive the data in.
-
-// Before using this with any call to AudioUnitRender, it needs to be Prepared
-// as some calls to AudioUnitRender can reset the ABL
-
-class AUOutputBL {
-public:
-
- // you CANNOT use one of these - it will crash!
-// AUOutputBL ();
-
- // this is the constructor that you use
- // it can't be reset once you've constructed it
- AUOutputBL (const CAStreamBasicDescription &inDesc, UInt32 inDefaultNumFrames = 512);
- ~AUOutputBL();
-
- void Prepare ()
- {
- Prepare (mFrames);
- }
-
- // this version can throw if this is an allocted ABL and inNumFrames is > AllocatedFrames()
- // you can set the bool to true if you want a NULL buffer list even if allocated
- // inNumFrames must be a valid number (will throw if inNumFrames is 0)
- void Prepare (UInt32 inNumFrames, bool inWantNullBufferIfAllocated = false);
-
- AudioBufferList* ABL() { return mBufferList; }
-
- // You only need to call this if you want to allocate a buffer list
- // if you want an empty buffer list, just call Prepare()
- // if you want to dispose previously allocted memory, pass in 0
- // then you either have an empty buffer list, or you can re-allocate
- // Memory is kept around if an Allocation request is less than what is currently allocated
- void Allocate (UInt32 inNumberFrames);
-
- UInt32 AllocatedFrames() const { return mFrames; }
-
- const CAStreamBasicDescription& GetFormat() const { return mFormat; }
-
-#if DEBUG
- void Print();
-#endif
-
-private:
- UInt32 AllocatedBytes () const { return (mBufferSize * mNumberBuffers); }
-
- CAStreamBasicDescription mFormat;
- Byte* mBufferMemory;
- AudioBufferList* mBufferList;
- UInt32 mNumberBuffers;
- UInt32 mBufferSize;
- UInt32 mFrames;
-
-// don't want to copy these.. can if you want, but more code to write!
- AUOutputBL (const AUOutputBL &c) {}
- AUOutputBL& operator= (const AUOutputBL& c) { return *this; }
-};
-
-#endif // __AUOutputBL_h__
diff --git a/libs/appleutility/AUParamInfo.cpp b/libs/appleutility/AUParamInfo.cpp
deleted file mode 100644
index 9b0046166f..0000000000
--- a/libs/appleutility/AUParamInfo.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- AUParamInfo.cpp
-
-=============================================================================*/
-#include "AUParamInfo.h"
-#include "CAXException.h"
-
-AUParamInfo::AUParamInfo (AudioUnit inAU,
- bool inIncludeExpert,
- bool inIncludeReadOnly,
- AudioUnitScope inScope,
- AudioUnitElement inElement)
- : mAU (inAU),
- mNumParams (0),
- mParamListID(NULL),
- mScope (inScope),
- mElement (inElement)
-{
- UInt32 size;
- OSStatus result = AudioUnitGetPropertyInfo(mAU, kAudioUnitProperty_ParameterList, inScope, mElement, &size, NULL);
- if (size == 0 || result) return;
-
- int nparams = size / sizeof(AudioUnitPropertyID);
- mParamListID = new AudioUnitParameterID[nparams];
-
- memset (mParamListID, 0xFF, size);
-
- AudioUnitParameterID *paramList = new AudioUnitParameterID[nparams];
-
- result = AudioUnitGetProperty(mAU, kAudioUnitProperty_ParameterList, mScope, mElement, paramList, &size);
- if (result) {
- delete [] mParamListID;
- delete [] paramList;
- mParamListID = NULL;
- return;
- }
-
- ParameterMap params;
- for (int i = 0; i < nparams; ++i)
- {
- CAAUParameter auvp (mAU, paramList[i], mScope, mElement); // took out only using global scope in CAAUParameter creation
- const AudioUnitParameterInfo &paramInfo = auvp.ParamInfo();
-
- // don't include if parameter can't be read or written
- if (!(paramInfo.flags & kAudioUnitParameterFlag_IsWritable)
- && !(paramInfo.flags & kAudioUnitParameterFlag_IsReadable))
- continue;
-
- // only include if expert params wanted
- if (!inIncludeExpert && auvp.IsExpert())
- continue;
-
- // only include if read only params are wanted
- if (!(paramInfo.flags & kAudioUnitParameterFlag_IsWritable)
- && (paramInfo.flags & kAudioUnitParameterFlag_IsReadable))
- {
- if (!inIncludeReadOnly)
- continue;
- }
-
- mParamListID[mNumParams] = paramList[i];
- mNumParams++;
-
- // ok - if we're here, then we have a parameter we are going to display.
- UInt32 clump = 0;
- auvp.GetClumpID (clump);
- mParams[clump].push_back (auvp);
- }
-
- delete [] paramList;
-}
-
-AUParamInfo::~AUParamInfo()
-{
- delete [] mParamListID;
-}
-
-UInt32 AUParamInfo::NumParamsForClump (UInt32 inClump) const
-{
- ParameterMap::const_iterator it = mParams.find(inClump);
- if (it != mParams.end())
- return (*it).second.size();
- return 0;
-}
-
-const CAAUParameter* AUParamInfo::GetParamInfo (AudioUnitParameterID inParamID) const
-{
- for (ParameterMap::const_iterator it = mParams.begin(); it != mParams.end(); ++it) {
- const ParameterList &list = (*it).second;
- for (ParameterList::const_iterator iter = list.begin(); iter != list.end(); ++iter) {
- if (inParamID == (*iter).mParameterID) {
- return &(*iter);
- }
- }
- }
- return NULL;
-}
diff --git a/libs/appleutility/AUParamInfo.h b/libs/appleutility/AUParamInfo.h
deleted file mode 100644
index 9d342080b1..0000000000
--- a/libs/appleutility/AUParamInfo.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- AUParamInfo.h
-
-=============================================================================*/
-#include <map>
-#include <vector>
-#include <AudioUnit/AudioUnit.h>
-#include "CAAUParameter.h"
-
-/*
- The ParameterMap returned by the Map() method is a map where
- - the key is the clumpID
- - the value is a ParameterList (vector<CAAUParameter>)
-
- If you have parameters on multiple scopes (or elements within a scope), then you should create one of these
- for each scope-element pair
-*/
-
-class AUParamInfo {
-
-public:
- typedef std::vector <CAAUParameter> ParameterList;
- typedef std::map <UInt32, ParameterList, std::less<UInt32> > ParameterMap;
-
-
-
- AUParamInfo (AudioUnit inAU,
- bool inIncludeExpert,
- bool inIncludeReadOnly,
- AudioUnitScope inScope = kAudioUnitScope_Global,
- AudioUnitElement inElement = 0);
-
- ~AUParamInfo();
-
- const ParameterMap& Map () const { return mParams; }
-
- // some convenience methods
- UInt32 NumParams () const { return mNumParams; }
-
- AudioUnitParameterID ParamID (UInt32 inIndex) const
- {
- if (inIndex < mNumParams) return mParamListID[inIndex];
- return 0xFFFFFFFF;
- }
-
- UInt32 NumClumps () const { return mParams.size(); }
-
- UInt32 NumParamsForClump (UInt32 inClump) const;
-
- // returns NULL if there's no info for the parameter
- const CAAUParameter* GetParamInfo (AudioUnitParameterID inParamID) const;
-
- AudioUnitScope GetScope () const { return mScope; }
- AudioUnitElement GetElement () const { return mElement; }
-
-private:
-
- AudioUnit mAU;
- UInt32 mNumParams;
- AudioUnitParameterID * mParamListID;
-
- ParameterMap mParams;
- AudioUnitScope mScope;
- AudioUnitElement mElement;
-
- // disallow
- AUParamInfo () {}
- AUParamInfo (const AUParamInfo &c) {}
- AUParamInfo& operator= (const AUParamInfo& c) { return *this; }
-};
diff --git a/libs/appleutility/CAAUParameter.cpp b/libs/appleutility/CAAUParameter.cpp
deleted file mode 100644
index b99b6ab749..0000000000
--- a/libs/appleutility/CAAUParameter.cpp
+++ /dev/null
@@ -1,316 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAAUParameter.cpp
-
-=============================================================================*/
-
-#include "CAAUParameter.h"
-
-CAAUParameter::CAAUParameter()
-{
- memset(this, 0, sizeof(CAAUParameter));
-}
-
-CAAUParameter::CAAUParameter(AudioUnit au, AudioUnitParameterID param, AudioUnitScope scope, AudioUnitElement element)
-{
- memset(this, 0, sizeof(CAAUParameter));
- Init (au, param, scope, element);
-}
-
-CAAUParameter::CAAUParameter (AudioUnitParameter &inParam)
-{
- memset(this, 0, sizeof(CAAUParameter));
- Init (inParam.mAudioUnit, inParam.mParameterID, inParam.mScope, inParam.mElement);
-}
-
-CAAUParameter::CAAUParameter(const CAAUParameter &a)
-{
- memset(this, 0, sizeof(CAAUParameter));
- *this = a;
-}
-
-CAAUParameter & CAAUParameter::operator = (const CAAUParameter &a)
-{
- if (mParamName) CFRelease(mParamName);
- if (mParamTag) CFRelease(mParamTag);
- if (mNamedParams) CFRelease(mNamedParams);
-
- memcpy(this, &a, sizeof(CAAUParameter));
-
- if (mParamName) CFRetain(mParamName);
- if (mParamTag) CFRetain(mParamTag);
- if (mNamedParams) CFRetain(mNamedParams);
-
- return *this;
-}
-
-CAAUParameter::~CAAUParameter()
-{
- if (mParamName) CFRelease(mParamName);
- if (mParamTag) CFRelease(mParamTag);
- if (mNamedParams) CFRelease (mNamedParams);
-}
-
-void CAAUParameter::Init (AudioUnit au, AudioUnitParameterID param, AudioUnitScope scope, AudioUnitElement element)
-{
- mAudioUnit = au;
- mParameterID = param;
- mScope = scope;
- mElement = element;
-
- UInt32 propertySize = sizeof(mParamInfo);
- OSStatus err = AudioUnitGetProperty(au, kAudioUnitProperty_ParameterInfo,
- scope, param, &mParamInfo, &propertySize);
- if (err)
- memset(&mParamInfo, 0, sizeof(mParamInfo));
- if (mParamInfo.flags & kAudioUnitParameterFlag_HasCFNameString) {
- mParamName = mParamInfo.cfNameString;
- if (!(mParamInfo.flags & kAudioUnitParameterFlag_CFNameRelease))
- CFRetain (mParamName);
- } else
- mParamName = CFStringCreateWithCString(NULL, mParamInfo.name, kCFStringEncodingUTF8);
-
- char* str = 0;
- switch (mParamInfo.unit)
- {
- case kAudioUnitParameterUnit_Boolean:
- str = "T/F";
- break;
- case kAudioUnitParameterUnit_Percent:
- case kAudioUnitParameterUnit_EqualPowerCrossfade:
- str = "%";
- break;
- case kAudioUnitParameterUnit_Seconds:
- str = "Secs";
- break;
- case kAudioUnitParameterUnit_SampleFrames:
- str = "Samps";
- break;
- case kAudioUnitParameterUnit_Phase:
- case kAudioUnitParameterUnit_Degrees:
- str = "Degr.";
- break;
- case kAudioUnitParameterUnit_Hertz:
- str = "Hz";
- break;
- case kAudioUnitParameterUnit_Cents:
- case kAudioUnitParameterUnit_AbsoluteCents:
- str = "Cents";
- break;
- case kAudioUnitParameterUnit_RelativeSemiTones:
- str = "S-T";
- break;
- case kAudioUnitParameterUnit_MIDINoteNumber:
- case kAudioUnitParameterUnit_MIDIController:
- str = "MIDI";
- //these are inclusive, so add one value here
- mNumIndexedParams = short(mParamInfo.maxValue+1 - mParamInfo.minValue);
- break;
- case kAudioUnitParameterUnit_Decibels:
- str = "dB";
- break;
- case kAudioUnitParameterUnit_MixerFaderCurve1:
- case kAudioUnitParameterUnit_LinearGain:
- str = "Gain";
- break;
- case kAudioUnitParameterUnit_Pan:
- str = "L/R";
- break;
- case kAudioUnitParameterUnit_Meters:
- str = "Mtrs";
- break;
- case kAudioUnitParameterUnit_Octaves:
- str = "8ve";
- break;
- case kAudioUnitParameterUnit_BPM:
- str = "BPM";
- break;
- case kAudioUnitParameterUnit_Beats:
- str = "Beats";
- break;
- case kAudioUnitParameterUnit_Milliseconds:
- str = "msecs";
- break;
- case kAudioUnitParameterUnit_Ratio:
- str = "ratio";
- break;
- case kAudioUnitParameterUnit_Indexed:
- {
- propertySize = sizeof(mNamedParams);
- err = AudioUnitGetProperty (au,
- kAudioUnitProperty_ParameterValueStrings,
- scope,
- param,
- &mNamedParams,
- &propertySize);
- if (!err && mNamedParams) {
- mNumIndexedParams = CFArrayGetCount(mNamedParams);
- } else {
- //these are inclusive, so add one value here
- mNumIndexedParams = short(mParamInfo.maxValue+1 - mParamInfo.minValue);
- }
- str = NULL;
- }
- break;
- case kAudioUnitParameterUnit_CustomUnit:
- {
- CFStringRef unitName = mParamInfo.unitName;
- static char paramStr[256];
- CFStringGetCString (unitName, paramStr, 256, kCFStringEncodingUTF8);
- if (mParamInfo.flags & kAudioUnitParameterFlag_CFNameRelease)
- CFRelease (unitName);
- str = paramStr;
- break;
- }
- case kAudioUnitParameterUnit_Generic:
- case kAudioUnitParameterUnit_Rate:
- default:
- str = NULL;
- break;
- }
-
- if (str)
- mParamTag = CFStringCreateWithCString(NULL, str, kCFStringEncodingUTF8);
- else
- mParamTag = NULL;
-}
-
-
-Float32 CAAUParameter::GetValue() const
-{
- Float32 value = 0.;
- //OSStatus err =
- AudioUnitGetParameter(mAudioUnit, mParameterID, mScope, mElement, &value);
- return value;
-}
-
-CFStringRef CAAUParameter::GetStringFromValueCopy(const Float32 *value) const
-{
- if (HasNamedParams())
- {
- Float32 val = (value == NULL ? GetValue() : *value);
- int index = int(mParamInfo.minValue) + int(val);
- CFStringRef str = GetParamName (index);
- if (str) {
- CFRetain (str);
- return str;
- }
- }
- else if (ValuesHaveStrings())
- {
- AudioUnitParameterStringFromValue stringValue;
- stringValue.inParamID = mParameterID;
- stringValue.inValue = value;
- stringValue.outString = NULL;
- UInt32 propertySize = sizeof(stringValue);
-
- OSStatus err = AudioUnitGetProperty (mAudioUnit,
- kAudioUnitProperty_ParameterStringFromValue,
- mScope,
- mParameterID,
- &stringValue,
- &propertySize);
-
- if (err == noErr && stringValue.outString != NULL)
- return stringValue.outString;
- }
-
- Float32 val = (value == NULL ? GetValue() : *value);
- char valstr[32];
- AUParameterFormatValue (val, this, valstr, 4);
- return CFStringCreateWithCString(NULL, valstr, kCFStringEncodingUTF8);
-}
-
-Float32 CAAUParameter::GetValueFromString(CFStringRef str) const
-{
- if (ValuesHaveStrings())
- {
- AudioUnitParameterValueFromString valueString;
- valueString.inParamID = mParameterID;
- valueString.inString = str;
- UInt32 propertySize = sizeof(valueString);
-
- OSStatus err = AudioUnitGetProperty (mAudioUnit,
- kAudioUnitProperty_ParameterValueFromString,
- mScope,
- mParameterID,
- &valueString,
- &propertySize);
-
- if (err == noErr) {
- return valueString.outValue;
- }
- }
-
- Float32 paramValue = mParamInfo.defaultValue;
- char valstr[32];
- CFStringGetCString(str, valstr, sizeof(valstr), kCFStringEncodingUTF8);
- sscanf(valstr, "%f", &paramValue);
- return paramValue;
-}
-
-void CAAUParameter::SetValue( AUParameterListenerRef inListener,
- void * inObject,
- Float32 inValue) const
-{
- // clip inValue as: maxValue >= inValue >= minValue before setting
- Float32 valueToSet = inValue;
- if (valueToSet > mParamInfo.maxValue)
- valueToSet = mParamInfo.maxValue;
- if (valueToSet < mParamInfo.minValue)
- valueToSet = mParamInfo.minValue;
-
- AUParameterSet(inListener, inObject, this, valueToSet, 0);
-}
-
-#if DEBUG
-void CAAUParameter::Print() const
-{
- UInt32 clump = 0;
- GetClumpID (clump);
-
- UInt32 len = CFStringGetLength(mParamName);
- char* chars = (char*)malloc (len * 2); // give us plenty of room for unichar chars
- if (!CFStringGetCString (mParamName, chars, len * 2, kCFStringEncodingUTF8))
- chars[0] = 0;
-
- printf ("ID: %ld, Clump: %ld, Name: %s\n", mParameterID, clump, chars);
- free (chars);
-}
-#endif
diff --git a/libs/appleutility/CAAUParameter.h b/libs/appleutility/CAAUParameter.h
deleted file mode 100644
index 4f35b26353..0000000000
--- a/libs/appleutility/CAAUParameter.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAAUParameter.h
-
-=============================================================================*/
-
-#ifndef __CAAUParameter_h__
-#define __CAAUParameter_h__
-
-#include <AudioToolbox/AudioUnitUtilities.h>
-
-// ____________________________________________________________________________
-// CAAUParameter
-// complete parameter specification
- /*! @class CAAUParameter */
-class CAAUParameter : public AudioUnitParameter {
-public:
- /*! @ctor CAAUParameter.0 */
- CAAUParameter();
- /*! @ctor CAAUParameter.1 */
- CAAUParameter(AudioUnit au, AudioUnitParameterID param, AudioUnitScope scope, AudioUnitElement element);
- /*! @ctor CAAUParameter.2 */
- CAAUParameter(AudioUnitParameter &inParam);
- /*! @ctor CAAUParameter.3 */
- CAAUParameter(const CAAUParameter &a);
- /*! @dtor ~CAAUParameter */
- ~CAAUParameter();
-
- /*! @method operator <@ */
- bool operator < (const CAAUParameter &a) const
- {
- return memcmp(this, &a, sizeof(AudioUnitParameter)) < 0;
- }
-
- /*! @method operator ==@ */
- bool operator == (const CAAUParameter &a) const
- {
- return !memcmp(this, &a, sizeof(AudioUnitParameter));
- }
-
- /*! @method operator =@ */
- CAAUParameter & operator = (const CAAUParameter &a);
-
- /*! @method GetValue */
- Float32 GetValue() const;
- /*! @method SetValue */
- void SetValue( AUParameterListenerRef inListener,
- void * inObject,
- Float32 inValue) const;
-
- /*! @method GetName */
- CFStringRef GetName() const { return mParamName; }
- // borrowed reference!
-
- /*! @method GetStringFromValueCopy */
- CFStringRef GetStringFromValueCopy(const Float32 *value = NULL) const;
- // returns a copy of the name of the current parameter value
- // or null if there is no name associated
- // caller must release
- /*! @method ValuesHaveStrings */
- bool ValuesHaveStrings () const
- {
- return (mParamInfo.flags & kAudioUnitParameterFlag_ValuesHaveStrings) != 0;
- }
-
- /*! @method GetValueFromString */
- Float32 GetValueFromString (CFStringRef str) const;
- // caller must release
-
- /*! @method ParamInfo */
- const AudioUnitParameterInfo &
- ParamInfo() const { return mParamInfo; }
-
- /*! @method GetParamTag */
- CFStringRef GetParamTag() const { return mParamTag; }
- // this may return null! -
- // in which case there is no descriptive tag for the parameter
-
- /*! @method GetParamName */
- CFStringRef GetParamName (int inIndex) const
- // this can return null if there is no name for the parameter
- {
- return (mNamedParams && inIndex < mNumIndexedParams)
- ? (CFStringRef) CFArrayGetValueAtIndex(mNamedParams, inIndex)
- : 0;
- }
-
- /*! @method GetNumIndexedParams */
- int GetNumIndexedParams () const { return mNumIndexedParams; }
-
- /*! @method IsIndexedParam */
- bool IsIndexedParam () const { return mNumIndexedParams != 0; }
-
- /*! @method HasNamedParams */
- bool HasNamedParams () const { return IsIndexedParam() && mNamedParams; }
-
- /*! @method GetClumpID */
- bool GetClumpID (UInt32 &outClumpID) const
- {
- if (mParamInfo.flags & kAudioUnitParameterFlag_HasClump) {
- outClumpID = mParamInfo.clumpID;
- return true;
- }
- return false;
- }
-
- /*! @method HasDisplayTransformation */
- bool HasDisplayTransformation () const
- {
- return GetAudioUnitParameterDisplayType (mParamInfo.flags);
- }
-
- /*! @method IsExpert */
- bool IsExpert () const
- {
- return mParamInfo.flags & kAudioUnitParameterFlag_ExpertMode;
- }
-#if DEBUG
- void Print () const;
-#endif
-
- // these methods are defined in CAPersistence.cpp
- // they will persist and restore only the scope, element and param ID's of the AudioUnitParameter
- // however, this is sufficient to be able to save/restore a CAAUParameter object
- void Save (CFPropertyListRef &outData) const;
-
- static void Save (const AudioUnitParameter &inParam, CFPropertyListRef &outData);
-
- static OSStatus Restore (const CFPropertyListRef inData, AudioUnitParameter &outParam);
-
-protected:
- // cached parameter info
- /*! @var mParamInfo */
- AudioUnitParameterInfo mParamInfo;
- /*! @var mParamName */
- CFStringRef mParamName;
- /*! @var mParamTag */
- CFStringRef mParamTag;
- /*! @var mNumIndexedParams */
- short mNumIndexedParams;
- /*! @var mNamedParams */
- CFArrayRef mNamedParams;
-
-private:
- void Init (AudioUnit au, AudioUnitParameterID param, AudioUnitScope scope, AudioUnitElement element);
-
-};
-
-
-
-#endif // __CAAUParameter_h__
diff --git a/libs/appleutility/CAAudioChannelLayout.cpp b/libs/appleutility/CAAudioChannelLayout.cpp
deleted file mode 100644
index 585ff44fb7..0000000000
--- a/libs/appleutility/CAAudioChannelLayout.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAAudioChannelLayout.cpp
-
-=============================================================================*/
-
-//=============================================================================
-// Includes
-//=============================================================================
-
-// Self Include
-#include "CAAudioChannelLayout.h"
-#include <stdlib.h>
-#include <string.h>
-
-//=============================================================================
-// CAAudioChannelLayout
-//=============================================================================
-
-AudioChannelLayout* CAAudioChannelLayout::Create(UInt32 inNumberChannelDescriptions)
-{
- UInt32 theSize = CalculateByteSize(inNumberChannelDescriptions);
- AudioChannelLayout* theAnswer = static_cast<AudioChannelLayout*>(calloc(1, theSize));
- if(theAnswer != NULL)
- {
- SetAllToUnknown(*theAnswer, inNumberChannelDescriptions);
- }
- return theAnswer;
-}
-
-void CAAudioChannelLayout::Destroy(AudioChannelLayout* inChannelLayout)
-{
- free(inChannelLayout);
-}
-
-void CAAudioChannelLayout::SetAllToUnknown(AudioChannelLayout& outChannelLayout, UInt32 inNumberChannelDescriptions)
-{
- outChannelLayout.mChannelLayoutTag = kAudioChannelLayoutTag_UseChannelDescriptions;
- outChannelLayout.mChannelBitmap = 0;
- outChannelLayout.mNumberChannelDescriptions = inNumberChannelDescriptions;
- for(UInt32 theChannelIndex = 0; theChannelIndex < inNumberChannelDescriptions; ++theChannelIndex)
- {
- outChannelLayout.mChannelDescriptions[theChannelIndex].mChannelLabel = kAudioChannelLabel_Unknown;
- outChannelLayout.mChannelDescriptions[theChannelIndex].mChannelFlags = 0;
- outChannelLayout.mChannelDescriptions[theChannelIndex].mCoordinates[0] = 0;
- outChannelLayout.mChannelDescriptions[theChannelIndex].mCoordinates[1] = 0;
- outChannelLayout.mChannelDescriptions[theChannelIndex].mCoordinates[2] = 0;
- }
-}
-
-bool operator== (const AudioChannelLayout &x, const AudioChannelLayout &y)
-{
- // compare based on the number of channel descriptions present
- // (this may be too strict a comparison if all you care about are matching layout tags)
- UInt32 theSize1 = CAAudioChannelLayout::CalculateByteSize(x.mNumberChannelDescriptions);
- UInt32 theSize2 = CAAudioChannelLayout::CalculateByteSize(y.mNumberChannelDescriptions);
-
- if (theSize1 != theSize2)
- return false;
-
- return !memcmp (&x, &y, theSize1);
-}
-
-// counting the one bits in a word
-inline UInt32 CountOnes(UInt32 x)
-{
- // secret magic algorithm for counting bits in a word.
- UInt32 t;
- x = x - ((x >> 1) & 0x55555555);
- t = ((x >> 2) & 0x33333333);
- x = (x & 0x33333333) + t;
- x = (x + (x >> 4)) & 0x0F0F0F0F;
- x = x + (x << 8);
- x = x + (x << 16);
- return x >> 24;
-}
-
-UInt32 CAAudioChannelLayout::NumberChannels (const AudioChannelLayout& inLayout)
-{
- if (inLayout.mChannelLayoutTag == kAudioChannelLayoutTag_UseChannelDescriptions)
- return inLayout.mNumberChannelDescriptions;
-
- if (inLayout.mChannelLayoutTag == kAudioChannelLayoutTag_UseChannelBitmap)
- return CountOnes (inLayout.mChannelBitmap);
-
- return AudioChannelLayoutTag_GetNumberOfChannels(inLayout.mChannelLayoutTag);
-}
-
-void CAShowAudioChannelLayout (FILE* file, const AudioChannelLayout *layout)
-{
- fprintf (file, "\tTag=0x%lX, ", layout->mChannelLayoutTag);
- if (layout->mChannelLayoutTag == kAudioChannelLayoutTag_UseChannelBitmap)
- fprintf (file, "Using Bitmap:0x%lX\n", layout->mChannelBitmap);
- else {
- fprintf (file, "Num Chan Descs=%ld\n", layout->mNumberChannelDescriptions);
- const AudioChannelDescription *desc = layout->mChannelDescriptions;
- for (unsigned int i = 0; i < layout->mNumberChannelDescriptions; ++i, ++desc) {
- fprintf (file, "\t\tLabel=%ld, Flags=0x%lX, ", desc->mChannelLabel, desc->mChannelFlags);
- fprintf (file, "[az=%f,el=%f,dist=%f]\n", desc->mCoordinates[0], desc->mCoordinates[1], desc->mCoordinates[2]);
- }
- }
-}
diff --git a/libs/appleutility/CAAudioChannelLayout.h b/libs/appleutility/CAAudioChannelLayout.h
deleted file mode 100644
index 8f995b8614..0000000000
--- a/libs/appleutility/CAAudioChannelLayout.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAAudioChannelLayout.h
-
-=============================================================================*/
-#if !defined(__CAAudioChannelLayout_h__)
-#define __CAAudioChannelLayout_h__
-
-//=============================================================================
-// Includes
-//=============================================================================
-
-// System Includes
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <CoreAudio/CoreAudioTypes.h>
- #include <CoreFoundation/CoreFoundation.h>
-#else
- #include <CoreAudioTypes.h>
- #include <CoreFoundation.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if !HAL_Build
- #include "CAReferenceCounted.h"
-#endif
-
-//=============================================================================
-// CAAudioChannelLayout
-//=============================================================================
-
-bool operator== (const AudioChannelLayout &x, const AudioChannelLayout &y);
-
-extern "C" void CAShowAudioChannelLayout (FILE* file, const AudioChannelLayout *layout);
-
-class CAAudioChannelLayout
-{
-// static Construction/Destruction
-public:
- static AudioChannelLayout* Create(UInt32 inNumberChannelDescriptions);
- static void Destroy(AudioChannelLayout* inChannelLayout);
- static UInt32 CalculateByteSize(UInt32 inNumberChannelDescriptions) {
- return offsetof(AudioChannelLayout, mChannelDescriptions) + inNumberChannelDescriptions * sizeof(AudioChannelDescription);
- }
- static void SetAllToUnknown(AudioChannelLayout& outChannelLayout, UInt32 inNumberChannelDescriptions);
- static UInt32 NumberChannels(const AudioChannelLayout& inLayout);
-
-#if !HAL_Build
-// object methods
-public:
- CAAudioChannelLayout ();
-
- CAAudioChannelLayout (UInt32 inNumberChannels, bool inChooseSurround);
- // if inChooseSurround is false, then symmetrical speaker arrangements
- // are chosen in place of surround layouts if there is a choice
- // This call chooses layouts based on the expected defaults in
- // AudioUnit usage
- CAAudioChannelLayout (AudioChannelLayoutTag inTag);
- CAAudioChannelLayout (const CAAudioChannelLayout &c);
- CAAudioChannelLayout (const AudioChannelLayout* inChannelLayout);
- ~CAAudioChannelLayout();
-
- CAAudioChannelLayout& operator= (const AudioChannelLayout* inChannelLayout);
- CAAudioChannelLayout& operator= (const CAAudioChannelLayout& c);
- bool operator== (const CAAudioChannelLayout &c) const;
-
- void SetWithTag(AudioChannelLayoutTag inTag);
-
- bool IsValid() const { return NumberChannels() > 0; }
- UInt32 Size() const { return mLayoutHolder ? mLayoutHolder->Size() : 0; }
-
- UInt32 NumberChannels() const { return NumberChannels(Layout()); }
-
- AudioChannelLayoutTag Tag() const { return Layout().mChannelLayoutTag; }
- const AudioChannelLayout& Layout() const { return mLayoutHolder->Layout(); }
- operator const AudioChannelLayout *() const { return &Layout(); }
-
- void Print () const { Print (stdout); }
- void Print (FILE* file) const;
-
- OSStatus Save (CFPropertyListRef *outData) const;
- OSStatus Restore (CFPropertyListRef &inData);
-
-private:
- class ACLRefCounter : public CAReferenceCounted {
- public:
- ACLRefCounter (UInt32 inDataSize)
- {
- if (inDataSize < offsetof(AudioChannelLayout, mChannelDescriptions))
- inDataSize = offsetof(AudioChannelLayout, mChannelDescriptions);
-
- mLayout = static_cast<AudioChannelLayout*>(malloc (inDataSize));
- memset (mLayout, 0, inDataSize);
- mByteSize = inDataSize;
- }
-
- const AudioChannelLayout & Layout() const { return *mLayout; }
-
- UInt32 Size () const { return mByteSize; }
-
- private:
- AudioChannelLayout *mLayout;
- UInt32 mByteSize;
-
- // only the constructors can change the actual state of the layout
- friend CAAudioChannelLayout::CAAudioChannelLayout (UInt32 inNumberChannels, bool inChooseSurround);
- friend OSStatus CAAudioChannelLayout::Restore (CFPropertyListRef &inData);
- friend CAAudioChannelLayout& CAAudioChannelLayout::operator= (const AudioChannelLayout* inChannelLayout);
- friend void CAAudioChannelLayout::SetWithTag(AudioChannelLayoutTag inTag);
-
- AudioChannelLayout * GetLayout() { return mLayout; }
- ~ACLRefCounter() { if (mLayout) { free(mLayout); mLayout = NULL; } }
-
- private:
- ACLRefCounter () : mLayout(NULL) { }
- ACLRefCounter(const ACLRefCounter& c) : mLayout(NULL) { }
- ACLRefCounter& operator=(const ACLRefCounter& c) { return *this; }
- };
-
- ACLRefCounter *mLayoutHolder;
-#endif // HAL_Build
-
-};
-
-#endif
diff --git a/libs/appleutility/CAAudioChannelLayoutObject.cpp b/libs/appleutility/CAAudioChannelLayoutObject.cpp
deleted file mode 100644
index 8c4030048d..0000000000
--- a/libs/appleutility/CAAudioChannelLayoutObject.cpp
+++ /dev/null
@@ -1,199 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAAudioChannelLayoutObject.cpp
-
-=============================================================================*/
-
-#include "CAAudioChannelLayout.h"
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <CoreServices/CoreServices.h>
- #include <AudioToolbox/AudioFormat.h>
-#else
- #include <CoreServices.h>
- #include <AudioFormat.h>
-#endif
-
-
-CAAudioChannelLayout::CAAudioChannelLayout ()
-{
- mLayoutHolder = new ACLRefCounter (offsetof(AudioChannelLayout, mChannelDescriptions));
-}
-
-//=============================================================================
-// CAAudioChannelLayout::CAAudioChannelLayout
-//=============================================================================
-CAAudioChannelLayout::CAAudioChannelLayout (UInt32 inNumberChannels, bool inChooseSurround)
-{
- // this chooses default layouts based on the number of channels...
- UInt32 theSize = CalculateByteSize (inNumberChannels);
-
- mLayoutHolder = new ACLRefCounter (theSize);
-
- AudioChannelLayout* layout = mLayoutHolder->GetLayout();
-
- layout->mNumberChannelDescriptions = inNumberChannels;
-
- switch (inNumberChannels)
- {
- case 1:
- layout->mChannelLayoutTag = kAudioChannelLayoutTag_Mono;
- break;
- case 2:
- layout->mChannelLayoutTag = inChooseSurround ? kAudioChannelLayoutTag_Binaural : kAudioChannelLayoutTag_Stereo;
- break;
- case 4:
- layout->mChannelLayoutTag = inChooseSurround ? kAudioChannelLayoutTag_Ambisonic_B_Format : kAudioChannelLayoutTag_AudioUnit_4;
- break;
- case 5:
- layout->mChannelLayoutTag = inChooseSurround ? kAudioChannelLayoutTag_AudioUnit_5_0 : kAudioChannelLayoutTag_AudioUnit_5;
- break;
- case 6:
- layout->mChannelLayoutTag = inChooseSurround ? kAudioChannelLayoutTag_AudioUnit_6_0 : kAudioChannelLayoutTag_AudioUnit_6;
- break;
- case 7:
- layout->mChannelLayoutTag = kAudioChannelLayoutTag_AudioUnit_7_0;
- break;
- case 8:
- layout->mChannelLayoutTag = kAudioChannelLayoutTag_AudioUnit_8;
- break;
- default:
- // here we have a "broken" layout, in the sense that we haven't any idea how to lay this out
- // the layout itself is all set to zeros
- // ### no longer true ###
- SetAllToUnknown(*layout, inNumberChannels);
- break;
- }
-}
-
-//=============================================================================
-// CAAudioChannelLayout::CAAudioChannelLayout
-//=============================================================================
-CAAudioChannelLayout::CAAudioChannelLayout (AudioChannelLayoutTag inLayoutTag)
- : mLayoutHolder(NULL)
-{
- SetWithTag(inLayoutTag);
-}
-
-//=============================================================================
-// CAAudioChannelLayout::CAAudioChannelLayout
-//=============================================================================
-CAAudioChannelLayout::CAAudioChannelLayout (const CAAudioChannelLayout &c)
- : mLayoutHolder(NULL)
-{
- *this = c;
-}
-
-
-//=============================================================================
-// CAAudioChannelLayout::AudioChannelLayout
-//=============================================================================
-CAAudioChannelLayout::CAAudioChannelLayout (const AudioChannelLayout* inChannelLayout)
- : mLayoutHolder(NULL)
-{
- *this = inChannelLayout;
-}
-
-//=============================================================================
-// CAAudioChannelLayout::~CAAudioChannelLayout
-//=============================================================================
-CAAudioChannelLayout::~CAAudioChannelLayout ()
-{
- if (mLayoutHolder) {
- mLayoutHolder->release();
- mLayoutHolder = NULL;
- }
-}
-
-//=============================================================================
-// CAAudioChannelLayout::CAAudioChannelLayout
-//=============================================================================
-CAAudioChannelLayout& CAAudioChannelLayout::operator= (const CAAudioChannelLayout &c)
-{
- if (mLayoutHolder != c.mLayoutHolder) {
- if (mLayoutHolder)
- mLayoutHolder->release();
-
- if ((mLayoutHolder = c.mLayoutHolder) != NULL)
- mLayoutHolder->retain();
- }
-
- return *this;
-}
-
-CAAudioChannelLayout& CAAudioChannelLayout::operator= (const AudioChannelLayout* inChannelLayout)
-{
- if (mLayoutHolder)
- mLayoutHolder->release();
-
- UInt32 theSize = CalculateByteSize (inChannelLayout->mNumberChannelDescriptions);
-
- mLayoutHolder = new ACLRefCounter (theSize);
-
- memcpy(mLayoutHolder->mLayout, inChannelLayout, theSize);
- return *this;
-}
-
-void CAAudioChannelLayout::SetWithTag(AudioChannelLayoutTag inTag)
-{
- if (mLayoutHolder)
- mLayoutHolder->release();
-
- mLayoutHolder = new ACLRefCounter(offsetof(AudioChannelLayout, mChannelDescriptions[0]));
- AudioChannelLayout* layout = mLayoutHolder->GetLayout();
- layout->mChannelLayoutTag = inTag;
-}
-
-//=============================================================================
-// CAAudioChannelLayout::operator==
-//=============================================================================
-bool CAAudioChannelLayout::operator== (const CAAudioChannelLayout &c) const
-{
- if (mLayoutHolder == c.mLayoutHolder)
- return true;
- return Layout() == c.Layout();
-}
-
-//=============================================================================
-// CAAudioChannelLayout::Print
-//=============================================================================
-void CAAudioChannelLayout::Print (FILE* file) const
-{
- CAShowAudioChannelLayout (file, &Layout());
-}
-
diff --git a/libs/appleutility/CAAudioFile.cpp b/libs/appleutility/CAAudioFile.cpp
deleted file mode 100644
index e1e39b0ec9..0000000000
--- a/libs/appleutility/CAAudioFile.cpp
+++ /dev/null
@@ -1,1241 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAAudioFile.cpp
-
-=============================================================================*/
-
-#include "CAAudioFile.h"
-
-#if !CAAF_USE_EXTAUDIOFILE
-
-#include "CAXException.h"
-#include <algorithm>
-#include "CAHostTimeBase.h"
-#include "CADebugMacros.h"
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <AudioToolbox/AudioToolbox.h>
-#else
- #include <AudioFormat.h>
-#endif
-
-#if DEBUG
- //#define VERBOSE_IO 1
- //#define VERBOSE_CONVERTER 1
- //#define VERBOSE_CHANNELMAP 1
- //#define LOG_FUNCTION_ENTRIES 1
-
- #if VERBOSE_CHANNELMAP
- #include "CAChannelLayouts.h" // this is in Source/Tests/AudioFileTools/Utility
- #endif
-#endif
-
-#if LOG_FUNCTION_ENTRIES
- class FunctionLogger {
- public:
- FunctionLogger(const char *name, const char *fmt=NULL, ...) : mName(name) {
- Indent();
- printf("-> %s ", name);
- if (fmt) {
- va_list args;
- va_start(args, fmt);
- vprintf(fmt, args);
- va_end(args);
- }
- printf("\n");
- ++sIndent;
- }
- ~FunctionLogger() {
- --sIndent;
- Indent();
- printf("<- %s\n", mName);
- if (sIndent == 0)
- printf("\n");
- }
-
- static void Indent() {
- for (int i = sIndent; --i >= 0; ) {
- putchar(' '); putchar(' ');
- }
- }
-
- const char *mName;
- static int sIndent;
- };
- int FunctionLogger::sIndent = 0;
-
- #define LOG_FUNCTION(name, format, ...) FunctionLogger _flog(name, format, ## __VA_ARGS__);
-#else
- #define LOG_FUNCTION(name, format, foo)
-#endif
-
-static const UInt32 kDefaultIOBufferSizeBytes = 0x10000;
-
-#if CAAUDIOFILE_PROFILE
- #define StartTiming(af, starttime) UInt64 starttime = af->mProfiling ? CAHostTimeBase::GetTheCurrentTime() : 0
- #define ElapsedTime(af, starttime, counter) if (af->mProfiling) counter += (CAHostTimeBase::GetTheCurrentTime() - starttime)
-#else
- #define StartTiming(af, starttime)
- #define ElapsedTime(af, starttime, counter)
-#endif
-
-#define kNoMoreInputRightNow 'nein'
-
-// _______________________________________________________________________________________
-//
-CAAudioFile::CAAudioFile() :
- mAudioFile(0),
- mUseCache(false),
- mFinishingEncoding(false),
- mMode(kClosed),
- mFileDataOffset(-1),
- mFramesToSkipFollowingSeek(0),
-
- mClientOwnsIOBuffer(false),
- mPacketDescs(NULL),
- mNumPacketDescs(0),
- mConverter(NULL),
- mMagicCookie(NULL),
- mWriteBufferList(NULL)
-#if CAAUDIOFILE_PROFILE
- ,
- mProfiling(false),
- mTicksInConverter(0),
- mTicksInReadInConverter(0),
- mTicksInIO(0),
- mInConverter(false)
-#endif
-{
- mIOBufferList.mBuffers[0].mData = NULL;
- mIOBufferList.mBuffers[0].mDataByteSize = 0;
- mClientMaxPacketSize = 0;
- mIOBufferSizeBytes = kDefaultIOBufferSizeBytes;
-}
-
-// _______________________________________________________________________________________
-//
-CAAudioFile::~CAAudioFile()
-{
- Close();
-}
-
-// _______________________________________________________________________________________
-//
-void CAAudioFile::Close()
-{
- LOG_FUNCTION("CAAudioFile::Close", NULL, NULL);
- if (mMode == kClosed)
- return;
- if (mMode == kWriting)
- FlushEncoder();
- CloseConverter();
- if (mAudioFile != 0 && mOwnOpenFile) {
- AudioFileClose(mAudioFile);
- mAudioFile = 0;
- }
- if (!mClientOwnsIOBuffer) {
- delete[] (Byte *)mIOBufferList.mBuffers[0].mData;
- mIOBufferList.mBuffers[0].mData = NULL;
- mIOBufferList.mBuffers[0].mDataByteSize = 0;
- }
- delete[] mPacketDescs; mPacketDescs = NULL; mNumPacketDescs = 0;
- delete[] mMagicCookie; mMagicCookie = NULL;
- delete mWriteBufferList; mWriteBufferList = NULL;
- mMode = kClosed;
-}
-
-// _______________________________________________________________________________________
-//
-void CAAudioFile::CloseConverter()
-{
- if (mConverter) {
-#if VERBOSE_CONVERTER
- printf("CAAudioFile %p : CloseConverter\n", this);
-#endif
- AudioConverterDispose(mConverter);
- mConverter = NULL;
- }
-}
-
-// =======================================================================================
-
-// _______________________________________________________________________________________
-//
-void CAAudioFile::Open(const FSRef &fsref)
-{
- LOG_FUNCTION("CAAudioFile::Open", "%p", this);
- XThrowIf(mMode != kClosed, kExtAudioFileError_InvalidOperationOrder, "file already open");
- mFSRef = fsref;
- XThrowIfError(AudioFileOpen(&mFSRef, fsRdPerm, 0, &mAudioFile), "open audio file");
- mOwnOpenFile = true;
- mMode = kReading;
- GetExistingFileInfo();
-}
-
-// _______________________________________________________________________________________
-//
-void CAAudioFile::Wrap(AudioFileID fileID, bool forWriting)
-{
- LOG_FUNCTION("CAAudioFile::Wrap", "%p", this);
- XThrowIf(mMode != kClosed, kExtAudioFileError_InvalidOperationOrder, "file already open");
-
- mAudioFile = fileID;
- mOwnOpenFile = false;
- mMode = forWriting ? kPreparingToWrite : kReading;
- GetExistingFileInfo();
- if (forWriting)
- FileFormatChanged();
-}
-
-// _______________________________________________________________________________________
-//
-void CAAudioFile::CreateNew(const FSRef &parentDir, CFStringRef filename, AudioFileTypeID filetype, const AudioStreamBasicDescription &dataFormat, const AudioChannelLayout *layout)
-{
- LOG_FUNCTION("CAAudioFile::CreateNew", "%p", this);
- XThrowIf(mMode != kClosed, kExtAudioFileError_InvalidOperationOrder, "file already open");
-
- mFileDataFormat = dataFormat;
- if (layout) {
- mFileChannelLayout = layout;
-#if VERBOSE_CHANNELMAP
- printf("PrepareNew passed channel layout: %s\n", CAChannelLayouts::ConstantToString(mFileChannelLayout.Tag()));
-#endif
- }
- mMode = kPreparingToCreate;
- FileFormatChanged(&parentDir, filename, filetype);
-}
-
-// _______________________________________________________________________________________
-//
-// called to create the file -- or update its format/channel layout/properties based on an encoder
-// setting change
-void CAAudioFile::FileFormatChanged(const FSRef *parentDir, CFStringRef filename, AudioFileTypeID filetype)
-{
- 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.
- if (mConverter != NULL) {
- propertySize = sizeof(AudioStreamBasicDescription);
- Float64 origSampleRate = mFileDataFormat.mSampleRate;
- XThrowIfError(AudioConverterGetProperty(mConverter, kAudioConverterCurrentOutputStreamDescription, &propertySize, &mFileDataFormat), "get audio converter's output stream description");
- // do the same for the channel layout being output by the converter
-#if VERBOSE_CONVERTER
- mFileDataFormat.PrintFormat(stdout, "", "Converter output");
-#endif
- if (fiszero(mFileDataFormat.mSampleRate))
- mFileDataFormat.mSampleRate = origSampleRate;
- err = AudioConverterGetPropertyInfo(mConverter, kAudioConverterOutputChannelLayout, &propertySize, NULL);
- if (err == noErr && propertySize > 0) {
- AudioChannelLayout *layout = static_cast<AudioChannelLayout *>(malloc(propertySize));
- err = AudioConverterGetProperty(mConverter, kAudioConverterOutputChannelLayout, &propertySize, layout);
- if (err) {
- free(layout);
- XThrow(err, "couldn't get audio converter's output channel layout");
- }
- mFileChannelLayout = layout;
-#if VERBOSE_CHANNELMAP
- printf("got new file's channel layout from converter: %s\n", CAChannelLayouts::ConstantToString(mFileChannelLayout.Tag()));
-#endif
- free(layout);
- }
- }
-
- // create the output file
- if (mMode == kPreparingToCreate) {
- CAStreamBasicDescription newFileDataFormat = mFileDataFormat;
- if (fiszero(newFileDataFormat.mSampleRate))
- newFileDataFormat.mSampleRate = 44100; // just make something up for now
-#if VERBOSE_CONVERTER
- newFileDataFormat.PrintFormat(stdout, "", "Applied to new file");
-#endif
- XThrowIfError(AudioFileCreate(parentDir, filename, filetype, &newFileDataFormat, 0, &mFSRef, &mAudioFile), "create audio file");
- mMode = kPreparingToWrite;
- mOwnOpenFile = true;
- } else if (saveFileDataFormat != mFileDataFormat || fnotequal(saveFileDataFormat.mSampleRate, mFileDataFormat.mSampleRate)) {
- // second check must be explicit since operator== on ASBD treats SR of zero as "don't care"
- if (fiszero(mFileDataFormat.mSampleRate))
- mFileDataFormat.mSampleRate = mClientDataFormat.mSampleRate;
-#if VERBOSE_CONVERTER
- mFileDataFormat.PrintFormat(stdout, "", "Applied to new file");
-#endif
- XThrowIf(fiszero(mFileDataFormat.mSampleRate), kExtAudioFileError_InvalidDataFormat, "file's sample rate is 0");
- XThrowIfError(AudioFileSetProperty(mAudioFile, kAudioFilePropertyDataFormat, sizeof(AudioStreamBasicDescription), &mFileDataFormat), "couldn't update file's data format");
- }
-
- UInt32 deferSizeUpdates = 1;
- err = AudioFileSetProperty(mAudioFile, kAudioFilePropertyDeferSizeUpdates, sizeof(UInt32), &deferSizeUpdates);
-
- if (mConverter != NULL) {
- // encoder
- // 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) {
- mMagicCookie = new Byte[propertySize];
- XThrowIfError(AudioConverterGetProperty(mConverter, kAudioConverterCompressionMagicCookie, &propertySize, mMagicCookie), "get audio converter's magic cookie");
- mMagicCookieSize = propertySize; // the converter lies and tell us the wrong size
- // now set the magic cookie on the output file
- UInt32 willEatTheCookie = false;
- // the converter wants to give us one; will the file take it?
- err = AudioFileGetPropertyInfo(mAudioFile, kAudioFilePropertyMagicCookieData,
- NULL, &willEatTheCookie);
- if (err == noErr && willEatTheCookie) {
-#if VERBOSE_CONVERTER
- printf("Setting cookie on encoded file\n");
-#endif
- 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");
-
- AllocateBuffers(true /* okToFail */);
- } else {
- InitFileMaxPacketSize();
- }
-
- if (mFileChannelLayout.IsValid() && mFileChannelLayout.NumberChannels() > 2) {
- // don't bother tagging mono/stereo files
- UInt32 isWritable;
- err = AudioFileGetPropertyInfo(mAudioFile, kAudioFilePropertyChannelLayout, NULL, &isWritable);
- if (!err && isWritable) {
-#if VERBOSE_CHANNELMAP
- printf("writing file's channel layout: %s\n", CAChannelLayouts::ConstantToString(mFileChannelLayout.Tag()));
-#endif
- err = AudioFileSetProperty(mAudioFile, kAudioFilePropertyChannelLayout,
- mFileChannelLayout.Size(), &mFileChannelLayout.Layout());
- if (err)
- CAXException::Warning("could not set the file's channel layout", err);
- } else {
-#if VERBOSE_CHANNELMAP
- printf("file won't accept a channel layout (write)\n");
-#endif
- }
- }
-
- UpdateClientMaxPacketSize(); // also sets mFrame0Offset
- mPacketMark = 0;
- mFrameMark = 0;
-}
-
-// _______________________________________________________________________________________
-//
-void CAAudioFile::InitFileMaxPacketSize()
-{
- LOG_FUNCTION("CAAudioFile::InitFileMaxPacketSize", "%p", this);
- UInt32 propertySize = sizeof(UInt32);
- OSStatus err = AudioFileGetProperty(mAudioFile, kAudioFilePropertyMaximumPacketSize,
- &propertySize, &mFileMaxPacketSize);
- if (err) {
- // workaround for 3361377: not all file formats' maximum packet sizes are supported
- if (!mFileDataFormat.IsPCM())
- XThrowIfError(err, "get audio file's maximum packet size");
- mFileMaxPacketSize = mFileDataFormat.mBytesPerFrame;
- }
- AllocateBuffers(true /* okToFail */);
-}
-
-
-// _______________________________________________________________________________________
-//
-SInt64 CAAudioFile::FileDataOffset()
-{
- if (mFileDataOffset < 0) {
- UInt32 propertySize = sizeof(SInt64);
- XThrowIfError(AudioFileGetProperty(mAudioFile, kAudioFilePropertyDataOffset, &propertySize, &mFileDataOffset), "couldn't get file's data offset");
- }
- return mFileDataOffset;
-}
-
-// _______________________________________________________________________________________
-//
-SInt64 CAAudioFile::GetNumberFrames() const
-{
- AudioFilePacketTableInfo pti;
- UInt32 propertySize = sizeof(pti);
- OSStatus err = AudioFileGetProperty(mAudioFile, kAudioFilePropertyPacketTableInfo, &propertySize, &pti);
- if (err == noErr)
- return pti.mNumberValidFrames;
- return mFileDataFormat.mFramesPerPacket * GetNumberPackets() - mFrame0Offset;
-}
-
-// _______________________________________________________________________________________
-//
-void CAAudioFile::SetNumberFrames(SInt64 nFrames)
-{
- XThrowIf(mFileDataFormat.mFramesPerPacket != 1, kExtAudioFileError_InvalidDataFormat, "SetNumberFrames only supported for PCM");
- XThrowIfError(AudioFileSetProperty(mAudioFile, kAudioFilePropertyAudioDataPacketCount, sizeof(SInt64), &nFrames), "Couldn't set number of packets on audio file");
-}
-
-// _______________________________________________________________________________________
-//
-// call for existing file, NOT new one - from Open() or Wrap()
-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) {
- AudioChannelLayout *layout = static_cast<AudioChannelLayout *>(malloc(propertySize));
- err = AudioFileGetProperty(mAudioFile, kAudioFilePropertyChannelLayout, &propertySize, layout);
- if (err == noErr) {
- mFileChannelLayout = layout;
-#if VERBOSE_CHANNELMAP
- printf("existing file's channel layout: %s\n", CAChannelLayouts::ConstantToString(mFileChannelLayout.Tag()));
-#endif
- }
- free(layout);
- XThrowIfError(err, "get audio file's channel layout");
- }
- if (mMode != kReading)
- return;
-
-#if 0
- // get mNumberPackets
- propertySize = sizeof(mNumberPackets);
- XThrowIfError(AudioFileGetProperty(mAudioFile, kAudioFilePropertyAudioDataPacketCount, &propertySize, &mNumberPackets), "get audio file's packet count");
-#if VERBOSE_IO
- printf("CAAudioFile::GetExistingFileInfo: %qd packets\n", mNumberPackets);
-#endif
-#endif
-
- // get mMagicCookie
- err = AudioFileGetPropertyInfo(mAudioFile, kAudioFilePropertyMagicCookieData, &propertySize, NULL);
- if (err == noErr && propertySize > 0) {
- mMagicCookie = new Byte[propertySize];
- mMagicCookieSize = propertySize;
- XThrowIfError(AudioFileGetProperty(mAudioFile, kAudioFilePropertyMagicCookieData, &propertySize, mMagicCookie), "get audio file's magic cookie");
- }
- InitFileMaxPacketSize();
- mPacketMark = 0;
- mFrameMark = 0;
-
- UpdateClientMaxPacketSize();
-}
-
-// =======================================================================================
-
-// _______________________________________________________________________________________
-//
-void CAAudioFile::SetFileChannelLayout(const CAAudioChannelLayout &layout)
-{
- LOG_FUNCTION("CAAudioFile::SetFileChannelLayout", "%p", this);
- mFileChannelLayout = layout;
-#if VERBOSE_CHANNELMAP
- printf("file channel layout set explicitly (%s): %s\n", mMode == kReading ? "read" : "write", CAChannelLayouts::ConstantToString(mFileChannelLayout.Tag()));
-#endif
- if (mMode != kReading)
- FileFormatChanged();
-}
-
-// _______________________________________________________________________________________
-//
-void CAAudioFile::SetClientFormat(const CAStreamBasicDescription &dataFormat, const CAAudioChannelLayout *layout)
-{
- 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) {
- delete mWriteBufferList;
- mWriteBufferList = NULL;
- }
- 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()) {
- differentLayouts = mClientChannelLayout.Tag() != mFileChannelLayout.Tag();
-#if VERBOSE_CHANNELMAP
- printf("two valid layouts, %s\n", differentLayouts ? "different" : "same");
-#endif
- } else {
- differentLayouts = false;
-#if VERBOSE_CHANNELMAP
- printf("valid client layout, unknown file layout\n");
-#endif
- }
- } else {
- differentLayouts = false;
-#if VERBOSE_CHANNELMAP
- if (mFileChannelLayout.IsValid())
- printf("valid file layout, unknown client layout\n");
- else
- printf("two invalid layouts\n");
-#endif
- }
-
- if (mClientDataFormat != mFileDataFormat || differentLayouts) {
- // We need an AudioConverter.
- if (mMode == kReading) {
- // file -> client (decode)
-//mFileDataFormat.PrintFormat( stdout, "", "File: ");
-//mClientDataFormat.PrintFormat(stdout, "", "Client: ");
-
- if (mConverter == NULL)
- XThrowIfError(AudioConverterNew(&mFileDataFormat, &mClientDataFormat, &mConverter),
- "create audio converter");
-
-#if VERBOSE_CONVERTER
- printf("CAAudioFile %p -- created converter\n", this);
- CAShow(mConverter);
-#endif
- // set the magic cookie, if any (for decode)
- if (mMagicCookie)
- SetConverterProperty(kAudioConverterDecompressionMagicCookie, mMagicCookieSize, mMagicCookie, mFileDataFormat.IsPCM());
- // we get cookies from some AIFF's but the converter barfs on them,
- // so we set canFail to true for PCM
-
- SetConverterChannelLayout(false, mFileChannelLayout);
- SetConverterChannelLayout(true, mClientChannelLayout);
-
- // propagate leading/trailing frame counts
- if (mFileDataFormat.mBitsPerChannel == 0) {
- UInt32 propertySize;
- OSStatus err;
- AudioFilePacketTableInfo pti;
- propertySize = sizeof(pti);
- err = AudioFileGetProperty(mAudioFile, kAudioFilePropertyPacketTableInfo, &propertySize, &pti);
- if (err == noErr && (pti.mPrimingFrames > 0 || pti.mRemainderFrames > 0)) {
- AudioConverterPrimeInfo primeInfo;
- primeInfo.leadingFrames = pti.mPrimingFrames;
- primeInfo.trailingFrames = pti.mRemainderFrames;
- /* ignore any error. better to play it at all than not. */
- /*err = */AudioConverterSetProperty(mConverter, kAudioConverterPrimeInfo, sizeof(primeInfo), &primeInfo);
- //XThrowIfError(err, "couldn't set prime info on converter");
- }
- }
- } else if (mMode == kPreparingToCreate || mMode == kPreparingToWrite) {
- // client -> file (encode)
- if (mConverter == NULL)
- XThrowIfError(AudioConverterNew(&mClientDataFormat, &mFileDataFormat, &mConverter), "create audio converter");
- mWriteBufferList = CABufferList::New("", mClientDataFormat);
- SetConverterChannelLayout(false, mClientChannelLayout);
- SetConverterChannelLayout(true, mFileChannelLayout);
- if (mMode == kPreparingToWrite)
- FileFormatChanged();
- } else
- XThrowIfError(kExtAudioFileError_InvalidOperationOrder, "audio file format not yet known");
- }
- UpdateClientMaxPacketSize();
-}
-
-// _______________________________________________________________________________________
-//
-OSStatus CAAudioFile::SetConverterProperty(
- AudioConverterPropertyID inPropertyID,
- UInt32 inPropertyDataSize,
- const void* inPropertyData,
- bool inCanFail)
-{
- OSStatus err = noErr;
- //LOG_FUNCTION("ExtAudioFile::SetConverterProperty", "%p %-4.4s", this, (char *)&inPropertyID);
- if (inPropertyID == kAudioConverterPropertySettings && *(CFPropertyListRef *)inPropertyData == NULL)
- ;
- else {
- err = AudioConverterSetProperty(mConverter, inPropertyID, inPropertyDataSize, inPropertyData);
- if (!inCanFail) {
- XThrowIfError(err, "set audio converter property");
- }
- }
- UpdateClientMaxPacketSize();
- if (mMode == kPreparingToWrite)
- FileFormatChanged();
- return err;
-}
-
-// _______________________________________________________________________________________
-//
-void CAAudioFile::SetConverterChannelLayout(bool output, const CAAudioChannelLayout &layout)
-{
- 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",
- CAChannelLayouts::ConstantToString(mFileChannelLayout.Tag()));
-#endif
- if (output) {
- err = AudioConverterSetProperty(mConverter, kAudioConverterOutputChannelLayout,
- layout.Size(), &layout.Layout());
- XThrowIf(err && err != kAudioConverterErr_OperationNotSupported, err, "couldn't set converter's output channel layout");
- } else {
- err = AudioConverterSetProperty(mConverter, kAudioConverterInputChannelLayout,
- layout.Size(), &layout.Layout());
- XThrowIf(err && err != kAudioConverterErr_OperationNotSupported, err, "couldn't set converter's input channel layout");
- }
- if (mMode == kPreparingToWrite)
- FileFormatChanged();
- }
-}
-
-// _______________________________________________________________________________________
-//
-CFArrayRef CAAudioFile::GetConverterConfig()
-{
- CFArrayRef plist;
- UInt32 propertySize = sizeof(plist);
- XThrowIfError(AudioConverterGetProperty(mConverter, kAudioConverterPropertySettings, &propertySize, &plist), "get converter property settings");
- return plist;
-}
-
-// _______________________________________________________________________________________
-//
-void CAAudioFile::UpdateClientMaxPacketSize()
-{
- LOG_FUNCTION("CAAudioFile::UpdateClientMaxPacketSize", "%p", this);
- mFrame0Offset = 0;
- if (mConverter != NULL) {
- 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);
- OSStatus err = AudioConverterGetProperty(mConverter, kAudioConverterPrimeInfo, &propertySize, &primeInfo);
- if (err == noErr)
- mFrame0Offset = primeInfo.leadingFrames;
-#if VERBOSE_CONVERTER
- printf("kAudioConverterPrimeInfo: err = %ld, leadingFrames = %ld\n", err, mFrame0Offset);
-#endif
- }
- } else {
- mClientMaxPacketSize = mFileMaxPacketSize;
- }
-}
-
-// _______________________________________________________________________________________
-// Allocates: mIOBufferList, mIOBufferSizePackets, mPacketDescs
-// Dependent on: mFileMaxPacketSize, mIOBufferSizeBytes
-void CAAudioFile::AllocateBuffers(bool okToFail)
-{
- LOG_FUNCTION("CAAudioFile::AllocateBuffers", "%p", this);
- if (mFileMaxPacketSize == 0) {
- if (okToFail)
- return;
- XThrowIf(true, kExtAudioFileError_MaxPacketSizeUnknown, "file's maximum packet size is 0");
- }
- 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;
- if (!mClientOwnsIOBuffer) {
- //printf("reallocating I/O buffer\n");
- delete[] (Byte *)mIOBufferList.mBuffers[0].mData;
- mIOBufferList.mBuffers[0].mData = new Byte[bufferSizeBytes];
- }
- mIOBufferList.mBuffers[0].mDataByteSize = bufferSizeBytes;
- mIOBufferSizePackets = bufferSizeBytes / mFileMaxPacketSize;
- }
-
- UInt32 propertySize = sizeof(UInt32);
- UInt32 externallyFramed;
- XThrowIfError(AudioFormatGetProperty(kAudioFormatProperty_FormatIsExternallyFramed,
- sizeof(AudioStreamBasicDescription), &mFileDataFormat, &propertySize, &externallyFramed),
- "is format externally framed");
- if (mNumPacketDescs != (externallyFramed ? mIOBufferSizePackets : 0)) {
- delete[] mPacketDescs;
- mPacketDescs = NULL;
- mNumPacketDescs = 0;
-
- if (externallyFramed) {
- //printf("reallocating packet descs\n");
- mPacketDescs = new AudioStreamPacketDescription[mIOBufferSizePackets];
- mNumPacketDescs = mIOBufferSizePackets;
- }
- }
-}
-
-// _______________________________________________________________________________________
-//
-void CAAudioFile::SetIOBuffer(void *buf)
-{
- if (!mClientOwnsIOBuffer)
- delete[] (Byte *)mIOBufferList.mBuffers[0].mData;
- mIOBufferList.mBuffers[0].mData = buf;
-
- if (buf == NULL) {
- mClientOwnsIOBuffer = false;
- SetIOBufferSizeBytes(mIOBufferSizeBytes);
- } else {
- mClientOwnsIOBuffer = true;
- AllocateBuffers();
- }
-// printf("CAAudioFile::SetIOBuffer %p: %p, 0x%lx bytes, mClientOwns = %d\n", this, mIOBufferList.mBuffers[0].mData, mIOBufferSizeBytes, mClientOwnsIOBuffer);
-}
-
-// ===============================================================================
-
-/*
-For Tiger:
-added kAudioFilePropertyPacketToFrame and kAudioFilePropertyFrameToPacket.
-You pass in an AudioFramePacketTranslation struct, with the appropriate field filled in, to AudioFileGetProperty.
-
- kAudioFilePropertyPacketToFrame = 'pkfr',
- // pass a AudioFramePacketTranslation with mPacket filled out and get mFrame back. mFrameOffsetInPacket is ignored.
- kAudioFilePropertyFrameToPacket = 'frpk',
- // pass a AudioFramePacketTranslation with mFrame filled out and get mPacket and mFrameOffsetInPacket back.
-
-struct AudioFramePacketTranslation
-{
- SInt64 mFrame;
- SInt64 mPacket;
- UInt32 mFrameOffsetInPacket;
-};
-*/
-
-SInt64 CAAudioFile::PacketToFrame(SInt64 packet) const
-{
- AudioFramePacketTranslation trans;
- UInt32 propertySize;
-
- switch (mFileDataFormat.mFramesPerPacket) {
- case 1:
- return packet;
- case 0:
- trans.mPacket = packet;
- propertySize = sizeof(trans);
- XThrowIfError(AudioFileGetProperty(mAudioFile, kAudioFilePropertyPacketToFrame, &propertySize, &trans),
- "packet <-> frame translation unimplemented for format with variable frames/packet");
- return trans.mFrame;
- }
- return packet * mFileDataFormat.mFramesPerPacket;
-}
-
-SInt64 CAAudioFile::FrameToPacket(SInt64 inFrame) const
-{
- AudioFramePacketTranslation trans;
- UInt32 propertySize;
-
- switch (mFileDataFormat.mFramesPerPacket) {
- case 1:
- return inFrame;
- case 0:
- trans.mFrame = inFrame;
- propertySize = sizeof(trans);
- XThrowIfError(AudioFileGetProperty(mAudioFile, kAudioFilePropertyFrameToPacket, &propertySize, &trans),
- "packet <-> frame translation unimplemented for format with variable frames/packet");
- return trans.mPacket;
- }
- return inFrame / mFileDataFormat.mFramesPerPacket;
-}
-
-// _______________________________________________________________________________________
-//
-
-SInt64 CAAudioFile::Tell() const // frameNumber
-{
- return mFrameMark - mFrame0Offset;
-}
-
-void CAAudioFile::SeekToPacket(SInt64 packetNumber)
-{
-#if VERBOSE_IO
- printf("CAAudioFile::SeekToPacket: %qd\n", packetNumber);
-#endif
- XThrowIf(mMode != kReading || packetNumber < 0 /*|| packetNumber >= mNumberPackets*/ , kExtAudioFileError_InvalidSeek, "seek to packet in audio file");
- if (mPacketMark == packetNumber)
- return; // already there! don't reset converter
- mPacketMark = packetNumber;
-
- mFrameMark = PacketToFrame(packetNumber) - mFrame0Offset;
- mFramesToSkipFollowingSeek = 0;
- if (mConverter)
- // must reset -- if we reached end of stream. converter will no longer work otherwise
- AudioConverterReset(mConverter);
-}
-
-/*
- Example: AAC, 1024 frames/packet, 2112 frame offset
-
- 2112
- |
- Absolute frames: 0 1024 2048 | 3072
- +---------+---------+--|------+---------+---------+
- Packets: | 0 | 1 | | 2 | 3 | 4 |
- +---------+---------+--|------+---------+---------+
- Client frames: -2112 -1088 -64 | 960 SeekToFrame, TellFrame
- |
- 0
-
- * Offset between absolute and client frames is mFrame0Offset.
- *** mFrameMark is in client frames ***
-
- Examples:
- clientFrame 0 960 1000 1024
- absoluteFrame 2112 3072 3112 3136
- packet 0 0 0 1
- tempFrameMark* -2112 -2112 -2112 -1088
- mFramesToSkipFollowingSeek 2112 3072 3112 2112
-*/
-void CAAudioFile::Seek(SInt64 clientFrame)
-{
- if (clientFrame == mFrameMark)
- return; // already there! don't reset converter
-
- //SInt64 absoluteFrame = clientFrame + mFrame0Offset;
- XThrowIf(mMode != kReading || clientFrame < 0 || !mClientDataFormat.IsPCM(), kExtAudioFileError_InvalidSeek, "seek to frame in audio file");
-
-#if VERBOSE_IO
- SInt64 prevFrameMark = mFrameMark;
-#endif
-
- SInt64 packet;
- packet = FrameToPacket(clientFrame);
- if (packet < 0)
- packet = 0;
- SeekToPacket(packet);
- // 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
-}
-
-// _______________________________________________________________________________________
-//
-void CAAudioFile::Read(UInt32 &ioNumPackets, AudioBufferList *ioData)
- // May read fewer packets than requested if:
- // buffer is not big enough
- // file does not contain that many more packets
- // Note that eofErr is not fatal, just results in 0 packets returned
- // ioData's buffer sizes may be shortened
-{
- XThrowIf(mClientMaxPacketSize == 0, kExtAudioFileError_MaxPacketSizeUnknown, "client maximum packet size is 0");
- if (mIOBufferList.mBuffers[0].mData == NULL) {
-#if DEBUG
- printf("warning: CAAudioFile::AllocateBuffers called from ReadPackets\n");
-#endif
- AllocateBuffers();
- }
- UInt32 bufferSizeBytes = ioData->mBuffers[0].mDataByteSize;
- 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);
- UInt32 framesPerPacket;
- if ((framesPerPacket=mFileDataFormat.mFramesPerPacket) > 0)
- mMaxPacketsToRead = (skipFrames + framesPerPacket - 1) / framesPerPacket;
-
- if (mConverter == NULL) {
- XThrowIfError(ReadInputProc(NULL, &skipFrames, ioData, NULL, this), "read audio file");
- } else {
-#if CAAUDIOFILE_PROFILE
- mInConverter = true;
-#endif
- StartTiming(this, fill);
- XThrowIfError(AudioConverterFillComplexBuffer(mConverter, ReadInputProc, this, &skipFrames, ioData, NULL), "convert audio packets (pcm read)");
- ElapsedTime(this, fill, mTicksInConverter);
-#if CAAUDIOFILE_PROFILE
- mInConverter = false;
-#endif
- }
- if (skipFrames == 0) { // hit EOF
- ioNumPackets = 0;
- return;
- }
- mFrameMark += skipFrames;
-#if VERBOSE_IO
- printf("CAAudioFile::ReadPackets: skipped %ld frames\n", skipFrames);
-#endif
-
- mFramesToSkipFollowingSeek -= skipFrames;
-
- // restore mDataByteSize
- for (int i = ioData->mNumberBuffers; --i >= 0 ; )
- 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;
- if (mConverter == NULL) {
- XThrowIfError(ReadInputProc(NULL, &nPackets, ioData, NULL, this), "read audio file");
- } else {
-#if CAAUDIOFILE_PROFILE
- mInConverter = true;
-#endif
- StartTiming(this, fill);
- XThrowIfError(AudioConverterFillComplexBuffer(mConverter, ReadInputProc, this, &nPackets, ioData, NULL), "convert audio packets (read)");
- ElapsedTime(this, fill, mTicksInConverter);
-#if CAAUDIOFILE_PROFILE
- mInConverter = false;
-#endif
- }
- if (mClientDataFormat.mFramesPerPacket == 1)
- mFrameMark += nPackets;
-
- ioNumPackets = nPackets;
-}
-
-// _______________________________________________________________________________________
-//
-OSStatus CAAudioFile::ReadInputProc( AudioConverterRef inAudioConverter,
- UInt32* ioNumberDataPackets,
- AudioBufferList* ioData,
- AudioStreamPacketDescription** outDataPacketDescription,
- void* inUserData)
-{
- CAAudioFile *This = static_cast<CAAudioFile *>(inUserData);
-
-#if 0
- SInt64 remainingPacketsInFile = This->mNumberPackets - This->mPacketMark;
- if (remainingPacketsInFile <= 0) {
- *ioNumberDataPackets = 0;
- ioData->mBuffers[0].mDataByteSize = 0;
- if (outDataPacketDescription)
- *outDataPacketDescription = This->mPacketDescs;
-#if VERBOSE_IO
- printf("CAAudioFile::ReadInputProc: EOF\n");
-#endif
- return noErr; // not eofErr; EOF is signified by 0 packets/0 bytes
- }
-#endif
-
- // determine how much to read
- AudioBufferList *readBuffer;
- UInt32 readPackets;
- if (inAudioConverter != NULL) {
- // getting called from converter, need to use our I/O buffer
- readBuffer = &This->mIOBufferList;
- readPackets = This->mIOBufferSizePackets;
- } else {
- // getting called directly from ReadPackets, use supplied buffer
- if (This->mFileMaxPacketSize == 0)
- return kExtAudioFileError_MaxPacketSizeUnknown;
- readBuffer = ioData;
- readPackets = std::min(*ioNumberDataPackets, readBuffer->mBuffers[0].mDataByteSize / This->mFileMaxPacketSize);
- // don't attempt to read more packets than will fit in the buffer
- }
- // don't try to read past EOF
-// if (readPackets > remainingPacketsInFile)
-// readPackets = remainingPacketsInFile;
- // don't read more packets than necessary to produce the requested amount of converted data
- if (readPackets > This->mMaxPacketsToRead) {
-#if VERBOSE_IO
- printf("CAAudioFile::ReadInputProc: limiting read to %ld packets (from %ld)\n", This->mMaxPacketsToRead, readPackets);
-#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);
-#if CAAUDIOFILE_PROFILE
- if (This->mInConverter) ElapsedTime(This, readinconv, This->mTicksInReadInConverter);
-#endif
- ElapsedTime(This, read, This->mTicksInIO);
-
- if (err) {
- 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
- if (This->mPacketDescs) {
- for (UInt32 i = 0; i < readPackets; ++i) {
- printf(" read packet %qd : offset %qd, length %ld\n", This->mPacketMark + i, This->mPacketDescs[i].mStartOffset, This->mPacketDescs[i].mDataByteSize);
- }
- }
- printf(" read buffer:"); CAShowAudioBufferList(readBuffer, 0, 4);
-#endif
-#endif
- if (readPackets == 0) {
- *ioNumberDataPackets = 0;
- ioData->mBuffers[0].mDataByteSize = 0;
- return noErr;
- }
-
- if (outDataPacketDescription)
- *outDataPacketDescription = This->mPacketDescs;
- ioData->mBuffers[0].mDataByteSize = bytesRead;
- ioData->mBuffers[0].mData = readBuffer->mBuffers[0].mData;
-
- This->mPacketMark += readPackets;
- if (This->mClientDataFormat.mFramesPerPacket != 1) { // for PCM client formats we update in Read
- // but for non-PCM client format (weird case) we must update here/now
- if (This->mFileDataFormat.mFramesPerPacket > 0)
- This->mFrameMark += readPackets * This->mFileDataFormat.mFramesPerPacket;
- else {
- for (UInt32 i = 0; i < readPackets; ++i)
- This->mFrameMark += This->mPacketDescs[i].mVariableFramesInPacket;
- }
- }
- *ioNumberDataPackets = readPackets;
- return noErr;
-}
-
-// _______________________________________________________________________________________
-//
-void CAAudioFile::Write(UInt32 numPackets, const AudioBufferList *data)
-{
- if (mIOBufferList.mBuffers[0].mData == NULL) {
-#if DEBUG
- printf("warning: CAAudioFile::AllocateBuffers called from WritePackets\n");
-#endif
- AllocateBuffers();
- }
-
- if (mMode == kPreparingToWrite)
- mMode = kWriting;
- else
- XThrowIf(mMode != kWriting, kExtAudioFileError_InvalidOperationOrder, "can't write to this file");
- if (mConverter != NULL) {
- mWritePackets = numPackets;
- mWriteBufferList->SetFrom(data);
- WritePacketsFromCallback(WriteInputProc, this);
- } else {
- StartTiming(this, write);
- XThrowIfError(AudioFileWritePackets(mAudioFile, mUseCache, data->mBuffers[0].mDataByteSize,
- NULL, mPacketMark, &numPackets, data->mBuffers[0].mData),
- "write audio file");
- ElapsedTime(this, write, mTicksInIO);
-#if VERBOSE_IO
- printf("CAAudioFile::WritePackets: wrote %ld packets at %qd, %ld bytes\n", numPackets, mPacketMark, data->mBuffers[0].mDataByteSize);
-#endif
- //mNumberPackets =
- mPacketMark += numPackets;
- if (mFileDataFormat.mFramesPerPacket > 0)
- mFrameMark += numPackets * mFileDataFormat.mFramesPerPacket;
- // else: shouldn't happen since we're only called when there's no converter
- }
-}
-
-// _______________________________________________________________________________________
-//
-void CAAudioFile::FlushEncoder()
-{
- if (mConverter != NULL) {
- mFinishingEncoding = true;
- WritePacketsFromCallback(WriteInputProc, this);
- mFinishingEncoding = false;
-
- // get priming info from converter, set it on the file
- if (mFileDataFormat.mBitsPerChannel == 0) {
- UInt32 propertySize;
- OSStatus err;
- AudioConverterPrimeInfo primeInfo;
- propertySize = sizeof(primeInfo);
-
- err = AudioConverterGetProperty(mConverter, kAudioConverterPrimeInfo, &propertySize, &primeInfo);
- if (err == noErr) {
- AudioFilePacketTableInfo pti;
- propertySize = sizeof(pti);
- err = AudioFileGetProperty(mAudioFile, kAudioFilePropertyPacketTableInfo, &propertySize, &pti);
- if (err == noErr) {
-//printf("old packet table info: %qd valid, %ld priming, %ld remainder\n", pti.mNumberValidFrames, pti.mPrimingFrames, pti.mRemainderFrames);
- UInt64 totalFrames = pti.mNumberValidFrames + pti.mPrimingFrames + pti.mRemainderFrames;
- pti.mPrimingFrames = primeInfo.leadingFrames;
- pti.mRemainderFrames = primeInfo.trailingFrames;
- pti.mNumberValidFrames = totalFrames - pti.mPrimingFrames - pti.mRemainderFrames;
-//printf("new packet table info: %qd valid, %ld priming, %ld remainder\n", pti.mNumberValidFrames, pti.mPrimingFrames, pti.mRemainderFrames);
- XThrowIfError(AudioFileSetProperty(mAudioFile, kAudioFilePropertyPacketTableInfo, sizeof(pti), &pti), "couldn't set packet table info on audio file");
- }
- }
- }
- }
-}
-
-// _______________________________________________________________________________________
-//
-OSStatus CAAudioFile::WriteInputProc( AudioConverterRef /*inAudioConverter*/,
- UInt32 * ioNumberDataPackets,
- AudioBufferList* ioData,
- AudioStreamPacketDescription ** outDataPacketDescription,
- void* inUserData)
-{
- CAAudioFile *This = static_cast<CAAudioFile *>(inUserData);
- if (This->mFinishingEncoding) {
- *ioNumberDataPackets = 0;
- ioData->mBuffers[0].mDataByteSize = 0;
- ioData->mBuffers[0].mData = NULL;
- if (outDataPacketDescription)
- *outDataPacketDescription = NULL;
- return noErr;
- }
- UInt32 numPackets = This->mWritePackets;
- if (numPackets == 0) {
- return kNoMoreInputRightNow;
- }
- This->mWriteBufferList->ToAudioBufferList(ioData);
- This->mWriteBufferList->BytesConsumed(numPackets * This->mClientDataFormat.mBytesPerFrame);
- *ioNumberDataPackets = numPackets;
- if (outDataPacketDescription)
- *outDataPacketDescription = NULL;
- This->mWritePackets -= numPackets;
- return noErr;
-}
-
-// _______________________________________________________________________________________
-//
-#if VERBOSE_IO
-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);
- for (int i = 0; i < 16; ++i)
- if (i < n)
- printf("%02X ", p[i]);
- else printf(" ");
- for (int i = 0; i < 16; ++i)
- if (i < n)
- putchar(p[i] >= ' ' && p[i] < 127 ? p[i] : '.');
- else putchar(' ');
- putchar('\n');
- p += 16;
- len -= 16;
- offset += 16;
- }
-}
-#endif
-
-// _______________________________________________________________________________________
-//
-void CAAudioFile::WritePacketsFromCallback(
- AudioConverterComplexInputDataProc inInputDataProc,
- void * inInputDataProcUserData)
-{
- while (true) {
- // keep writing until we exhaust the input (temporary stop), or produce no output (EOF)
- UInt32 numEncodedPackets = mIOBufferSizePackets;
- mIOBufferList.mBuffers[0].mDataByteSize = mIOBufferSizeBytes;
-#if CAAUDIOFILE_PROFILE
- mInConverter = true;
-#endif
- StartTiming(this, fill);
- OSStatus err = AudioConverterFillComplexBuffer(mConverter, inInputDataProc, inInputDataProcUserData,
- &numEncodedPackets, &mIOBufferList, mPacketDescs);
- ElapsedTime(this, fill, mTicksInConverter);
-#if CAAUDIOFILE_PROFILE
- mInConverter = false;
-#endif
- XThrowIf(err != 0 && err != kNoMoreInputRightNow, err, "convert audio packets (write)");
- if (numEncodedPackets == 0)
- break;
- Byte *buf = (Byte *)mIOBufferList.mBuffers[0].mData;
-#if VERBOSE_IO
- printf("CAAudioFile::WritePacketsFromCallback: wrote %ld packets, %ld bytes\n", numEncodedPackets, mIOBufferList.mBuffers[0].mDataByteSize);
- if (mPacketDescs) {
- for (UInt32 i = 0; i < numEncodedPackets; ++i) {
- printf(" write packet %qd : offset %qd, length %ld\n", mPacketMark + i, mPacketDescs[i].mStartOffset, mPacketDescs[i].mDataByteSize);
-#if VERBOSE_IO >= 2
- hexdump(buf + mPacketDescs[i].mStartOffset, mPacketDescs[i].mDataByteSize);
-#endif
- }
- }
-#endif
- StartTiming(this, write);
- XThrowIfError(AudioFileWritePackets(mAudioFile, mUseCache, mIOBufferList.mBuffers[0].mDataByteSize, mPacketDescs, mPacketMark, &numEncodedPackets, buf), "write audio file");
- ElapsedTime(this, write, mTicksInIO);
- mPacketMark += numEncodedPackets;
- //mNumberPackets += numEncodedPackets;
- if (mFileDataFormat.mFramesPerPacket > 0)
- mFrameMark += numEncodedPackets * mFileDataFormat.mFramesPerPacket;
- else {
- for (UInt32 i = 0; i < numEncodedPackets; ++i)
- mFrameMark += mPacketDescs[i].mVariableFramesInPacket;
- }
- if (err == kNoMoreInputRightNow)
- break;
- }
-}
-
-#endif // !CAAF_USE_EXTAUDIOFILE
diff --git a/libs/appleutility/CAAudioFile.h b/libs/appleutility/CAAudioFile.h
deleted file mode 100644
index 2cfb4f3031..0000000000
--- a/libs/appleutility/CAAudioFile.h
+++ /dev/null
@@ -1,439 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAAudioFile.h
-
-=============================================================================*/
-
-#ifndef __CAAudioFile_h__
-#define __CAAudioFile_h__
-
-#include <AvailabilityMacros.h>
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <AudioToolbox/AudioToolbox.h>
-#else
- #include <AudioToolbox.h>
-#endif
-
-#include "CAStreamBasicDescription.h"
-#include "CABufferList.h"
-#include "CAAudioChannelLayout.h"
-#include "CAXException.h"
-#include "CAMath.h"
-
-#ifndef CAAF_USE_EXTAUDIOFILE
-// option: use AudioToolbox/ExtAudioFile.h? Only available on Tiger.
- #if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_3
- // we are building software that must be deployable on Panther or earlier
- #define CAAF_USE_EXTAUDIOFILE 0
- #else
- // else we require Tiger and can use the API
- #define CAAF_USE_EXTAUDIOFILE 1
- #endif
-#endif
-
-#ifndef MAC_OS_X_VERSION_10_4
- // we have pre-Tiger headers; add our own declarations
- typedef UInt32 AudioFileTypeID;
- enum {
- kExtAudioFileError_InvalidProperty = -66561,
- kExtAudioFileError_InvalidPropertySize = -66562,
- kExtAudioFileError_NonPCMClientFormat = -66563,
- kExtAudioFileError_InvalidChannelMap = -66564, // number of channels doesn't match format
- kExtAudioFileError_InvalidOperationOrder = -66565,
- kExtAudioFileError_InvalidDataFormat = -66566,
- kExtAudioFileError_MaxPacketSizeUnknown = -66567,
- kExtAudioFileError_InvalidSeek = -66568, // writing, or offset out of bounds
- kExtAudioFileError_AsyncWriteTooLarge = -66569,
- kExtAudioFileError_AsyncWriteBufferOverflow = -66570 // an async write could not be completed in time
- };
-#else
- #if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <AudioToolbox/ExtendedAudioFile.h>
- #else
- #include "ExtendedAudioFile.h"
- #endif
-#endif
-
-// _______________________________________________________________________________________
-// Wrapper class for an AudioFile, supporting encode/decode to/from a PCM client format
-class CAAudioFile {
-public:
- // implementation-independent helpers
- void Open(const char *filePath) {
- FSRef fsref;
- XThrowIfError(FSPathMakeRef((UInt8 *)filePath, &fsref, NULL), "locate audio file");
- Open(fsref);
- }
-
- bool HasConverter() const { return GetConverter() != NULL; }
-
- double GetDurationSeconds() {
- double sr = GetFileDataFormat().mSampleRate;
- return fnonzero(sr) ? GetNumberFrames() / sr : 0.;
- }
- // will be 0 if the file's frames/packet is 0 (variable)
- // or the file's sample rate is 0 (unknown)
-
-#if CAAF_USE_EXTAUDIOFILE
-public:
- CAAudioFile() : mExtAF(NULL) { }
- virtual ~CAAudioFile() { if (mExtAF) Close(); }
-
- void Open(const FSRef &fsref) {
- // open an existing file
- XThrowIfError(ExtAudioFileOpen(&fsref, &mExtAF), "ExtAudioFileOpen failed");
- }
-
- void CreateNew(const FSRef &inParentDir, CFStringRef inFileName, AudioFileTypeID inFileType, const AudioStreamBasicDescription &inStreamDesc, const AudioChannelLayout *inChannelLayout=NULL) {
- XThrowIfError(ExtAudioFileCreateNew(&inParentDir, inFileName, inFileType, &inStreamDesc, inChannelLayout, &mExtAF), "ExtAudioFileCreateNew failed");
- }
-
- void Wrap(AudioFileID fileID, bool forWriting) {
- // use this to wrap an AudioFileID opened externally
- XThrowIfError(ExtAudioFileWrapAudioFileID(fileID, forWriting, &mExtAF), "ExtAudioFileWrapAudioFileID failed");
- }
-
- void Close() {
- XThrowIfError(ExtAudioFileDispose(mExtAF), "ExtAudioFileClose failed");
- mExtAF = NULL;
- }
-
- const CAStreamBasicDescription &GetFileDataFormat() {
- UInt32 size = sizeof(mFileDataFormat);
- XThrowIfError(ExtAudioFileGetProperty(mExtAF, kExtAudioFileProperty_FileDataFormat, &size, &mFileDataFormat), "Couldn't get file's data format");
- return mFileDataFormat;
- }
-
- const CAAudioChannelLayout & GetFileChannelLayout() {
- return FetchChannelLayout(mFileChannelLayout, kExtAudioFileProperty_FileChannelLayout);
- }
-
- void SetFileChannelLayout(const CAAudioChannelLayout &layout) {
- XThrowIfError(ExtAudioFileSetProperty(mExtAF, kExtAudioFileProperty_FileChannelLayout, layout.Size(), &layout.Layout()), "Couldn't set file's channel layout");
- mFileChannelLayout = layout;
- }
-
- const CAStreamBasicDescription &GetClientDataFormat() {
- UInt32 size = sizeof(mClientDataFormat);
- XThrowIfError(ExtAudioFileGetProperty(mExtAF, kExtAudioFileProperty_ClientDataFormat, &size, &mClientDataFormat), "Couldn't get client data format");
- return mClientDataFormat;
- }
-
- const CAAudioChannelLayout & GetClientChannelLayout() {
- return FetchChannelLayout(mClientChannelLayout, kExtAudioFileProperty_ClientChannelLayout);
- }
-
- void SetClientFormat(const CAStreamBasicDescription &dataFormat, const CAAudioChannelLayout *layout=NULL) {
- XThrowIfError(ExtAudioFileSetProperty(mExtAF, kExtAudioFileProperty_ClientDataFormat, sizeof(dataFormat), &dataFormat), "Couldn't set client format");
- if (layout)
- SetClientChannelLayout(*layout);
- }
-
- void SetClientChannelLayout(const CAAudioChannelLayout &layout) {
- XThrowIfError(ExtAudioFileSetProperty(mExtAF, kExtAudioFileProperty_ClientChannelLayout, layout.Size(), &layout.Layout()), "Couldn't set client channel layout");
- }
-
- AudioConverterRef GetConverter() const {
- UInt32 size = sizeof(AudioConverterRef);
- AudioConverterRef converter;
- XThrowIfError(ExtAudioFileGetProperty(mExtAF, kExtAudioFileProperty_AudioConverter, &size, &converter), "Couldn't get file's AudioConverter");
- return converter;
- }
-
- OSStatus SetConverterProperty(AudioConverterPropertyID inPropertyID, UInt32 inPropertyDataSize, const void *inPropertyData, bool inCanFail=false)
- {
- OSStatus err = AudioConverterSetProperty(GetConverter(), inPropertyID, inPropertyDataSize, inPropertyData);
- if (!inCanFail)
- XThrowIfError(err, "Couldn't set audio converter property");
- if (!err) {
- // must tell the file that we have changed the converter; a NULL converter config is sufficient
- CFPropertyListRef config = NULL;
- XThrowIfError(ExtAudioFileSetProperty(mExtAF, kExtAudioFileProperty_ConverterConfig, sizeof(CFPropertyListRef), &config), "couldn't signal the file that the converter has changed");
- }
- return err;
- }
-
- SInt64 GetNumberFrames() {
- SInt64 length;
- UInt32 size = sizeof(SInt64);
- XThrowIfError(ExtAudioFileGetProperty(mExtAF, kExtAudioFileProperty_FileLengthFrames, &size, &length), "Couldn't get file's length");
- return length;
- }
-
- void SetNumberFrames(SInt64 length) {
- XThrowIfError(ExtAudioFileSetProperty(mExtAF, kExtAudioFileProperty_FileLengthFrames, sizeof(SInt64), &length), "Couldn't set file's length");
- }
-
- void Seek(SInt64 pos) {
- XThrowIfError(ExtAudioFileSeek(mExtAF, pos), "Couldn't seek in audio file");
- }
-
- SInt64 Tell() {
- SInt64 pos;
- XThrowIfError(ExtAudioFileTell(mExtAF, &pos), "Couldn't get file's mark");
- return pos;
- }
-
- void Read(UInt32 &ioFrames, AudioBufferList *ioData) {
- XThrowIfError(ExtAudioFileRead(mExtAF, &ioFrames, ioData), "Couldn't read audio file");
- }
-
- void Write(UInt32 inFrames, const AudioBufferList *inData) {
- XThrowIfError(ExtAudioFileWrite(mExtAF, inFrames, inData), "Couldn't write audio file");
- }
-
- void SetIOBufferSizeBytes(UInt32 bufferSizeBytes) {
- XThrowIfError(ExtAudioFileSetProperty(mExtAF, kExtAudioFileProperty_IOBufferSizeBytes, sizeof(UInt32), &bufferSizeBytes), "Couldn't set audio file's I/O buffer size");
- }
-
-private:
- const CAAudioChannelLayout & FetchChannelLayout(CAAudioChannelLayout &layoutObj, ExtAudioFilePropertyID propID) {
- UInt32 size;
- XThrowIfError(ExtAudioFileGetPropertyInfo(mExtAF, propID, &size, NULL), "Couldn't get info about channel layout");
- AudioChannelLayout *layout = (AudioChannelLayout *)malloc(size);
- OSStatus err = ExtAudioFileGetProperty(mExtAF, propID, &size, layout);
- if (err) {
- free(layout);
- XThrowIfError(err, "Couldn't get channel layout");
- }
- layoutObj = layout;
- free(layout);
- return layoutObj;
- }
-
-
-private:
- ExtAudioFileRef mExtAF;
-
- CAStreamBasicDescription mFileDataFormat;
- CAAudioChannelLayout mFileChannelLayout;
-
- CAStreamBasicDescription mClientDataFormat;
- CAAudioChannelLayout mClientChannelLayout;
-#endif
-
-#if !CAAF_USE_EXTAUDIOFILE
- CAAudioFile();
- virtual ~CAAudioFile();
-
- // --- second-stage initializers ---
- // Use exactly one of the following:
- // - Open
- // - PrepareNew followed by Create
- // - Wrap
-
- void Open(const FSRef &fsref);
- // open an existing file
-
- void CreateNew(const FSRef &inParentDir, CFStringRef inFileName, AudioFileTypeID inFileType, const AudioStreamBasicDescription &inStreamDesc, const AudioChannelLayout *inChannelLayout=NULL);
-
- void Wrap(AudioFileID fileID, bool forWriting);
- // use this to wrap an AudioFileID opened externally
-
- // ---
-
- void Close();
- // In case you want to close the file before the destructor executes
-
- // --- Data formats ---
-
- // Allow specifying the file's channel layout. Must be called before SetClientFormat.
- // When writing, the specified channel layout is written to the file (if the file format supports
- // the channel layout). When reading, the specified layout overrides the one read from the file,
- // if any.
- void SetFileChannelLayout(const CAAudioChannelLayout &layout);
-
- // This specifies the data format which the client will use for reading/writing the file,
- // which may be different from the file's format. An AudioConverter is created if necessary.
- // The client format must be linear PCM.
- void SetClientFormat(const CAStreamBasicDescription &dataFormat, const CAAudioChannelLayout *layout=NULL);
- void SetClientDataFormat(const CAStreamBasicDescription &dataFormat) { SetClientFormat(dataFormat, NULL); }
- void SetClientChannelLayout(const CAAudioChannelLayout &layout) { SetClientFormat(mClientDataFormat, &layout); }
-
- // Wrapping the underlying converter, if there is one
- OSStatus SetConverterProperty(AudioConverterPropertyID inPropertyID,
- UInt32 inPropertyDataSize,
- const void * inPropertyData,
- bool inCanFail = false);
- void SetConverterConfig(CFArrayRef config) {
- SetConverterProperty(kAudioConverterPropertySettings, sizeof(config), &config); }
- CFArrayRef GetConverterConfig();
-
- // --- I/O ---
- // All I/O is sequential, but you can seek to an arbitrary position when reading.
- // SeekToPacket and TellPacket's packet numbers are in the file's data format, not the client's.
- // However, ReadPackets/WritePackets use packet counts in the client data format.
-
- void Read(UInt32 &ioNumFrames, AudioBufferList *ioData);
- void Write(UInt32 numFrames, const AudioBufferList *data);
-
- // These can fail for files without a constant mFramesPerPacket
- void Seek(SInt64 frameNumber);
- SInt64 Tell() const; // frameNumber
-
- // --- Accessors ---
- // note: client parameters only valid if SetClientFormat has been called
- AudioFileID GetAudioFileID() const { return mAudioFile; }
- const CAStreamBasicDescription &GetFileDataFormat() const { return mFileDataFormat; }
- const CAStreamBasicDescription &GetClientDataFormat() const { return mClientDataFormat; }
- const CAAudioChannelLayout & GetFileChannelLayout() const { return mFileChannelLayout; }
- const CAAudioChannelLayout & GetClientChannelLayout() const { return mClientChannelLayout; }
- AudioConverterRef GetConverter() const { return mConverter; }
-
- UInt32 GetFileMaxPacketSize() const { return mFileMaxPacketSize; }
- UInt32 GetClientMaxPacketSize() const { return mClientMaxPacketSize; }
- SInt64 GetNumberPackets() const {
- SInt64 npackets;
- UInt32 propertySize = sizeof(npackets);
- XThrowIfError(AudioFileGetProperty(mAudioFile, kAudioFilePropertyAudioDataPacketCount, &propertySize, &npackets), "get audio file's packet count");
- return npackets;
- }
- SInt64 GetNumberFrames() const;
- // will be 0 if the file's frames/packet is 0 (variable)
- void SetNumberFrames(SInt64 length); // should only be set on a PCM file
-
- // --- Tunable performance parameters ---
- void SetUseCache(bool b) { mUseCache = b; }
- void SetIOBufferSizeBytes(UInt32 bufferSizeBytes) { mIOBufferSizeBytes = bufferSizeBytes; }
- UInt32 GetIOBufferSizeBytes() { return mIOBufferSizeBytes; }
- void * GetIOBuffer() { return mIOBufferList.mBuffers[0].mData; }
- void SetIOBuffer(void *buf);
-
- // -- Profiling ---
-#if CAAUDIOFILE_PROFILE
- void EnableProfiling(bool b) { mProfiling = b; }
- UInt64 TicksInConverter() const { return (mTicksInConverter > 0) ? (mTicksInConverter - mTicksInReadInConverter) : 0; }
- UInt64 TicksInIO() const { return mTicksInIO; }
-#endif
-
-// _______________________________________________________________________________________
-private:
- SInt64 FileDataOffset();
- void SeekToPacket(SInt64 packetNumber);
- SInt64 TellPacket() const { return mPacketMark; } // will be imprecise if SeekToFrame was called
-
- void SetConverterChannelLayout(bool output, const CAAudioChannelLayout &layout);
- void WritePacketsFromCallback(
- AudioConverterComplexInputDataProc inInputDataProc,
- void * inInputDataProcUserData);
- // will use I/O buffer size
- void InitFileMaxPacketSize();
- void FileFormatChanged(const FSRef *parentDir=0, CFStringRef filename=0, AudioFileTypeID filetype=0);
-
- void GetExistingFileInfo();
- void FlushEncoder();
- void CloseConverter();
- void UpdateClientMaxPacketSize();
- void AllocateBuffers(bool okToFail=false);
- SInt64 PacketToFrame(SInt64 packet) const;
- SInt64 FrameToPacket(SInt64 inFrame) const;
-
- static OSStatus ReadInputProc( AudioConverterRef inAudioConverter,
- UInt32* ioNumberDataPackets,
- AudioBufferList* ioData,
- AudioStreamPacketDescription** outDataPacketDescription,
- void* inUserData);
-
- static OSStatus WriteInputProc( AudioConverterRef inAudioConverter,
- UInt32* ioNumberDataPackets,
- AudioBufferList* ioData,
- AudioStreamPacketDescription** outDataPacketDescription,
- void* inUserData);
-// _______________________________________________________________________________________
-private:
-
- // the file
- FSRef mFSRef;
- AudioFileID mAudioFile;
- bool mOwnOpenFile;
- bool mUseCache;
- bool mFinishingEncoding;
- enum { kClosed, kReading, kPreparingToCreate, kPreparingToWrite, kWriting } mMode;
-
-// SInt64 mNumberPackets; // in file's format
- SInt64 mFileDataOffset;
- SInt64 mPacketMark; // in file's format
- SInt64 mFrameMark; // this may be offset from the start of the file
- // by the codec's latency; i.e. our frame 0 could
- // lie at frame 2112 of a decoded AAC file
- SInt32 mFrame0Offset;
- UInt32 mFramesToSkipFollowingSeek;
-
- // buffers
- UInt32 mIOBufferSizeBytes;
- UInt32 mIOBufferSizePackets;
- AudioBufferList mIOBufferList; // only one buffer -- USE ACCESSOR so it can be lazily initialized
- bool mClientOwnsIOBuffer;
- AudioStreamPacketDescription *mPacketDescs;
- UInt32 mNumPacketDescs;
-
- // formats/conversion
- AudioConverterRef mConverter;
- CAStreamBasicDescription mFileDataFormat;
- CAStreamBasicDescription mClientDataFormat;
- CAAudioChannelLayout mFileChannelLayout;
- CAAudioChannelLayout mClientChannelLayout;
- UInt32 mFileMaxPacketSize;
- UInt32 mClientMaxPacketSize;
-
- // cookie
- Byte * mMagicCookie;
- UInt32 mMagicCookieSize;
-
- // for ReadPackets
- UInt32 mMaxPacketsToRead;
-
- // for WritePackets
- UInt32 mWritePackets;
- CABufferList * mWriteBufferList;
-
-#if CAAUDIOFILE_PROFILE
- // performance
- bool mProfiling;
- UInt64 mTicksInConverter;
- UInt64 mTicksInReadInConverter;
- UInt64 mTicksInIO;
- bool mInConverter;
-#endif
-
-#endif // CAAF_USE_EXTAUDIOFILE
-};
-
-#endif // __CAAudioFile_h__
diff --git a/libs/appleutility/CAAudioUnit.cpp b/libs/appleutility/CAAudioUnit.cpp
deleted file mode 100644
index 9244877d29..0000000000
--- a/libs/appleutility/CAAudioUnit.cpp
+++ /dev/null
@@ -1,1202 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAAudioUnit.cpp
-
-=============================================================================*/
-
-#include "CAAudioUnit.h"
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <AudioUnit/MusicDevice.h>
-#else
- #include <MusicDevice.h>
-#endif
-
-#include "CAReferenceCounted.h"
-#include "AUOutputBL.h" //this is for the Preroll only
-
-
-struct StackAUChannelInfo {
- StackAUChannelInfo (UInt32 inSize) : mChanInfo ((AUChannelInfo*)malloc (inSize)) {}
- ~StackAUChannelInfo() { free (mChanInfo); }
-
- AUChannelInfo* mChanInfo;
-};
-
-
-
-class CAAudioUnit::AUState : public CAReferenceCounted {
-public:
- AUState (Component inComp)
- : mUnit(0), mNode (0)
- {
- OSStatus result = ::OpenAComponent (inComp, &mUnit);
- if (result)
- throw result;
- Init();
- }
-
- AUState (const AUNode &inNode, const AudioUnit& inUnit)
- : mUnit (inUnit), mNode (inNode)
- {
- Init();
- }
-
- ~AUState();
-
- AudioUnit mUnit;
- AUNode mNode;
-
- OSStatus GetParameter(AudioUnitParameterID inID, AudioUnitScope scope, AudioUnitElement element,
- Float32 &outValue) const
- {
- if (mGetParamProc != NULL) {
- return reinterpret_cast<AudioUnitGetParameterProc>(mGetParamProc) (mConnInstanceStorage,
- inID, scope, element, &outValue);
- }
- return AudioUnitGetParameter(mUnit, inID, scope, element, &outValue);
- }
-
- OSStatus SetParameter(AudioUnitParameterID inID, AudioUnitScope scope, AudioUnitElement element,
- Float32 value, UInt32 bufferOffsetFrames)
- {
- if (mSetParamProc != NULL) {
- return reinterpret_cast<AudioUnitSetParameterProc>(mSetParamProc) (mConnInstanceStorage,
- inID, scope, element, value, bufferOffsetFrames);
- }
- return AudioUnitSetParameter(mUnit, inID, scope, element, value, bufferOffsetFrames);
- }
-
- OSStatus Render (AudioUnitRenderActionFlags * ioActionFlags,
- const AudioTimeStamp * inTimeStamp,
- UInt32 inOutputBusNumber,
- UInt32 inNumberFrames,
- AudioBufferList * ioData)
- {
- if (mRenderProc != NULL) {
- return reinterpret_cast<AudioUnitRenderProc>(mRenderProc) (mConnInstanceStorage,
- ioActionFlags, inTimeStamp, inOutputBusNumber, inNumberFrames, ioData);
- }
- return AudioUnitRender(mUnit, ioActionFlags, inTimeStamp, inOutputBusNumber, inNumberFrames, ioData);
- }
-
- OSStatus MIDIEvent (UInt32 inStatus,
- UInt32 inData1,
- UInt32 inData2,
- UInt32 inOffsetSampleFrame)
- {
-#if !TARGET_OS_WIN32
- if (mMIDIEventProc != NULL) {
- return reinterpret_cast<MusicDeviceMIDIEventProc>(mMIDIEventProc) (mConnInstanceStorage,
- inStatus, inData1, inData2, inOffsetSampleFrame);
- }
- return MusicDeviceMIDIEvent (mUnit, inStatus, inData1, inData2, inOffsetSampleFrame);
-#else
- return paramErr;
-#endif
- }
-
- OSStatus StartNote (MusicDeviceInstrumentID inInstrument,
- MusicDeviceGroupID inGroupID,
- NoteInstanceID * outNoteInstanceID,
- UInt32 inOffsetSampleFrame,
- const MusicDeviceNoteParams * inParams)
- {
-#if !TARGET_OS_WIN32
- return MusicDeviceStartNote (mUnit, inInstrument, inGroupID, outNoteInstanceID, inOffsetSampleFrame, inParams);
-#else
- return paramErr;
-#endif
- }
- OSStatus StopNote (MusicDeviceGroupID inGroupID,
- NoteInstanceID inNoteInstanceID,
- UInt32 inOffsetSampleFrame)
- {
-#if !TARGET_OS_WIN32
- return MusicDeviceStopNote (mUnit, inGroupID, inNoteInstanceID, inOffsetSampleFrame);
-#else
- return paramErr;
-#endif
- }
-
-private:
- // get the fast dispatch pointers
- void Init()
- {
- UInt32 size = sizeof(AudioUnitRenderProc);
- if (AudioUnitGetProperty(mUnit, kAudioUnitProperty_FastDispatch,
- kAudioUnitScope_Global, kAudioUnitRenderSelect,
- &mRenderProc, &size) != noErr)
- mRenderProc = NULL;
- if (AudioUnitGetProperty(mUnit, kAudioUnitProperty_FastDispatch,
- kAudioUnitScope_Global, kAudioUnitGetParameterSelect,
- &mGetParamProc, &size) != noErr)
- mGetParamProc = NULL;
- if (AudioUnitGetProperty(mUnit, kAudioUnitProperty_FastDispatch,
- kAudioUnitScope_Global, kAudioUnitSetParameterSelect,
- &mSetParamProc, &size) != noErr)
- mSetParamProc = NULL;
-
- if (AudioUnitGetProperty(mUnit, kAudioUnitProperty_FastDispatch,
- kAudioUnitScope_Global, kMusicDeviceMIDIEventSelect,
- &mMIDIEventProc, &size) != noErr)
- mMIDIEventProc = NULL;
-
- if (mRenderProc || mGetParamProc || mSetParamProc || mMIDIEventProc)
- mConnInstanceStorage = GetComponentInstanceStorage(mUnit);
- else
- mConnInstanceStorage = NULL;
- }
-
- ProcPtr mRenderProc, mGetParamProc, mSetParamProc, mMIDIEventProc;
-
- void * mConnInstanceStorage;
-
-private:
- // get the compiler to tell us when we do a bad thing!!!
- AUState () {}
- AUState (const AUState&) {}
- AUState& operator= (const AUState&) { return *this; }
-};
-
-
-CAAudioUnit::AUState::~AUState ()
-{
- if (mUnit && (mNode == 0)) {
- ::CloseComponent (mUnit);
- }
- mNode = 0;
- mUnit = 0;
-}
-
-OSStatus CAAudioUnit::Open (const CAComponent& inComp, CAAudioUnit &outUnit)
-{
- try {
- outUnit = inComp;
- return noErr;
- } catch (OSStatus res) {
- return res;
- } catch (...) {
- return -1;
- }
-}
-
-CAAudioUnit::CAAudioUnit (const AudioUnit& inUnit)
- : mComp (inUnit), mDataPtr (new AUState (-1, inUnit))
-{
-}
-
-CAAudioUnit::CAAudioUnit (const CAComponent& inComp)
- : mComp (inComp), mDataPtr (0)
-{
- mDataPtr = new AUState (mComp.Comp());
-}
-
-CAAudioUnit::CAAudioUnit (const AUNode &inNode, const AudioUnit& inUnit)
- : mComp (inUnit), mDataPtr(new AUState (inNode, inUnit))
-{
-}
-
-CAAudioUnit::~CAAudioUnit ()
-{
- if (mDataPtr) {
- mDataPtr->release();
- mDataPtr = NULL;
- }
-}
-
-CAAudioUnit& CAAudioUnit::operator= (const CAAudioUnit &a)
-{
- if (mDataPtr != a.mDataPtr) {
- if (mDataPtr)
- mDataPtr->release();
-
- if ((mDataPtr = a.mDataPtr) != NULL)
- mDataPtr->retain();
-
- mComp = a.mComp;
- }
-
- return *this;
-}
-
-bool CAAudioUnit::operator== (const CAAudioUnit& y) const
-{
- if (mDataPtr == y.mDataPtr) return true;
- AudioUnit au1 = mDataPtr ? mDataPtr->mUnit : 0;
- AudioUnit au2 = y.mDataPtr ? y.mDataPtr->mUnit : 0;
- return au1 == au2;
-}
-
-bool CAAudioUnit::operator== (const AudioUnit& y) const
-{
- if (!mDataPtr) return false;
- return mDataPtr->mUnit == y;
-}
-
-#pragma mark __State Management
-
-bool CAAudioUnit::IsValid () const
-{
- return mDataPtr ? mDataPtr->mUnit != 0 : false;
-}
-
-AudioUnit CAAudioUnit::AU() const
-{
- return mDataPtr ? mDataPtr->mUnit : 0;
-}
-
-AUNode CAAudioUnit::GetAUNode () const
-{
- return mDataPtr ? mDataPtr->mNode : 0;
-}
-
-#pragma mark __Format Handling
-
-bool CAAudioUnit::CanDo ( int inChannelsIn,
- int inChannelsOut) const
-{
- // this is the default assumption of an audio effect unit
- Boolean* isWritable = 0;
- UInt32 dataSize = 0;
- // lets see if the unit has any channel restrictions
- OSStatus result = AudioUnitGetPropertyInfo (AU(),
- kAudioUnitProperty_SupportedNumChannels,
- kAudioUnitScope_Global, 0,
- &dataSize, isWritable); //don't care if this is writable
-
- // if this property is NOT implemented an FX unit
- // is expected to deal with same channel valance in and out
- if (result)
- {
- if (Comp().Desc().IsEffect() && (inChannelsIn == inChannelsOut)
- || Comp().Desc().IsOffline() && (inChannelsIn == inChannelsOut))
- {
- return true;
- }
- else
- {
- // the au should either really tell us about this
- // or we will assume the worst
- return false;
- }
- }
-
- StackAUChannelInfo info (dataSize);
-
- result = GetProperty (kAudioUnitProperty_SupportedNumChannels,
- kAudioUnitScope_Global, 0,
- info.mChanInfo, &dataSize);
- if (result) { return false; }
-
- return ValidateChannelPair (inChannelsIn, inChannelsOut, info.mChanInfo, (dataSize / sizeof (AUChannelInfo)));
-}
-
-bool CAAudioUnit::ValidateChannelPair (int inChannelsIn,
- int inChannelsOut,
- const AUChannelInfo * info,
- UInt32 numChanInfo) const
-{
-// we've the following cases (some combinations) to test here:
-/*
->0 An explicit number of channels on either side
-0 that side (generally input!) has no elements
--1 wild card:
--1,-1 any num channels as long as same channels on in and out
--1,-2 any num channels channels on in and out - special meaning
--2+ indicates total num channs AU can handle
- - elements configurable to any num channels,
- - element count in scope must be writable
-*/
-
- //now chan layout can contain -1 for either scope (ie. doesn't care)
- for (unsigned int i = 0; i < numChanInfo; ++i)
- {
- //less than zero on both sides - check for special attributes
- if ((info[i].inChannels < 0) && (info[i].outChannels < 0))
- {
- // these are our wild card matches
- if (info[i].inChannels == -1 && info[i].outChannels == -1) {
- if (inChannelsOut == inChannelsIn) {
- return true;
- }
- }
- else if ((info[i].inChannels == -1 && info[i].outChannels == -2)
- || (info[i].inChannels == -2 && info[i].outChannels == -1))
- {
- return true;
- }
- // these are our total num channels matches
- // element count MUST be writable
- else {
- bool outWrite = false; bool inWrite = false;
- IsElementCountWritable (kAudioUnitScope_Output, outWrite);
- IsElementCountWritable (kAudioUnitScope_Input, inWrite);
- if (inWrite && outWrite) {
- if ((inChannelsOut <= abs(info[i].outChannels))
- && (inChannelsIn <= abs(info[i].inChannels)))
- {
- return true;
- }
- }
- }
- }
-
- // special meaning on input, specific num on output
- else if (info[i].inChannels < 0) {
- if (info[i].outChannels == inChannelsOut)
- {
- // can do any in channels
- if (info[i].inChannels == -1) {
- return true;
- }
- // total chans on input
- else {
- bool inWrite = false;
- IsElementCountWritable (kAudioUnitScope_Input, inWrite);
- if (inWrite && (inChannelsIn <= abs(info[i].inChannels))) {
- return true;
- }
- }
- }
- }
-
- // special meaning on output, specific num on input
- else if (info[i].outChannels < 0) {
- if (info[i].inChannels == inChannelsIn)
- {
- // can do any out channels
- if (info[i].outChannels == -1) {
- return true;
- }
- // total chans on output
- else {
- bool outWrite = false;
- IsElementCountWritable (kAudioUnitScope_Output, outWrite);
- if (outWrite && (inChannelsOut <= abs(info[i].outChannels))) {
- return true;
- }
- }
- }
- }
-
- // both chans in struct >= 0 - thus has to explicitly match
- else if ((info[i].inChannels == inChannelsIn) && (info[i].outChannels == inChannelsOut)) {
- return true;
- }
-
- // now check to see if a wild card on the args (inChannelsIn or inChannelsOut chans is zero) is found
- // tells us to match just one side of the scopes
- else if (inChannelsIn == 0) {
- if (info[i].outChannels == inChannelsOut) {
- return true;
- }
- }
- else if (inChannelsOut == 0) {
- if (info[i].inChannels == inChannelsIn) {
- return true;
- }
- }
- }
-
- return false;
-}
-
-bool CheckDynCount (SInt32 inTotalChans, const CAAUChanHelper &inHelper)
-{
- int totalChans = 0;
- for (unsigned int i = 0; i < inHelper.mNumEls; ++i)
- totalChans += inHelper.mChans[i];
- return (totalChans <= inTotalChans);
-}
-
-bool CAAudioUnit::CheckOneSide (const CAAUChanHelper &inHelper,
- bool checkOutput,
- const AUChannelInfo *info,
- UInt32 numInfo) const
-{
- // now we can use the wildcard option (see above impl) to see if this matches
- for (unsigned int el = 0; el < inHelper.mNumEls; ++el) {
- bool testAlready = false;
- for (unsigned int i = 0; i < el; ++i) {
- if (inHelper.mChans[i] == inHelper.mChans[el]) {
- testAlready = true;
- break;
- }
- }
- if (!testAlready) {
- if (checkOutput) {
- if (!ValidateChannelPair (0, inHelper.mChans[el], info, numInfo)) return false;
- } else {
- if (!ValidateChannelPair (inHelper.mChans[el], 0, info, numInfo)) return false;
- }
- }
- }
- return true;
-}
-
-bool CAAudioUnit::CanDo (const CAAUChanHelper &inputs,
- const CAAUChanHelper &outputs) const
-
-{
-// first check our state
- // huh!
- if (inputs.mNumEls == 0 && outputs.mNumEls == 0) return false;
-
- UInt32 elCount;
- if (GetElementCount (kAudioUnitScope_Input, elCount)) { return false; }
- if (elCount != inputs.mNumEls) return false;
-
- if (GetElementCount (kAudioUnitScope_Output, elCount)) { return false; }
- if (elCount != outputs.mNumEls) return false;
-
-// (1) special cases (effects and sources (generators and instruments) only)
- UInt32 dataSize = 0;
- if (GetPropertyInfo (kAudioUnitProperty_SupportedNumChannels,
- kAudioUnitScope_Global, 0, &dataSize, NULL) != noErr)
- {
- if (Comp().Desc().IsEffect() || Comp().Desc().IsOffline()) {
- UInt32 numChan = outputs.mNumEls > 0 ? outputs.mChans[0] : inputs.mChans[0];
- for (unsigned int in = 0; in < inputs.mNumEls; ++in)
- if (numChan != inputs.mChans[in]) return false;
- for (unsigned int out = 0; out < outputs.mNumEls; ++out)
- if (numChan != outputs.mChans[out]) return false;
- return true;
- }
-
- // in this case, all the channels have to match the current config
- if (Comp().Desc().IsGenerator() || Comp().Desc().IsMusicDevice()) {
- for (unsigned int in = 0; in < inputs.mNumEls; ++in) {
- UInt32 chan;
- if (NumberChannels (kAudioUnitScope_Input, in, chan)) return false;
- if (chan != UInt32(inputs.mChans[in])) return false;
- }
- for (unsigned int out = 0; out < outputs.mNumEls; ++out) {
- UInt32 chan;
- if (NumberChannels (kAudioUnitScope_Output, out, chan)) return false;
- if (chan != UInt32(outputs.mChans[out])) return false;
- }
- return true;
- }
-
- // if we get here we can't determine anything about channel capabilities
- return false;
- }
-
- StackAUChannelInfo info (dataSize);
-
- if (GetProperty (kAudioUnitProperty_SupportedNumChannels,
- kAudioUnitScope_Global, 0,
- info.mChanInfo, &dataSize) != noErr)
- {
- return false;
- }
-
- int numInfo = dataSize / sizeof(AUChannelInfo);
-
-// (2) Test for dynamic capability (or no elements on that scope)
- SInt32 dynInChans = 0;
- if (ValidateDynamicScope (kAudioUnitScope_Input, dynInChans, info.mChanInfo, numInfo)) {
- if (CheckDynCount (dynInChans, inputs) == false) return false;
- }
-
- SInt32 dynOutChans = 0;
- if (ValidateDynamicScope (kAudioUnitScope_Output, dynOutChans, info.mChanInfo, numInfo)) {
- if (CheckDynCount (dynOutChans, outputs) == false) return false;
- }
-
- if (dynOutChans && dynInChans) { return true; }
-
-// (3) Just need to test one side
- if (dynInChans || (inputs.mNumEls == 0)) {
- return CheckOneSide (outputs, true, info.mChanInfo, numInfo);
- }
-
- if (dynOutChans || (outputs.mNumEls == 0)) {
- return CheckOneSide (inputs, false, info.mChanInfo, numInfo);
- }
-
-// (4) - not a dynamic AU, has ins and outs, and has channel constraints so we test every possible pairing
- for (unsigned int in = 0; in < inputs.mNumEls; ++in)
- {
- bool testInAlready = false;
- for (unsigned int i = 0; i < in; ++i) {
- if (inputs.mChans[i] == inputs.mChans[in]) {
- testInAlready = true;
- break;
- }
- }
- if (!testInAlready) {
- for (unsigned int out = 0; out < outputs.mNumEls; ++out) {
- // try to save a little bit and not test the same pairing multiple times...
- bool testOutAlready = false;
- for (unsigned int i = 0; i < out; ++i) {
- if (outputs.mChans[i] == outputs.mChans[out]) {
- testOutAlready = true;
- break;
- }
- }
- if (!testOutAlready) {
- if (!ValidateChannelPair (inputs.mChans[in], outputs.mChans[out],info.mChanInfo, numInfo)) {
- return false;
- }
- }
- }
- }
- }
-
- return true;
-}
-
-bool CAAudioUnit::SupportsNumChannels () const
-{
- // this is the default assumption of an audio effect unit
- Boolean* isWritable = 0;
- UInt32 dataSize = 0;
- // lets see if the unit has any channel restrictions
- OSStatus result = AudioUnitGetPropertyInfo (AU(),
- kAudioUnitProperty_SupportedNumChannels,
- kAudioUnitScope_Global, 0,
- &dataSize, isWritable); //don't care if this is writable
-
- // if this property is NOT implemented an FX unit
- // is expected to deal with same channel valance in and out
- if (result) {
- if (Comp().Desc().IsEffect() || Comp().Desc().IsOffline())
- return true;
- }
- return result == noErr;
-}
-
-bool CAAudioUnit::GetChannelLayouts (AudioUnitScope inScope,
- AudioUnitElement inEl,
- ChannelTagVector &outChannelVector) const
-{
- if (HasChannelLayouts (inScope, inEl) == false) return false;
-
- UInt32 dataSize;
- OSStatus result = AudioUnitGetPropertyInfo (AU(),
- kAudioUnitProperty_SupportedChannelLayoutTags,
- inScope, inEl,
- &dataSize, NULL);
-
- if (result == kAudioUnitErr_InvalidProperty) {
- // if we get here we can do layouts but we've got the speaker config property
- outChannelVector.erase (outChannelVector.begin(), outChannelVector.end());
- outChannelVector.push_back (kAudioChannelLayoutTag_Stereo);
- outChannelVector.push_back (kAudioChannelLayoutTag_StereoHeadphones);
- outChannelVector.push_back (kAudioChannelLayoutTag_Quadraphonic);
- outChannelVector.push_back (kAudioChannelLayoutTag_AudioUnit_5_0);
- return true;
- }
-
- if (result) return false;
-
- bool canDo = false;
- // OK lets get our channel layouts and see if the one we want is present
- AudioChannelLayoutTag* info = (AudioChannelLayoutTag*)malloc (dataSize);
- result = AudioUnitGetProperty (AU(),
- kAudioUnitProperty_SupportedChannelLayoutTags,
- inScope, inEl,
- info, &dataSize);
- if (result) goto home;
-
- outChannelVector.erase (outChannelVector.begin(), outChannelVector.end());
- for (unsigned int i = 0; i < (dataSize / sizeof (AudioChannelLayoutTag)); ++i)
- outChannelVector.push_back (info[i]);
-
-home:
- free (info);
- return canDo;
-}
-
-bool CAAudioUnit::HasChannelLayouts (AudioUnitScope inScope,
- AudioUnitElement inEl) const
-{
- OSStatus result = AudioUnitGetPropertyInfo (AU(),
- kAudioUnitProperty_SupportedChannelLayoutTags,
- inScope, inEl,
- NULL, NULL);
- return !result;
-}
-
-OSStatus CAAudioUnit::GetChannelLayout (AudioUnitScope inScope,
- AudioUnitElement inEl,
- CAAudioChannelLayout &outLayout) const
-{
- UInt32 size;
- OSStatus result = AudioUnitGetPropertyInfo (AU(), kAudioUnitProperty_AudioChannelLayout,
- inScope, inEl, &size, NULL);
- if (result) return result;
-
- AudioChannelLayout *layout = (AudioChannelLayout*)malloc (size);
-
- require_noerr (result = AudioUnitGetProperty (AU(), kAudioUnitProperty_AudioChannelLayout,
- inScope, inEl, layout, &size), home);
-
- outLayout = CAAudioChannelLayout (layout);
-
-home:
- free (layout);
- return result;
-}
-
-OSStatus CAAudioUnit::SetChannelLayout (AudioUnitScope inScope,
- AudioUnitElement inEl,
- CAAudioChannelLayout &inLayout)
-{
- OSStatus result = AudioUnitSetProperty (AU(),
- kAudioUnitProperty_AudioChannelLayout,
- inScope, inEl,
- inLayout, inLayout.Size());
- return result;
-}
-
-OSStatus CAAudioUnit::SetChannelLayout (AudioUnitScope inScope,
- AudioUnitElement inEl,
- AudioChannelLayout &inLayout,
- UInt32 inSize)
-{
- OSStatus result = AudioUnitSetProperty (AU(),
- kAudioUnitProperty_AudioChannelLayout,
- inScope, inEl,
- &inLayout, inSize);
- return result;
-}
-
-OSStatus CAAudioUnit::ClearChannelLayout (AudioUnitScope inScope,
- AudioUnitElement inEl)
-{
- return AudioUnitSetProperty (AU(),
- kAudioUnitProperty_AudioChannelLayout,
- inScope, inEl, NULL, 0);
-}
-
-OSStatus CAAudioUnit::GetFormat (AudioUnitScope inScope,
- AudioUnitElement inEl,
- AudioStreamBasicDescription &outFormat) const
-{
- UInt32 dataSize = sizeof (AudioStreamBasicDescription);
- return AudioUnitGetProperty (AU(), kAudioUnitProperty_StreamFormat,
- inScope, inEl,
- &outFormat, &dataSize);
-}
-
-OSStatus CAAudioUnit::SetFormat (AudioUnitScope inScope,
- AudioUnitElement inEl,
- const AudioStreamBasicDescription &inFormat)
-{
- return AudioUnitSetProperty (AU(), kAudioUnitProperty_StreamFormat,
- inScope, inEl,
- const_cast<AudioStreamBasicDescription*>(&inFormat),
- sizeof (AudioStreamBasicDescription));
-}
-
-OSStatus CAAudioUnit::GetSampleRate (AudioUnitScope inScope,
- AudioUnitElement inEl,
- Float64 &outRate) const
-{
- UInt32 dataSize = sizeof (Float64);
- return AudioUnitGetProperty (AU(), kAudioUnitProperty_SampleRate,
- inScope, inEl,
- &outRate, &dataSize);
-}
-
-OSStatus CAAudioUnit::SetSampleRate (AudioUnitScope inScope,
- AudioUnitElement inEl,
- Float64 inRate)
-{
- AudioStreamBasicDescription desc;
- OSStatus result = GetFormat (inScope, inEl, desc);
- if (result) return result;
- desc.mSampleRate = inRate;
- return SetFormat (inScope, inEl, desc);
-}
-
-OSStatus CAAudioUnit::SetSampleRate (Float64 inSampleRate)
-{
- OSStatus result;
-
- UInt32 elCount;
- require_noerr (result = GetElementCount(kAudioUnitScope_Input, elCount), home);
- if (elCount) {
- for (unsigned int i = 0; i < elCount; ++i) {
- require_noerr (result = SetSampleRate (kAudioUnitScope_Input, i, inSampleRate), home);
- }
- }
-
- require_noerr (result = GetElementCount(kAudioUnitScope_Output, elCount), home);
- if (elCount) {
- for (unsigned int i = 0; i < elCount; ++i) {
- require_noerr (result = SetSampleRate (kAudioUnitScope_Output, i, inSampleRate), home);
- }
- }
-
-home:
- return result;
-}
-
-OSStatus CAAudioUnit::NumberChannels (AudioUnitScope inScope,
- AudioUnitElement inEl,
- UInt32 &outChans) const
-{
- AudioStreamBasicDescription desc;
- OSStatus result = GetFormat (inScope, inEl, desc);
- if (!result)
- outChans = desc.mChannelsPerFrame;
- return result;
-}
-
-OSStatus CAAudioUnit::SetNumberChannels (AudioUnitScope inScope,
- AudioUnitElement inEl,
- UInt32 inChans)
-{
- // set this as the output of the AU
- CAStreamBasicDescription desc;
- OSStatus result = GetFormat (inScope, inEl, desc);
- if (result) return result;
- desc.SetCanonical (inChans, desc.IsInterleaved());
- result = SetFormat (inScope, inEl, desc);
- return result;
-}
-
-OSStatus CAAudioUnit::IsElementCountWritable (AudioUnitScope inScope, bool &outWritable) const
-{
- Boolean isWritable;
- UInt32 outDataSize;
- OSStatus result = GetPropertyInfo (kAudioUnitProperty_ElementCount, inScope, 0, &outDataSize, &isWritable);
- if (result)
- return result;
- outWritable = isWritable ? true : false;
- return noErr;
-}
-
-OSStatus CAAudioUnit::GetElementCount (AudioUnitScope inScope, UInt32 &outCount) const
-{
- UInt32 propSize = sizeof(outCount);
- return GetProperty (kAudioUnitProperty_ElementCount, inScope, 0, &outCount, &propSize);
-}
-
-OSStatus CAAudioUnit::SetElementCount (AudioUnitScope inScope, UInt32 inCount)
-{
- return SetProperty (kAudioUnitProperty_ElementCount, inScope, 0, &inCount, sizeof(inCount));
-}
-
-bool CAAudioUnit::HasDynamicScope (AudioUnitScope inScope, SInt32 &outTotalNumChannels) const
-{
- // ok - now we need to check the AU's capability here.
- // this is the default assumption of an audio effect unit
- Boolean* isWritable = 0;
- UInt32 dataSize = 0;
- OSStatus result = GetPropertyInfo (kAudioUnitProperty_SupportedNumChannels,
- kAudioUnitScope_Global, 0,
- &dataSize, isWritable); //don't care if this is writable
-
- // AU has to explicitly tell us about this.
- if (result) return false;
-
- StackAUChannelInfo info (dataSize);
-
- result = GetProperty (kAudioUnitProperty_SupportedNumChannels,
- kAudioUnitScope_Global, 0,
- info.mChanInfo, &dataSize);
- if (result) return false;
-
- return ValidateDynamicScope (inScope, outTotalNumChannels, info.mChanInfo, (dataSize / sizeof(AUChannelInfo)));
-}
-
-// as we've already checked that the element count is writable
-// the following conditions will match this..
-/*
--1, -2 -> signifies no restrictions
--2, -1 -> signifies no restrictions -> in this case outTotalNumChannels == -1 (any num channels)
-
--N (where N is less than -2), signifies the total channel count on the scope side (in or out)
-*/
-bool CAAudioUnit::ValidateDynamicScope (AudioUnitScope inScope,
- SInt32 &outTotalNumChannels,
- const AUChannelInfo *info,
- UInt32 numInfo) const
-{
- bool writable = false;
- OSStatus result = IsElementCountWritable (inScope, writable);
- if (result || (writable == false))
- return false;
-
- //now chan layout can contain -1 for either scope (ie. doesn't care)
- for (unsigned int i = 0; i < numInfo; ++i)
- {
- // lets test the special wild card case first...
- // this says the AU can do any num channels on input or output - for eg. Matrix Mixer
- if (((info[i].inChannels == -1) && (info[i].outChannels == -2))
- || ((info[i].inChannels == -2) && (info[i].outChannels == -1)))
- {
- outTotalNumChannels = -1;
- return true;
- }
-
- // ok lets now test our special case....
- if (inScope == kAudioUnitScope_Input) {
- // isn't dynamic on this side at least
- if (info[i].inChannels >= 0)
- continue;
-
- if (info[i].inChannels < -2) {
- outTotalNumChannels = abs (info[i].inChannels);
- return true;
- }
- }
-
- else if (inScope == kAudioUnitScope_Output) {
- // isn't dynamic on this side at least
- if (info[i].outChannels >= 0)
- continue;
-
- if (info[i].outChannels < -2) {
- outTotalNumChannels = abs (info[i].outChannels);
- return true;
- }
- }
-
- else {
- break; // wrong scope was specified
- }
- }
-
- return false;
-}
-
-OSStatus CAAudioUnit::ConfigureDynamicScope (AudioUnitScope inScope,
- UInt32 inNumElements,
- UInt32 *inChannelsPerElement,
- Float64 inSampleRate)
-{
- SInt32 numChannels = 0;
- bool isDyamic = HasDynamicScope (inScope, numChannels);
- if (isDyamic == false)
- return kAudioUnitErr_InvalidProperty;
-
- //lets to a sanity check...
- // if numChannels == -1, then it can do "any"...
- if (numChannels > 0) {
- SInt32 count = 0;
- for (unsigned int i = 0; i < inNumElements; ++i)
- count += inChannelsPerElement[i];
- if (count > numChannels)
- return kAudioUnitErr_InvalidPropertyValue;
- }
-
- OSStatus result = SetElementCount (inScope, inNumElements);
- if (result)
- return result;
-
- CAStreamBasicDescription desc;
- desc.mSampleRate = inSampleRate;
- for (unsigned int i = 0; i < inNumElements; ++i) {
- desc.SetCanonical (inChannelsPerElement[i], false);
- result = SetFormat (inScope, i, desc);
- if (result)
- return result;
- }
- return noErr;
-}
-
-#pragma mark __Properties
-
-bool CAAudioUnit::CanBypass () const
-{
- Boolean outWritable;
- OSStatus result = AudioUnitGetPropertyInfo (AU(), kAudioUnitProperty_BypassEffect,
- kAudioUnitScope_Global, 0,
- NULL, &outWritable);
- return (!result && outWritable);
-}
-
-bool CAAudioUnit::GetBypass () const
-{
- UInt32 dataSize = sizeof (UInt32);
- UInt32 outBypass;
- OSStatus result = AudioUnitGetProperty (AU(), kAudioUnitProperty_BypassEffect,
- kAudioUnitScope_Global, 0,
- &outBypass, &dataSize);
- return (result ? false : outBypass);
-}
-
-OSStatus CAAudioUnit::SetBypass (bool inBypass) const
-{
- UInt32 bypass = inBypass ? 1 : 0;
- return AudioUnitSetProperty (AU(), kAudioUnitProperty_BypassEffect,
- kAudioUnitScope_Global, 0,
- &bypass, sizeof (UInt32));
-}
-
-Float64 CAAudioUnit::Latency () const
-{
- Float64 secs;
- UInt32 size = sizeof(secs);
- if (GetProperty (kAudioUnitProperty_Latency, kAudioUnitScope_Global, 0, &secs, &size))
- return 0;
- return secs;
-}
-
-OSStatus CAAudioUnit::GetAUPreset (CFPropertyListRef &outData) const
-{
- UInt32 dataSize = sizeof(outData);
- return AudioUnitGetProperty (AU(), kAudioUnitProperty_ClassInfo,
- kAudioUnitScope_Global, 0,
- &outData, &dataSize);
-}
-
-OSStatus CAAudioUnit::SetAUPreset (CFPropertyListRef &inData)
-{
- return AudioUnitSetProperty (AU(), kAudioUnitProperty_ClassInfo,
- kAudioUnitScope_Global, 0,
- &inData, sizeof (CFPropertyListRef));
-}
-
-OSStatus CAAudioUnit::GetPresentPreset (AUPreset &outData) const
-{
- UInt32 dataSize = sizeof(outData);
- OSStatus result = AudioUnitGetProperty (AU(), kAudioUnitProperty_PresentPreset,
- kAudioUnitScope_Global, 0,
- &outData, &dataSize);
- if (result == kAudioUnitErr_InvalidProperty) {
- dataSize = sizeof(outData);
- result = AudioUnitGetProperty (AU(), kAudioUnitProperty_CurrentPreset,
- kAudioUnitScope_Global, 0,
- &outData, &dataSize);
- if (result == noErr) {
- // we now retain the CFString in the preset so for the client of this API
- // it is consistent (ie. the string should be released when done)
- if (outData.presetName)
- CFRetain (outData.presetName);
- }
- }
- return result;
-}
-
-OSStatus CAAudioUnit::SetPresentPreset (AUPreset &inData)
-{
- OSStatus result = AudioUnitSetProperty (AU(), kAudioUnitProperty_PresentPreset,
- kAudioUnitScope_Global, 0,
- &inData, sizeof (AUPreset));
- if (result == kAudioUnitErr_InvalidProperty) {
- result = AudioUnitSetProperty (AU(), kAudioUnitProperty_CurrentPreset,
- kAudioUnitScope_Global, 0,
- &inData, sizeof (AUPreset));
- }
- return result;
-}
-
-bool CAAudioUnit::HasCustomView () const
-{
- UInt32 dataSize = 0;
- OSStatus result = GetPropertyInfo(kAudioUnitProperty_GetUIComponentList,
- kAudioUnitScope_Global, 0,
- &dataSize, NULL);
- if (result || !dataSize) {
- dataSize = 0;
- result = GetPropertyInfo(kAudioUnitProperty_CocoaUI,
- kAudioUnitScope_Global, 0,
- &dataSize, NULL);
- if (result || !dataSize)
- return false;
- }
- return true;
-}
-
-OSStatus CAAudioUnit::GetParameter(AudioUnitParameterID inID, AudioUnitScope scope, AudioUnitElement element,
- Float32 &outValue) const
-{
- return mDataPtr ? mDataPtr->GetParameter (inID, scope, element, outValue) : paramErr;
-}
-
-OSStatus CAAudioUnit::SetParameter(AudioUnitParameterID inID, AudioUnitScope scope, AudioUnitElement element,
- Float32 value, UInt32 bufferOffsetFrames)
-{
- return mDataPtr ? mDataPtr->SetParameter (inID, scope, element, value, bufferOffsetFrames) : paramErr;
-}
-
-OSStatus CAAudioUnit::MIDIEvent (UInt32 inStatus,
- UInt32 inData1,
- UInt32 inData2,
- UInt32 inOffsetSampleFrame)
-{
- return mDataPtr ? mDataPtr->MIDIEvent (inStatus, inData1, inData2, inOffsetSampleFrame) : paramErr;
-}
-
-OSStatus CAAudioUnit::StartNote (MusicDeviceInstrumentID inInstrument,
- MusicDeviceGroupID inGroupID,
- NoteInstanceID * outNoteInstanceID,
- UInt32 inOffsetSampleFrame,
- const MusicDeviceNoteParams * inParams)
-{
- return mDataPtr ? mDataPtr->StartNote (inInstrument, inGroupID, outNoteInstanceID, inOffsetSampleFrame, inParams)
- : paramErr;
-}
-
-OSStatus CAAudioUnit::StopNote (MusicDeviceGroupID inGroupID,
- NoteInstanceID inNoteInstanceID,
- UInt32 inOffsetSampleFrame)
-{
- return mDataPtr ? mDataPtr->StopNote (inGroupID, inNoteInstanceID, inOffsetSampleFrame) : paramErr;
-}
-
-#pragma mark __Render
-
-OSStatus CAAudioUnit::Render (AudioUnitRenderActionFlags * ioActionFlags,
- const AudioTimeStamp * inTimeStamp,
- UInt32 inOutputBusNumber,
- UInt32 inNumberFrames,
- AudioBufferList * ioData)
-{
- return mDataPtr ? mDataPtr->Render (ioActionFlags, inTimeStamp, inOutputBusNumber, inNumberFrames, ioData) : paramErr;
-}
-
-static AURenderCallbackStruct sRenderCallback;
-static OSStatus PrerollRenderProc ( void * /*inRefCon*/,
- AudioUnitRenderActionFlags * /*inActionFlags*/,
- const AudioTimeStamp * /*inTimeStamp*/,
- UInt32 /*inBusNumber*/,
- UInt32 /*inNumFrames*/,
- AudioBufferList *ioData)
-{
- AudioBuffer *buf = ioData->mBuffers;
- for (UInt32 i = ioData->mNumberBuffers; i--; ++buf)
- memset((Byte *)buf->mData, 0, buf->mDataByteSize);
-
- return noErr;
-}
-
-OSStatus CAAudioUnit::Preroll (UInt32 inFrameSize)
-{
- CAStreamBasicDescription desc;
- OSStatus result = GetFormat (kAudioUnitScope_Input, 0, desc);
- bool hasInput = false;
- //we have input
- if (result == noErr)
- {
- sRenderCallback.inputProc = PrerollRenderProc;
- sRenderCallback.inputProcRefCon = 0;
-
- result = SetProperty (kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input,
- 0, &sRenderCallback, sizeof(sRenderCallback));
- if (result) return result;
- hasInput = true;
- }
-
- AudioUnitRenderActionFlags flags = 0;
- AudioTimeStamp time;
- memset (&time, 0, sizeof(time));
- time.mFlags = kAudioTimeStampSampleTimeValid;
-
- CAStreamBasicDescription outputFormat;
- require_noerr (result = GetFormat (kAudioUnitScope_Output, 0, outputFormat), home);
- {
- AUOutputBL list (outputFormat, inFrameSize);
- list.Prepare ();
-
- require_noerr (result = Render (&flags, &time, 0, inFrameSize, list.ABL()), home);
- require_noerr (result = GlobalReset(), home);
- }
-
-home:
- if (hasInput) {
- // remove our installed callback
- sRenderCallback.inputProc = 0;
- sRenderCallback.inputProcRefCon = 0;
-
- SetProperty (kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input,
- 0, &sRenderCallback, sizeof(sRenderCallback));
- }
- return result;
-}
-
-#pragma mark __CAAUChanHelper
-
-CAAUChanHelper::CAAUChanHelper(const CAAudioUnit &inAU, AudioUnitScope inScope)
- :mChans(NULL), mNumEls(0), mDidAllocate(false)
-{
- UInt32 elCount;
- if (inAU.GetElementCount (inScope, elCount)) return;
- if (elCount > 8) {
- mChans = new UInt32[elCount];
- mDidAllocate = true;
- memset (mChans, 0, sizeof(int) * elCount);
- } else {
- mChans = mStaticChans;
- memset (mChans, 0, sizeof(int) * 8);
- }
- for (unsigned int i = 0; i < elCount; ++i) {
- UInt32 numChans;
- if (inAU.NumberChannels (inScope, i, numChans)) return;
- mChans[i] = numChans;
- }
- mNumEls = elCount;
-}
-
-CAAUChanHelper::~CAAUChanHelper()
-{
- if (mDidAllocate) delete [] mChans;
-}
-
-CAAUChanHelper& CAAUChanHelper::operator= (const CAAUChanHelper &c)
-{
- if (mDidAllocate) delete [] mChans;
- if (c.mDidAllocate) {
- mChans = new UInt32[c.mNumEls];
- mDidAllocate = true;
- } else {
- mDidAllocate = false;
- mChans = mStaticChans;
- }
- memcpy (mChans, c.mChans, c.mNumEls * sizeof(int));
-
- return *this;
-}
-
-#pragma mark __Print Utilities
-
-void CAAudioUnit::Print (FILE* file) const
-{
- fprintf (file, "AudioUnit:%p\n", AU());
- if (IsValid()) {
- fprintf (file, "\tnode=%ld\t", (long)GetAUNode()); Comp().Print (file);
- }
-}
diff --git a/libs/appleutility/CAAudioUnit.h b/libs/appleutility/CAAudioUnit.h
deleted file mode 100644
index 6bc31bf30b..0000000000
--- a/libs/appleutility/CAAudioUnit.h
+++ /dev/null
@@ -1,383 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAAudioUnit.h
-
-=============================================================================*/
-
-#ifndef __CAAudioUnit_h__
-#define __CAAudioUnit_h__
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <CoreServices/CoreServices.h>
- #include <CoreAudio/CoreAudio.h>
- #include <AudioUnit/AudioUnit.h>
- #include <AudioToolbox/AUGraph.h>
-#else
- #include <ConditionalMacros.h>
- #include <CoreServices.h>
- #include <CoreAudioTypes.h>
- #include <AudioUnit.h>
- #include <AUGraph.h>
-#endif
-
-#include <vector>
-#include "CAStreamBasicDescription.h"
-#include "CAComponent.h"
-#include "CAAudioChannelLayout.h"
-
-// defined below
-class CAAUChanHelper;
-
-// These constructors will NOT throw exceptions - so "check" after creation if AU IsValid()
-// The destructor will NOT automatically close the AU down
-// This state should be managed by the Caller
-// once closed, the unit represented by this object is no longer valid
-// it is up to the user of this object to ensure its validity is in sync
-// if it is removed from a graph
-
-// methods that can significantly change the state of the AU (like its format) are
-// NOT const whereas those that don't change the externally related state of the AU are not const
-
-class CAAudioUnit {
-public:
- typedef std::vector<AudioChannelLayoutTag> ChannelTagVector;
- typedef ChannelTagVector::iterator ChannelTagVectorIter;
-
-public:
- CAAudioUnit ()
- : mDataPtr(0) {}
-
- CAAudioUnit (const AudioUnit& inUnit);
-
- CAAudioUnit (const AUNode &inNode, const AudioUnit& inUnit);
-
- CAAudioUnit (const CAAudioUnit& y)
- : mDataPtr(0) { *this = y; }
-
- static OSStatus Open (const CAComponent& inComp, CAAudioUnit &outUnit);
-
- ~CAAudioUnit ();
-
-
- CAAudioUnit& operator= (const CAAudioUnit& y);
-
- bool operator== (const CAAudioUnit& y) const;
-
- bool operator== (const AudioUnit& y) const;
-
-#pragma mark __State Management
- bool IsValid () const;
-
- AudioUnit AU() const;
- operator AudioUnit () const { return AU(); }
-
- const CAComponent& Comp() const { return mComp; }
-
- bool FromAUGraph () const { return GetAUNode() != 0 || GetAUNode() != -1; }
-
- AUNode GetAUNode () const;
- operator AUNode () const { return GetAUNode(); }
-
-#pragma mark __API Wrapper
- OSStatus Initialize() const { return AudioUnitInitialize(AU()); }
- OSStatus Uninitialize() const { return AudioUnitUninitialize(AU()); }
- OSStatus GetPropertyInfo(AudioUnitPropertyID propID, AudioUnitScope scope, AudioUnitElement element,
- UInt32 *outDataSize, Boolean *outWritable) const
- {
- return AudioUnitGetPropertyInfo(AU(), propID, scope, element, outDataSize, outWritable);
- }
- OSStatus GetProperty(AudioUnitPropertyID propID, AudioUnitScope scope, AudioUnitElement element,
- void *outData, UInt32 *ioDataSize) const
- {
- return AudioUnitGetProperty(AU(), propID, scope, element, outData, ioDataSize);
- }
- OSStatus SetProperty(AudioUnitPropertyID propID, AudioUnitScope scope, AudioUnitElement element,
- const void *inData, UInt32 inDataSize)
- {
- return AudioUnitSetProperty(AU(), propID, scope, element, inData, inDataSize);
- }
- OSStatus SetParameter(AudioUnitParameterID inID, AudioUnitScope scope, AudioUnitElement element,
- Float32 value, UInt32 bufferOffsetFrames=0);
-
- OSStatus GetParameter(AudioUnitParameterID inID, AudioUnitScope scope, AudioUnitElement element,
- Float32 &outValue) const;
-
- OSStatus Render (AudioUnitRenderActionFlags * ioActionFlags,
- const AudioTimeStamp * inTimeStamp,
- UInt32 inOutputBusNumber,
- UInt32 inNumberFrames,
- AudioBufferList * ioData);
-
- OSStatus Reset (AudioUnitScope scope, AudioUnitElement element)
- {
- return AudioUnitReset (AU(), scope, element);
- }
- OSStatus GlobalReset ()
- {
- return AudioUnitReset (AU(), kAudioUnitScope_Global, 0);
- }
-
- OSStatus Preroll (UInt32 inFrameSize);
-
- OSStatus AddRenderNotify (AURenderCallback inProc, void *inProcRefCon)
- {
- return AudioUnitAddRenderNotify (AU(), inProc, inProcRefCon);
- }
-
- OSStatus RemoveRenderNotify (AURenderCallback inProc, void *inProcRefCon)
- {
- return AudioUnitRemoveRenderNotify (AU(), inProc, inProcRefCon);
- }
-
-
-// Fast dispatch support for MIDI Effects or Music Devices
- OSStatus MIDIEvent (UInt32 inStatus,
- UInt32 inData1,
- UInt32 inData2,
- UInt32 inOffsetSampleFrame);
-
- // uses the default VoiceForGroup value - this is the normal case
- OSStatus StartNote (MusicDeviceGroupID inGroupID,
- NoteInstanceID * outNoteInstanceID,
- UInt32 inOffsetSampleFrame,
- const MusicDeviceNoteParams * inParams)
- {
- return StartNote (kMusicNoteEvent_UseGroupInstrument,
- inGroupID, outNoteInstanceID,
- inOffsetSampleFrame, inParams);
- }
-
- OSStatus StartNote (MusicDeviceInstrumentID inInstrument,
- MusicDeviceGroupID inGroupID,
- NoteInstanceID * outNoteInstanceID,
- UInt32 inOffsetSampleFrame,
- const MusicDeviceNoteParams * inParams);
-
- OSStatus StopNote (MusicDeviceGroupID inGroupID,
- NoteInstanceID inNoteInstanceID,
- UInt32 inOffsetSampleFrame);
-
-#pragma mark __Format Utilities
- // typically you ask this about an AU
- // These Questions are asking about Input and Output...
-
- // These ones just say whether an AU can do a single combination of channels
- // and is fine if the AU has a single output (and if an input, a single input)
- bool CanDo (int inChannelsInOut) const
- {
- return CanDo (inChannelsInOut, inChannelsInOut);
- }
-
- bool CanDo ( int inChannelsIn,
- int inChannelsOut) const;
-
- // This version does a more thorough test for ANY AU with ANY ins/outs
- // you pass in the channel helper (for the current element count on that scope)
-
- bool CanDo ( const CAAUChanHelper &input,
- const CAAUChanHelper &output) const;
-
- bool SupportsNumChannels () const;
-
- bool HasChannelLayouts (AudioUnitScope inScope,
- AudioUnitElement inEl) const;
-
- bool GetChannelLayouts (AudioUnitScope inScope,
- AudioUnitElement inEl,
- ChannelTagVector &outChannelVector) const;
-
- OSStatus GetChannelLayout (AudioUnitScope inScope,
- AudioUnitElement inEl,
- CAAudioChannelLayout &outLayout) const;
-
- OSStatus SetChannelLayout (AudioUnitScope inScope,
- AudioUnitElement inEl,
- CAAudioChannelLayout &inLayout);
-
- OSStatus SetChannelLayout (AudioUnitScope inScope,
- AudioUnitElement inEl,
- AudioChannelLayout &inLayout,
- UInt32 inSize);
-
- OSStatus ClearChannelLayout (AudioUnitScope inScope,
- AudioUnitElement inEl);
-
- OSStatus GetFormat (AudioUnitScope inScope,
- AudioUnitElement inEl,
- AudioStreamBasicDescription &outFormat) const;
- // if an AudioChannelLayout is either required or set, this call can fail
- // and the SetChannelLayout call should be used to set the format
- OSStatus SetFormat (AudioUnitScope inScope,
- AudioUnitElement inEl,
- const AudioStreamBasicDescription &inFormat);
-
- OSStatus GetSampleRate (AudioUnitScope inScope,
- AudioUnitElement inEl,
- Float64 &outRate) const;
- OSStatus SetSampleRate (AudioUnitScope inScope,
- AudioUnitElement inEl,
- Float64 inRate);
-
- // this sets the sample rate on all in/out buses of the AU
- OSStatus SetSampleRate (Float64 inSampleRate);
-
- OSStatus NumberChannels (AudioUnitScope inScope,
- AudioUnitElement inEl,
- UInt32 &outChans) const;
-
- OSStatus GetNumberChannels (AudioUnitScope inScope,
- AudioUnitElement inEl,
- UInt32 &outChans) const
- {
- return NumberChannels (inScope, inEl, outChans);
- }
-
- OSStatus SetNumberChannels (AudioUnitScope inScope,
- AudioUnitElement inEl,
- UInt32 inChans);
-
- OSStatus IsElementCountWritable (AudioUnitScope inScope, bool &outWritable) const;
-
- OSStatus GetElementCount (AudioUnitScope inScope, UInt32 &outCount) const;
-
- OSStatus SetElementCount (AudioUnitScope inScope, UInt32 inCount);
-
- // value of -1 for outTotalNumChannels indicates no restriction on num channels
- // for ex. the Matrix Mixer satisfies this (its in/out element count is writable, and can be set to
- // any number of channels.
- // outTotalNumChannels is only valid if method returns true...
- bool HasDynamicInputs (SInt32 &outTotalNumChannels) const
- {
- return HasDynamicScope (kAudioUnitScope_Input, outTotalNumChannels);
- }
-
- bool HasDynamicOutputs (SInt32 &outTotalNumChannels) const
- {
- return HasDynamicScope (kAudioUnitScope_Output, outTotalNumChannels);
- }
-
- // here, if the in (or out) elements are dynamic, then you supply the number of elements
- // you want on in (or out) scope, and the number of channels on each consecutive element
- OSStatus ConfigureDynamicInput (UInt32 inNumElements, UInt32 *inChannelsPerElement, Float64 inSampleRate)
- {
- return ConfigureDynamicScope (kAudioUnitScope_Input, inNumElements, inChannelsPerElement, inSampleRate);
- }
-
- OSStatus ConfigureDynamicOutput (UInt32 inNumElements, UInt32 *inChannelsPerElement, Float64 inSampleRate)
- {
- return ConfigureDynamicScope (kAudioUnitScope_Output, inNumElements, inChannelsPerElement, inSampleRate);
- }
-
- bool CanBypass () const;
-
- bool GetBypass () const;
-
- OSStatus SetBypass (bool inBypass) const;
-
- Float64 Latency () const;
-
- // these calls just deal with the global preset state
- // you could rescope them to deal with presets on the part scope
- OSStatus GetAUPreset (CFPropertyListRef &outData) const;
-
- OSStatus SetAUPreset (CFPropertyListRef &inData);
-
- OSStatus GetPresentPreset (AUPreset &outData) const;
-
- OSStatus SetPresentPreset (AUPreset &inData);
-
- bool HasCustomView () const;
-
-#pragma mark __Print
- void Print () const { Print (stdout); }
- void Print (FILE* file) const;
-
-private:
- CAComponent mComp;
-
- class AUState;
- AUState* mDataPtr;
-
- // this can throw - so wrap this up in a static that returns a result code...
- CAAudioUnit (const CAComponent& inComp);
-
- bool HasDynamicScope (AudioUnitScope inScope, SInt32 &outTotalNumChannels) const;
- OSStatus ConfigureDynamicScope (AudioUnitScope inScope,
- UInt32 inNumElements,
- UInt32 *inChannelsPerElement,
- Float64 inSampleRate);
- bool ValidateChannelPair (int inChannelsIn,
- int inChannelsOut,
- const AUChannelInfo * info,
- UInt32 numChanInfo) const;
-
- bool ValidateDynamicScope (AudioUnitScope inScope,
- SInt32 &outTotalNumChannels,
- const AUChannelInfo * info,
- UInt32 numInfo) const;
- bool CheckOneSide (const CAAUChanHelper &inHelper,
- bool checkOutput,
- const AUChannelInfo *info,
- UInt32 numInfo) const;
-
-};
-
-class CAAUChanHelper {
-public:
- CAAUChanHelper()
- : mChans(mStaticChans), mNumEls(0), mDidAllocate(false)
- {
- memset (mChans, 0, sizeof(UInt32) * 8);
- }
- CAAUChanHelper(const CAAudioUnit &inAU, AudioUnitScope inScope);
- CAAUChanHelper (const CAAUChanHelper &c) :mChans(mStaticChans), mNumEls(0), mDidAllocate(false) { *this = c; }
-
- ~CAAUChanHelper();
-
- CAAUChanHelper& operator= (const CAAUChanHelper &c);
-
- UInt32 * mChans;
- UInt32 mNumEls;
-
-private:
- UInt32 mStaticChans[8];
- bool mDidAllocate;
-};
-
-#endif
diff --git a/libs/appleutility/CABufferList.cpp b/libs/appleutility/CABufferList.cpp
deleted file mode 100644
index 81298f918a..0000000000
--- a/libs/appleutility/CABufferList.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CABufferList.cpp
-
-=============================================================================*/
-
-#include "CABufferList.h"
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <CoreServices/CoreServices.h>
-#else
- #include <Endian.h>
-#endif
-
-void CABufferList::AllocateBuffers(UInt32 nBytes)
-{
- if (nBytes <= GetNumBytes()) return;
-
- if (mNumberBuffers > 1)
- // align successive buffers for Altivec and to take alternating
- // cache line hits by spacing them by odd multiples of 16
- nBytes = (nBytes + (0x10 - (nBytes & 0xF))) | 0x10;
- UInt32 memorySize = nBytes * mNumberBuffers;
- Byte *newMemory = new Byte[memorySize], *p = newMemory;
- memset(newMemory, 0, memorySize); // get page faults now, not later
-
- AudioBuffer *buf = mBuffers;
- for (UInt32 i = mNumberBuffers; i--; ++buf) {
- if (buf->mData != NULL && buf->mDataByteSize > 0)
- // preserve existing buffer contents
- memcpy(p, buf->mData, buf->mDataByteSize);
- buf->mDataByteSize = nBytes;
- buf->mData = p;
- p += nBytes;
- }
- Byte *oldMemory = mBufferMemory;
- mBufferMemory = newMemory;
- delete[] oldMemory;
-}
-
-void CABufferList::AllocateBuffersAndCopyFrom(UInt32 nBytes, CABufferList *inSrcList, CABufferList *inSetPtrList)
-{
- if (mNumberBuffers != inSrcList->mNumberBuffers) return;
- if (mNumberBuffers != inSetPtrList->mNumberBuffers) return;
- if (nBytes <= GetNumBytes()) {
- CopyAllFrom(inSrcList, inSetPtrList);
- return;
- }
- inSetPtrList->VerifyNotTrashingOwnedBuffer();
- UInt32 fromByteSize = inSrcList->GetNumBytes();
-
- if (mNumberBuffers > 1)
- // align successive buffers for Altivec and to take alternating
- // cache line hits by spacing them by odd multiples of 16
- nBytes = (nBytes + (0x10 - (nBytes & 0xF))) | 0x10;
- UInt32 memorySize = nBytes * mNumberBuffers;
- Byte *newMemory = new Byte[memorySize], *p = newMemory;
- memset(newMemory, 0, memorySize); // make buffer "hot"
-
- AudioBuffer *buf = mBuffers;
- AudioBuffer *ptrBuf = inSetPtrList->mBuffers;
- AudioBuffer *srcBuf = inSrcList->mBuffers;
- for (UInt32 i = mNumberBuffers; i--; ++buf, ++ptrBuf, ++srcBuf) {
- if (srcBuf->mData != NULL && srcBuf->mDataByteSize > 0)
- // preserve existing buffer contents
- memmove(p, srcBuf->mData, srcBuf->mDataByteSize);
- buf->mDataByteSize = nBytes;
- buf->mData = p;
- ptrBuf->mDataByteSize = srcBuf->mDataByteSize;
- ptrBuf->mData = p;
- p += nBytes;
- }
- Byte *oldMemory = mBufferMemory;
- mBufferMemory = newMemory;
- if (inSrcList != inSetPtrList)
- inSrcList->BytesConsumed(fromByteSize);
- delete[] oldMemory;
-}
-
-void CABufferList::DeallocateBuffers()
-{
- AudioBuffer *buf = mBuffers;
- for (UInt32 i = mNumberBuffers; i--; ++buf) {
- buf->mData = NULL;
- buf->mDataByteSize = 0;
- }
- if (mBufferMemory != NULL) {
- delete[] mBufferMemory;
- mBufferMemory = NULL;
- }
-
-}
-
-extern "C" void CAShowAudioBufferList(const AudioBufferList *abl, int framesToPrint, int wordSize)
-{
- printf("AudioBufferList @ %p:\n", abl);
- const AudioBuffer *buf = abl->mBuffers;
- for (UInt32 i = 0; i < abl->mNumberBuffers; ++i, ++buf) {
- printf(" [%2ld]: %2ldch, %5ld bytes @ %8p",
- i, buf->mNumberChannels, buf->mDataByteSize, buf->mData);
- if (framesToPrint) {
- printf(":");
- Byte *p = (Byte *)buf->mData;
- for (int j = framesToPrint * buf->mNumberChannels; --j >= 0; )
- switch (wordSize) {
- case 0:
- printf(" %6.3f", *(Float32 *)p);
- p += sizeof(Float32);
- break;
- case 1:
- case -1:
- printf(" %02X", *p);
- p += 1;
- break;
- case 2:
- printf(" %04X", EndianU16_BtoN(*(UInt16 *)p));
- p += 2;
- break;
- case 3:
- printf(" %06X", (p[0] << 16) | (p[1] << 8) | p[2]);
- p += 3;
- break;
- case 4:
- printf(" %08lX", EndianU32_BtoN(*(UInt32 *)p));
- p += 4;
- break;
- case -2:
- printf(" %04X", EndianU16_LtoN(*(UInt16 *)p));
- p += 2;
- break;
- case -3:
- printf(" %06X", (p[2] << 16) | (p[1] << 8) | p[0]);
- p += 3;
- break;
- case -4:
- printf(" %08lX", EndianU32_LtoN(*(UInt32 *)p));
- p += 4;
- break;
- }
- }
- printf("\n");
- }
-}
-
diff --git a/libs/appleutility/CABufferList.h b/libs/appleutility/CABufferList.h
deleted file mode 100644
index 3b0cef9a52..0000000000
--- a/libs/appleutility/CABufferList.h
+++ /dev/null
@@ -1,300 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CABufferList.h
-
-=============================================================================*/
-
-#ifndef __CABufferList_h__
-#define __CABufferList_h__
-
-#include <stddef.h>
-#include "CAStreamBasicDescription.h"
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <CoreServices/CoreServices.h>
-#else
- #include <AssertMacros.h>
-#endif
-
-extern "C" void CAShowAudioBufferList(const AudioBufferList *abl, int framesToPrint, int wordSize);
- // wordSize: 0 = float32, else integer word size, negative if little-endian
-
-/* ____________________________________________________________________________
-// CABufferList - variable length buffer list
-
- This class is designed for use in non-simplistic cases. For AudioUnits, AUBufferList
- is preferred.
-
- CABufferList can be used in one of two ways:
- - as mutable pointers into non-owned memory
- - as an immutable array of buffers (owns its own memory).
-
- All buffers are assumed to have the same format (number of channels, word size), so that
- we can assume their mDataByteSizes are all the same.
-____________________________________________________________________________ */
-class CABufferList {
-public:
- void * operator new(size_t /*size*/, int nBuffers) {
- return ::operator new(sizeof(CABufferList) + (nBuffers-1) * sizeof(AudioBuffer));
- }
- static CABufferList * New(const char *name, const CAStreamBasicDescription &format)
- {
- UInt32 numBuffers = format.NumberChannelStreams(), channelsPerBuffer = format.NumberInterleavedChannels();
- return new(numBuffers) CABufferList(name, numBuffers, channelsPerBuffer);
- }
-
-protected:
- CABufferList(const char *name, UInt32 numBuffers, UInt32 channelsPerBuffer) :
- mName(name),
- mBufferMemory(NULL)
- {
- check(numBuffers > 0 /*&& channelsPerBuffer > 0*/);
- mNumberBuffers = numBuffers;
- AudioBuffer *buf = mBuffers;
- for (UInt32 i = mNumberBuffers; i--; ++buf) {
- buf->mNumberChannels = channelsPerBuffer;
- buf->mDataByteSize = 0;
- buf->mData = NULL;
- }
- }
-
-public:
- ~CABufferList()
- {
- if (mBufferMemory)
- delete[] mBufferMemory;
- }
-
- const char * Name() { return mName; }
-
- const AudioBufferList & GetBufferList() const { return *(AudioBufferList *)&mNumberBuffers; }
-
- AudioBufferList & GetModifiableBufferList()
- {
- VerifyNotTrashingOwnedBuffer();
- return _GetBufferList();
- }
-
- UInt32 GetNumBytes() const
- {
- return mBuffers[0].mDataByteSize;
- }
-
- void SetBytes(UInt32 nBytes, void *data)
- {
- VerifyNotTrashingOwnedBuffer();
- check(mNumberBuffers == 1);
- mBuffers[0].mDataByteSize = nBytes;
- mBuffers[0].mData = data;
- }
-
- void CopyAllFrom(CABufferList *srcbl, CABufferList *ptrbl)
- // copies bytes from srcbl
- // make ptrbl reflect the length copied
- // note that srcbl may be same as ptrbl!
- {
- // Note that this buffer *can* own memory and its pointers/lengths are not
- // altered; only its buffer contents, which are copied from srcbl.
- // The pointers/lengths in ptrbl are updated to reflect the addresses/lengths
- // of the copied data, and srcbl's contents are consumed.
- ptrbl->VerifyNotTrashingOwnedBuffer();
- UInt32 nBytes = srcbl->GetNumBytes();
- AudioBuffer *mybuf = mBuffers, *srcbuf = srcbl->mBuffers,
- *ptrbuf = ptrbl->mBuffers;
- for (UInt32 i = mNumberBuffers; i--; ++mybuf, ++srcbuf, ++ptrbuf) {
- memmove(mybuf->mData, srcbuf->mData, srcbuf->mDataByteSize);
- ptrbuf->mData = mybuf->mData;
- ptrbuf->mDataByteSize = srcbuf->mDataByteSize;
- }
- if (srcbl != ptrbl)
- srcbl->BytesConsumed(nBytes);
- }
-
- void AppendFrom(CABufferList *blp, UInt32 nBytes)
- {
- VerifyNotTrashingOwnedBuffer();
- AudioBuffer *mybuf = mBuffers, *srcbuf = blp->mBuffers;
- for (UInt32 i = mNumberBuffers; i--; ++mybuf, ++srcbuf) {
- check(nBytes <= srcbuf->mDataByteSize);
- memcpy((Byte *)mybuf->mData + mybuf->mDataByteSize, srcbuf->mData, nBytes);
- mybuf->mDataByteSize += nBytes;
- }
- blp->BytesConsumed(nBytes);
- }
-
- void PadWithZeroes(UInt32 desiredBufferSize)
- // for cases where an algorithm (e.g. SRC) requires some
- // padding to create silence following end-of-file
- {
- VerifyNotTrashingOwnedBuffer();
- if (GetNumBytes() > desiredBufferSize) return;
- AudioBuffer *buf = mBuffers;
- for (UInt32 i = mNumberBuffers; i--; ++buf) {
- memset((Byte *)buf->mData + buf->mDataByteSize, 0, desiredBufferSize - buf->mDataByteSize);
- buf->mDataByteSize = desiredBufferSize;
- }
- }
-
- void SetToZeroes(UInt32 nBytes)
- {
- VerifyNotTrashingOwnedBuffer();
- AudioBuffer *buf = mBuffers;
- for (UInt32 i = mNumberBuffers; i--; ++buf) {
- memset((Byte *)buf->mData, 0, nBytes);
- buf->mDataByteSize = nBytes;
- }
- }
-
- void Reset()
- {
- DeallocateBuffers();
- }
-
- Boolean SameDataAs(const CABufferList* anotherBufferList)
- {
- // check to see if two buffer lists point to the same memory.
- if (mNumberBuffers != anotherBufferList->mNumberBuffers) return false;
-
- for (UInt32 i = 0; i < mNumberBuffers; ++i) {
- if (mBuffers[i].mData != anotherBufferList->mBuffers[i].mData) return false;
- }
- return true;
- }
-
- void BytesConsumed(UInt32 nBytes)
- // advance buffer pointers, decrease buffer sizes
- {
- VerifyNotTrashingOwnedBuffer();
- AudioBuffer *buf = mBuffers;
- for (UInt32 i = mNumberBuffers; i--; ++buf) {
- check(nBytes <= buf->mDataByteSize);
- buf->mData = (Byte *)buf->mData + nBytes;
- buf->mDataByteSize -= nBytes;
- }
- }
-
- void SetFrom(const AudioBufferList *abl)
- {
- VerifyNotTrashingOwnedBuffer();
- memcpy(&_GetBufferList(), abl, (char *)&abl->mBuffers[abl->mNumberBuffers] - (char *)abl);
- }
-
- void SetFrom(const CABufferList *blp)
- {
- SetFrom(&blp->GetBufferList());
- }
-
- void SetFrom(const AudioBufferList *abl, UInt32 nBytes)
- {
- VerifyNotTrashingOwnedBuffer();
- AudioBuffer *mybuf = mBuffers;
- const AudioBuffer *srcbuf = abl->mBuffers;
- for (UInt32 i = mNumberBuffers; i--; ++mybuf, ++srcbuf) {
- mybuf->mNumberChannels = srcbuf->mNumberChannels;
- mybuf->mDataByteSize = nBytes;
- mybuf->mData = srcbuf->mData;
- }
- }
-
- void SetFrom(const CABufferList *blp, UInt32 nBytes)
- {
- SetFrom(&blp->GetBufferList(), nBytes);
- }
-
- AudioBufferList * ToAudioBufferList(AudioBufferList *abl) const
- {
- memcpy(abl, &GetBufferList(), (char *)&abl->mBuffers[mNumberBuffers] - (char *)abl);
- return abl;
- }
-
- void AllocateBuffers(UInt32 nBytes);
- void AllocateBuffersAndCopyFrom(UInt32 nBytes, CABufferList *inCopyFromList, CABufferList *inSetPtrList);
-
- void DeallocateBuffers();
-
- void UseExternalBuffer(Byte *ptr, UInt32 nBytes);
-
- void AdvanceBufferPointers(UInt32 nBytes)
- // this is for bufferlists that function simply as
- // an array of pointers into another bufferlist, being advanced,
- // as in RenderOutput implementations
- {
- VerifyNotTrashingOwnedBuffer();
- AudioBuffer *buf = mBuffers;
- for (UInt32 i = mNumberBuffers; i--; ++buf) {
- buf->mData = (Byte *)buf->mData + nBytes;
- buf->mDataByteSize -= nBytes;
- }
- }
-
- void SetNumBytes(UInt32 nBytes)
- {
- VerifyNotTrashingOwnedBuffer();
- AudioBuffer *buf = mBuffers;
- for (UInt32 i = mNumberBuffers; i--; ++buf)
- buf->mDataByteSize = nBytes;
- }
-
- void Print(const char *label=NULL, int nframes=0, int wordSize=0) const
- {
- if (label == NULL)
- label = mName;
- printf("%s - ", label);
- CAShowAudioBufferList(&GetBufferList(), nframes, wordSize);
- if (mBufferMemory)
- printf(" owned memory @ 0x%p:\n", mBufferMemory);
- }
-
-protected:
- AudioBufferList & _GetBufferList() { return *(AudioBufferList *)&mNumberBuffers; } // use with care
- // if we make this public, then we lose ability to call VerifyNotTrashingOwnedBuffer
- void VerifyNotTrashingOwnedBuffer()
- {
- // This needs to be called from places where we are modifying the buffer list.
- // It's an error to modify the buffer pointers or lengths if we own the buffer memory.
- check(mBufferMemory == NULL);
- }
-
- const char * mName; // for debugging
- Byte * mBufferMemory;
- // the rest must exactly mirror the structure of AudioBufferList
- UInt32 mNumberBuffers;
- AudioBuffer mBuffers[1];
-};
-
-#endif // __CABufferList_h__
diff --git a/libs/appleutility/CACFDictionary.cpp b/libs/appleutility/CACFDictionary.cpp
deleted file mode 100644
index c209b5fc36..0000000000
--- a/libs/appleutility/CACFDictionary.cpp
+++ /dev/null
@@ -1,478 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CACFDictionary.cpp
- CAAudioEngine
-
-=============================================================================*/
-
-//=============================================================================
-// Includes
-//=============================================================================
-
-// Self Include
-#include "CACFDictionary.h"
-
-// PublicUtility Includes
-#include "CACFString.h"
-#include "CACFNumber.h"
-
-//=============================================================================
-// CACFDictionary
-//=============================================================================
-
-bool CACFDictionary::HasKey(const CFStringRef inKey) const
-{
- return CFDictionaryContainsKey(mCFDictionary, inKey) != 0;
-}
-
-UInt32 CACFDictionary::Size () const
-{
- return CFDictionaryGetCount(mCFDictionary);
-}
-
-void CACFDictionary::GetKeys (const void **keys) const
-{
- CFDictionaryGetKeysAndValues(mCFDictionary, keys, NULL);
-}
-
-bool CACFDictionary::GetBool(const CFStringRef inKey, bool& outValue) const
-{
- bool theAnswer = false;
-
- CFTypeRef theValue = NULL;
- if(GetCFType(inKey, theValue))
- {
- if((theValue != NULL) && (CFGetTypeID(theValue) == CFBooleanGetTypeID()))
- {
- outValue = CFBooleanGetValue(static_cast<CFBooleanRef>(theValue));
- theAnswer = true;
- }
- else if((theValue != NULL) && (CFGetTypeID(theValue) == CFNumberGetTypeID()))
- {
- SInt32 theNumericValue = 0;
- CFNumberGetValue(static_cast<CFNumberRef>(theValue), kCFNumberSInt32Type, &theNumericValue);
- outValue = theNumericValue != 0;
- theAnswer = true;
- }
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::GetSInt32(const CFStringRef inKey, SInt32& outValue) const
-{
- bool theAnswer = false;
-
- CFTypeRef theValue = NULL;
- if(GetCFType(inKey, theValue))
- {
- if((theValue != NULL) && (CFGetTypeID(theValue) == CFNumberGetTypeID()))
- {
- CFNumberGetValue(static_cast<CFNumberRef>(theValue), kCFNumberSInt32Type, &outValue);
- theAnswer = true;
- }
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::GetUInt32(const CFStringRef inKey, UInt32& outValue) const
-{
- bool theAnswer = false;
-
- CFTypeRef theValue = NULL;
- if(GetCFType(inKey, theValue))
- {
- if((theValue != NULL) && (CFGetTypeID(theValue) == CFNumberGetTypeID()))
- {
- CFNumberGetValue(static_cast<CFNumberRef>(theValue), kCFNumberSInt32Type, &outValue);
- theAnswer = true;
- }
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::GetSInt64(const CFStringRef inKey, SInt64& outValue) const
-{
- bool theAnswer = false;
-
- CFTypeRef theValue = NULL;
- if(GetCFType(inKey, theValue))
- {
- if((theValue != NULL) && (CFGetTypeID(theValue) == CFNumberGetTypeID()))
- {
- CFNumberGetValue(static_cast<CFNumberRef>(theValue), kCFNumberSInt64Type, &outValue);
- theAnswer = true;
- }
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::GetUInt64(const CFStringRef inKey, UInt64& outValue) const
-{
- bool theAnswer = false;
-
- CFTypeRef theValue = NULL;
- if(GetCFType(inKey, theValue))
- {
- if((theValue != NULL) && (CFGetTypeID(theValue) == CFNumberGetTypeID()))
- {
- CFNumberGetValue(static_cast<CFNumberRef>(theValue), kCFNumberSInt64Type, &outValue);
- theAnswer = true;
- }
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::GetFloat32(const CFStringRef inKey, Float32& outValue) const
-{
- bool theAnswer = false;
-
- CFTypeRef theValue = NULL;
- if(GetCFType(inKey, theValue))
- {
- if((theValue != NULL) && (CFGetTypeID(theValue) == CFNumberGetTypeID()))
- {
- CFNumberGetValue(static_cast<CFNumberRef>(theValue), kCFNumberFloat32Type, &outValue);
- theAnswer = true;
- }
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::GetFloat64(const CFStringRef inKey, Float64& outValue) const
-{
- bool theAnswer = false;
-
- CFTypeRef theValue = NULL;
- if(GetCFType(inKey, theValue))
- {
- if((theValue != NULL) && (CFGetTypeID(theValue) == CFNumberGetTypeID()))
- {
- CFNumberGetValue(static_cast<CFNumberRef>(theValue), kCFNumberFloat64Type, &outValue);
- theAnswer = true;
- }
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::GetString(const CFStringRef inKey, CFStringRef& outValue) const
-{
- bool theAnswer = false;
-
- CFTypeRef theValue = NULL;
- if(GetCFType(inKey, theValue))
- {
- if((theValue != NULL) && (CFGetTypeID(theValue) == CFStringGetTypeID()))
- {
- outValue = static_cast<CFStringRef>(theValue);
- theAnswer = true;
- }
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::GetArray(const CFStringRef inKey, CFArrayRef& outValue) const
-{
- bool theAnswer = false;
-
- CFTypeRef theValue = NULL;
- if(GetCFType(inKey, theValue))
- {
- if((theValue != NULL) && (CFGetTypeID(theValue) == CFArrayGetTypeID()))
- {
- outValue = static_cast<CFArrayRef>(theValue);
- theAnswer = true;
- }
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::GetDictionary(const CFStringRef inKey, CFDictionaryRef& outValue) const
-{
- bool theAnswer = false;
-
- CFTypeRef theValue = NULL;
- if(GetCFType(inKey, theValue))
- {
- if((theValue != NULL) && (CFGetTypeID(theValue) == CFDictionaryGetTypeID()))
- {
- outValue = static_cast<CFDictionaryRef>(theValue);
- theAnswer = true;
- }
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::GetData(const CFStringRef inKey, CFDataRef& outValue) const
-{
- bool theAnswer = false;
-
- CFTypeRef theValue = NULL;
- if(GetCFType(inKey, theValue))
- {
- if((theValue != NULL) && (CFGetTypeID(theValue) == CFDataGetTypeID()))
- {
- outValue = static_cast<CFDataRef>(theValue);
- theAnswer = true;
- }
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::GetCFType(const CFStringRef inKey, CFTypeRef& outValue) const
-{
- bool theAnswer = false;
-
- if(mCFDictionary != NULL)
- {
- outValue = CFDictionaryGetValue(mCFDictionary, inKey);
- theAnswer = (outValue != NULL);
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::GetCFTypeWithCStringKey(const char* inKey, CFTypeRef& outValue) const
-{
- bool theAnswer = false;
-
- if(mCFDictionary != NULL)
- {
- CACFString theKey(inKey);
- if(theKey.IsValid())
- {
- theAnswer = GetCFType(theKey.GetCFString(), outValue);
- }
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::AddSInt32(const CFStringRef inKey, SInt32 inValue)
-{
- bool theAnswer = false;
-
- if(mMutable && (mCFDictionary != NULL))
- {
- CACFNumber theValue(inValue);
- theAnswer = AddCFType(inKey, theValue.GetCFNumber());
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::AddUInt32(const CFStringRef inKey, UInt32 inValue)
-{
- bool theAnswer = false;
-
- if(mMutable && (mCFDictionary != NULL))
- {
- CACFNumber theValue(inValue);
- theAnswer = AddCFType(inKey, theValue.GetCFNumber());
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::AddSInt64(const CFStringRef inKey, SInt64 inValue)
-{
- bool theAnswer = false;
-
- if(mMutable && (mCFDictionary != NULL))
- {
- CACFNumber theValue(inValue);
- theAnswer = AddCFType(inKey, theValue.GetCFNumber());
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::AddUInt64(const CFStringRef inKey, UInt64 inValue)
-{
- bool theAnswer = false;
-
- if(mMutable && (mCFDictionary != NULL))
- {
- CACFNumber theValue(inValue);
- theAnswer = AddCFType(inKey, theValue.GetCFNumber());
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::AddFloat32(const CFStringRef inKey, Float32 inValue)
-{
- bool theAnswer = false;
-
- if(mMutable && (mCFDictionary != NULL))
- {
- CACFNumber theValue(inValue);
- theAnswer = AddCFType(inKey, theValue.GetCFNumber());
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::AddFloat64(const CFStringRef inKey, Float64 inValue)
-{
- bool theAnswer = false;
-
- if(mMutable && (mCFDictionary != NULL))
- {
- CACFNumber theValue(inValue);
- theAnswer = AddCFType(inKey, theValue.GetCFNumber());
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::AddNumber(const CFStringRef inKey, const CFNumberRef inValue)
-{
- bool theAnswer = false;
-
- if(mMutable && (mCFDictionary != NULL))
- {
- theAnswer = AddCFType(inKey, inValue);
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::AddString(const CFStringRef inKey, const CFStringRef inValue)
-{
- bool theAnswer = false;
-
- if(mMutable && (mCFDictionary != NULL))
- {
- theAnswer = AddCFType(inKey, inValue);
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::AddArray(const CFStringRef inKey, const CFArrayRef inValue)
-{
- bool theAnswer = false;
-
- if(mMutable && (mCFDictionary != NULL))
- {
- theAnswer = AddCFType(inKey, inValue);
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::AddDictionary(const CFStringRef inKey, const CFDictionaryRef inValue)
-{
- bool theAnswer = false;
-
- if(mMutable && (mCFDictionary != NULL))
- {
- theAnswer = AddCFType(inKey, inValue);
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::AddData(const CFStringRef inKey, const CFDataRef inValue)
-{
- bool theAnswer = false;
-
- if(mMutable && (mCFDictionary != NULL))
- {
- theAnswer = AddCFType(inKey, inValue);
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::AddCFType(const CFStringRef inKey, const CFTypeRef inValue)
-{
- bool theAnswer = false;
-
- if(mMutable && (mCFDictionary != NULL))
- {
- CFDictionarySetValue(mCFDictionary, inKey, inValue);
- theAnswer = true;
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::AddCFTypeWithCStringKey(const char* inKey, const CFTypeRef inValue)
-{
- bool theAnswer = false;
-
- if(mMutable && (mCFDictionary != NULL))
- {
- CACFString theKey(inKey);
- if(theKey.IsValid())
- {
- theAnswer = AddCFType(theKey.GetCFString(), inValue);
- }
- }
-
- return theAnswer;
-}
-
-bool CACFDictionary::AddCString(const CFStringRef inKey, const char* inValue)
-{
- bool theAnswer = false;
-
- if(mMutable && (mCFDictionary != NULL))
- {
- CACFString theValue(inValue);
- if(theValue.IsValid())
- {
- theAnswer = AddCFType(inKey, theValue.GetCFString());
- }
- }
-
- return theAnswer;
-}
diff --git a/libs/appleutility/CACFDictionary.h b/libs/appleutility/CACFDictionary.h
deleted file mode 100644
index 362b1c8821..0000000000
--- a/libs/appleutility/CACFDictionary.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CACFDictionary.h
-
-=============================================================================*/
-#if !defined(__CACFDictionary_h__)
-#define __CACFDictionary_h__
-
-//=============================================================================
-// Includes
-//=============================================================================
-
-// System Includes
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <CoreFoundation/CoreFoundation.h>
-#else
- #include <CoreFoundation.h>
-#endif
-
-//=============================================================================
-// CACFDictionary
-//=============================================================================
-
-class CACFDictionary
-{
-
-// Construction/Destruction
-public:
- CACFDictionary(bool inRelease) : mCFDictionary(CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)), mRelease(inRelease), mMutable(true) {}
- CACFDictionary(const CFDictionaryRef inCFDictionary, bool inRelease) : mCFDictionary(const_cast<CFMutableDictionaryRef>(inCFDictionary)), mRelease(inRelease), mMutable(true) {}
- CACFDictionary(const CFMutableDictionaryRef inCFDictionary, bool inRelease) : mCFDictionary(inCFDictionary), mRelease(inRelease), mMutable(true) {}
- CACFDictionary(const CACFDictionary& inDictionary) : mCFDictionary(inDictionary.mCFDictionary), mRelease(inDictionary.mRelease), mMutable(inDictionary.mMutable) { if(mRelease && (mCFDictionary != NULL)) { CFRetain(mCFDictionary); } }
- CACFDictionary& operator=(const CACFDictionary& inDictionary) { mCFDictionary = inDictionary.mCFDictionary; mRelease = inDictionary.mRelease; mMutable = inDictionary.mMutable; if(mRelease && (mCFDictionary != NULL)) { CFRetain(mCFDictionary); } return *this; }
- ~CACFDictionary() { if(mRelease && (mCFDictionary != NULL)) { CFRelease(mCFDictionary); } }
-
-// Attributes
-public:
- bool IsValid() const { return mCFDictionary != NULL; }
- bool IsMutable() const { return mMutable;}
- bool CanModify() const { return mMutable && (mCFDictionary != NULL); }
-
- bool WillRelease() const { return mRelease; }
- void ShouldRelease(bool inRelease) { mRelease = inRelease; }
-
- CFDictionaryRef GetDict() const { return mCFDictionary; }
- CFDictionaryRef GetCFDictionary() const { return mCFDictionary; }
- CFDictionaryRef CopyCFDictionary() const { if(mCFDictionary != NULL) { CFRetain(mCFDictionary); } return mCFDictionary; }
-
- CFMutableDictionaryRef GetMutableDict() { return mCFDictionary; }
- CFMutableDictionaryRef GetCFMutableDictionary() const { return mCFDictionary; }
- CFMutableDictionaryRef CopyCFMutableDictionary() const { if(mCFDictionary != NULL) { CFRetain(mCFDictionary); } return mCFDictionary; }
- void SetCFMutableDictionaryFromCopy(CFDictionaryRef inDictionary, bool inRelease = true) { if(mRelease && (mCFDictionary != NULL)) { CFRelease(mCFDictionary); } mCFDictionary = CFDictionaryCreateMutableCopy(NULL, 0, inDictionary); mMutable = true; mRelease = inRelease; }
-
- CFPropertyListRef AsPropertyList() const { return mCFDictionary; }
- OSStatus GetDictIfMutable(CFMutableDictionaryRef& outDict) const { OSStatus theAnswer = -1; if(mMutable) { outDict = mCFDictionary; theAnswer = 0; } return theAnswer; }
-
-// Item Operations
-public:
- bool HasKey(const CFStringRef inKey) const;
- UInt32 Size() const;
- void GetKeys(const void** keys) const;
-
- bool GetBool(const CFStringRef inKey, bool& outValue) const;
- bool GetSInt32(const CFStringRef inKey, SInt32& outValue) const;
- bool GetUInt32(const CFStringRef inKey, UInt32& outValue) const;
- bool GetSInt64(const CFStringRef inKey, SInt64& outValue) const;
- bool GetUInt64(const CFStringRef inKey, UInt64& outValue) const;
- bool GetFloat32(const CFStringRef inKey, Float32& outValue) const;
- bool GetFloat64(const CFStringRef inKey, Float64& outValue) const;
- bool GetString(const CFStringRef inKey, CFStringRef& outValue) const;
- bool GetArray(const CFStringRef inKey, CFArrayRef& outValue) const;
- bool GetDictionary(const CFStringRef inKey, CFDictionaryRef& outValue) const;
- bool GetData(const CFStringRef inKey, CFDataRef& outValue) const;
- bool GetCFType(const CFStringRef inKey, CFTypeRef& outValue) const;
-
- bool GetCFTypeWithCStringKey(const char* inKey, CFTypeRef& outValue) const;
-
- bool AddSInt32(const CFStringRef inKey, SInt32 inValue);
- bool AddUInt32(const CFStringRef inKey, UInt32 inValue);
- bool AddSInt64(const CFStringRef inKey, SInt64 inValue);
- bool AddUInt64(const CFStringRef inKey, UInt64 inValue);
- bool AddFloat32(const CFStringRef inKey, Float32 inValue);
- bool AddFloat64(const CFStringRef inKey, Float64 inValue);
- bool AddNumber(const CFStringRef inKey, const CFNumberRef inValue);
- bool AddString(const CFStringRef inKey, const CFStringRef inValue);
- bool AddArray(const CFStringRef inKey, const CFArrayRef inValue);
- bool AddDictionary(const CFStringRef inKey, const CFDictionaryRef inValue);
- bool AddData(const CFStringRef inKey, const CFDataRef inValue);
- bool AddCFType(const CFStringRef inKey, const CFTypeRef inValue);
-
- bool AddCFTypeWithCStringKey(const char* inKey, const CFTypeRef inValue);
- bool AddCString(const CFStringRef inKey, const char* inValue);
-
- void Clear() { if(CanModify()) { CFDictionaryRemoveAllValues(mCFDictionary); } }
-
- void Show() { CFShow(mCFDictionary); }
-
-// Implementation
-private:
- CFMutableDictionaryRef mCFDictionary;
- bool mRelease;
- bool mMutable;
-};
-
-#endif //__CACFDictionary_h__
diff --git a/libs/appleutility/CACFNumber.cpp b/libs/appleutility/CACFNumber.cpp
deleted file mode 100644
index 3b6160c8bb..0000000000
--- a/libs/appleutility/CACFNumber.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CACFNumber.cp
-
-=============================================================================*/
-
-//=============================================================================
-// Includes
-//=============================================================================
-
-#include "CACFNumber.h"
-
-//=============================================================================
-// CACFNumber
-//=============================================================================
-
-Float32 CACFNumber::GetFixed32() const
-{
- SInt32 theFixedValue = GetSInt32();
-
- // this is a 16.16 value so convert it to a float
- Float32 theSign = theFixedValue < 0 ? -1.0 : 1.0;
- theFixedValue *= (SInt32)theSign;
- Float32 theWholePart = (theFixedValue & 0x7FFF0000) >> 16;
- Float32 theFractPart = theFixedValue & 0x0000FFFF;
- theFractPart /= 65536.0;
-
- return theSign * (theWholePart + theFractPart);
-}
diff --git a/libs/appleutility/CACFNumber.h b/libs/appleutility/CACFNumber.h
deleted file mode 100644
index 3991637bac..0000000000
--- a/libs/appleutility/CACFNumber.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CACFNumber.h
-
-=============================================================================*/
-#if !defined(__CACFNumber_h__)
-#define __CACFNumber_h__
-
-//=============================================================================
-// Includes
-//=============================================================================
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <CoreAudio/CoreAudioTypes.h>
- #include <CoreFoundation/CFNumber.h>
-#else
- #include <CoreAudioTypes.h>
- #include <CFNumber.h>
-#endif
-
-//=============================================================================
-// CACFNumber
-//=============================================================================
-
-class CACFNumber
-{
-// Construction/Destruction
-public:
- CACFNumber(CFNumberRef inCFNumber, bool inWillRelease = true) : mCFNumber(inCFNumber), mWillRelease(inWillRelease) {}
- CACFNumber(SInt32 inValue) : mCFNumber(CFNumberCreate(NULL, kCFNumberSInt32Type, &inValue)), mWillRelease(true) {}
- CACFNumber(UInt32 inValue) : mCFNumber(CFNumberCreate(NULL, kCFNumberSInt32Type, &inValue)), mWillRelease(true) {}
- CACFNumber(SInt64 inValue) : mCFNumber(CFNumberCreate(NULL, kCFNumberSInt64Type, &inValue)), mWillRelease(true) {}
- CACFNumber(UInt64 inValue) : mCFNumber(CFNumberCreate(NULL, kCFNumberSInt64Type, &inValue)), mWillRelease(true) {}
- CACFNumber(Float32 inValue) : mCFNumber(CFNumberCreate(NULL, kCFNumberFloat32Type, &inValue)), mWillRelease(true) {}
- CACFNumber(Float64 inValue) : mCFNumber(CFNumberCreate(NULL, kCFNumberFloat64Type, &inValue)), mWillRelease(true) {}
- ~CACFNumber() { Release(); }
- CACFNumber(const CACFNumber& inNumber) : mCFNumber(inNumber.mCFNumber), mWillRelease(inNumber.mWillRelease) { Retain(); }
- CACFNumber& operator=(const CACFNumber& inNumber) { Release(); mCFNumber = inNumber.mCFNumber; mWillRelease = inNumber.mWillRelease; Retain(); return *this; }
- CACFNumber& operator=(CFNumberRef inCFNumber) { Release(); mCFNumber = inCFNumber; mWillRelease = true; return *this; }
-
-private:
- void Retain() { if(mWillRelease && (mCFNumber != NULL)) { CFRetain(mCFNumber); } }
- void Release() { if(mWillRelease && (mCFNumber != NULL)) { CFRelease(mCFNumber); } }
-
- CFNumberRef mCFNumber;
- bool mWillRelease;
-
-// Operations
-public:
- void AllowRelease() { mWillRelease = true; }
- void DontAllowRelease() { mWillRelease = false; }
- bool IsValid() { return mCFNumber != NULL; }
-
-// Value Access
-public:
- CFNumberRef GetCFNumber() const { return mCFNumber; }
- CFNumberRef CopyCFNumber() const { if(mCFNumber != NULL) { CFRetain(mCFNumber); } return mCFNumber; }
-
- SInt8 GetSInt8() const { SInt8 theAnswer = 0; if(mCFNumber != NULL) { CFNumberGetValue(mCFNumber, kCFNumberSInt8Type, &theAnswer); } return theAnswer; }
- SInt32 GetSInt32() const { SInt32 theAnswer = 0; if(mCFNumber != NULL) { CFNumberGetValue(mCFNumber, kCFNumberSInt32Type, &theAnswer); } return theAnswer; }
- Float32 GetFloat32() const { Float32 theAnswer = 0.0; if(mCFNumber != NULL) { CFNumberGetValue(mCFNumber, kCFNumberFloat32Type, &theAnswer); } return theAnswer; }
- Float32 GetFixed32() const;
- SInt64 GetSInt64() const { SInt64 theAnswer = 0; if(mCFNumber != NULL) { CFNumberGetValue(mCFNumber, kCFNumberSInt64Type, &theAnswer); } return theAnswer; }
-};
-
-#endif
diff --git a/libs/appleutility/CACFString.cpp b/libs/appleutility/CACFString.cpp
deleted file mode 100644
index ec3b18a8b6..0000000000
--- a/libs/appleutility/CACFString.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CACFString.cp
-
-=============================================================================*/
-
-//=============================================================================
-// Includes
-//=============================================================================
-
-#include "CACFString.h"
-
-//=============================================================================
-// CACFString
-//=============================================================================
-
-UInt32 CACFString::GetStringByteLength(CFStringRef inCFString, CFStringEncoding inEncoding)
-{
- UInt32 theAnswer = 0;
-
- if(inCFString != NULL)
- {
- CFRange theRange = { 0, CFStringGetLength(inCFString) };
- CFStringGetBytes(inCFString, theRange, inEncoding, 0, false, NULL, 0x7FFFFFFF, (CFIndex*)&theAnswer);
- }
-
- return theAnswer;
-}
-
-void CACFString::GetCString(CFStringRef inCFString, char* outString, UInt32& ioStringSize, CFStringEncoding inEncoding)
-{
- if(ioStringSize > 0)
- {
- if(inCFString != NULL)
- {
- CFIndex theLength = 0;
- CFRange theRange = { 0, CFStringGetLength(inCFString) };
- CFStringGetBytes(inCFString, theRange, inEncoding, 0, false, (UInt8*)outString, ioStringSize - 1, &theLength);
- outString[theLength] = 0;
- ioStringSize = theLength + 1;
- }
- else
- {
- outString[0] = 0;
- ioStringSize = 1;
- }
- }
-}
-
-void CACFString::GetUnicodeString(CFStringRef inCFString, UInt16* outString, UInt32& ioStringSize)
-{
- if(ioStringSize > 0)
- {
- if(inCFString != NULL)
- {
- CFRange theStringRange = { 0, CFStringGetLength(inCFString) };
- if(static_cast<UInt32>(theStringRange.length) > ioStringSize)
- {
- theStringRange.length = ioStringSize;
- }
- CFStringGetCharacters(inCFString, theStringRange, outString);
- ioStringSize = theStringRange.length;
- }
- else
- {
- outString[0] = 0;
- ioStringSize = 0;
- }
- }
-}
diff --git a/libs/appleutility/CACFString.h b/libs/appleutility/CACFString.h
deleted file mode 100644
index 51fa64ebff..0000000000
--- a/libs/appleutility/CACFString.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CACFString.h
-
-=============================================================================*/
-#if !defined(__CACFString_h__)
-#define __CACFString_h__
-
-//=============================================================================
-// Includes
-//=============================================================================
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <CoreAudio/CoreAudioTypes.h>
- #include <CoreFoundation/CFString.h>
-#else
- #include <CoreAudioTypes.h>
- #include <CFString.h>
-#endif
-
-//=============================================================================
-// CACFString
-//=============================================================================
-
-class CACFString
-{
-// Construction/Destruction
-public:
- CACFString() : mCFString(NULL), mWillRelease(true) {}
- CACFString(CFStringRef inCFString, bool inWillRelease = true) : mCFString(inCFString), mWillRelease(inWillRelease) {}
- CACFString(const char* inCString, bool inWillRelease = true) : mCFString(CFStringCreateWithCString(NULL, inCString, kCFStringEncodingASCII)), mWillRelease(inWillRelease) {}
- CACFString(const char* inCString, CFStringEncoding inCStringEncoding, bool inWillRelease = true) : mCFString(CFStringCreateWithCString(NULL, inCString, inCStringEncoding)), mWillRelease(inWillRelease) {}
- ~CACFString() { Release(); }
- CACFString(const CACFString& inString) : mCFString(inString.mCFString), mWillRelease(inString.mWillRelease) { Retain(); }
- CACFString& operator=(const CACFString& inString) { Release(); mCFString = inString.mCFString; mWillRelease = inString.mWillRelease; Retain(); return *this; }
- CACFString& operator=(CFStringRef inCFString) { Release(); mCFString = inCFString; mWillRelease = true; return *this; }
-
-private:
- void Retain() { if(mWillRelease && (mCFString != NULL)) { CFRetain(mCFString); } }
- void Release() { if(mWillRelease && (mCFString != NULL)) { CFRelease(mCFString); } }
-
- CFStringRef mCFString;
- bool mWillRelease;
-
-// Operations
-public:
- void AllowRelease() { mWillRelease = true; }
- void DontAllowRelease() { mWillRelease = false; }
- bool IsValid() const { return mCFString != NULL; }
- bool StartsWith(CFStringRef inString) const { bool theAnswer = false; if(mCFString != NULL) { theAnswer = CFStringHasPrefix(mCFString, inString); } return theAnswer; }
- bool EndsWith(CFStringRef inString) const { bool theAnswer = false; if(mCFString != NULL) { theAnswer = CFStringHasSuffix(mCFString, inString); } return theAnswer; }
-
-// Value Access
-public:
- CFStringRef GetCFString() const { return mCFString; }
- CFStringRef CopyCFString() const { if(mCFString != NULL) { CFRetain(mCFString); } return mCFString; }
- UInt32 GetLength() const { UInt32 theAnswer = 0; if(mCFString != NULL) { theAnswer = CFStringGetLength(mCFString); } return theAnswer; }
- UInt32 GetByteLength(CFStringEncoding inEncoding = kCFStringEncodingUTF8) const { UInt32 theAnswer = 0; if(mCFString != NULL) { theAnswer = GetStringByteLength(mCFString, inEncoding); } return theAnswer; }
- void GetCString(char* outString, UInt32& ioStringSize, CFStringEncoding inEncoding = kCFStringEncodingUTF8) const { GetCString(mCFString, outString, ioStringSize, inEncoding); }
- void GetUnicodeString(UInt16* outString, UInt32& ioStringSize) const { GetUnicodeString(mCFString, outString, ioStringSize); }
-
- static UInt32 GetStringByteLength(CFStringRef inCFString, CFStringEncoding inEncoding = kCFStringEncodingUTF8);
- static void GetCString(CFStringRef inCFString, char* outString, UInt32& ioStringSize, CFStringEncoding inEncoding = kCFStringEncodingUTF8);
- static void GetUnicodeString(CFStringRef inCFString, UInt16* outString, UInt32& ioStringSize);
-
-};
-
-inline bool operator<(const CACFString& x, const CACFString& y) { return CFStringCompare(x.GetCFString(), y.GetCFString(), 0) == kCFCompareLessThan; }
-inline bool operator==(const CACFString& x, const CACFString& y) { return CFStringCompare(x.GetCFString(), y.GetCFString(), 0) == kCFCompareEqualTo; }
-inline bool operator!=(const CACFString& x, const CACFString& y) { return !(x == y); }
-inline bool operator<=(const CACFString& x, const CACFString& y) { return (x < y) || (x == y); }
-inline bool operator>=(const CACFString& x, const CACFString& y) { return !(x < y); }
-inline bool operator>(const CACFString& x, const CACFString& y) { return !((x < y) || (x == y)); }
-
-//=============================================================================
-// CACFMutableString
-//=============================================================================
-
-class CACFMutableString
-{
-// Construction/Destruction
-public:
- CACFMutableString() : mCFMutableString(NULL), mWillRelease(true) {}
- CACFMutableString(CFMutableStringRef inCFMutableString, bool inWillRelease = true) : mCFMutableString(inCFMutableString), mWillRelease(inWillRelease) {}
- CACFMutableString(CFStringRef inStringToCopy, bool /*inMakeCopy*/, bool inWillRelease = true) : mCFMutableString(CFStringCreateMutableCopy(NULL, 0, inStringToCopy)), mWillRelease(inWillRelease) {}
- CACFMutableString(const char* inCString, bool inWillRelease = true) : mCFMutableString(NULL), mWillRelease(inWillRelease) { CACFString theString(inCString); mCFMutableString = CFStringCreateMutableCopy(NULL, 0, theString.GetCFString()); }
- CACFMutableString(const char* inCString, CFStringEncoding inCStringEncoding, bool inWillRelease = true) : mCFMutableString(NULL), mWillRelease(inWillRelease) { CACFString theString(inCString, inCStringEncoding); mCFMutableString = CFStringCreateMutableCopy(NULL, 0, theString.GetCFString()); }
- ~CACFMutableString() { Release(); }
- CACFMutableString(const CACFMutableString& inString) : mCFMutableString(inString.mCFMutableString), mWillRelease(inString.mWillRelease) { Retain(); }
- CACFMutableString operator=(const CACFMutableString& inString) { Release(); mCFMutableString = inString.mCFMutableString; mWillRelease = inString.mWillRelease; Retain(); return *this; }
- CACFMutableString operator=(CFMutableStringRef inCFMutableString) { Release(); mCFMutableString = inCFMutableString; mWillRelease = true; return *this; }
-
-private:
- void Retain() { if(mWillRelease && (mCFMutableString != NULL)) { CFRetain(mCFMutableString); } }
- void Release() { if(mWillRelease && (mCFMutableString != NULL)) { CFRelease(mCFMutableString); } }
-
- CFMutableStringRef mCFMutableString;
- bool mWillRelease;
-
-// Operations
-public:
- void AllowRelease() { mWillRelease = true; }
- void DontAllowRelease() { mWillRelease = false; }
- bool IsValid() { return mCFMutableString != NULL; }
- bool StartsWith(CFStringRef inString) const { bool theAnswer = false; if(mCFMutableString != NULL) { theAnswer = CFStringHasPrefix(mCFMutableString, inString); } return theAnswer; }
- bool EndsWith(CFStringRef inString) const { bool theAnswer = false; if(mCFMutableString != NULL) { theAnswer = CFStringHasSuffix(mCFMutableString, inString); } return theAnswer; }
- void Append(CFStringRef inString) { if(mCFMutableString != NULL) { CFStringAppend(mCFMutableString, inString); } }
-
-// Value Access
-public:
- CFMutableStringRef GetCFMutableString() const { return mCFMutableString; }
- CFMutableStringRef CopyCFMutableString() const { if(mCFMutableString != NULL) { CFRetain(mCFMutableString); } return mCFMutableString; }
- UInt32 GetLength() const { UInt32 theAnswer = 0; if(mCFMutableString != NULL) { theAnswer = CFStringGetLength(mCFMutableString); } return theAnswer; }
- UInt32 GetByteLength(CFStringEncoding inEncoding = kCFStringEncodingUTF8) const { UInt32 theAnswer = 0; if(mCFMutableString != NULL) { theAnswer = CACFString::GetStringByteLength(mCFMutableString, inEncoding); } return theAnswer; }
- void GetCString(char* outString, UInt32& ioStringSize, CFStringEncoding inEncoding = kCFStringEncodingUTF8) const { CACFString::GetCString(mCFMutableString, outString, ioStringSize, inEncoding); }
- void GetUnicodeString(UInt16* outString, UInt32& ioStringSize) const { CACFString::GetUnicodeString(mCFMutableString, outString, ioStringSize); }
-
-};
-
-#endif
diff --git a/libs/appleutility/CAComponent.cpp b/libs/appleutility/CAComponent.cpp
deleted file mode 100644
index 700d9e2b3e..0000000000
--- a/libs/appleutility/CAComponent.cpp
+++ /dev/null
@@ -1,257 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAComponent.cpp
-
-=============================================================================*/
-
-#include "CAComponent.h"
-#include "CAComponentDescription.h"
-#include "CACFDictionary.h"
-#include <stdlib.h>
-
-CAComponent::CAComponent (const ComponentDescription& inDesc, CAComponent* next)
- : mManuName(0), mAUName(0), mCompName(0), mCompInfo (0)
-{
- mComp = FindNextComponent ((next ? next->Comp() : NULL), const_cast<ComponentDescription*>(&inDesc));
- if (mComp)
- GetComponentInfo (Comp(), &mDesc, NULL, NULL, NULL);
- else
- memcpy (&mDesc, &inDesc, sizeof(ComponentDescription));
-}
-
-CAComponent::CAComponent (const Component& comp)
- : mComp (comp),
- mManuName(0),
- mAUName(0),
- mCompName(0),
- mCompInfo (0)
-{
- GetComponentInfo (Comp(), &mDesc, NULL, NULL, NULL);
-}
-
-CAComponent::CAComponent (const ComponentInstance& compInst)
- : mComp (Component(compInst)),
- mManuName(0),
- mAUName(0),
- mCompName(0),
- mCompInfo (0)
-{
- GetComponentInfo (Comp(), &mDesc, NULL, NULL, NULL);
-}
-
-CAComponent::CAComponent (OSType inType, OSType inSubtype, OSType inManu)
- : mDesc (inType, inSubtype, inManu),
- mManuName(0), mAUName(0), mCompName(0), mCompInfo (0)
-{
- mComp = FindNextComponent (NULL, &mDesc);
- GetComponentInfo (Comp(), &mDesc, NULL, NULL, NULL);
-}
-
-CAComponent::~CAComponent ()
-{
- Clear();
-}
-
-OSStatus CAComponent::GetResourceVersion (UInt32 &outVersion) const
-{
- bool versionFound = false;
- short componentResFileID = kResFileNotOpened;
- OSStatus result;
- short thngResourceCount;
-
- short curRes = CurResFile();
- require_noerr (result = OpenAComponentResFile( mComp, &componentResFileID), home);
- require_noerr (result = componentResFileID <= 0, home);
-
- UseResFile(componentResFileID);
-
- thngResourceCount = Count1Resources(kComponentResourceType);
-
- require_noerr (result = ResError(), home);
- // only go on if we successfully found at least 1 thng resource
- require_noerr (thngResourceCount <= 0 ? -1 : 0, home);
-
- // loop through all of the Component thng resources trying to
- // find one that matches this Component description
- for (short i = 0; i < thngResourceCount && (!versionFound); i++)
- {
- // try to get a handle to this code resource
- Handle thngResourceHandle = Get1IndResource(kComponentResourceType, i+1);
- if (thngResourceHandle != NULL && ((*thngResourceHandle) != NULL))
- {
- if (UInt32(GetHandleSize(thngResourceHandle)) >= sizeof(ExtComponentResource))
- {
- ExtComponentResource * componentThng = (ExtComponentResource*) (*thngResourceHandle);
-
- // check to see if this is the thng resource for the particular Component that we are looking at
- // (there often is more than one Component described in the resource)
- if ((componentThng->cd.componentType == mDesc.Type())
- && (componentThng->cd.componentSubType == mDesc.SubType())
- && (componentThng->cd.componentManufacturer == mDesc.Manu()))
- {
- outVersion = componentThng->componentVersion;
- versionFound = true;
- }
- }
- ReleaseResource(thngResourceHandle);
- }
- }
-
- if (!versionFound)
- result = resNotFound;
-
- UseResFile(curRes); // revert
-
- if ( componentResFileID != kResFileNotOpened )
- CloseComponentResFile(componentResFileID);
-
-home:
- return result;
-}
-
-void CAComponent::Clear ()
-{
- if (mManuName) { CFRelease (mManuName); mManuName = 0; }
- if (mAUName) { CFRelease (mAUName); mAUName = 0; }
- if (mCompName) { CFRelease (mCompName); mCompName = 0; }
- if (mCompInfo) { CFRelease (mCompInfo); mCompInfo = 0; }
-}
-
-CAComponent& CAComponent::operator= (const CAComponent& y)
-{
- Clear();
-
- mComp = y.mComp;
- mDesc = y.mDesc;
-
- if (y.mManuName) { mManuName = y.mManuName; CFRetain (mManuName); }
- if (y.mAUName) { mAUName = y.mAUName; CFRetain (mAUName); }
- if (y.mCompName) { mCompName = y.mCompName; CFRetain (mCompName); }
- if (y.mCompInfo) { mCompInfo = y.mCompInfo; CFRetain (mCompInfo); }
-
- return *this;
-}
-
-void CAComponent::SetCompNames () const
-{
- if (!mCompName) {
- Handle h1 = NewHandle(4);
- CAComponentDescription desc;
- OSStatus err = GetComponentInfo (Comp(), &desc, h1, 0, 0);
-
- if (err) { DisposeHandle(h1); return; }
-
- HLock(h1);
- char* ptr1 = *h1;
- // Get the manufacturer's name... look for the ':' character convention
- int len = *ptr1++;
- char* displayStr = 0;
-
- const_cast<CAComponent*>(this)->mCompName = CFStringCreateWithPascalString(NULL, (const unsigned char*)*h1, kCFStringEncodingMacRoman);
-
- for (int i = 0; i < len; ++i) {
- if (ptr1[i] == ':') { // found the name
- ptr1[i] = 0;
- displayStr = ptr1;
- break;
- }
- }
-
- if (displayStr)
- {
- const_cast<CAComponent*>(this)->mManuName = CFStringCreateWithCString(NULL, displayStr, kCFStringEncodingMacRoman);
-
- //move displayStr ptr past the manu, to the name
- // we move the characters down a index, because the handle doesn't have any room
- // at the end for the \0
- int i = strlen(displayStr), j = 0;
- while (displayStr[++i] == ' ' && i < len)
- ;
- while (i < len)
- displayStr[j++] = displayStr[i++];
- displayStr[j] = 0;
-
- const_cast<CAComponent*>(this)->mAUName = CFStringCreateWithCString(NULL, displayStr, kCFStringEncodingMacRoman);
- }
-
- DisposeHandle (h1);
- }
-}
-
-void CAComponent::SetCompInfo () const
-{
- if (!mCompInfo) {
- Handle h1 = NewHandle(4);
- CAComponentDescription desc;
- OSStatus err = GetComponentInfo (Comp(), &desc, 0, h1, 0);
- if (err) return;
- HLock (h1);
- const_cast<CAComponent*>(this)->mCompInfo = CFStringCreateWithPascalString(NULL, (const unsigned char*)*h1, kCFStringEncodingMacRoman);
-
- DisposeHandle (h1);
- }
-}
-
-void _ShowCF (FILE* file, CFStringRef str)
-{
- if (CFGetTypeID(str) != CFStringGetTypeID()) {
- CFShow(str);
- return;
- }
-
- UInt32 len = CFStringGetLength(str);
- char* chars = (char*)malloc (len * 2); // give us plenty of room for unichar chars
- if (CFStringGetCString (str, chars, len * 2, kCFStringEncodingUTF8))
- fprintf (file, "%s", chars);
- else
- CFShow (str);
-
- free (chars);
-}
-
-void CAComponent::Print(FILE* file) const
-{
- fprintf (file, "CAComponent: 0x%X", int(Comp()));
- if (mManuName) {
- fprintf (file, ", Manu:"); _ShowCF (file, mManuName);
- if (mAUName) fprintf (file, ", Name:"); _ShowCF (file, mAUName);
- }
- fprintf (file, ", ");
- Desc ().Print(file);
-}
diff --git a/libs/appleutility/CAComponent.h b/libs/appleutility/CAComponent.h
deleted file mode 100644
index 2ace42532d..0000000000
--- a/libs/appleutility/CAComponent.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAComponent.h
-
-=============================================================================*/
-
-#ifndef __CAComponent_h__
-#define __CAComponent_h__
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <CoreServices/CoreServices.h>
-#else
- #include <ConditionalMacros.h>
- #include <CoreServices.h>
-#endif
-
-#include "CAComponentDescription.h"
-
-class CAComponent
-{
-public:
- CAComponent ()
- : mComp (0), mDesc(), mManuName(0), mAUName(0), mCompName(0), mCompInfo (0) {}
-
- // if next is specifed that is used to find the next component after that one
- CAComponent (const ComponentDescription& inDesc, CAComponent* next = 0);
-
- CAComponent (const CAComponent& y)
- : mComp (0), mDesc(), mManuName(0), mAUName(0), mCompName(0), mCompInfo (0) { *this = y; }
-
- CAComponent (const Component& comp);
-
- CAComponent (const ComponentInstance& compInst);
-
- CAComponent (OSType inType, OSType inSubtype = 0, OSType inManu = 0);
-
- ~CAComponent ();
-
- CAComponent& operator= (const CAComponent& y);
-
- // returns true if this object references a valid component
- bool IsValid () const { return Comp() != 0; }
-
- bool HasAUStrings() const { SetCompNames (); return mManuName != 0; }
-
- // CFStringRef should be retained by caller if needed beyond lifetime of this object
-
- // Can return NULL if component doesn't follow AU naming conventions
- CFStringRef GetAUManu () const { SetCompNames (); return mManuName; }
- CFStringRef GetAUName () const { SetCompNames (); return mAUName ? mAUName : mCompName; }
-
- // Return value of NULL indicates a problem getting that information from the component
- CFStringRef GetCompName () const { SetCompNames(); return mCompName; }
- CFStringRef GetCompInfo () const { SetCompInfo(); return mCompInfo; }
-
- const CAComponentDescription& Desc () const { return mDesc; }
-
- OSStatus Open (ComponentInstance& outInst) const
- {
- return OpenAComponent (Comp(), &outInst);
- }
-
- OSStatus GetResourceVersion (UInt32 &outVersion) const;
-
- const Component& Comp() const { return mComp; }
-
- void Print(FILE* file = stdout) const;
-
- OSStatus Save (CFPropertyListRef *outData) const;
-
- OSStatus Restore (CFPropertyListRef &inData);
-
-private:
- Component mComp;
- CAComponentDescription mDesc;
-
- CFStringRef mManuName, mAUName, mCompName, mCompInfo;
-
- void SetCompNames () const;
- void SetCompInfo () const;
- void Clear ();
-};
-
-#endif
diff --git a/libs/appleutility/CAComponentDescription.cpp b/libs/appleutility/CAComponentDescription.cpp
deleted file mode 100644
index 261a2b881c..0000000000
--- a/libs/appleutility/CAComponentDescription.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAComponentDescription.cpp
-
-=============================================================================*/
-
-#include "CAComponentDescription.h"
-#include <ctype.h>
-
-extern "C" void CAShowComponentDescription(const ComponentDescription *desc)
-{
- CAComponentDescription::_CAShowComponentDescription (desc, stdout);
-}
-
-char *StringForOSType (OSType t, char *writeLocation)
-{
- char *p = writeLocation;
- unsigned char str[4], *q = str;
- *(UInt32 *)str = EndianU32_NtoB(t);
- for (int i = 0; i < 4; ++i) {
- if (isprint(*q) && *q != '\\')
- *p++ = *q++;
- else {
- sprintf(p, "\\x%02X", *q++);
- p += 4;
- }
- }
- *p = '\0';
- return writeLocation;
-}
-
-
-void CAComponentDescription::_CAShowComponentDescription(const ComponentDescription *desc, FILE* file)
-{
- if (desc)
- {
- char str[24];
- fprintf (file, "ComponentDescription: %s - ", StringForOSType(desc->componentType, str));
- fprintf (file, "%s - ", StringForOSType(desc->componentSubType, str));
- fprintf (file, "%s", StringForOSType(desc->componentManufacturer, str));
- fprintf (file, ", 0x%lX, 0x%lX\n", desc->componentFlags, desc->componentFlagsMask);
- }
-}
-
-CAComponentDescription::CAComponentDescription (OSType inType, OSType inSubtype, OSType inManu)
-{
- componentType = inType;
- componentSubType = inSubtype;
- componentManufacturer = inManu;
- componentFlags = 0;
- componentFlagsMask = 0;
-}
-
-bool CAComponentDescription::IsAU () const
-{
- bool flag = IsEffect() || IsMusicDevice() || IsOffline();
- if (flag) return true;
-
- switch (componentType) {
- case kAudioUnitType_Output:
- case kAudioUnitType_FormatConverter:
- case kAudioUnitType_Mixer:
- return true;
- }
- return false;
-}
-
-inline bool _MatchTest (const OSType &inTypeA, const OSType &inTypeB)
-{
- return ((inTypeA == inTypeB) || (!inTypeA && !inTypeB) || (inTypeA && !inTypeB) || (!inTypeA && inTypeB));
-}
-
-bool CAComponentDescription::Matches (const ComponentDescription &desc) const
-{
- bool matches = false;
-
- // see if the type matches
- matches = _MatchTest (componentType, desc.componentType);
-
- if (matches)
- matches = _MatchTest (componentSubType, desc.componentSubType);
-
- if (matches)
- matches = _MatchTest (componentManufacturer, desc.componentManufacturer);
-
- return matches;
-}
diff --git a/libs/appleutility/CAComponentDescription.h b/libs/appleutility/CAComponentDescription.h
deleted file mode 100644
index a681902b91..0000000000
--- a/libs/appleutility/CAComponentDescription.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAComponentDescription.h
-
-=============================================================================*/
-
-#ifndef __CAComponentDescription_h__
-#define __CAComponentDescription_h__
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <CoreServices/CoreServices.h>
- #include <AudioUnit/AudioUnit.h>
-#else
- #include <ConditionalMacros.h>
- #include <CoreServices.h>
- #include <AudioUnit.h>
-#endif
-
-#include "CACFDictionary.h"
-#include <stdio.h>
-#include <string.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void CAShowComponentDescription(const ComponentDescription *desc);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-// ____________________________________________________________________________
-//
-// CAComponentDescription
-class CAComponentDescription : public ComponentDescription {
-public:
- CAComponentDescription() { memset (this, 0, sizeof (ComponentDescription)); }
-
- CAComponentDescription (OSType inType, OSType inSubtype = 0, OSType inManu = 0);
-
- CAComponentDescription(const ComponentDescription& desc) { memcpy (this, &desc, sizeof (ComponentDescription)); }
-
- // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- //
- // interrogation
-
- bool IsAU () const;
-
- bool IsAUFX() const { return componentType == kAudioUnitType_Effect; }
- bool IsAUFM() const { return componentType == kAudioUnitType_MusicEffect; }
-
- bool IsEffect () const { return IsAUFX() || IsAUFM() || IsPanner(); }
-
- bool IsOffline () const { return componentType == 'auol'; }
-
- bool IsFConv () const { return componentType == kAudioUnitType_FormatConverter; }
-
- bool IsPanner () const { return componentType == kAudioUnitType_Panner; }
-
- bool IsMusicDevice () const { return componentType == kAudioUnitType_MusicDevice; }
-
-#ifndef MAC_OS_X_VERSION_10_4
- bool IsGenerator () const { return componentType =='augn'; }
-#else
- bool IsGenerator () const { return componentType ==kAudioUnitType_Generator; }
-#endif
-
- bool IsOutput () const { return componentType == kAudioUnitType_Output; }
-
- bool IsSource () const { return IsMusicDevice() || IsGenerator(); }
-
- OSType Type () const { return componentType; }
- OSType SubType () const { return componentSubType; }
- OSType Manu () const { return componentManufacturer; }
-
- int Count() const { return CountComponents(const_cast<CAComponentDescription*>(this)); }
-
- // does a semantic match where "wild card" values for type, subtype, manu will match
- bool Matches (const ComponentDescription &desc) const;
-
- // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- //
- // other
-
- void Print(FILE* file = stdout) const { _CAShowComponentDescription (this, file); }
-
- OSStatus Save (CFPropertyListRef *outData) const;
- OSStatus Restore (CFPropertyListRef &inData);
-
-private:
- static void _CAShowComponentDescription (const ComponentDescription *desc, FILE* file);
- friend void CAShowComponentDescription (const ComponentDescription *desc);
-};
-
-inline bool operator< (const ComponentDescription& x, const ComponentDescription& y)
-{
- return memcmp (&x, &y, offsetof (ComponentDescription, componentFlags)) < 0;
-}
-
-inline bool operator== (const ComponentDescription& x, const ComponentDescription& y)
-{
- return !memcmp (&x, &y, offsetof (ComponentDescription, componentFlags));
-}
-
-inline bool operator!= (const ComponentDescription& x, const ComponentDescription& y)
-{
- return !(x == y);
-}
-
-#endif
diff --git a/libs/appleutility/CAConditionalMacros.h b/libs/appleutility/CAConditionalMacros.h
deleted file mode 100644
index 62f642709a..0000000000
--- a/libs/appleutility/CAConditionalMacros.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAConditionalMacros.h
-
-=============================================================================*/
-#if !defined(__CAConditionalMacros_h__)
-#define __CAConditionalMacros_h__
-
-//=============================================================================
-// This file exists to make figuring out how to include system headers
-// easier in a cross platform world. We throw in an include of the standard
-// ConditionalMacros too.
-//=============================================================================
-
-// ########## THIS FILE SHOULD GO AWAY SOON, replaced by __COREAUDIO_USE_FLAT_INCLUDES__
-// but for now, use this as a way to define __COREAUDIO_USE_FLAT_INCLUDES__ programmatically
-
-// TargetConditionals.h defines the bare minimum we need
-#include "TargetConditionals.h"
-
-// Determine whether or not to use framework style includes for system headers
-#if !defined(CoreAudio_Use_Framework_Includes) && !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #if TARGET_RT_MAC_MACHO
- #define CoreAudio_Use_Framework_Includes 1
- #else
- #define CoreAudio_Use_Framework_Includes 0
- #endif
-#endif
-
-// Include the regular ConditionalMacros.h too, since it has useful stuff that
-// TargetConditionals.h lacks for some reason.
-#if CoreAudio_Use_Framework_Includes
- #include <CoreServices/../Frameworks/CarbonCore.framework/Headers/ConditionalMacros.h>
-#else
- #include "ConditionalMacros.h"
-#endif
-
-#endif
diff --git a/libs/appleutility/CADebugMacros.cpp b/libs/appleutility/CADebugMacros.cpp
deleted file mode 100644
index edee1f3d51..0000000000
--- a/libs/appleutility/CADebugMacros.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CADebugMacros.cp
-
-=============================================================================*/
-
-#include "CADebugMacros.h"
-#include <stdio.h>
-#include <stdarg.h>
-#if TARGET_API_MAC_OSX
- #include <syslog.h>
-#endif
-
-#if DEBUG
-#include <stdio.h>
-
-void DebugPrint(const char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- vprintf(fmt, args);
- va_end(args);
-}
-#endif // DEBUG
-
-#if TARGET_API_MAC_OSX
-void LogError(const char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
-#if DEBUG
- vprintf(fmt, args);
-#endif
- vsyslog(LOG_ERR, fmt, args);
- va_end(args);
-}
-
-void LogWarning(const char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
-#if DEBUG
- vprintf(fmt, args);
-#endif
- vsyslog(LOG_WARNING, fmt, args);
- va_end(args);
-}
-#endif
diff --git a/libs/appleutility/CADebugMacros.h b/libs/appleutility/CADebugMacros.h
deleted file mode 100644
index 1abae40187..0000000000
--- a/libs/appleutility/CADebugMacros.h
+++ /dev/null
@@ -1,414 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CADebugMacros.h
-
-=============================================================================*/
-#if !defined(__CADebugMacros_h__)
-#define __CADebugMacros_h__
-
-//=============================================================================
-// CADebugMacros
-//=============================================================================
-
-//#define CoreAudio_StopOnFailure 1
-//#define CoreAudio_TimeStampMessages 1
-//#define CoreAudio_ThreadStampMessages 1
-//#define CoreAudio_FlushDebugMessages 1
-
-#define CA4CCToCString(the4CC) { ((char*)&the4CC)[0], ((char*)&the4CC)[1], ((char*)&the4CC)[2], ((char*)&the4CC)[3], 0 }
-
-#pragma mark Basic Definitions
-
-#if DEBUG || CoreAudio_Debug
-
- // can be used to break into debugger immediately, also see CADebugger
- #define BusError() (*(long *)0 = 0)
-
- // basic debugging print routines
- #if TARGET_OS_MAC && !TARGET_API_MAC_CARBON
- extern pascal void DebugStr(const unsigned char* debuggerMsg);
- #define DebugMessage(msg) DebugStr("\p"msg)
- #define DebugMessageN1(msg, N1)
- #define DebugMessageN2(msg, N1, N2)
- #define DebugMessageN3(msg, N1, N2, N3)
- #else
- #include "CADebugPrintf.h"
-
- #if (CoreAudio_FlushDebugMessages && !CoreAudio_UseSysLog) || defined(CoreAudio_UseSideFile)
- #define FlushRtn ;fflush(DebugPrintfFile)
- #else
- #define FlushRtn
- #endif
-
- #if CoreAudio_ThreadStampMessages
- #include <pthread.h>
- #include "CAHostTimeBase.h"
- #define DebugMessage(msg) DebugPrintfRtn(DebugPrintfFile, "%p %.4f: %s"DebugPrintfLineEnding, pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), msg) FlushRtn
- #define DebugMessageN1(msg, N1) DebugPrintfRtn(DebugPrintfFile, "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1) FlushRtn
- #define DebugMessageN2(msg, N1, N2) DebugPrintfRtn(DebugPrintfFile, "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2) FlushRtn
- #define DebugMessageN3(msg, N1, N2, N3) DebugPrintfRtn(DebugPrintfFile, "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3) FlushRtn
- #define DebugMessageN4(msg, N1, N2, N3, N4) DebugPrintfRtn(DebugPrintfFile, "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4) FlushRtn
- #define DebugMessageN5(msg, N1, N2, N3, N4, N5) DebugPrintfRtn(DebugPrintfFile, "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5) FlushRtn
- #define DebugMessageN6(msg, N1, N2, N3, N4, N5, N6) DebugPrintfRtn(DebugPrintfFile, "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5, N6) FlushRtn
- #define DebugMessageN7(msg, N1, N2, N3, N4, N5, N6, N7) DebugPrintfRtn(DebugPrintfFile, "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5, N6, N7) FlushRtn
- #define DebugMessageN8(msg, N1, N2, N3, N4, N5, N6, N7, N8) DebugPrintfRtn(DebugPrintfFile, "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5, N6, N7, N8) FlushRtn
- #define DebugMessageN9(msg, N1, N2, N3, N4, N5, N6, N7, N8, N9) DebugPrintfRtn(DebugPrintfFile, "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5, N6, N7, N8, N9) FlushRtn
- #elif CoreAudio_TimeStampMessages
- #include "CAHostTimeBase.h"
- #define DebugMessage(msg) DebugPrintfRtn(DebugPrintfFile, "%.4f: %s"DebugPrintfLineEnding, pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), msg) FlushRtn
- #define DebugMessageN1(msg, N1) DebugPrintfRtn(DebugPrintfFile, "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1) FlushRtn
- #define DebugMessageN2(msg, N1, N2) DebugPrintfRtn(DebugPrintfFile, "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2) FlushRtn
- #define DebugMessageN3(msg, N1, N2, N3) DebugPrintfRtn(DebugPrintfFile, "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3) FlushRtn
- #define DebugMessageN4(msg, N1, N2, N3, N4) DebugPrintfRtn(DebugPrintfFile, "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4) FlushRtn
- #define DebugMessageN5(msg, N1, N2, N3, N4, N5) DebugPrintfRtn(DebugPrintfFile, "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5) FlushRtn
- #define DebugMessageN6(msg, N1, N2, N3, N4, N5, N6) DebugPrintfRtn(DebugPrintfFile, "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5, N6) FlushRtn
- #define DebugMessageN7(msg, N1, N2, N3, N4, N5, N6, N7) DebugPrintfRtn(DebugPrintfFile, "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5, N6, N7) FlushRtn
- #define DebugMessageN8(msg, N1, N2, N3, N4, N5, N6, N7, N8) DebugPrintfRtn(DebugPrintfFile, "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5, N6, N7, N8) FlushRtn
- #define DebugMessageN9(msg, N1, N2, N3, N4, N5, N6, N7, N8, N9) DebugPrintfRtn(DebugPrintfFile, "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5, N6, N7, N8, N9) FlushRtn
- #else
- #define DebugMessage(msg) DebugPrintfRtn(DebugPrintfFile, "%s"DebugPrintfLineEnding, msg) FlushRtn
- #define DebugMessageN1(msg, N1) DebugPrintfRtn(DebugPrintfFile, msg DebugPrintfLineEnding, N1) FlushRtn
- #define DebugMessageN2(msg, N1, N2) DebugPrintfRtn(DebugPrintfFile, msg DebugPrintfLineEnding, N1, N2) FlushRtn
- #define DebugMessageN3(msg, N1, N2, N3) DebugPrintfRtn(DebugPrintfFile, msg DebugPrintfLineEnding, N1, N2, N3) FlushRtn
- #define DebugMessageN4(msg, N1, N2, N3, N4) DebugPrintfRtn(DebugPrintfFile, msg DebugPrintfLineEnding, N1, N2, N3, N4) FlushRtn
- #define DebugMessageN5(msg, N1, N2, N3, N4, N5) DebugPrintfRtn(DebugPrintfFile, msg DebugPrintfLineEnding, N1, N2, N3, N4, N5) FlushRtn
- #define DebugMessageN6(msg, N1, N2, N3, N4, N5, N6) DebugPrintfRtn(DebugPrintfFile, msg DebugPrintfLineEnding, N1, N2, N3, N4, N5, N6) FlushRtn
- #define DebugMessageN7(msg, N1, N2, N3, N4, N5, N6, N7) DebugPrintfRtn(DebugPrintfFile, msg DebugPrintfLineEnding, N1, N2, N3, N4, N5, N6, N7) FlushRtn
- #define DebugMessageN8(msg, N1, N2, N3, N4, N5, N6, N7, N8) DebugPrintfRtn(DebugPrintfFile, msg DebugPrintfLineEnding, N1, N2, N3, N4, N5, N6, N7, N8) FlushRtn
- #define DebugMessageN9(msg, N1, N2, N3, N4, N5, N6, N7, N8, N9) DebugPrintfRtn(DebugPrintfFile, msg DebugPrintfLineEnding, N1, N2, N3, N4, N5, N6, N7, N8, N9) FlushRtn
- #endif
- #endif
- void DebugPrint(const char *fmt, ...); // can be used like printf
- #define DEBUGPRINT(msg) DebugPrint msg // have to double-parenthesize arglist (see Debugging.h)
- #if VERBOSE
- #define vprint(msg) DEBUGPRINT(msg)
- #else
- #define vprint(msg)
- #endif
-
- #if CoreAudio_StopOnFailure
- #include "CADebugger.h"
- #define STOP CADebuggerStop()
- #else
- #define STOP
- #endif
-
-#else
- #define DebugMessage(msg)
- #define DebugMessageN1(msg, N1)
- #define DebugMessageN2(msg, N1, N2)
- #define DebugMessageN3(msg, N1, N2, N3)
- #define DebugMessageN4(msg, N1, N2, N3, N4)
- #define DebugMessageN5(msg, N1, N2, N3, N4, N5)
- #define DebugMessageN6(msg, N1, N2, N3, N4, N5, N6)
- #define DebugMessageN7(msg, N1, N2, N3, N4, N5, N6, N7)
- #define DebugMessageN8(msg, N1, N2, N3, N4, N5, N6, N7, N8)
- #define DebugMessageN9(msg, N1, N2, N3, N4, N5, N6, N7, N8, N9)
- #define DEBUGPRINT(msg)
- #define vprint(msg)
- #define STOP
-#endif
-
-void LogError(const char *fmt, ...); // writes to syslog (and stderr if debugging)
-void LogWarning(const char *fmt, ...); // writes to syslog (and stderr if debugging)
-
-#if DEBUG || CoreAudio_Debug
-
-#pragma mark Debug Macros
-
-#define Assert(inCondition, inMessage) \
- if(!(inCondition)) \
- { \
- DebugMessage(inMessage); \
- STOP; \
- }
-
-#define AssertNoError(inError, inMessage) \
- { \
- SInt32 __Err = (inError); \
- if(__Err != 0) \
- { \
- char __4CC[5] = CA4CCToCString(__Err); \
- DebugMessageN2(inMessage ", Error: %ld (%s)", __Err, __4CC); \
- STOP; \
- } \
- }
-
-#define AssertNoKernelError(inError, inMessage) \
- { \
- unsigned int __Err = (unsigned int)(inError); \
- if(__Err != 0) \
- { \
- DebugMessageN1(inMessage ", Error: 0x%X", __Err); \
- STOP; \
- } \
- }
-
-#define FailIf(inCondition, inHandler, inMessage) \
- if(inCondition) \
- { \
- DebugMessage(inMessage); \
- STOP; \
- goto inHandler; \
- }
-
-#define FailWithAction(inCondition, inAction, inHandler, inMessage) \
- if(inCondition) \
- { \
- DebugMessage(inMessage); \
- STOP; \
- { inAction; } \
- goto inHandler; \
- }
-
-#define FailIfNULL(inPointer, inAction, inHandler, inMessage) \
- if((inPointer) == NULL) \
- { \
- DebugMessage(inMessage); \
- STOP; \
- { inAction; } \
- goto inHandler; \
- }
-
-#define FailIfKernelError(inKernelError, inException, inMessage) \
- { \
- kern_return_t __Err = (inKernelError); \
- if(__Err != 0) \
- { \
- DebugMessageN1(inMessage ", Error: 0x%X", __Err); \
- STOP; \
- { inAction; } \
- goto inHandler; \
- } \
- }
-
-#define FailIfError(inError, inException, inMessage) \
- { \
- SInt32 __Err = (inError); \
- if(__Err != 0) \
- { \
- char __4CC[5] = CA4CCToCString(__Err); \
- DebugMessageN2(inMessage ", Error: %ld (%s)", __Err, __4CC); \
- STOP; \
- { inAction; } \
- goto inHandler; \
- } \
- }
-
-#if defined(__cplusplus)
-
-#define Throw(inException) STOP; throw (inException)
-
-#define ThrowIf(inCondition, inException, inMessage) \
- if(inCondition) \
- { \
- DebugMessage(inMessage); \
- Throw(inException); \
- }
-
-#define ThrowIfNULL(inPointer, inException, inMessage) \
- if((inPointer) == NULL) \
- { \
- DebugMessage(inMessage); \
- Throw(inException); \
- }
-
-#define ThrowIfKernelError(inKernelError, inException, inMessage) \
- { \
- kern_return_t __Err = (inKernelError); \
- if(__Err != 0) \
- { \
- DebugMessageN1(inMessage ", Error: 0x%X", __Err); \
- Throw(inException); \
- } \
- }
-
-#define ThrowIfError(inError, inException, inMessage) \
- { \
- SInt32 __Err = (inError); \
- if(__Err != 0) \
- { \
- char __4CC[5] = CA4CCToCString(__Err); \
- DebugMessageN2(inMessage ", Error: %ld (%s)", __Err, __4CC); \
- Throw(inException); \
- } \
- }
-
-#if TARGET_OS_WIN32
-#define ThrowIfWinError(inError, inException, inMessage) \
- { \
- HRESULT __Err = (inError); \
- if(FAILED(__Err)) \
- { \
- DebugMessageN1(inMessage ", Error: 0x%X", __Err); \
- Throw(inException); \
- } \
- }
-#endif
-
-#define SubclassResponsibility(inMethodName, inException) \
- { \
- DebugMessage(inMethodName": Subclasses must implement this method"); \
- Throw(inException); \
- }
-
-#endif // defined(__cplusplus)
-
-#else
-
-#pragma mark Release Macros
-
-#define Assert(inCondition, inMessage) \
- if(!(inCondition)) \
- { \
- STOP; \
- }
-
-#define AssertNoError(inError, inMessage) \
- { \
- SInt32 __Err = (inError); \
- if(__Err != 0) \
- { \
- STOP; \
- } \
- }
-
-#define AssertNoKernelError(inError, inMessage) \
- { \
- unsigned int __Err = (unsigned int)(inError); \
- if(__Err != 0) \
- { \
- STOP; \
- } \
- }
-
-#define FailIf(inCondition, inHandler, inMessage) \
- if(inCondition) \
- { \
- STOP; \
- goto inHandler; \
- }
-
-#define FailWithAction(inCondition, inAction, inHandler, inMessage) \
- if(inCondition) \
- { \
- STOP; \
- { inAction; } \
- goto inHandler; \
- }
-
-#define FailIfNULL(inPointer, inAction, inHandler, inMessage) \
- if((inPointer) == NULL) \
- { \
- STOP; \
- { inAction; } \
- goto inHandler; \
- }
-
-#define FailIfKernelError(inKernelError, inException, inMessage) \
- if((inKernelError) != 0) \
- { \
- STOP; \
- { inAction; } \
- goto inHandler; \
- }
-
-#define FailIfError(inError, inException, inMessage) \
- if((inError) != 0) \
- { \
- STOP; \
- { inAction; } \
- goto inHandler; \
- }
-
-#if defined(__cplusplus)
-
-#define Throw(inException) STOP; throw (inException)
-
-#define ThrowIf(inCondition, inException, inMessage) \
- if(inCondition) \
- { \
- Throw(inException); \
- }
-
-#define ThrowIfNULL(inPointer, inException, inMessage) \
- if((inPointer) == NULL) \
- { \
- Throw(inException); \
- }
-
-#define ThrowIfKernelError(inKernelError, inException, inMessage) \
- { \
- kern_return_t __Err = (inKernelError); \
- if(__Err != 0) \
- { \
- Throw(inException); \
- } \
- }
-
-#define ThrowIfError(inError, inException, inMessage) \
- { \
- SInt32 __Err = (inError); \
- if(__Err != 0) \
- { \
- Throw(inException); \
- } \
- }
-
-#if TARGET_OS_WIN32
-#define ThrowIfWinError(inError, inException, inMessage) \
- { \
- HRESULT __Err = (inError); \
- if(FAILED(__Err)) \
- { \
- Throw(inException); \
- } \
- }
-#endif
-
-#define SubclassResponsibility(inMethodName, inException) \
- { \
- Throw(inException); \
- }
-
-#endif // defined(__cplusplus)
-
-#endif // DEBUG || CoreAudio_Debug
-
-#endif
diff --git a/libs/appleutility/CAMath.h b/libs/appleutility/CAMath.h
deleted file mode 100644
index 32b4e7f0b3..0000000000
--- a/libs/appleutility/CAMath.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAMath.h
-
-=============================================================================*/
-
-#ifndef __CAMath_h__
-#define __CAMath_h__
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <CoreAudio/CoreAudioTypes.h>
-#else
- #include <CoreAudioTypes.h>
-#endif
-
-inline bool fiszero(Float64 f) { return (f == 0.); }
-inline bool fiszero(Float32 f) { return (f == 0.f); }
-
-inline bool fnonzero(Float64 f) { return !fiszero(f); }
-inline bool fnonzero(Float32 f) { return !fiszero(f); }
-
-inline bool fequal(const Float64 &a, const Float64 &b) { return a == b; }
-inline bool fequal(const Float32 &a, const Float32 &b) { return a == b; }
-
-inline bool fnotequal(const Float64 &a, const Float64 &b) { return !fequal(a, b); }
-inline bool fnotequal(const Float32 &a, const Float32 &b) { return !fequal(a, b); }
-
-#endif // __CAMath_h__
diff --git a/libs/appleutility/CAReferenceCounted.h b/libs/appleutility/CAReferenceCounted.h
deleted file mode 100644
index d57f97c31f..0000000000
--- a/libs/appleutility/CAReferenceCounted.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAReferenceCounted.h
-
-=============================================================================*/
-
-#ifndef __CAReferenceCounted_h__
-#define __CAReferenceCounted_h__
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <CoreServices/CoreServices.h>
-#else
- #include <CoreServices.h>
-#endif
-
-#if TARGET_OS_WIN32
- #include "CAWindows.h"
-#endif
-
-// base class for reference-counted objects
-class CAReferenceCounted {
-public:
- CAReferenceCounted() : mRefCount(1) {}
-
- void retain() { IncrementAtomic(&mRefCount); }
-
- void release()
- {
- // this returns the ORIGINAL value, not the new one.
- SInt32 rc = DecrementAtomic(&mRefCount);
- if (rc == 1) {
- delete this;
- }
- }
-
-protected:
- virtual ~CAReferenceCounted() { }
-
-private:
- SInt32 mRefCount;
-
- CAReferenceCounted(const CAReferenceCounted &a) : mRefCount(0) { }
- CAReferenceCounted operator=(const CAReferenceCounted &a) { return *this; }
-};
-
-
-#endif // __CAReferenceCounted_h__
diff --git a/libs/appleutility/CAStreamBasicDescription.cpp b/libs/appleutility/CAStreamBasicDescription.cpp
deleted file mode 100644
index f65bdd99ac..0000000000
--- a/libs/appleutility/CAStreamBasicDescription.cpp
+++ /dev/null
@@ -1,520 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAStreamBasicDescription.cpp
-
-=============================================================================*/
-
-#include "CAConditionalMacros.h"
-
-#include "CAStreamBasicDescription.h"
-#include "CAMath.h"
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <CoreFoundation/CFByteOrder.h>
-#else
- #include <CFByteOrder.h>
-#endif
-
-#pragma mark This file needs to compile on more earlier versions of the OS, so please keep that in mind when editing it
-
-const AudioStreamBasicDescription CAStreamBasicDescription::sEmpty = { 0.0, 0, 0, 0, 0, 0, 0, 0, 0 };
-
-CAStreamBasicDescription::CAStreamBasicDescription(double inSampleRate, UInt32 inFormatID,
- UInt32 inBytesPerPacket, UInt32 inFramesPerPacket,
- UInt32 inBytesPerFrame, UInt32 inChannelsPerFrame,
- UInt32 inBitsPerChannel, UInt32 inFormatFlags)
-{
- mSampleRate = inSampleRate;
- mFormatID = inFormatID;
- mBytesPerPacket = inBytesPerPacket;
- mFramesPerPacket = inFramesPerPacket;
- mBytesPerFrame = inBytesPerFrame;
- mChannelsPerFrame = inChannelsPerFrame;
- mBitsPerChannel = inBitsPerChannel;
- mFormatFlags = inFormatFlags;
-}
-
-void CAStreamBasicDescription::PrintFormat(FILE *f, const char *indent, const char *name) const
-{
- fprintf(f, "%s%s ", indent, name);
- char formatID[5];
- *(UInt32 *)formatID = CFSwapInt32HostToBig(mFormatID);
- formatID[4] = '\0';
- fprintf(f, "%2ld ch, %6.0f Hz, '%-4.4s' (0x%08lX) ",
- NumberChannels(), mSampleRate, formatID,
- mFormatFlags);
- if (mFormatID == kAudioFormatLinearPCM) {
- bool isInt = !(mFormatFlags & kLinearPCMFormatFlagIsFloat);
- int wordSize = SampleWordSize();
- const char *endian = (wordSize > 1) ?
- ((mFormatFlags & kLinearPCMFormatFlagIsBigEndian) ? " big-endian" : " little-endian" ) : "";
- const char *sign = isInt ?
- ((mFormatFlags & kLinearPCMFormatFlagIsSignedInteger) ? " signed" : " unsigned") : "";
- const char *floatInt = isInt ? "integer" : "float";
- char packed[32];
- if (wordSize > 0 && PackednessIsSignificant()) {
- if (mFormatFlags & kLinearPCMFormatFlagIsPacked)
- sprintf(packed, "packed in %d bytes", wordSize);
- else
- sprintf(packed, "unpacked in %d bytes", wordSize);
- } else
- packed[0] = '\0';
- const char *align = (wordSize > 0 && AlignmentIsSignificant()) ?
- ((mFormatFlags & kLinearPCMFormatFlagIsAlignedHigh) ? " high-aligned" : " low-aligned") : "";
- const char *deinter = (mFormatFlags & kAudioFormatFlagIsNonInterleaved) ? ", deinterleaved" : "";
- const char *commaSpace = (packed[0]!='\0') || (align[0]!='\0') ? ", " : "";
-
- fprintf(f, "%ld-bit%s%s %s%s%s%s%s\n",
- mBitsPerChannel, endian, sign, floatInt,
- commaSpace, packed, align, deinter);
- } else if (mFormatID == 'alac') { // kAudioFormatAppleLossless
- int sourceBits = 0;
- switch (mFormatFlags)
- {
- case 1: // kAppleLosslessFormatFlag_16BitSourceData
- sourceBits = 16;
- break;
- case 2: // kAppleLosslessFormatFlag_20BitSourceData
- sourceBits = 20;
- break;
- case 3: // kAppleLosslessFormatFlag_24BitSourceData
- sourceBits = 24;
- break;
- case 4: // kAppleLosslessFormatFlag_32BitSourceData
- sourceBits = 32;
- break;
- }
- if (sourceBits)
- fprintf(f, "from %d-bit source, ", sourceBits);
- else
- fprintf(f, "from UNKNOWN source bit depth, ");
-
- fprintf(f, "%ld frames/packet\n", mFramesPerPacket);
- }
- else
- fprintf(f, "%ld bits/channel, %ld bytes/packet, %ld frames/packet, %ld bytes/frame\n",
- mBitsPerChannel, mBytesPerPacket, mFramesPerPacket, mBytesPerFrame);
-}
-
-void CAStreamBasicDescription::NormalizeLinearPCMFormat(AudioStreamBasicDescription& ioDescription)
-{
- // the only thing that changes is to make mixable linear PCM into the canonical linear PCM format
- if((ioDescription.mFormatID == kAudioFormatLinearPCM) && ((ioDescription.mFormatFlags & kIsNonMixableFlag) == 0))
- {
- // the canonical linear PCM format is 32 bit native endian floats
- ioDescription.mFormatFlags = kAudioFormatFlagsNativeFloatPacked;
- ioDescription.mBytesPerPacket = sizeof(Float32) * ioDescription.mChannelsPerFrame;
- ioDescription.mFramesPerPacket = 1;
- ioDescription.mBytesPerFrame = sizeof(Float32) * ioDescription.mChannelsPerFrame;
- ioDescription.mBitsPerChannel = 8 * sizeof(Float32);
- }
-}
-
-void CAStreamBasicDescription::ResetFormat(AudioStreamBasicDescription& ioDescription)
-{
- ioDescription.mSampleRate = 0;
- ioDescription.mFormatID = 0;
- ioDescription.mBytesPerPacket = 0;
- ioDescription.mFramesPerPacket = 0;
- ioDescription.mBytesPerFrame = 0;
- ioDescription.mChannelsPerFrame = 0;
- ioDescription.mBitsPerChannel = 0;
- ioDescription.mFormatFlags = 0;
-}
-
-void CAStreamBasicDescription::FillOutFormat(AudioStreamBasicDescription& ioDescription, const AudioStreamBasicDescription& inTemplateDescription)
-{
- if(fiszero(ioDescription.mSampleRate))
- {
- ioDescription.mSampleRate = inTemplateDescription.mSampleRate;
- }
- if(ioDescription.mFormatID == 0)
- {
- ioDescription.mFormatID = inTemplateDescription.mFormatID;
- }
- if(ioDescription.mFormatFlags == 0)
- {
- ioDescription.mFormatFlags = inTemplateDescription.mFormatFlags;
- }
- if(ioDescription.mBytesPerPacket == 0)
- {
- ioDescription.mBytesPerPacket = inTemplateDescription.mBytesPerPacket;
- }
- if(ioDescription.mFramesPerPacket == 0)
- {
- ioDescription.mFramesPerPacket = inTemplateDescription.mFramesPerPacket;
- }
- if(ioDescription.mBytesPerFrame == 0)
- {
- ioDescription.mBytesPerFrame = inTemplateDescription.mBytesPerFrame;
- }
- if(ioDescription.mChannelsPerFrame == 0)
- {
- ioDescription.mChannelsPerFrame = inTemplateDescription.mChannelsPerFrame;
- }
- if(ioDescription.mBitsPerChannel == 0)
- {
- ioDescription.mBitsPerChannel = inTemplateDescription.mBitsPerChannel;
- }
-}
-
-void CAStreamBasicDescription::GetSimpleName(const AudioStreamBasicDescription& inDescription, char* outName, bool inAbbreviate)
-{
- switch(inDescription.mFormatID)
- {
- case kAudioFormatLinearPCM:
- {
- const char* theEndianString = NULL;
- if((inDescription.mFormatFlags & kAudioFormatFlagIsBigEndian) != 0)
- {
- #if TARGET_RT_LITTLE_ENDIAN
- theEndianString = "Big Endian";
- #endif
- }
- else
- {
- #if TARGET_RT_BIG_ENDIAN
- theEndianString = "Little Endian";
- #endif
- }
-
- const char* theKindString = NULL;
- if((inDescription.mFormatFlags & kAudioFormatFlagIsFloat) != 0)
- {
- theKindString = (inAbbreviate ? "Float" : "Floating Point");
- }
- else if((inDescription.mFormatFlags & kAudioFormatFlagIsSignedInteger) != 0)
- {
- theKindString = (inAbbreviate ? "SInt" : "Signed Integer");
- }
- else
- {
- theKindString = (inAbbreviate ? "UInt" : "Unsigned Integer");
- }
-
- const char* thePackingString = NULL;
- if((inDescription.mFormatFlags & kAudioFormatFlagIsPacked) == 0)
- {
- if((inDescription.mFormatFlags & kAudioFormatFlagIsAlignedHigh) != 0)
- {
- thePackingString = "High";
- }
- else
- {
- thePackingString = "Low";
- }
- }
-
- const char* theMixabilityString = NULL;
- if((inDescription.mFormatFlags & kIsNonMixableFlag) == 0)
- {
- theMixabilityString = "Mixable";
- }
- else
- {
- theMixabilityString = "Unmixable";
- }
-
- if(inAbbreviate)
- {
- if(theEndianString != NULL)
- {
- if(thePackingString != NULL)
- {
- sprintf(outName, "%s %d Ch %s %s %s%d/%s%d", theMixabilityString, (int)inDescription.mChannelsPerFrame, theEndianString, thePackingString, theKindString, (int)inDescription.mBitsPerChannel, theKindString, (int)(inDescription.mBytesPerFrame / inDescription.mChannelsPerFrame) * 8);
- }
- else
- {
- sprintf(outName, "%s %d Ch %s %s%d", theMixabilityString, (int)inDescription.mChannelsPerFrame, theEndianString, theKindString, (int)inDescription.mBitsPerChannel);
- }
- }
- else
- {
- if(thePackingString != NULL)
- {
- sprintf(outName, "%s %d Ch %s %s%d/%s%d", theMixabilityString, (int)inDescription.mChannelsPerFrame, thePackingString, theKindString, (int)inDescription.mBitsPerChannel, theKindString, (int)((inDescription.mBytesPerFrame / inDescription.mChannelsPerFrame) * 8));
- }
- else
- {
- sprintf(outName, "%s %d Ch %s%d", theMixabilityString, (int)inDescription.mChannelsPerFrame, theKindString, (int)inDescription.mBitsPerChannel);
- }
- }
- }
- else
- {
- if(theEndianString != NULL)
- {
- if(thePackingString != NULL)
- {
- sprintf(outName, "%s %d Channel %d Bit %s %s Aligned %s in %d Bits", theMixabilityString, (int)inDescription.mChannelsPerFrame, (int)inDescription.mBitsPerChannel, theEndianString, theKindString, thePackingString, (int)(inDescription.mBytesPerFrame / inDescription.mChannelsPerFrame) * 8);
- }
- else
- {
- sprintf(outName, "%s %d Channel %d Bit %s %s", theMixabilityString, (int)inDescription.mChannelsPerFrame, (int)inDescription.mBitsPerChannel, theEndianString, theKindString);
- }
- }
- else
- {
- if(thePackingString != NULL)
- {
- sprintf(outName, "%s %d Channel %d Bit %s Aligned %s in %d Bits", theMixabilityString, (int)inDescription.mChannelsPerFrame, (int)inDescription.mBitsPerChannel, theKindString, thePackingString, (int)(inDescription.mBytesPerFrame / inDescription.mChannelsPerFrame) * 8);
- }
- else
- {
- sprintf(outName, "%s %d Channel %d Bit %s", theMixabilityString, (int)inDescription.mChannelsPerFrame, (int)inDescription.mBitsPerChannel, theKindString);
- }
- }
- }
- }
- break;
-
- case kAudioFormatAC3:
- strcpy(outName, "AC-3");
- break;
-
- case kAudioFormat60958AC3:
- strcpy(outName, "AC-3 for SPDIF");
- break;
-
- default:
- {
- char* the4CCString = (char*)&inDescription.mFormatID;
- outName[0] = the4CCString[0];
- outName[1] = the4CCString[1];
- outName[2] = the4CCString[2];
- outName[3] = the4CCString[3];
- outName[4] = 0;
- }
- break;
- };
-}
-
-#if CoreAudio_Debug
-#include "CALogMacros.h"
-
-void CAStreamBasicDescription::PrintToLog(const AudioStreamBasicDescription& inDesc)
-{
- PrintFloat (" Sample Rate: ", inDesc.mSampleRate);
- Print4CharCode (" Format ID: ", inDesc.mFormatID);
- PrintHex (" Format Flags: ", inDesc.mFormatFlags);
- PrintInt (" Bytes per Packet: ", inDesc.mBytesPerPacket);
- PrintInt (" Frames per Packet: ", inDesc.mFramesPerPacket);
- PrintInt (" Bytes per Frame: ", inDesc.mBytesPerFrame);
- PrintInt (" Channels per Frame: ", inDesc.mChannelsPerFrame);
- PrintInt (" Bits per Channel: ", inDesc.mBitsPerChannel);
-}
-#endif
-
-bool operator<(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y)
-{
- bool theAnswer = false;
- bool isDone = false;
-
- // note that if either side is 0, that field is skipped
-
- // format ID is the first order sort
- if((!isDone) && ((x.mFormatID != 0) && (y.mFormatID != 0)))
- {
- if(x.mFormatID != y.mFormatID)
- {
- // formats are sorted numerically except that linear
- // PCM is always first
- if(x.mFormatID == kAudioFormatLinearPCM)
- {
- theAnswer = true;
- }
- else if(y.mFormatID == kAudioFormatLinearPCM)
- {
- theAnswer = false;
- }
- else
- {
- theAnswer = x.mFormatID < y.mFormatID;
- }
- isDone = true;
- }
- }
-
-
- // mixable is always better than non-mixable for linear PCM and should be the second order sort item
- if((!isDone) && ((x.mFormatID == kAudioFormatLinearPCM) && (y.mFormatID == kAudioFormatLinearPCM)))
- {
- if(((x.mFormatFlags & kIsNonMixableFlag) == 0) && ((y.mFormatFlags & kIsNonMixableFlag) != 0))
- {
- theAnswer = true;
- isDone = true;
- }
- else if(((x.mFormatFlags & kIsNonMixableFlag) != 0) && ((y.mFormatFlags & kIsNonMixableFlag) == 0))
- {
- theAnswer = false;
- isDone = true;
- }
- }
-
- // floating point vs integer for linear PCM only
- if((!isDone) && ((x.mFormatID == kAudioFormatLinearPCM) && (y.mFormatID == kAudioFormatLinearPCM)))
- {
- if((x.mFormatFlags & kAudioFormatFlagIsFloat) != (y.mFormatFlags & kAudioFormatFlagIsFloat))
- {
- // floating point is better than integer
- theAnswer = y.mFormatFlags & kAudioFormatFlagIsFloat;
- isDone = true;
- }
- }
-
- // bit depth
- if((!isDone) && ((x.mBitsPerChannel != 0) && (y.mBitsPerChannel != 0)))
- {
- if(x.mBitsPerChannel != y.mBitsPerChannel)
- {
- // deeper bit depths are higher quality
- theAnswer = x.mBitsPerChannel < y.mBitsPerChannel;
- isDone = true;
- }
- }
-
- // sample rate
- if((!isDone) && fnonzero(x.mSampleRate) && fnonzero(y.mSampleRate))
- {
- if(fnotequal(x.mSampleRate, y.mSampleRate))
- {
- // higher sample rates are higher quality
- theAnswer = x.mSampleRate < y.mSampleRate;
- isDone = true;
- }
- }
-
- // number of channels
- if((!isDone) && ((x.mChannelsPerFrame != 0) && (y.mChannelsPerFrame != 0)))
- {
- if(x.mChannelsPerFrame != y.mChannelsPerFrame)
- {
- // more channels is higher quality
- theAnswer = x.mChannelsPerFrame < y.mChannelsPerFrame;
- isDone = true;
- }
- }
-
- return theAnswer;
-}
-
-static bool MatchFormatFlags(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y)
-{
- UInt32 xFlags = x.mFormatFlags;
- UInt32 yFlags = y.mFormatFlags;
-
- // match wildcards
- if (x.mFormatID == 0 || y.mFormatID == 0 || xFlags == 0 || yFlags == 0)
- return true;
-
- if (x.mFormatID == kAudioFormatLinearPCM)
- {
- // knock off the all clear flag
- xFlags = xFlags & ~kAudioFormatFlagsAreAllClear;
- yFlags = yFlags & ~kAudioFormatFlagsAreAllClear;
-
- // if both kAudioFormatFlagIsPacked bits are set, then we don't care about the kAudioFormatFlagIsAlignedHigh bit.
- if (xFlags & yFlags & kAudioFormatFlagIsPacked) {
- xFlags = xFlags & ~kAudioFormatFlagIsAlignedHigh;
- yFlags = yFlags & ~kAudioFormatFlagIsAlignedHigh;
- }
-
- // if both kAudioFormatFlagIsFloat bits are set, then we don't care about the kAudioFormatFlagIsSignedInteger bit.
- if (xFlags & yFlags & kAudioFormatFlagIsFloat) {
- xFlags = xFlags & ~kAudioFormatFlagIsSignedInteger;
- yFlags = yFlags & ~kAudioFormatFlagIsSignedInteger;
- }
-
- // if the bit depth is 8 bits or less and the format is packed, we don't care about endianness
- if((x.mBitsPerChannel <= 8) && ((xFlags & kAudioFormatFlagIsPacked) == kAudioFormatFlagIsPacked))
- {
- xFlags = xFlags & ~kAudioFormatFlagIsBigEndian;
- }
- if((y.mBitsPerChannel <= 8) && ((yFlags & kAudioFormatFlagIsPacked) == kAudioFormatFlagIsPacked))
- {
- yFlags = yFlags & ~kAudioFormatFlagIsBigEndian;
- }
-
- // if the number of channels is 0 or 1, we don't care about non-interleavedness
- if (x.mChannelsPerFrame <= 1 && y.mChannelsPerFrame <= 1) {
- xFlags &= ~kLinearPCMFormatFlagIsNonInterleaved;
- yFlags &= ~kLinearPCMFormatFlagIsNonInterleaved;
- }
- }
- return xFlags == yFlags;
-}
-
-bool operator==(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y)
-{
- // the semantics for equality are:
- // 1) Values must match exactly
- // 2) wildcard's are ignored in the comparison
-
-#define MATCH(name) ((x.name) == 0 || (y.name) == 0 || (x.name) == (y.name))
-
- return
- // check the sample rate
- (fiszero(x.mSampleRate) || fiszero(y.mSampleRate) || fequal(x.mSampleRate, y.mSampleRate))
-
- // check the format ids
- && MATCH(mFormatID)
-
- // check the format flags
- && MatchFormatFlags(x, y)
-
- // check the bytes per packet
- && MATCH(mBytesPerPacket)
-
- // check the frames per packet
- && MATCH(mFramesPerPacket)
-
- // check the bytes per frame
- && MATCH(mBytesPerFrame)
-
- // check the channels per frame
- && MATCH(mChannelsPerFrame)
-
- // check the channels per frame
- && MATCH(mBitsPerChannel) ;
-}
-
-bool SanityCheck(const AudioStreamBasicDescription& x)
-{
- return (x.mSampleRate >= 0.);
-}
diff --git a/libs/appleutility/CAStreamBasicDescription.h b/libs/appleutility/CAStreamBasicDescription.h
deleted file mode 100644
index aa41c40fe4..0000000000
--- a/libs/appleutility/CAStreamBasicDescription.h
+++ /dev/null
@@ -1,224 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAStreamBasicDescription.h
-
-=============================================================================*/
-
-#ifndef __CAStreamBasicDescription_h__
-#define __CAStreamBasicDescription_h__
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <CoreAudio/CoreAudioTypes.h>
- #include <CoreFoundation/CoreFoundation.h>
-#else
- #include "CoreAudioTypes.h"
- #include "CoreFoundation.h"
-#endif
-
-#include "CADebugMacros.h"
-#include <string.h> // for memset, memcpy
-#include <stdio.h> // for FILE *
-
-#pragma mark This file needs to compile on more earlier versions of the OS, so please keep that in mind when editing it
-
-// define the IsMixable format flag for all versions of the system
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3)
- enum { kIsNonMixableFlag = kAudioFormatFlagIsNonMixable };
-#else
- enum { kIsNonMixableFlag = (1L << 6) };
-#endif
-
-//=============================================================================
-// CAStreamBasicDescription
-//
-// This is a wrapper class for the AudioStreamBasicDescription struct.
-// It adds a number of convenience routines, but otherwise adds nothing
-// to the footprint of the original struct.
-//=============================================================================
-class CAStreamBasicDescription :
- public AudioStreamBasicDescription
-{
-
-// Constants
-public:
- static const AudioStreamBasicDescription sEmpty;
-
-// Construction/Destruction
-public:
- CAStreamBasicDescription() { memset (this, 0, sizeof(AudioStreamBasicDescription)); }
-
- CAStreamBasicDescription(const AudioStreamBasicDescription &desc)
- {
- SetFrom(desc);
- }
-
- CAStreamBasicDescription( double inSampleRate, UInt32 inFormatID,
- UInt32 inBytesPerPacket, UInt32 inFramesPerPacket,
- UInt32 inBytesPerFrame, UInt32 inChannelsPerFrame,
- UInt32 inBitsPerChannel, UInt32 inFormatFlags);
-
-// Assignment
- CAStreamBasicDescription& operator=(const AudioStreamBasicDescription& v) { SetFrom(v); return *this; }
-
- void SetFrom(const AudioStreamBasicDescription &desc)
- {
- memcpy(this, &desc, sizeof(AudioStreamBasicDescription));
- }
-
- // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- //
- // interrogation
-
- bool IsPCM() const { return mFormatID == kAudioFormatLinearPCM; }
-
- bool PackednessIsSignificant() const
- {
- Assert(IsPCM(), "PackednessIsSignificant only applies for PCM");
- return (SampleWordSize() << 3) != mBitsPerChannel;
- }
-
- bool AlignmentIsSignificant() const
- {
- return PackednessIsSignificant() || (mBitsPerChannel & 7) != 0;
- }
-
- bool IsInterleaved() const
- {
- return !IsPCM() || !(mFormatFlags & kAudioFormatFlagIsNonInterleaved);
- }
-
- // for sanity with interleaved/deinterleaved possibilities, never access mChannelsPerFrame, use these:
- UInt32 NumberInterleavedChannels() const { return IsInterleaved() ? mChannelsPerFrame : 1; }
- UInt32 NumberChannelStreams() const { return IsInterleaved() ? 1 : mChannelsPerFrame; }
- UInt32 NumberChannels() const { return mChannelsPerFrame; }
- UInt32 SampleWordSize() const { return (mBytesPerFrame > 0) ? mBytesPerFrame / NumberInterleavedChannels() : 0;}
-
- UInt32 FramesToBytes(UInt32 nframes) const { return nframes * mBytesPerFrame; }
- UInt32 BytesToFrames(UInt32 nbytes) const {
- Assert(mBytesPerFrame > 0, "bytesPerFrame must be > 0 in BytesToFrames");
- return nbytes / mBytesPerFrame;
- }
-
- bool SameChannelsAndInterleaving(const CAStreamBasicDescription &a) const
- {
- return this->NumberChannels() == a.NumberChannels() && this->IsInterleaved() == a.IsInterleaved();
- }
-
- // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- //
- // manipulation
-
- void SetCanonical(UInt32 nChannels, bool interleaved)
- // note: leaves sample rate untouched
- {
- mFormatID = kAudioFormatLinearPCM;
- mFormatFlags = kAudioFormatFlagsNativeFloatPacked;
- mBitsPerChannel = 32;
- mChannelsPerFrame = nChannels;
- mFramesPerPacket = 1;
- if (interleaved)
- mBytesPerPacket = mBytesPerFrame = nChannels * sizeof(Float32);
- else {
- mBytesPerPacket = mBytesPerFrame = sizeof(Float32);
- mFormatFlags |= kAudioFormatFlagIsNonInterleaved;
- }
- }
-
- void ChangeNumberChannels(UInt32 nChannels, bool interleaved)
- // alter an existing format
- {
- Assert(IsPCM(), "ChangeNumberChannels only works for PCM formats");
- UInt32 wordSize = SampleWordSize(); // get this before changing ANYTHING
- if (wordSize == 0)
- wordSize = (mBitsPerChannel + 7) / 8;
- mChannelsPerFrame = nChannels;
- mFramesPerPacket = 1;
- if (interleaved) {
- mBytesPerPacket = mBytesPerFrame = nChannels * wordSize;
- mFormatFlags &= ~kAudioFormatFlagIsNonInterleaved;
- } else {
- mBytesPerPacket = mBytesPerFrame = wordSize;
- mFormatFlags |= kAudioFormatFlagIsNonInterleaved;
- }
- }
-
- // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- //
- // other
-
- void Print() const
- {
- Print (stdout);
- }
-
- void Print(FILE* file) const
- {
- PrintFormat (file, "", "AudioStreamBasicDescription:");
- }
-
- void PrintFormat(FILE *f, const char *indent, const char *name) const;
-
- OSStatus Save(CFPropertyListRef *outData) const;
-
- OSStatus Restore(CFPropertyListRef &inData);
-
-// Operations
- static bool IsMixable(const AudioStreamBasicDescription& inDescription) { return (inDescription.mFormatID == kAudioFormatLinearPCM) && ((inDescription.mFormatFlags & kIsNonMixableFlag) == 0); }
- static void NormalizeLinearPCMFormat(AudioStreamBasicDescription& ioDescription);
- static void ResetFormat(AudioStreamBasicDescription& ioDescription);
- static void FillOutFormat(AudioStreamBasicDescription& ioDescription, const AudioStreamBasicDescription& inTemplateDescription);
- static void GetSimpleName(const AudioStreamBasicDescription& inDescription, char* outName, bool inAbbreviate);
-#if CoreAudio_Debug
- static void PrintToLog(const AudioStreamBasicDescription& inDesc);
-#endif
-};
-
-bool operator<(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y);
-bool operator==(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y);
-#if TARGET_OS_MAC || (TARGET_OS_WIN32 && (_MSC_VER > 600))
-inline bool operator!=(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y) { return !(x == y); }
-inline bool operator<=(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y) { return (x < y) || (x == y); }
-inline bool operator>=(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y) { return !(x < y); }
-inline bool operator>(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y) { return !((x < y) || (x == y)); }
-#endif
-
-bool SanityCheck(const AudioStreamBasicDescription& x);
-
-
-#endif // __CAStreamBasicDescription_h__
diff --git a/libs/appleutility/CAXException.cpp b/libs/appleutility/CAXException.cpp
deleted file mode 100644
index 088575f041..0000000000
--- a/libs/appleutility/CAXException.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAXException.cpp
-
-=============================================================================*/
-
-#include "CAXException.h"
-
-CAXException::WarningHandler CAXException::sWarningHandler = NULL;
diff --git a/libs/appleutility/CAXException.h b/libs/appleutility/CAXException.h
deleted file mode 100644
index 796119763d..0000000000
--- a/libs/appleutility/CAXException.h
+++ /dev/null
@@ -1,158 +0,0 @@
-/* Copyright: © Copyright 2005 Apple Computer, Inc. All rights reserved.
-
- Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms. If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software. Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple. Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/*=============================================================================
- CAXException.h
-
-=============================================================================*/
-
-#ifndef __CAXException_h__
-#define __CAXException_h__
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
- #include <CoreServices/CoreServices.h>
-#else
- #include <ConditionalMacros.h>
- #include <CoreServices.h>
-#endif
-#include "CADebugMacros.h"
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-
-// An extended exception class that includes the name of the failed operation
-class CAXException {
-public:
- CAXException(const char *operation, OSStatus err) :
- mError(err)
- {
- if (operation == NULL)
- mOperation[0] = '\0';
- else if (strlen(operation) >= sizeof(mOperation)) {
- memcpy(mOperation, operation, sizeof(mOperation) - 1);
- mOperation[sizeof(mOperation) - 1] = '\0';
- } else
- strcpy(mOperation, operation);
- }
-
- char *FormatError(char *str) const
- {
- return FormatError(str, mError);
- }
-
- char mOperation[256];
- const OSStatus mError;
-
- // -------------------------------------------------
-
- typedef void (*WarningHandler)(const char *msg, OSStatus err);
-
- /*static void Throw(const char *operation, OSStatus err)
- {
- throw CAXException(operation, err);
- }*/
-
- static char *FormatError(char *str, OSStatus error)
- {
- // see if it appears to be a 4-char-code
- *(UInt32 *)(str + 1) = EndianU32_NtoB(error);
- if (isprint(str[1]) && isprint(str[2]) && isprint(str[3]) && isprint(str[4])) {
- str[0] = str[5] = '\'';
- str[6] = '\0';
- } else
- // no, format it as an integer
- sprintf(str, "%ld", error);
- return str;
- }
-
- static void Warning(const char *s, OSStatus error)
- {
- if (sWarningHandler)
- (*sWarningHandler)(s, error);
- }
-
- static void SetWarningHandler(WarningHandler f) { sWarningHandler = f; }
-private:
- static WarningHandler sWarningHandler;
-};
-
-#if DEBUG || CoreAudio_Debug
- #define XThrowIfError(error, operation) \
- do { \
- OSStatus __err = error; \
- if (__err) { \
- char __buf[12]; \
- DebugMessageN2("error %s: %4s\n", CAXException::FormatError(__buf, __err), operation);\
- STOP; \
- throw CAXException(operation, __err); \
- } \
- } while (0)
-
- #define XThrowIf(condition, error, operation) \
- do { \
- if (condition) { \
- OSStatus __err = error; \
- char __buf[12]; \
- DebugMessageN2("error %s: %4s\n", CAXException::FormatError(__buf, __err), operation);\
- STOP; \
- throw CAXException(operation, __err); \
- } \
- } while (0)
-
-#else
- #define XThrowIfError(error, operation) \
- do { \
- OSStatus __err = error; \
- if (__err) { \
- throw CAXException(operation, __err); \
- } \
- } while (0)
-
- #define XThrowIf(condition, error, operation) \
- do { \
- if (condition) { \
- OSStatus __err = error; \
- throw CAXException(operation, __err); \
- } \
- } while (0)
-
-#endif
-
-#define XThrow(error, operation) XThrowIf(true, error, operation)
-#define XThrowIfErr(error) XThrowIfError(error, #error)
-
-#endif // __CAXException_h__
diff --git a/libs/appleutility/SConscript b/libs/appleutility/SConscript
deleted file mode 100644
index bddca04032..0000000000
--- a/libs/appleutility/SConscript
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- python -*-
-
-import os
-import os.path
-import glob
-
-appleutility_files = glob.glob('*.cpp')
-
-Import('env install_prefix')
-appleutility = env.Copy()
-
-appleutility.Append(LINKFLAGS='-framework AudioToolbox')
-appleutility.Append(LINKFLAGS='-framework AudioUnit')
-appleutility.Append(LINKFLAGS='-framework CoreFoundation')
-appleutility.Append(LINKFLAGS='-framework CoreServices')
-
-libappleutility = appleutility.SharedLibrary('appleutility', appleutility_files)
-if appleutility['COREAUDIO']:
- Default(libappleutility)
- env.Alias('install', env.Install(os.path.join(install_prefix, env['LIBDIR'], 'ardour3'), libappleutility))
-
-env.Alias('tarball', env.Distribute (env['DISTTREE'], ['SConscript'] + appleutility_files + glob.glob('*.h') ))