Krita Source Code Documentation
Loading...
Searching...
No Matches
KisMediaEncoderRunnable Class Referenceabstract

#include <KisMediaEncoderWrapper.h>

+ Inheritance diagram for KisMediaEncoderRunnable:

Classes

class  Frame
 

Public Slots

void slotHandleCancelRequested ()
 

Signals

void sigCancelled ()
 
void sigCompleted ()
 
void sigFailed (const QString &errorMessage)
 
void sigProgressUpdated (int frameNo)
 
void sigStarted ()
 

Public Member Functions

void run () override
 

Protected Types

enum class  EncodeResult { Completed , Cancelled , Failed }
 

Protected Member Functions

virtual EncodeResult encode (QString &outErrorMessage)=0
 
bool isCancelled () const
 
 KisMediaEncoderRunnable (const KisMediaEncoderWrapperSettings &settings, QObject *parent)
 
bool nextFrame (Frame &outFrame)
 
const KisMediaEncoderWrapperSettings settings ()
 

Private Member Functions

EncodeResult prepareAndEncode (QString &outErrorMessage)
 

Private Attributes

bool m_cancel = false
 
int m_inputFileIndex = 0
 
double m_inputTime = 0.0
 
bool m_needsLingerAfter = true
 
bool m_needsPreviewBefore = true
 
int m_outputFrameNo = 0
 
KisMediaEncoderWrapperSettings m_settings
 

Detailed Description

Definition at line 55 of file KisMediaEncoderWrapper.h.

Member Enumeration Documentation

◆ EncodeResult

enum class KisMediaEncoderRunnable::EncodeResult
strongprotected
Enumerator
Completed 
Cancelled 
Failed 

Definition at line 73 of file KisMediaEncoderWrapper.h.

Constructor & Destructor Documentation

◆ KisMediaEncoderRunnable()

KisMediaEncoderRunnable::KisMediaEncoderRunnable ( const KisMediaEncoderWrapperSettings & settings,
QObject * parent )
protected

Definition at line 62 of file KisMediaEncoderWrapper.cpp.

63 : QObject(parent)
65{
66}
const KisMediaEncoderWrapperSettings settings()
KisMediaEncoderWrapperSettings m_settings

Member Function Documentation

◆ encode()

virtual EncodeResult KisMediaEncoderRunnable::encode ( QString & outErrorMessage)
protectedpure virtual

◆ isCancelled()

bool KisMediaEncoderRunnable::isCancelled ( ) const
inlineprotected

Definition at line 109 of file KisMediaEncoderWrapper.h.

110 {
111 return m_cancel;
112 }

References m_cancel.

◆ nextFrame()

bool KisMediaEncoderRunnable::nextFrame ( Frame & outFrame)
protected

Definition at line 68 of file KisMediaEncoderWrapper.cpp.

69{
70 int inputFileCount = m_settings.inputFiles.size();
71 if (inputFileCount == 0) {
72 return false;
73 }
74
75 int lastIndex = inputFileCount - 1;
78 int seconds = m_settings.firstFrameSec;
79 if (seconds > 0) {
80 outFrame = Frame(m_settings.inputFiles[lastIndex], seconds * m_settings.outputFps);
81 return true;
82 }
83 }
84
85 double inputFrameDuration = 1.0 / double(m_settings.inputFps);
86 double outputFrameDuration = 1.0 / double(m_settings.outputFps);
87 while (m_inputFileIndex < inputFileCount) {
88 int fileIndex = m_inputFileIndex;
90
91 int instances = 0;
92 double nextInputTime = double(m_inputFileIndex) * inputFrameDuration;
93 while (m_inputTime < nextInputTime) {
94 ++instances;
95 m_inputTime += outputFrameDuration;
96 }
97
98 if (instances != 0) {
99 m_outputFrameNo += instances;
101
102 // If we're on the last frame, we can append the linger time.
103 if (fileIndex == lastIndex && m_needsLingerAfter) {
104 m_needsLingerAfter = false;
105 instances += qMax(0, m_settings.lastFrameSec) * m_settings.outputFps;
106 }
107
108 outFrame = Frame(m_settings.inputFiles[fileIndex], instances);
109 return true;
110 }
111 }
112
113 if (m_needsLingerAfter) {
114 m_needsLingerAfter = false;
115 int seconds = m_settings.lastFrameSec;
116 if (seconds > 0) {
117 outFrame = Frame(m_settings.inputFiles[lastIndex], seconds * m_settings.outputFps);
118 return true;
119 }
120 }
121
122 return false;
123}
void sigProgressUpdated(int frameNo)

