diff --git a/src/media/media_decoder.cpp b/src/media/media_decoder.cpp index a3061bb4be9a1405b5d2b4baafddbca9053be0e3..21d8945cb25e497a44bf85e2f6679425aa561fad 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));