diff options
author | Doug McLain <doug@nostar.net> | 2008-06-02 05:02:28 +0000 |
---|---|---|
committer | Doug McLain <doug@nostar.net> | 2008-06-02 05:02:28 +0000 |
commit | 9c0d7d72d70082a54f823cd44c0ccda5da64bb6f (patch) | |
tree | 96ec400b83b8c1c06852b1936f684b5fbcd47a79 /libs/appleutility | |
parent | 2f3f697bb8e185eb43c2c50b4eefc2bcb937f269 (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')
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 ¶mInfo = 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", ¶mValue); - 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') )) |