From 4776c563a6566c60b5466dd9b72563c95ed71965 Mon Sep 17 00:00:00 2001 From: philippegorley <philippe.gorley@savoirfairelinux.com> Date: Mon, 6 Aug 2018 13:19:34 -0400 Subject: [PATCH] decoder: set framerate if not found If FFmpeg was unable to find a framerate in avformat_find_stream_info, fall back to the DeviceParams' framerate. This was the case for certain Macs. Change-Id: I0ee7ebeef37676ff5907482421425051e880c6f5 --- src/media/media_decoder.cpp | 4 ++++ src/media/media_decoder.h | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/media/media_decoder.cpp b/src/media/media_decoder.cpp index f47bd17592..e34fa381fe 100644 --- a/src/media/media_decoder.cpp +++ b/src/media/media_decoder.cpp @@ -73,6 +73,7 @@ MediaDecoder::~MediaDecoder() int MediaDecoder::openInput(const DeviceParams& params) { + inputParams_ = params; AVInputFormat *iformat = av_find_input_format(params.format.c_str()); if (!iformat) @@ -192,6 +193,9 @@ 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; decoderCtx_->thread_count = std::max(1u, std::min(8u, std::thread::hardware_concurrency()/2)); diff --git a/src/media/media_decoder.h b/src/media/media_decoder.h index df051508ca..a0f5deada5 100644 --- a/src/media/media_decoder.h +++ b/src/media/media_decoder.h @@ -34,6 +34,7 @@ #include "audio/audiobuffer.h" +#include "media_device.h" #include "media_stream.h" #include "rational.h" #include "noncopyable.h" @@ -57,7 +58,6 @@ struct AudioFormat; class RingBuffer; class Resampler; class MediaIOHandle; -struct DeviceParams; class MediaDecoder { public: @@ -117,6 +117,8 @@ class MediaDecoder { int64_t startTime_; int64_t lastTimestamp_; + DeviceParams inputParams_; + AudioBuffer decBuff_; AudioBuffer resamplingBuff_; -- GitLab