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)
 
void rewindFrames ()
 
void setOutputFrameNoMultiplier (double outputFrameNoMultiplier)
 
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
 
double m_outputFrameNo = 0.0
 
double m_outputFrameNoMultiplier = 1.0
 
KisMediaEncoderWrapperSettings m_settings
 

Detailed Description

Definition at line 62 of file KisMediaEncoderWrapper.h.

Member Enumeration Documentation

◆ EncodeResult

enum class KisMediaEncoderRunnable::EncodeResult
strongprotected
Enumerator
Completed 
Cancelled 
Failed 

Definition at line 80 of file KisMediaEncoderWrapper.h.

Constructor & Destructor Documentation

◆ KisMediaEncoderRunnable()

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

Definition at line 66 of file KisMediaEncoderWrapper.cpp.

67 : QObject(parent)
69{
70}
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 121 of file KisMediaEncoderWrapper.h.

122 {
123 return m_cancel;
124 }

References m_cancel.

◆ nextFrame()

bool KisMediaEncoderRunnable::nextFrame ( Frame & outFrame)
protected

Definition at line 72 of file KisMediaEncoderWrapper.cpp.

73{
74 int inputFileCount = m_settings.inputFiles.size();
75 if (inputFileCount == 0) {
76 return false;
77 }
78
79 int lastIndex = inputFileCount - 1;
82 int seconds = m_settings.firstFrameSec;
83 if (seconds > 0) {
84 outFrame = Frame(m_settings.inputFiles[lastIndex], seconds * m_settings.outputFps);
85 return true;
86 }
87 }
88
89 double inputFrameDuration = 1.0 / double(m_settings.inputFps);
90 double outputFrameDuration = 1.0 / double(m_settings.outputFps);
91 while (m_inputFileIndex < inputFileCount) {
92 int fileIndex = m_inputFileIndex;
94
95 int instances = 0;
96 double nextInputTime = double(m_inputFileIndex) * inputFrameDuration;
97 while (m_inputTime < nextInputTime) {
98 ++instances;
99 m_inputTime += outputFrameDuration;
100 }
101
102 if (instances != 0) {
103 // GIF must spin through the input frames twice, once to generate a
104 // palette and then again to actually render the animated image. It
105 // sets the multiplier to 0.5 so that the progress bar shows values
106 // that make sense for the user, rather than reaching 100% halfway.
107 m_outputFrameNo += double(instances) * m_outputFrameNoMultiplier;
109
110 // If we're on the last frame, we can append the linger time.
111 if (fileIndex == lastIndex && m_needsLingerAfter) {
112 m_needsLingerAfter = false;
113 instances += qMax(0, m_settings.lastFrameSec) * m_settings.outputFps;
114 }
115
116 outFrame = Frame(m_settings.inputFiles[fileIndex], instances);
117 return true;
118 }
119 }
120
121 if (m_needsLingerAfter) {
122 m_needsLingerAfter = false;
123 int seconds = m_settings.lastFrameSec;
124 if (seconds > 0) {
125 outFrame = Frame(m_settings.inputFiles[lastIndex], seconds * m_settings.outputFps);
126 return true;
127 }
128 }
129
130 return false;
131}
void sigProgressUpdated(int frameNo)

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

◆ prepareAndEncode()

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

Definition at line 141 of file KisMediaEncoderWrapper.cpp.

142{
143 if (m_cancel) {
145 }
146
147 if (m_settings.inputFiles.isEmpty()) {
148 outErrorMessage = i18n("No frame files found");
150 }
151
153 return encode(outErrorMessage);
154}
virtual EncodeResult encode(QString &outErrorMessage)=0

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

◆ rewindFrames()

void KisMediaEncoderRunnable::rewindFrames ( )
protected

Definition at line 133 of file KisMediaEncoderWrapper.cpp.

134{
135 m_inputTime = 0;
138 m_needsLingerAfter = true;
139}

References m_inputFileIndex, m_inputTime, m_needsLingerAfter, and m_needsPreviewBefore.

◆ run()

void KisMediaEncoderRunnable::run ( )
override

Definition at line 32 of file KisMediaEncoderWrapper.cpp.

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

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

◆ setOutputFrameNoMultiplier()

void KisMediaEncoderRunnable::setOutputFrameNoMultiplier ( double outputFrameNoMultiplier)
inlineprotected

Definition at line 126 of file KisMediaEncoderWrapper.h.

127 {
128 m_outputFrameNoMultiplier = outputFrameNoMultiplier;
129 }

References m_outputFrameNoMultiplier.

◆ settings()

const KisMediaEncoderWrapperSettings KisMediaEncoderRunnable::settings ( )
inlineprotected

Definition at line 116 of file KisMediaEncoderWrapper.h.

117 {
118 return m_settings;
119 }

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 27 of file KisMediaEncoderWrapper.cpp.

28{
29 m_cancel = true;
30}

References m_cancel.

Member Data Documentation

◆ m_cancel

bool KisMediaEncoderRunnable::m_cancel = false
private

Definition at line 144 of file KisMediaEncoderWrapper.h.

◆ m_inputFileIndex

int KisMediaEncoderRunnable::m_inputFileIndex = 0
private

Definition at line 139 of file KisMediaEncoderWrapper.h.

◆ m_inputTime

double KisMediaEncoderRunnable::m_inputTime = 0.0
private

Definition at line 138 of file KisMediaEncoderWrapper.h.

◆ m_needsLingerAfter

bool KisMediaEncoderRunnable::m_needsLingerAfter = true
private

Definition at line 143 of file KisMediaEncoderWrapper.h.

◆ m_needsPreviewBefore

bool KisMediaEncoderRunnable::m_needsPreviewBefore = true
private

Definition at line 142 of file KisMediaEncoderWrapper.h.

◆ m_outputFrameNo

double KisMediaEncoderRunnable::m_outputFrameNo = 0.0
private

Definition at line 140 of file KisMediaEncoderWrapper.h.

◆ m_outputFrameNoMultiplier

double KisMediaEncoderRunnable::m_outputFrameNoMultiplier = 1.0
private

Definition at line 141 of file KisMediaEncoderWrapper.h.

◆ m_settings

KisMediaEncoderWrapperSettings KisMediaEncoderRunnable::m_settings
private

Definition at line 137 of file KisMediaEncoderWrapper.h.


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