3#ifndef QFFMPEGPLAYBACKENGINEOBJECT_P_H
4#define QFFMPEGPLAYBACKENGINEOBJECT_P_H
17#include <QtCore/qatomic.h>
18#include <QtCore/qthread.h>
19#include <QtCore/qcoreevent.h>
20#include <QtCore/qcoreapplication.h>
21#include <QtMultimedia/qmediaplayer.h>
22#include <QtFFmpegMediaPluginImpl/private/qffmpegplaybackenginedefs_p.h>
23#include <QtFFmpegMediaPluginImpl/private/qffmpegplaybackutils_p.h>
39 class FuncEvent :
public QEvent
42 FuncEvent() : QEvent(FuncEventType) { }
43 virtual void invoke() = 0;
47 class FuncEventImpl
final :
public FuncEvent
50 explicit FuncEventImpl(F &&f) : m_func(std::forward<F>(f)) { }
51 void invoke()
override { m_func(); }
54 std::decay_t<F> m_func;
81 bool event(QEvent *e)
override;
83 bool checkSessionID(quint64 sessionID)
const {
return sessionID == m_id.sessionID; }
85 bool checkID(
const PlaybackEngineObjectID &id)
const
87 return checkSessionID(id.sessionID) && id.objectID == objectID();
92 Q_ASSERT(thread()->isCurrentThread());
99 Q_ASSERT(!thread()->isCurrentThread());
101 QCoreApplication::postEvent(
this,
new FuncEventImpl<F>(std::forward<F>(f)),
102 Qt::HighEventPriority);
105 QChronoTimer &
timer();
123 enum class StepType : uint8_t { None, Timeout, Immediate };
125 void doNextStep(StepType type);
127 bool isValid()
const {
return m_invalidateCounter.load(std::memory_order_relaxed) == 0; }
129 std::unique_ptr<QChronoTimer> m_timer;
131 QAtomicInteger<
bool> m_paused =
true;
132 QAtomicInteger<
bool> m_atEnd =
false;
133 std::atomic_int m_invalidateCounter = 0;
134 PlaybackEngineObjectID m_id;
138 StepType m_stepType = StepType::None;
bool checkID(const PlaybackEngineObjectID &id) const
bool checkSessionID(quint64 sessionID) const
~PlaybackEngineObject() override
std::optional< TimePoint > TimePointOpt
void error(QMediaPlayer::Error, const QString &errorString)
const PlaybackEngineObjectID & id() const
virtual bool canDoNextStep() const
PlaybackEngineObject(const PlaybackEngineObjectID &id)
virtual TimePoint nextTimePoint() const
bool event(QEvent *e) override
This virtual function receives events to an object and should return true if the event e was recogniz...
virtual void doNextStep()
void invokePriorityMethod(F &&f)
virtual void onPauseChanged()
void setAtEnd(bool isAtEnd)
std::chrono::steady_clock::time_point TimePoint
void setPaused(bool isPaused)
std::conditional_t< QT_FFMPEG_AVIO_WRITE_CONST, const uint8_t *, uint8_t * > AvioWriteBufferType
Combined button and popup list for selecting options.