References KisMediaEncoderWrapperSettings::firstFrameSec, KisMediaEncoderWrapperSettings::inputFiles, KisMediaEncoderWrapperSettings::inputFps, KisMediaEncoderWrapperSettings::lastFrameSec, m_inputFileIndex, m_inputTime, m_needsLingerAfter, m_needsPreviewBefore, m_outputFrameNo, m_settings, KisMediaEncoderWrapperSettings::outputFps, and sigProgressUpdated().

◆ prepareAndEncode()

KisMediaEncoderRunnable::EncodeResult KisMediaEncoderRunnable::prepareAndEncode ( QString & outErrorMessage)
private

Definition at line 125 of file KisMediaEncoderWrapper.cpp.

126{
127 if (m_cancel) {
129 }
130
131 if (m_settings.inputFiles.isEmpty()) {
132 outErrorMessage = i18n("No frame files found");
134 }
135
137 return encode(outErrorMessage);
138}
virtual EncodeResult encode(QString &outErrorMessage)=0

References Cancelled, encode(), Failed, KisMediaEncoderWrapperSettings::inputFiles, m_cancel, m_inputFileIndex, and m_settings.

◆ run()

void KisMediaEncoderRunnable::run ( )
override

Definition at line 28 of file KisMediaEncoderWrapper.cpp.

29{
30 Q_EMIT sigStarted();
31 QString errorMessage;
32 EncodeResult result = prepareAndEncode(errorMessage);
33 if (result == EncodeResult::Completed) {
34 Q_EMIT sigCompleted();
35 } else if (result == EncodeResult::Cancelled) {
36 Q_EMIT sigCancelled();
37 } else {
38 Q_EMIT sigFailed(errorMessage);
39 }
40}
void sigFailed(const QString &errorMessage)
EncodeResult prepareAndEncode(QString &outErrorMessage)

References Cancelled, Completed, prepareAndEncode(), sigCancelled(), sigCompleted(), sigFailed(), and sigStarted().

◆ settings()

const KisMediaEncoderWrapperSettings KisMediaEncoderRunnable::settings ( )
inlineprotected

Definition at line 104 of file KisMediaEncoderWrapper.h.

105 {
106 return m_settings;
107 }

References m_settings.

◆ sigCancelled

void KisMediaEncoderRunnable::sigCancelled ( )
signal

◆ sigCompleted

void KisMediaEncoderRunnable::sigCompleted ( )
signal

◆ sigFailed

void KisMediaEncoderRunnable::sigFailed ( const QString & errorMessage)
signal

◆ sigProgressUpdated

void KisMediaEncoderRunnable::sigProgressUpdated ( int frameNo)
signal

◆ sigStarted

void KisMediaEncoderRunnable::sigStarted ( )
signal

◆ slotHandleCancelRequested

void KisMediaEncoderRunnable::slotHandleCancelRequested ( )
slot

Definition at line 23 of file KisMediaEncoderWrapper.cpp.

24{
25 m_cancel = true;
26}

References m_cancel.

Member Data Documentation

◆ m_cancel

bool KisMediaEncoderRunnable::m_cancel = false
private

Definition at line 125 of file KisMediaEncoderWrapper.h.

◆ m_inputFileIndex

int KisMediaEncoderRunnable::m_inputFileIndex = 0
private

Definition at line 121 of file KisMediaEncoderWrapper.h.

◆ m_inputTime

double KisMediaEncoderRunnable::m_inputTime = 0.0
private

Definition at line 120 of file KisMediaEncoderWrapper.h.

◆ m_needsLingerAfter

bool KisMediaEncoderRunnable::m_needsLingerAfter = true
private

Definition at line 124 of file KisMediaEncoderWrapper.h.

◆ m_needsPreviewBefore

bool KisMediaEncoderRunnable::m_needsPreviewBefore = true
private

Definition at line 123 of file KisMediaEncoderWrapper.h.

◆ m_outputFrameNo

int KisMediaEncoderRunnable::m_outputFrameNo = 0
private

Definition at line 122 of file KisMediaEncoderWrapper.h.

◆ m_settings

KisMediaEncoderWrapperSettings KisMediaEncoderRunnable::m_settings
private

Definition at line 119 of file KisMediaEncoderWrapper.h.


The documentation for this class was generated from the following files: