diff options
Diffstat (limited to 'src/plugins/multimedia/ffmpeg/playbackengine/qffmpegdemuxer.cpp')
-rw-r--r-- | src/plugins/multimedia/ffmpeg/playbackengine/qffmpegdemuxer.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/plugins/multimedia/ffmpeg/playbackengine/qffmpegdemuxer.cpp b/src/plugins/multimedia/ffmpeg/playbackengine/qffmpegdemuxer.cpp index b5cdc2204..b80cd47c4 100644 --- a/src/plugins/multimedia/ffmpeg/playbackengine/qffmpegdemuxer.cpp +++ b/src/plugins/multimedia/ffmpeg/playbackengine/qffmpegdemuxer.cpp @@ -5,7 +5,11 @@ QT_BEGIN_NAMESPACE -namespace QFFmpeg::PlaybackEngineInternal { +// queue up max 16M of encoded data, that should always be enough +// (it's around 2 secs of 4K HDR video, longer for almost all other formats) +static constexpr quint64 MaxQueueSize = 16 * 1024 * 1024; + +namespace QFFmpeg { Demuxer::Demuxer(AVFormatContext *context, qint64 seekPos, const StreamIndexes &streamIndexes) : m_context(context), m_seekPos(seekPos) @@ -22,7 +26,7 @@ void Demuxer::doNextStep() { ensureSeeked(); - Packet packet(av_packet_alloc()); + Packet packet(AVPacketUPtr{ av_packet_alloc() }); if (av_read_frame(m_context, packet.avPacket()) < 0) { setAtEnd(true); return; @@ -85,7 +89,7 @@ bool Demuxer::canDoNextStep() const return true; const auto dataSize = - std::accumulate(m_streams.begin(), m_streams.end(), 0, + std::accumulate(m_streams.begin(), m_streams.end(), quint64(0), [](quint64 value, const auto &s) { return value + s.second.dataSize; }); if (dataSize > MaxQueueSize) @@ -128,7 +132,7 @@ Demuxer::RequestingSignal Demuxer::signalByTrackType(QPlatformMediaPlayer::Track return nullptr; } -} +} // namespace QFFmpeg QT_END_NAMESPACE |