Commit 4f29f543 authored by robiwan's avatar robiwan

Fix for WaveRT WDM drivers that do not support memory mapped position...

Fix for WaveRT WDM drivers that do not support memory mapped position register, and correct 8 channel speaker geometry mapping.

git-svn-id: https://subversion.assembla.com/svn/portaudio/portaudio/trunk@1885 0f58301d-fd10-0410-b4af-bbb618454e57
parent e3624223
......@@ -4959,8 +4959,18 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
if (result != paNoError)
{
unsigned long pos = 0xdeadc0de;
PA_DEBUG(("Failed to register capture position register, using PinGetAudioPositionViaIOCTL\n"));
stream->capture.pPin->fnAudioPosition = PinGetAudioPositionViaIOCTL;
/* Test position function */
result = (stream->capture.pPin->fnAudioPosition)(stream->capture.pPin, &pos);
if (result != paNoError || pos != 0x0)
{
PA_DEBUG(("Failed to read capture position register (IOCTL)\n"));
PaWinWDM_SetLastErrorInfo(paUnanticipatedHostError, "Failed to read capture position register (IOCTL)");
result = paUnanticipatedHostError;
goto error;
}
}
else
{
......@@ -5071,8 +5081,18 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
if (result != paNoError)
{
unsigned long pos = 0xdeadc0de;
PA_DEBUG(("Failed to register rendering position register, using PinGetAudioPositionViaIOCTL\n"));
stream->render.pPin->fnAudioPosition = PinGetAudioPositionViaIOCTL;
/* Test position function */
result = (stream->render.pPin->fnAudioPosition)(stream->render.pPin, &pos);
if (result != paNoError || pos != 0x0)
{
PA_DEBUG(("Failed to read render position register (IOCTL)\n"));
PaWinWDM_SetLastErrorInfo(paUnanticipatedHostError, "Failed to read render position register (IOCTL)");
result = paUnanticipatedHostError;
goto error;
}
}
else
{
......
......@@ -104,7 +104,6 @@ void PaWin_InitializeWaveFormatExtensible( PaWinWaveFormat *waveFormat,
*((GUID*)&waveFormat->fields[PAWIN_INDEXOF_SUBFORMAT]) = guid;
}
PaWinWaveFormatChannelMask PaWin_DefaultChannelMask( int numChannels )
{
switch( numChannels ){
......@@ -129,11 +128,16 @@ PaWinWaveFormatChannelMask PaWin_DefaultChannelMask( int numChannels )
return PAWIN_SPEAKER_5POINT1;
/* case 7: */
case 8:
return PAWIN_SPEAKER_7POINT1;
/* RoBi: PAWIN_SPEAKER_7POINT1_SURROUND fits normal surround sound setups better than PAWIN_SPEAKER_7POINT1, f.i. NVidia HDMI Audio
output is silent on channels 5&6 with NVidia drivers, and channel 7&8 with Micrsoft HD Audio driver using PAWIN_SPEAKER_7POINT1.
With PAWIN_SPEAKER_7POINT1_SURROUND both setups work OK. */
return PAWIN_SPEAKER_7POINT1_SURROUND;
}
/* Apparently some Audigy drivers will output silence
if the direct-out constant (0) is used. So this is not ideal.
RoBi 2012-12-19: Also, NVidia driver seem to output garbage instead. Again not very ideal.
*/
return PAWIN_SPEAKER_DIRECTOUT;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment