Move input user buffer clearing to startStream().
authorGary Scavone <gary@music.mcgill.ca>
Sun, 7 Apr 2019 19:52:06 +0000 (15:52 -0400)
committerGary Scavone <gary@music.mcgill.ca>
Fri, 19 Apr 2019 19:16:47 +0000 (15:16 -0400)
RtAudio.cpp

index 0dff2d3984f11aff95bea8d44e6e9a8a128080bc..d92a13a523ff9209fa7378d7043892c8fc01dbf7 100644 (file)
@@ -1362,9 +1362,7 @@ bool RtApiCore :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne
   // Allocate necessary internal buffers.
   unsigned long bufferBytes;
   bufferBytes = stream_.nUserChannels[mode] * *bufferSize * formatBytes( stream_.userFormat );
-  //  stream_.userBuffer[mode] = (char *) calloc( bufferBytes, 1 );
   stream_.userBuffer[mode] = (char *) malloc( bufferBytes * sizeof(char) );
-  memset( stream_.userBuffer[mode], 0, bufferBytes * sizeof(char) );
   if ( stream_.userBuffer[mode] == NULL ) {
     errorText_ = "RtApiCore::probeDeviceOpen: error allocating user buffer memory.";
     goto error;
@@ -1387,7 +1385,7 @@ bool RtApiCore :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne
     if ( makeBuffer ) {
       bufferBytes *= *bufferSize;
       if ( stream_.deviceBuffer ) free( stream_.deviceBuffer );
-      stream_.deviceBuffer = (char *) calloc( bufferBytes, 1 );
+      stream_.deviceBuffer = (char *) calloc( bufferBytes, sizeof(char) );
       if ( stream_.deviceBuffer == NULL ) {
         errorText_ = "RtApiCore::probeDeviceOpen: error allocating device buffer memory.";
         goto error;
@@ -1598,6 +1596,11 @@ void RtApiCore :: startStream( void )
   if ( stream_.mode == INPUT ||
        ( stream_.mode == DUPLEX && stream_.device[0] != stream_.device[1] ) ) {
 
+    // Clear user input buffer
+    unsigned long bufferBytes;
+    bufferBytes = stream_.nUserChannels[1] * stream_.bufferSize * formatBytes( stream_.userFormat );
+    memset( stream_.userBuffer[1], 0, bufferBytes * sizeof(char) );
+
     result = AudioDeviceStart( handle->id[1], callbackHandler );
     if ( result != noErr ) {
       errorStream_ << "RtApiCore::startStream: system error starting input callback procedure on device (" << stream_.device[1] << ").";
@@ -1606,6 +1609,7 @@ void RtApiCore :: startStream( void )
     }
   }
 
+  // set stream time to zero?
   handle->drainCounter = 0;
   handle->internalDrain = false;
   stream_.state = STREAM_RUNNING;
@@ -1655,13 +1659,6 @@ void RtApiCore :: stopStream( void )
   }
 
   stream_.state = STREAM_STOPPED;
-  // set stream time to zero?
-  // Clear user input buffer in case the stream is restarted
-  if ( stream_.mode == INPUT || stream_.mode == DUPLEX ) {
-    unsigned long bufferBytes;
-    bufferBytes = stream_.nUserChannels[1] * stream_.bufferSize * formatBytes( stream_.userFormat );
-    memset( stream_.userBuffer[1], 0, bufferBytes * sizeof(char) );
-  }
 
  unlock:
   if ( result == noErr ) return;