From 1f1e960da00f1adf70a57dd9337e5a62c4ef9e97 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Wed, 11 Apr 2018 19:03:03 +0200 Subject: [PATCH] Make FFmpegCapture send semi-reasonable timestamps with its audio data. --- ffmpeg_capture.cpp | 1 + resampling_queue.cpp | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/ffmpeg_capture.cpp b/ffmpeg_capture.cpp index b8010d0..e7f25e3 100644 --- a/ffmpeg_capture.cpp +++ b/ffmpeg_capture.cpp @@ -463,6 +463,7 @@ bool FFmpegCapture::play_video(const string &pathname) } next_frame_start = compute_frame_start(frame->pts, pts_origin, video_timebase, start, rate); video_frame->received_timestamp = next_frame_start; + audio_frame->received_timestamp = next_frame_start; bool finished_wakeup = producer_thread_should_quit.sleep_until(next_frame_start); if (finished_wakeup) { if (audio_frame->len > 0) { diff --git a/resampling_queue.cpp b/resampling_queue.cpp index 24811eb..df0c335 100644 --- a/resampling_queue.cpp +++ b/resampling_queue.cpp @@ -49,6 +49,8 @@ void ResamplingQueue::add_input_samples(steady_clock::time_point ts, const float return; } + assert(duration(ts.time_since_epoch()).count() >= 0.0); + bool good_sample = (rate_adjustment_policy == ADJUST_RATE); if (good_sample && a1.good_sample) { a0 = a1; @@ -88,8 +90,10 @@ bool ResamplingQueue::get_output_samples(steady_clock::time_point ts, float *sam // good point. Note that we could be extrapolating backward or // forward, depending on the timing of the calls. const InputPoint &base_point = a1.good_sample ? a1 : a0; + assert(duration(base_point.ts.time_since_epoch()).count() >= 0.0); const double input_samples_received = base_point.input_samples_received + current_estimated_freq_in * duration(ts - base_point.ts).count(); + assert(input_samples_received >= 0.0); // Estimate the number of input samples _consumed_ after we've run the resampler. const double input_samples_consumed = total_consumed_samples + -- 2.39.2