Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
0e52c42a
Commit
0e52c42a
authored
Dec 28, 2006
by
Ken Thomases
Committed by
Alexandre Julliard
Dec 29, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winecoreaudio: Report actual supported input wave formats.
Also, added some output formats that Core Audio ought to be able to handle.
parent
fa844516
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
73 additions
and
1 deletion
+73
-1
audio.c
dlls/winmm/winecoreaudio/audio.c
+41
-1
audiounit.c
dlls/winmm/winecoreaudio/audiounit.c
+32
-0
No files found.
dlls/winmm/winecoreaudio/audio.c
View file @
0e52c42a
...
...
@@ -224,6 +224,8 @@ extern OSStatus AudioUnitUninitialize(AudioUnit au);
extern
int
AudioUnit_SetVolume
(
AudioUnit
au
,
float
left
,
float
right
);
extern
int
AudioUnit_GetVolume
(
AudioUnit
au
,
float
*
left
,
float
*
right
);
extern
int
AudioUnit_GetInputDeviceSampleRate
(
void
);
extern
int
AudioUnit_CreateInputUnit
(
void
*
wwi
,
AudioUnit
*
out_au
,
WORD
nChannels
,
DWORD
nSamplesPerSec
,
WORD
wBitsPerSample
,
UInt32
*
outFrameCount
);
...
...
@@ -500,6 +502,7 @@ LONG CoreAudio_WaveInit(void)
HANDLE
hThread
;
CFStringRef
messageThreadPortName
;
CFMessagePortRef
port_ReceiveInMessageThread
;
int
inputSampleRate
;
TRACE
(
"()
\n
"
);
...
...
@@ -550,6 +553,14 @@ LONG CoreAudio_WaveInit(void)
WOutDev
[
i
].
caps
.
wChannels
=
2
;
/* WOutDev[i].caps.dwSupport |= WAVECAPS_LRVOLUME; */
/* FIXME */
WOutDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_96M08
;
WOutDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_96S08
;
WOutDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_96M16
;
WOutDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_96S16
;
WOutDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_48M08
;
WOutDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_48S08
;
WOutDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_48M16
;
WOutDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_48S16
;
WOutDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_4M08
;
WOutDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_4S08
;
WOutDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_4S16
;
...
...
@@ -566,6 +577,9 @@ LONG CoreAudio_WaveInit(void)
WOutDev
[
i
].
lock
=
0
;
/* initialize the mutex */
}
/* FIXME: implement sample rate conversion on input */
inputSampleRate
=
AudioUnit_GetInputDeviceSampleRate
();
for
(
i
=
0
;
i
<
MAX_WAVEINDRV
;
++
i
)
{
memset
(
&
WInDev
[
i
],
0
,
sizeof
(
WInDev
[
i
]));
...
...
@@ -584,18 +598,41 @@ LONG CoreAudio_WaveInit(void)
MultiByteToWideChar
(
CP_ACP
,
0
,
szPname
,
-
1
,
WInDev
[
i
].
caps
.
szPname
,
sizeof
(
WInDev
[
i
].
caps
.
szPname
)
/
sizeof
(
WCHAR
));
snprintf
(
WInDev
[
i
].
interface_name
,
sizeof
(
WInDev
[
i
].
interface_name
),
"winecoreaudio in: %d"
,
i
);
if
(
inputSampleRate
==
96000
)
{
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_96M08
;
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_96S08
;
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_96M16
;
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_96S16
;
}
if
(
inputSampleRate
==
48000
)
{
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_48M08
;
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_48S08
;
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_48M16
;
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_48S16
;
}
if
(
inputSampleRate
==
44100
)
{
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_4M08
;
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_4S08
;
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_4S16
;
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_4M16
;
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_4S16
;
}
if
(
inputSampleRate
==
22050
)
{
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_2M08
;
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_2S08
;
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_2M16
;
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_2S16
;
}
if
(
inputSampleRate
==
11025
)
{
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_1M08
;
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_1S08
;
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_1M16
;
WInDev
[
i
].
caps
.
dwFormats
|=
WAVE_FORMAT_1S16
;
}
WInDev
[
i
].
caps
.
wChannels
=
2
;
}
...
...
@@ -2140,6 +2177,9 @@ OSStatus CoreAudio_wiAudioUnitIOProc(void *inRefCon,
*
ioActionFlags
,
inTimeStamp
->
mSampleTime
,
inTimeStamp
->
mHostTime
,
inTimeStamp
->
mRateScalar
,
inTimeStamp
->
mWordClockTime
,
inTimeStamp
->
mFlags
,
inBusNumber
,
inNumberFrames
);
/* Render into audio buffer */
/* FIXME: implement sample rate conversion on input. This will require
* a different render strategy. We'll need to buffer the sound data
* received here and pass it off to an AUConverter in another thread. */
err
=
AudioUnitRender
(
wwi
->
audioUnit
,
ioActionFlags
,
inTimeStamp
,
inBusNumber
,
inNumberFrames
,
wwi
->
bufferList
);
if
(
err
)
{
...
...
dlls/winmm/winecoreaudio/audiounit.c
View file @
0e52c42a
...
...
@@ -130,6 +130,34 @@ int AudioUnit_GetVolume(AudioUnit au, float *left, float *right)
}
/* FIXME: implement sample rate conversion on input */
int
AudioUnit_GetInputDeviceSampleRate
(
void
)
{
AudioDeviceID
defaultInputDevice
;
UInt32
param
;
Float64
sampleRate
;
OSStatus
err
;
param
=
sizeof
(
defaultInputDevice
);
err
=
AudioHardwareGetProperty
(
kAudioHardwarePropertyDefaultInputDevice
,
&
param
,
&
defaultInputDevice
);
if
(
err
!=
noErr
||
defaultInputDevice
==
kAudioDeviceUnknown
)
{
ERR
(
"Couldn't get the default audio input device ID: %08lx
\n
"
,
err
);
return
0
;
}
param
=
sizeof
(
sampleRate
);
err
=
AudioDeviceGetProperty
(
defaultInputDevice
,
0
,
1
,
kAudioDevicePropertyNominalSampleRate
,
&
param
,
&
sampleRate
);
if
(
err
!=
noErr
)
{
ERR
(
"Couldn't get the device sample rate: %08lx
\n
"
,
err
);
return
0
;
}
return
sampleRate
;
}
int
AudioUnit_CreateInputUnit
(
void
*
wwi
,
AudioUnit
*
out_au
,
WORD
nChannels
,
DWORD
nSamplesPerSec
,
WORD
wBitsPerSample
,
UInt32
*
outFrameCount
)
...
...
@@ -232,6 +260,10 @@ int AudioUnit_CreateInputUnit(void* wwi, AudioUnit* out_au,
}
/* Setup the desired data format. */
/* FIXME: implement sample rate conversion on input. We shouldn't set
* the mSampleRate of this to the desired sample rate. We need to query
* the input device and use that. If they don't match, we need to set up
* an AUConverter to do the sample rate conversion on a separate thread. */
desiredFormat
.
mFormatID
=
kAudioFormatLinearPCM
;
desiredFormat
.
mFormatFlags
=
kLinearPCMFormatFlagIsPacked
;
if
(
wBitsPerSample
!=
8
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment