Ejemplo n.º 1
0
OSStatus	CAAudioChannelLayout::Save (CFPropertyListRef *outData) const 
{
	const AudioChannelLayout& layout = Layout();

	CACFDictionary dict (false);
	if (!dict.AddUInt32 (kACLTagKey, layout.mChannelLayoutTag))
		goto badadd;
	if (!dict.AddUInt32 (kACLBitmapKey, layout.mChannelBitmap))
		goto badadd;
	if (!dict.AddUInt32 (kACLDescKey, layout.mNumberChannelDescriptions))
		goto badadd;
	
	if (layout.mNumberChannelDescriptions)
	{	
		static char string[32];
		
		const AudioChannelDescription *desc = layout.mChannelDescriptions;
		for (unsigned int i = 0; i < layout.mNumberChannelDescriptions; ++i, ++desc) 
		{
			CACFDictionary descDict (true);
			sprintf (string, "%d", i);
			if (!descDict.AddUInt32 (kACLLabelKey, desc->mChannelLabel))
				goto badadd;
			if (!descDict.AddUInt32 (kACLFlagsKey, desc->mChannelFlags))
				goto badadd;
			if (!descDict.AddFloat32 (kACLCoords0Key, desc->mCoordinates[0]))
				goto badadd;
			if (!descDict.AddFloat32 (kACLCoords1Key, desc->mCoordinates[1]))
				goto badadd;
			if (!descDict.AddFloat32 (kACLCoords2Key, desc->mCoordinates[2]))
				goto badadd;
			if (!dict.AddCFTypeWithCStringKey (string, descDict.GetDict()))
				goto badadd;
		}
	}
	
	*outData = dict.GetDict();	
	
	return noErr;
	
badadd:
	dict.ShouldRelease(true);
	return -1;
}