Fix "last seen" timestamp

This commit is contained in:
badaix 2020-03-11 22:02:35 +01:00
parent 4587637487
commit 90785a87da
4 changed files with 32 additions and 12 deletions

View file

@ -59,8 +59,26 @@ public:
bool waitForChunk(const std::chrono::milliseconds& timeout) const;
private:
/// Request an audio chunk from the front of the stream.
/// @param outputBuffer will be filled with the chunk
/// @param frames the number of requested frames
/// @return the timepoint when this chunk should be audible
chronos::time_point_clk getNextPlayerChunk(void* outputBuffer, uint32_t frames);
/// Request an audio chunk from the front of the stream with a tempo adaption
/// @param outputBuffer will be filled with the chunk
/// @param frames the number of requested frames
/// @param framesCorrection number of frames that should be added or removed.
/// The function will allways return "frames" frames, but will fit "frames + framesCorrection" frames into "frames"
/// so if frames is 100 and framesCorrection is 2, 102 frames will be read from the stream and 2 frames will be removed.
/// This makes us "fast-forward" by 2 frames, or if framesCorrection is -3, 97 frames will be read from the stream and
/// filled with 3 frames (simply by dublication), this makes us effectively slower
/// @return the timepoint when this chunk should be audible
chronos::time_point_clk getNextPlayerChunk(void* outputBuffer, uint32_t frames, int32_t framesCorrection);
/// Request a silent audio chunk
/// @param outputBuffer will be filled with the chunk
/// @param frames the number of requested frames
void getSilentPlayerChunk(void* outputBuffer, uint32_t frames) const;
void updateBuffers(int age);

View file

@ -39,7 +39,7 @@ void TimeProvider::setDiffToServer(double ms)
{
static int32_t lastTimeSync = 0;
timeval now;
chronos::systemtimeofday(&now);
chronos::steadytimeofday(&now);
/// clear diffBuffer if last update is older than a minute
if (!diffBuffer_.empty() && (std::abs(now.tv_sec - lastTimeSync) > 60))

View file

@ -64,13 +64,12 @@ enum message_type
};
struct tv
{
tv()
{
timeval t;
chronos::systemtimeofday(&t);
chronos::steadytimeofday(&t);
sec = t.tv_sec;
usec = t.tv_usec;
}

View file

@ -29,13 +29,12 @@
namespace chronos
{
typedef std::chrono::steady_clock clk;
// typedef std::chrono::system_clock clk;
typedef std::chrono::time_point<clk> time_point_clk;
typedef std::chrono::seconds sec;
typedef std::chrono::milliseconds msec;
typedef std::chrono::microseconds usec;
typedef std::chrono::nanoseconds nsec;
using clk = std::chrono::steady_clock;
using time_point_clk = std::chrono::time_point<clk>;
using sec = std::chrono::seconds;
using msec = std::chrono::milliseconds;
using usec = std::chrono::microseconds;
using nsec = std::chrono::nanoseconds;
template <class Clock>
inline static void timeofday(struct timeval* tv)
@ -46,10 +45,14 @@ inline static void timeofday(struct timeval* tv)
tv->tv_usec = microsecs.count() % 1000000;
}
inline static void steadytimeofday(struct timeval* tv)
{
timeofday<clk>(tv);
}
inline static void systemtimeofday(struct timeval* tv)
{
// gettimeofday(tv, nullptr);
timeofday<clk>(tv);
timeofday<std::chrono::system_clock>(tv);
}
template <class ToDuration>