From c49c89a66675820b4ca23c7399194a310c7c16e9 Mon Sep 17 00:00:00 2001
From: philippegorley <philippe.gorley@savoirfairelinux.com>
Date: Mon, 13 Aug 2018 16:21:06 -0400
Subject: [PATCH] decoder: add more fallbacks if fps is 0

Change-Id: I59f25e4537c393674f1b62b0e12deb143d9fc108
Reviewed-by: Hugo Lefeuvre <hugo.lefeuvre@savoirfairelinux.com>
---
 src/media/media_decoder.cpp | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/media/media_decoder.cpp b/src/media/media_decoder.cpp
index a3061bb4be..21d8945cb2 100644
--- a/src/media/media_decoder.cpp
+++ b/src/media/media_decoder.cpp
@@ -193,9 +193,14 @@ MediaDecoder::setupStream(AVMediaType mediaType)
     }
     avcodec_parameters_to_context(decoderCtx_, avStream_->codecpar);
     decoderCtx_->framerate = avStream_->avg_frame_rate;
-    // in case FFmpeg could not find a framerate, fall back to the ones found in openInput
-    if (mediaType == AVMEDIA_TYPE_VIDEO && (decoderCtx_->framerate.num == 0 || decoderCtx_->framerate.den == 0))
-        decoderCtx_->framerate = inputParams_.framerate;
+    if (mediaType == AVMEDIA_TYPE_VIDEO) {
+        if (decoderCtx_->framerate.num == 0 || decoderCtx_->framerate.den == 0)
+            decoderCtx_->framerate = inputParams_.framerate;
+        if (decoderCtx_->framerate.num == 0 || decoderCtx_->framerate.den == 0)
+            decoderCtx_->framerate = av_inv_q(decoderCtx_->time_base);
+        if (decoderCtx_->framerate.num == 0 || decoderCtx_->framerate.den == 0)
+            decoderCtx_->framerate = {30, 1};
+    }
 
     decoderCtx_->thread_count = std::max(1u, std::min(8u, std::thread::hardware_concurrency()/2));
 
-- 
GitLab