Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
Relevant replacement documents include:
PublicUtility/CAAudioChannelLayoutObject.cpp
/* |
<codex> |
<abstract>CAAudioChannelLayoutObject.h</abstract> |
<\codex> |
*/ |
#include "CAAudioChannelLayout.h" |
#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__) |
#include <AudioToolbox/AudioFormat.h> |
#else |
#include <AudioFormat.h> |
#endif |
CAAudioChannelLayout::CAAudioChannelLayout () |
{ |
mLayout = RefCountedLayout::CreateWithNumberChannelDescriptions(0); |
} |
//============================================================================= |
// CAAudioChannelLayout::CAAudioChannelLayout |
//============================================================================= |
CAAudioChannelLayout::CAAudioChannelLayout (UInt32 inNumberChannels, bool inChooseSurround) |
{ |
// this chooses default layouts based on the number of channels... |
AudioChannelLayoutTag tag; |
switch (inNumberChannels) |
{ |
default: |
// here we have a "broken" layout, in the sense that we haven't any idea how to lay this out |
mLayout = RefCountedLayout::CreateWithNumberChannelDescriptions(inNumberChannels); |
SetAllToUnknown(*mLayout->GetLayout(), inNumberChannels); |
return; // don't fall into the tag case |
case 1: |
tag = kAudioChannelLayoutTag_Mono; |
break; |
case 2: |
tag = inChooseSurround ? kAudioChannelLayoutTag_Binaural : kAudioChannelLayoutTag_Stereo; |
break; |
case 4: |
tag = inChooseSurround ? kAudioChannelLayoutTag_Ambisonic_B_Format : kAudioChannelLayoutTag_AudioUnit_4; |
break; |
case 5: |
tag = inChooseSurround ? kAudioChannelLayoutTag_AudioUnit_5_0 : kAudioChannelLayoutTag_AudioUnit_5; |
break; |
case 6: |
tag = inChooseSurround ? kAudioChannelLayoutTag_AudioUnit_6_0 : kAudioChannelLayoutTag_AudioUnit_6; |
break; |
case 7: |
tag = kAudioChannelLayoutTag_AudioUnit_7_0; |
break; |
case 8: |
tag = kAudioChannelLayoutTag_AudioUnit_8; |
break; |
} |
mLayout = RefCountedLayout::CreateWithLayoutTag(tag); |
} |
//============================================================================= |
// CAAudioChannelLayout::CAAudioChannelLayout |
//============================================================================= |
CAAudioChannelLayout::CAAudioChannelLayout (AudioChannelLayoutTag inLayoutTag) |
: mLayout(NULL) |
{ |
SetWithTag(inLayoutTag); |
} |
//============================================================================= |
// CAAudioChannelLayout::CAAudioChannelLayout |
//============================================================================= |
CAAudioChannelLayout::CAAudioChannelLayout (const CAAudioChannelLayout &c) |
: mLayout(NULL) |
{ |
*this = c; |
} |
//============================================================================= |
// CAAudioChannelLayout::AudioChannelLayout |
//============================================================================= |
CAAudioChannelLayout::CAAudioChannelLayout (const AudioChannelLayout* inChannelLayout) |
: mLayout(NULL) |
{ |
*this = inChannelLayout; |
} |
//============================================================================= |
// CAAudioChannelLayout::~CAAudioChannelLayout |
//============================================================================= |
CAAudioChannelLayout::~CAAudioChannelLayout () |
{ |
if (mLayout) { |
mLayout->release(); |
mLayout = NULL; |
} |
} |
//============================================================================= |
// CAAudioChannelLayout::CAAudioChannelLayout |
//============================================================================= |
CAAudioChannelLayout& CAAudioChannelLayout::operator= (const CAAudioChannelLayout &c) |
{ |
if (mLayout != c.mLayout) { |
if (mLayout) |
mLayout->release(); |
if ((mLayout = c.mLayout) != NULL) |
mLayout->retain(); |
} |
return *this; |
} |
CAAudioChannelLayout& CAAudioChannelLayout::operator= (const AudioChannelLayout* inChannelLayout) |
{ |
if (mLayout && &mLayout->Layout() == inChannelLayout) |
return *this; |
if (mLayout) |
mLayout->release(); |
if (inChannelLayout == NULL) |
{ |
mLayout = RefCountedLayout::CreateWithNumberChannelDescriptions(0); |
} |
else |
{ |
mLayout = RefCountedLayout::CreateWithLayout(inChannelLayout); |
} |
return *this; |
} |
void CAAudioChannelLayout::SetWithTag(AudioChannelLayoutTag inTag) |
{ |
if (mLayout) |
mLayout->release(); |
mLayout = RefCountedLayout::CreateWithLayoutTag(inTag); |
} |
//============================================================================= |
// CAAudioChannelLayout::operator== |
//============================================================================= |
bool CAAudioChannelLayout::operator== (const CAAudioChannelLayout &c) const |
{ |
if (mLayout == c.mLayout) |
return true; |
return Layout() == c.Layout(); |
} |
//============================================================================= |
// CAAudioChannelLayout::operator!= |
//============================================================================= |
bool CAAudioChannelLayout::operator!= (const CAAudioChannelLayout &c) const |
{ |
if (mLayout == c.mLayout) |
return false; |
return !(Layout() == c.Layout()); |
} |
//============================================================================= |
// CAAudioChannelLayout::Print |
//============================================================================= |
void CAAudioChannelLayout::Print (FILE* file) const |
{ |
CAShowAudioChannelLayout (file, &Layout()); |
} |
Copyright © 2012 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2012-10-08