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>
37 void seek(quint64 sessionId, TrackPosition initialPosUs,
const LoopOffset &loopOffset);
67 QPlatformMediaPlayer::TrackType trackType = QPlatformMediaPlayer::TrackType::NTrackTypes;
68 TrackDuration bufferedDuration = TrackDuration(0);
69 qint64 bufferedSize = 0;
71 TrackPosition maxSentPacketsPos = TrackPosition(0);
72 TrackPosition maxProcessedPacketPos = TrackPosition(0);
74 bool isDataLimitReached =
false;
77 void updateStreamDataLimitFlag(StreamData &streamData);
80 AVFormatContext *m_context =
nullptr;
84 TrackPosition posInLoopUs = TrackPosition(0);
85 LoopOffset loopOffset = {};
87 bool firstPacketFound =
false;
88 bool buffered =
false;
89 TrackPosition maxPacketsEndPos = TrackPosition(0);
91 qsizetype demuxerRetryCount = 0;
92 std::optional<TimePoint> failTimePoint = {};
95 SessionContext m_sessionCtx;
96 std::unordered_map<
int, StreamData> m_streams;
99 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)
static RequestingSignal signalByTrackType(QPlatformMediaPlayer::TrackType trackType)
bool canDoNextStep() const override
TimePoint nextTimePoint() const override
static constexpr TrackDuration MaxBufferedDurationUs
static constexpr qint64 MaxBufferedSize
std::conditional_t< QT_FFMPEG_AVIO_WRITE_CONST, const uint8_t *, uint8_t * > AvioWriteBufferType
static TrackPosition packetEndPos(const Packet &packet, const AVStream *stream, const AVFormatContext *context)
static bool isPacketWithinStreamDuration(const AVFormatContext *context, const Packet &packet)
#define qCWarning(category,...)
#define qCDebug(category,...)
#define Q_STATIC_LOGGING_CATEGORY(name,...)