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, ¶m);
+ 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