]> Repos - portaudio/commitdiff
Pa_process: Fix input channel adaption by not skipping the input conversion when...
authorgineera <gineera@0f58301d-fd10-0410-b4af-bbb618454e57>
Mon, 18 Nov 2013 11:42:27 +0000 (11:42 +0000)
committergineera <gineera@0f58301d-fd10-0410-b4af-bbb618454e57>
Mon, 18 Nov 2013 11:42:27 +0000 (11:42 +0000)
src/common/pa_process.c

index 100960244e14548c6b394123c90e9ac187edc098..b1b5642fb28fb62af21e9207e14fd7dc22942d48 100644 (file)
@@ -743,8 +743,10 @@ static unsigned long NonAdaptingProcess( PaUtilBufferProcessor *bp,
                     destSampleStrideSamples = bp->inputChannelCount;
                     destChannelStrideBytes = bp->bytesPerUserInputSample;
 
-                    /* process host buffer directly, or use temp buffer if formats differ or host buffer non-interleaved */
-                    if( bp->userInputSampleFormatIsEqualToHost && bp->hostInputIsInterleaved && bp->hostInputChannels[0][0].data)
+                    /* process host buffer directly, or use temp buffer if formats differ or host buffer non-interleaved,
+                     * or if the number of channels differs between the host (set in stride) and the user */
+                    if( bp->userInputSampleFormatIsEqualToHost && bp->hostInputIsInterleaved
+                        && bp->hostInputChannels[0][0].data && bp->inputChannelCount == hostInputChannels[0].stride )
                     {
                         userInput = hostInputChannels[0].data;
                         destBytePtr = (unsigned char *)hostInputChannels[0].data;
@@ -1683,9 +1685,9 @@ unsigned long PaUtil_CopyInput( PaUtilBufferProcessor* bp,
                                 hostInputChannels[i].stride,
                                 framesToCopy, &bp->ditherGenerator );
 
-            destBytePtr += destChannelStrideBytes;  /* skip to next source channel */
+            destBytePtr += destChannelStrideBytes;  /* skip to next dest channel */
 
-            /* advance dest ptr for next iteration */
+            /* advance source ptr for next iteration */
             hostInputChannels[i].data = ((unsigned char*)hostInputChannels[i].data) +
                     framesToCopy * hostInputChannels[i].stride * bp->bytesPerHostInputSample;
         }
@@ -1715,7 +1717,7 @@ unsigned long PaUtil_CopyInput( PaUtilBufferProcessor* bp,
             destBytePtr += bp->bytesPerUserInputSample * framesToCopy;
             nonInterleavedDestPtrs[i] = destBytePtr;
             
-            /* advance dest ptr for next iteration */
+            /* advance source ptr for next iteration */
             hostInputChannels[i].data = ((unsigned char*)hostInputChannels[i].data) +
                     framesToCopy * hostInputChannels[i].stride * bp->bytesPerHostInputSample;
         }