From: havoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Date: Thu, 17 May 2007 11:55:41 +0000 (+0000)
Subject: improved coreaudio initialization code to suggest more changes
X-Git-Tag: xonotic-v0.1.0preview~3156
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=63546610a4fc30187da731dbe6dcb4ab734c3a4f;p=xonotic%2Fdarkplaces.git

improved coreaudio initialization code to suggest more changes


git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7297 d7cf8633-e32d-0410-b094-e92efae38249
---

diff --git a/snd_coreaudio.c b/snd_coreaudio.c
index cdcf6139..92f4c064 100644
--- a/snd_coreaudio.c
+++ b/snd_coreaudio.c
@@ -138,16 +138,26 @@ qboolean SndSys_Init (const snd_format_t* requested, snd_format_t* suggested)
 
 	Con_Printf("Initializing CoreAudio...\n");
 
-	// We only accept 16-bit samples for the moment
-	if (requested->width != 2)
+	if (suggested != NULL)
+		memcpy (suggested, requested, sizeof (suggested));
+
+	// Get the device status and suggest any appropriate changes to format
+	propertySize = sizeof(streamDesc);
+	status = AudioDeviceGetProperty(outputDeviceID, 0, false, kAudioDevicePropertyStreamFormat, &propertySize, &streamDesc);
+	if (status)
+	{
+		Con_Printf("CoreAudio: AudioDeviceGetProperty() returned %d when getting kAudioDevicePropertyStreamFormat\n", status);
+		return false;
+	}
+	// Suggest proper settings if they differ
+	if (requested.channels != streamDesc.mChannelsPerFrame || requested.speed != streamDesc.mSampleRate || requested.width != streamDesc.mBitsPerChannel/8)
 	{
-		// Suggest a 16-bit format instead
 		if (suggested != NULL)
 		{
-			memcpy (suggested, requested, sizeof (suggested));
-			suggested->width = 2;
+			suggested->channels = streamDesc.mChannelsPerFrame;
+			suggested->speed = streamDesc.mSampleRate;
+			suggested->width = streamDesc.mBitsPerChannel/8;
 		}
-
 		return false;
 	}
 
@@ -200,18 +210,6 @@ qboolean SndSys_Init (const snd_format_t* requested, snd_format_t* suggested)
 		Con_Printf("CoreAudio: AudioDeviceGetProperty() returned %d when getting kAudioDevicePropertyStreamFormat\n", status);
 		return false;
 	}
-
-	// Suggest the proper speed if it differs
-	if (requested.speed != streamDesc.mSampleRate)
-	{
-		if (suggested != NULL)
-		{
-			memcpy (suggested, requested, sizeof (suggested));
-			suggested->speed = streamDesc.mSampleRate;
-		}
-		return false;
-	}
-
 	Con_DPrint ("   Hardware format:\n");
 	Con_DPrintf("    %5d mSampleRate\n", (unsigned int)streamDesc.mSampleRate);
 	Con_DPrintf("     %c%c%c%c mFormatID\n",