From 9fce93c5b714d89e195e7bd7ecbf532c41fcf4d2 Mon Sep 17 00:00:00 2001
From: Kateryna Kostiuk <kateryna.kostiuk@savoirfairelinux.com>
Date: Fri, 6 Mar 2020 11:52:40 -0500
Subject: [PATCH] player: fix frame time

Handle cases when pts is smaller than start time.
(Usually should not happens).

Change-Id: Ia0687237764cef54d6830ab95169f21f295d041d
---
 src/media/media_decoder.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/media/media_decoder.cpp b/src/media/media_decoder.cpp
index c0ceae9c54..05f208dea9 100644
--- a/src/media/media_decoder.cpp
+++ b/src/media/media_decoder.cpp
@@ -579,7 +579,8 @@ MediaDecoder::decode(AVPacket& packet)
                                                               | AV_ROUND_PASS_MINMAX));
         lastTimestamp_ = frame->pts;
         if (emulateRate_ and packetTimestamp != AV_NOPTS_VALUE) {
-            auto frame_time = getTimeBase() * (packetTimestamp - avStream_->start_time);
+            auto startTime = avStream_->start_time == AV_NOPTS_VALUE ? 0 : avStream_->start_time;
+            rational<double> frame_time = rational<double>(getTimeBase()) * (packetTimestamp - startTime);
             auto target_relative = static_cast<std::int64_t>(frame_time.real() * 1e6);
             auto target_absolute = startTime_ + target_relative;
             if (target_relative < seekTime_) {
-- 
GitLab