Ken Thomases : winecoreaudio: Do additional setup in AudioUnit_CreateInputUnit.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Dec 29 06:47:20 CST 2006


Module: wine
Branch: master
Commit: 4b904bbf13f0954a5e61355e8930404c8e7794f9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4b904bbf13f0954a5e61355e8930404c8e7794f9

Author: Ken Thomases <ken at codeweavers.com>
Date:   Thu Dec 28 11:06:23 2006 -0600

winecoreaudio: Do additional setup in AudioUnit_CreateInputUnit.

It now returns in an output parameter the frame count that the AU will use.
Also, initialize the Audio Unit.

---

 dlls/winmm/winecoreaudio/audio.c     |    8 +++++---
 dlls/winmm/winecoreaudio/audiounit.c |   28 +++++++++++++++++++++++++++-
 2 files changed, 32 insertions(+), 4 deletions(-)

diff --git a/dlls/winmm/winecoreaudio/audio.c b/dlls/winmm/winecoreaudio/audio.c
index a1398af..6aac76d 100644
--- a/dlls/winmm/winecoreaudio/audio.c
+++ b/dlls/winmm/winecoreaudio/audio.c
@@ -211,7 +211,8 @@ extern int AudioUnit_SetVolume(AudioUnit
 extern int AudioUnit_GetVolume(AudioUnit au, float *left, float *right);
 
 extern int AudioUnit_CreateInputUnit(void* wwi, AudioUnit* out_au,
-        WORD nChannels, DWORD nSamplesPerSec, WORD wBitsPerSample);
+        WORD nChannels, DWORD nSamplesPerSec, WORD wBitsPerSample,
+        UInt32* outFrameCount);
 
 OSStatus CoreAudio_woAudioUnitIOProc(void *inRefCon, 
                                      AudioUnitRenderActionFlags *ioActionFlags, 
@@ -1522,7 +1523,8 @@ static DWORD widGetDevCaps(WORD wDevID,
  */
 static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
 {
-    WINE_WAVEIN* wwi;
+    WINE_WAVEIN*    wwi;
+    UInt32          frameCount;
 
     TRACE("(%u, %p, %08X);\n", wDevID, lpDesc, dwFlags);
     if (lpDesc == NULL)
@@ -1592,7 +1594,7 @@ static DWORD widOpen(WORD wDevID, LPWAVE
 
     if (!AudioUnit_CreateInputUnit(wwi, &wwi->audioUnit,
         wwi->format.wf.nChannels, wwi->format.wf.nSamplesPerSec,
-        wwi->format.wBitsPerSample))
+        wwi->format.wBitsPerSample, &frameCount))
     {
         ERR("AudioUnit_CreateInputUnit failed\n");
         OSSpinLockUnlock(&wwi->lock);
diff --git a/dlls/winmm/winecoreaudio/audiounit.c b/dlls/winmm/winecoreaudio/audiounit.c
index 03b4d00..433cab1 100644
--- a/dlls/winmm/winecoreaudio/audiounit.c
+++ b/dlls/winmm/winecoreaudio/audiounit.c
@@ -131,7 +131,8 @@ int AudioUnit_GetVolume(AudioUnit au, fl
 
 
 int AudioUnit_CreateInputUnit(void* wwi, AudioUnit* out_au,
-        WORD nChannels, DWORD nSamplesPerSec, WORD wBitsPerSample)
+        WORD nChannels, DWORD nSamplesPerSec, WORD wBitsPerSample,
+        UInt32* outFrameCount)
 {
     OSStatus                    err = noErr;
     ComponentDescription        description;
@@ -143,6 +144,12 @@ int AudioUnit_CreateInputUnit(void* wwi,
     AudioStreamBasicDescription desiredFormat;
 
 
+    if (!outFrameCount)
+    {
+        ERR("Invalid parameter\n");
+        return 0;
+    }
+
     /* Open the AudioOutputUnit */
     description.componentType           = kAudioUnitType_Output;
     description.componentSubType        = kAudioUnitSubType_HALOutput;
@@ -244,6 +251,25 @@ int AudioUnit_CreateInputUnit(void* wwi,
         goto error;
     }
 
+    /* Get the number of frames in the IO buffer(s) */
+    param = sizeof(*outFrameCount);
+    err = AudioUnitGetProperty(au, kAudioDevicePropertyBufferFrameSize, kAudioUnitScope_Global, 0, outFrameCount, &param);
+    if (err != noErr)
+    {
+        ERR("Failed to get audio sample size: %08lx\n", err);
+        goto error;
+    }
+
+    TRACE("Frame count: %lu\n", *outFrameCount);
+
+    /* Initialize the AU */
+    err = AudioUnitInitialize(au);
+    if (err != noErr)
+    {
+        ERR("Failed to initialize AU: %08lx\n", err);
+        goto error;
+    }
+
     *out_au = au;
 
     return 1;




More information about the wine-cvs mailing list