From a687eb2d2ab6c47ab03badf2b31ac7edfa40445d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Sun, 25 Nov 2018 11:38:35 -0500 Subject: [PATCH] audioframeresizer: preserve pts Change-Id: I89e3096ccdc27a2ca32f58c40e33f3e65fe45405 Reviewed-by: Philippe Gorley <philippe.gorley@savoirfairelinux.com> --- src/media/audio/audio_frame_resizer.cpp | 9 ++++++++- src/media/audio/audio_frame_resizer.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/media/audio/audio_frame_resizer.cpp b/src/media/audio/audio_frame_resizer.cpp index 4bcf86d28f..77c26dc9a0 100644 --- a/src/media/audio/audio_frame_resizer.cpp +++ b/src/media/audio/audio_frame_resizer.cpp @@ -95,7 +95,9 @@ AudioFrameResizer::enqueue(std::shared_ptr<AudioFrame>&& frame) throw std::runtime_error("Could not write samples to audio queue: input frame is not the right format"); } - if (samples() == 0 && f->nb_samples == frameSize_) { + auto nb_samples = samples(); + if (nb_samples == 0 && f->nb_samples == frameSize_) { + nextOutputPts_ = frame->pointer()->pts + frameSize_; cb_(std::move(frame)); return; // return if frame was just passed through } @@ -106,6 +108,9 @@ AudioFrameResizer::enqueue(std::shared_ptr<AudioFrame>&& frame) throw std::runtime_error("Failed to add audio to frame resizer"); } + if (nextOutputPts_ == 0) + nextOutputPts_ = frame->pointer()->pts - nb_samples; + if (cb_) while (auto frame = dequeue()) cb_(std::move(frame)); @@ -123,6 +128,8 @@ AudioFrameResizer::dequeue() RING_ERR() << "Could not read samples from queue: " << libav_utils::getError(ret); return {}; } + frame->pointer()->pts = nextOutputPts_; + nextOutputPts_ += frameSize_; return frame; } diff --git a/src/media/audio/audio_frame_resizer.h b/src/media/audio/audio_frame_resizer.h index 0023ae99c0..ddb037a87c 100644 --- a/src/media/audio/audio_frame_resizer.h +++ b/src/media/audio/audio_frame_resizer.h @@ -98,6 +98,7 @@ private: * Audio queue operating on the sample level instead of byte level. */ AVAudioFifo* queue_; + int64_t nextOutputPts_ {0}; }; } // namespace ring -- GitLab