p += bp->bytesPerHostInputSample;
bp->hostInputChannels[0][channel+i].stride = channelCount;
}
+ bp->hostInputIsInterleaved[0] = 1;
}
bp->hostInputChannels[0][channel].data = data;
bp->hostInputChannels[0][channel].stride = 1;
+ bp->hostInputIsInterleaved[0] = 0;
}
p += bp->bytesPerHostInputSample;
bp->hostInputChannels[1][channel+i].stride = channelCount;
}
+ bp->hostInputIsInterleaved[1] = 1;
}
bp->hostInputChannels[1][channel].data = data;
bp->hostInputChannels[1][channel].stride = 1;
+ bp->hostInputIsInterleaved[1] = 0;
}
PaUtil_SetOutputChannel( bp, channel + i, p, channelCount );
p += bp->bytesPerHostOutputSample;
}
+ bp->hostOutputIsInterleaved[0] = 1;
}
assert( channel < bp->outputChannelCount );
PaUtil_SetOutputChannel( bp, channel, data, 1 );
+ bp->hostOutputIsInterleaved[0] = 0;
}
PaUtil_Set2ndOutputChannel( bp, channel + i, p, channelCount );
p += bp->bytesPerHostOutputSample;
}
+ bp->hostOutputIsInterleaved[1] = 1;
}
assert( channel < bp->outputChannelCount );
PaUtil_Set2ndOutputChannel( bp, channel, data, 1 );
+ bp->hostOutputIsInterleaved[1] = 0;
}
destChannelStrideBytes = bp->bytesPerUserInputSample;
userInput = bp->tempInputBuffer;
- /* determine if processing of host buffer can be done directly by callback */
- if( bp->inputConverter == paConverters.Copy_8_To_8 ||
- bp->inputConverter == paConverters.Copy_16_To_16 ||
- bp->inputConverter == paConverters.Copy_24_To_24 ||
- bp->inputConverter == paConverters.Copy_32_To_32 )
- {
- /* process host buffer directly */
- userInput = hostInputChannels[0].data;
- destBytePtr = (unsigned char *)hostInputChannels[0].data;
- }
+ /* determine if processing of host buffer can be done directly by callback */
+ if( bp->inputConverter == paConverters.Copy_16_To_16 ||
+ bp->inputConverter == paConverters.Copy_32_To_32 ||
+ bp->inputConverter == paConverters.Copy_24_To_24 ||
+ bp->inputConverter == paConverters.Copy_8_To_8 )
+ {
+ /* allow when interlieved buffers both on user and host sides */
+ if( bp->hostInputFrameCount[0] && !bp->hostInputFrameCount[1] &&
+ bp->hostInputIsInterleaved[0] )
+ {
+ /* process host buffer directly */
+ userInput = hostInputChannels[0].data;
+ destBytePtr = (unsigned char *)hostInputChannels[0].data;
+ }
+ }
}
else /* user input is not interleaved */
{
{
if( bp->userOutputIsInterleaved )
{
- userOutput = bp->tempOutputBuffer;
-
- /* determine if processing of host buffer can be done directly by callback */
- if( bp->outputConverter == paConverters.Copy_8_To_8 ||
- bp->outputConverter == paConverters.Copy_16_To_16 ||
- bp->outputConverter == paConverters.Copy_24_To_24 ||
- bp->outputConverter == paConverters.Copy_32_To_32 )
- {
- /* process host buffer directly */
- userOutput = hostOutputChannels[0].data;
- }
+ userOutput = bp->tempOutputBuffer;
+
+ /* determine if processing of host buffer can be done directly by callback */
+ if( bp->outputConverter == paConverters.Copy_16_To_16 ||
+ bp->outputConverter == paConverters.Copy_32_To_32 ||
+ bp->outputConverter == paConverters.Copy_24_To_24 ||
+ bp->outputConverter == paConverters.Copy_8_To_8 )
+ {
+ /* allow when interlieved buffers both on user and host sides */
+ if( bp->hostOutputFrameCount[0] && !bp->hostOutputFrameCount[1] &&
+ bp->hostOutputIsInterleaved[0] )
+ {
+ /* process host buffer directly */
+ userOutput = hostOutputChannels[0].data;
+ }
+ }
}
else /* user output is not interleaved */
{