3#ifndef QFFMPEGRENDERER_P_H
4#define QFFMPEGRENDERER_P_H
21#include <QtCore/qpointer.h>
87 TimePoint timePoint = Clock::now())
const;
91 template<
typename Output,
typename ChangeHandler>
92 void setOutputInternal(QPointer<Output> &actual, Output *desired, ChangeHandler &&changeHandler)
97 auto doer = [desired, changeHandler, &actual]() {
98 const auto prev = std::exchange(actual, desired);
110 qint64 m_lastFrameEnd = 0;
111 QAtomicInteger<qint64> m_lastPosition = 0;
112 QAtomicInteger<qint64> m_seekPos = 0;
115 QQueue<Frame> m_frames;
117 QAtomicInteger<bool> m_isStepForced =
false;
118 std::optional<TimePoint> m_explicitNextFrameTime;
int timerInterval() const override
void onPauseChanged() override
void syncSoft(TimePoint tp, qint64 trackPos)
void doNextStep() override
TimeController::TimePoint TimePoint
virtual RenderingResult renderInternal(Frame frame)=0
void frameProcessed(Frame)
void setInitialPosition(TimePoint tp, qint64 trackPos)
bool canDoNextStep() const override
TimeController::Clock Clock
void setPlaybackRate(float rate)
qint64 seekPosition() const
float playbackRate() const
std::chrono::microseconds frameDelay(const Frame &frame, TimePoint timePoint=Clock::now()) const
Renderer(const TimeController &tc, const std::chrono::microseconds &seekPosTimeOffset={})
virtual void onPlaybackRateChanged()
void onFinalFrameReceived()
void setOutputInternal(QPointer< Output > &actual, Output *desired, ChangeHandler &&changeHandler)
void changeRendererTime(std::chrono::microseconds offset)
void loopChanged(Id id, qint64 offset, int index)
qint64 lastPosition() const
bool isStepForced() const
Clock::time_point TimePoint
std::chrono::steady_clock Clock
QThread * thread() const
Returns the thread in which the object lives.
static QThread * currentThread()
Combined button and popup list for selecting options.
@ BlockingQueuedConnection
GLenum GLuint GLintptr offset
std::chrono::microseconds recheckInterval