3#ifndef QFFMPEGDEMUXER_P_H
4#define QFFMPEGDEMUXER_P_H
17#include <QtFFmpegMediaPluginImpl/private/qffmpegplaybackengineobject_p.h>
18#include <QtFFmpegMediaPluginImpl/private/qffmpegpacket_p.h>
19#include <QtFFmpegMediaPluginImpl/private/qffmpegplaybackutils_p.h>
20#include <QtFFmpegMediaPluginImpl/private/qffmpegtime_p.h>
21#include <QtMultimedia/private/qplatformmediaplayer_p.h>
23#include <unordered_map>
35 Demuxer(
const PlaybackEngineObjectID &id, AVFormatContext *context, TrackPosition initialPosUs,
36 bool seekPending,
const LoopOffset &loopOffset,
const StreamIndexes &streamIndexes,
39 void seek(quint64 sessionId, TrackPosition initialPosUs,
const LoopOffset &loopOffset);
70 TrackDuration bufferedDuration = TrackDuration(0);
71 qint64 bufferedSize = 0;
73 TrackPosition maxSentPacketsPos = TrackPosition(0);
74 TrackPosition maxProcessedPacketPos = TrackPosition(0);
76 bool isDataLimitReached =
false;
79 void updateStreamDataLimitFlag(StreamData &streamData);
82 AVFormatContext *m_context =
nullptr;
86 TrackPosition posInLoopUs = TrackPosition(0);
87 LoopOffset loopOffset = {};
89 bool firstPacketFound =
false;
90 bool buffered =
false;
91 TrackPosition maxPacketsEndPos = TrackPosition(0);
93 qsizetype demuxerRetryCount = 0;
94 std::optional<TimePoint> failTimePoint = {};
97 SessionContext m_sessionCtx;
98 std::unordered_map<
int, StreamData> m_streams;
101 static constexpr qsizetype s_maxDemuxerRetries = 10;
void setLoops(int loopsCount)
void doNextStep() override
void seek(quint64 sessionId, TrackPosition initialPosUs, const LoopOffset &loopOffset)
void firstPacketFound(PlaybackEngineObjectID id, TrackPosition absSeekPos)
void requestProcessVideoPacket(Packet)
void(Demuxer::*)(Packet) RequestingSignal
void requestProcessSubtitlePacket(Packet)
Demuxer(const PlaybackEngineObjectID &id, AVFormatContext *context, TrackPosition initialPosUs, bool seekPending, const LoopOffset &loopOffset, const StreamIndexes &streamIndexes, int loops)
bool canDoNextStep() const override
static RequestingSignal signalByTrackType(TrackType trackType)
TimePoint nextTimePoint() const override
static constexpr TrackDuration MaxBufferedDurationUs
Q_STATIC_LOGGING_CATEGORY(qLCAndroidCaCertificates, "qt.multimedia.ffmpeg.android.caCertificates")
static constexpr qint64 MaxBufferedSize
static TrackPosition packetEndPos(const Packet &packet, const AVStream *stream, const AVFormatContext *context)
static bool isPacketWithinStreamDuration(const AVFormatContext *context, const Packet &packet)