Add check for min maxDeltaDacTime for timestamps.

This commit is contained in:
philburk 2011-07-28 07:17:09 +00:00
commit b9e71acd6f

View file

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