]> Repos - portaudio/commitdiff
Add check for min maxDeltaDacTime for timestamps.
authorphilburk <philburk@0f58301d-fd10-0410-b4af-bbb618454e57>
Thu, 28 Jul 2011 07:17:09 +0000 (07:17 +0000)
committerphilburk <philburk@0f58301d-fd10-0410-b4af-bbb618454e57>
Thu, 28 Jul 2011 07:17:09 +0000 (07:17 +0000)
qa/paqa_latency.c

index 3a45cdfec0029e4a79a13e8590c0a65cd8c43a7c..8acfa9d5b9b6d8524654dc623ebc588f3e592a44 100644 (file)
@@ -62,6 +62,10 @@ typedef struct
     char message[20];
     int minFramesPerBuffer;
     int maxFramesPerBuffer;
+    int callbackCount;
+    PaTime minDeltaDacTime;
+    PaTime maxDeltaDacTime;
+    PaStreamCallbackTimeInfo previousTimeInfo;
 }
 paTestData;
 
@@ -87,12 +91,26 @@ static int patestCallback( const void *inputBuffer, void *outputBuffer,
     {
         data->minFramesPerBuffer = framesPerBuffer;
     }
-    
     if( data->maxFramesPerBuffer < framesPerBuffer )
     {
         data->maxFramesPerBuffer = framesPerBuffer;
     }
     
+    // Measure min and max output time stamp delta.
+    if( data->callbackCount > 0 )
+    {
+        PaTime delta = timeInfo->outputBufferDacTime - data->previousTimeInfo.outputBufferDacTime;
+        if( data->minDeltaDacTime > delta )
+        {
+            data->minDeltaDacTime = delta;
+        }
+        if( data->maxDeltaDacTime < delta )
+        {
+            data->maxDeltaDacTime = delta;
+        }
+    }
+    data->previousTimeInfo = *timeInfo;
+    
     for( i=0; i<framesPerBuffer; i++ )
     {
         *out++ = data->sine[data->left_phase];  /* left */
@@ -103,6 +121,7 @@ static int patestCallback( const void *inputBuffer, void *outputBuffer,
         if( data->right_phase >= TABLE_SIZE ) data->right_phase -= TABLE_SIZE;
     }
     
+    data->callbackCount += 1;
     return paContinue;
 }
 
@@ -115,12 +134,16 @@ PaError paqaCheckLatency( PaStreamParameters *outputParamsPtr,
 
     dataPtr->minFramesPerBuffer = 9999999;
     dataPtr->maxFramesPerBuffer = 0;
+    dataPtr->minDeltaDacTime = 9999999.0;
+    dataPtr->maxDeltaDacTime = 0.0;
+    dataPtr->callbackCount = 0;
+    
     printf("-------------------------------------\n");
     printf("Stream parameter: suggestedOutputLatency = %g\n", outputParamsPtr->suggestedLatency );
     if( framesPerBuffer == paFramesPerBufferUnspecified ){
         printf("Stream parameter: user framesPerBuffer = paFramesPerBufferUnspecified\n" );
     }else{
-        printf("Stream parameter: user framesPerBuffer = %d\n", framesPerBuffer );
+        printf("Stream parameter: user framesPerBuffer = %lu\n", framesPerBuffer );
     }
     err = Pa_OpenStream(
                         &stream,
@@ -142,9 +165,11 @@ PaError paqaCheckLatency( PaStreamParameters *outputParamsPtr,
 
     printf("Play for %d seconds.\n", NUM_SECONDS );
     Pa_Sleep( NUM_SECONDS * 1000 );
-
+    
     printf("  minFramesPerBuffer = %4d\n", dataPtr->minFramesPerBuffer );
     printf("  maxFramesPerBuffer = %4d\n", dataPtr->maxFramesPerBuffer );
+    printf("  minDeltaDacTime = %f\n", dataPtr->minDeltaDacTime );
+    printf("  maxDeltaDacTime = %f\n", dataPtr->maxDeltaDacTime );
 
     err = Pa_StopStream( stream );
     if( err != paNoError ) goto error2;