Move stream_.state update to the end of wasapiThread()
[rtaudio.git] / RtAudio.cpp
index 7b2f90749cb257018c3af1603d58f383c15ce629..18e900e8fbc73402359c554f418b1a9fb9528b4a 100644 (file)
@@ -1,4 +1,4 @@
-/************************************************************************/
+/************************************************************************/
 /*! \class RtAudio
     \brief Realtime audio i/o C++ classes.
 
@@ -3697,11 +3697,13 @@ static const char* getAsioErrorString( ASIOError result )
 #include <mfapi.h>
 #include <mferror.h>
 #include <mfplay.h>
-#include <Wmcodecdsp.h>
+#include <wmcodecdsp.h>
 
-#pragma comment( lib, "mfplat.lib" )
-#pragma comment( lib, "mfuuid.lib" )
-#pragma comment( lib, "wmcodecdspuuid" )
+#ifdef _MSC_VER
+  #pragma comment( lib, "mfplat.lib" )
+  #pragma comment( lib, "mfuuid.lib" )
+  #pragma comment( lib, "wmcodecdspuuid" )
+#endif
 
 //=============================================================================
 
@@ -3907,7 +3909,7 @@ public:
     _transformUnk->QueryInterface( IID_PPV_ARGS( &_resamplerProps ) );
     _resamplerProps->SetHalfFilterLength( 60 ); // best conversion quality
 
-                                                // 3. Specify input / output format
+    // 3. Specify input / output format
 
     MFCreateMediaType( &_mediaType );
     _mediaType->SetGUID( MF_MT_MAJOR_TYPE, MFMediaType_Audio );
@@ -4005,7 +4007,7 @@ public:
     DWORD rStatus;
     DWORD rBytes = outputBufferSize; // maximum bytes accepted per ProcessOutput
 
-                                     // 7.1 Create Sample object for output data
+    // 7.1 Create Sample object for output data
 
     memset( &rOutDataBuffer, 0, sizeof rOutDataBuffer );
     MFCreateSample( &( rOutDataBuffer.pSample ) );
@@ -4739,7 +4741,8 @@ bool RtApiWasapi::probeDeviceOpen( unsigned int device, StreamMode mode, unsigne
   // Set flags for buffer conversion.
   stream_.doConvertBuffer[mode] = false;
   if ( stream_.userFormat != stream_.deviceFormat[mode] ||
-       stream_.nUserChannels != stream_.nDeviceChannels )
+       stream_.nUserChannels[0] != stream_.nDeviceChannels[0] ||
+       stream_.nUserChannels[1] != stream_.nDeviceChannels[1] )
     stream_.doConvertBuffer[mode] = true;
   else if ( stream_.userInterleaved != stream_.deviceInterleaved[mode] &&
             stream_.nUserChannels[mode] > 1 )
@@ -5095,7 +5098,7 @@ void RtApiWasapi::wasapiThread()
           }
 
           // Convert callback buffer to user sample rate
-          unsigned int deviceBufferOffset = convBufferSize * stream_.nDeviceChannels[INPUT] * formatBytes( stream_.userFormat );
+          unsigned int deviceBufferOffset = convBufferSize * stream_.nDeviceChannels[INPUT] * formatBytes( stream_.deviceFormat[INPUT] );
           unsigned int convSamples = 0;
 
           captureResampler->Convert( stream_.deviceBuffer + deviceBufferOffset,
@@ -5363,13 +5366,11 @@ Exit:
 
   CoUninitialize();
 
+  if ( !errorText_.empty() )
+    error( errorType );
+
   // update stream state
   stream_.state = STREAM_STOPPED;
-
-  if ( errorText_.empty() )
-    return;
-  else
-    error( errorType );
 }
 
 //******************** End of __WINDOWS_WASAPI__ *********************//