39 lines
1 KiB
C++
39 lines
1 KiB
C++
// Copyright (c) 1996 Microsoft Corporation. All Rights Reserved.
|
|
/**********************************************************************
|
|
Timecode helper routines
|
|
|
|
With a bit of care to not overflow or bruise the potentialy large numbers...
|
|
**********************************************************************/
|
|
#include <wtypes.h> // LONGLONG
|
|
#include <stdio.h>
|
|
|
|
LONGLONG extrapolate(LONGLONG sample1, LONGLONG time1,
|
|
LONGLONG sample2, LONGLONG time2, LONGLONG sampleN)
|
|
{
|
|
LONGLONG sampleTime;
|
|
|
|
/* NOTE: deltas should be fairly small so we don't mind losing the bits */
|
|
double deltaSample = (double)(sample2 - sample1);
|
|
double deltaTime = (double)(time2 - time1);
|
|
double ratio;
|
|
|
|
ratio = deltaTime / deltaSample; // floating point ratio
|
|
|
|
sampleTime = LONGLONG((double)(sampleN - sample1) * ratio);
|
|
|
|
sampleTime+= time1; // add the offset
|
|
|
|
return(sampleTime);
|
|
}
|
|
|
|
|
|
#ifdef TEST
|
|
// XXX flesh out the test code!
|
|
main()
|
|
{
|
|
LONGLONG foo = extrapolate(1, 1, 6, 3, 2);
|
|
|
|
printf("%d",(int)foo);
|
|
}
|
|
#endif /* TEST */
|