]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
improved coreaudio initialization code to suggest more changes
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Thu, 17 May 2007 11:55:41 +0000 (11:55 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Thu, 17 May 2007 11:55:41 +0000 (11:55 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7297 d7cf8633-e32d-0410-b094-e92efae38249

snd_coreaudio.c

index cdcf61397d3e3b5ffdfaa71bfb134800aa65ad3f..92f4c0641c5b3359fc10b9bcd4211cfce05da320 100644 (file)
@@ -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",