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