62 const QString &fileNamePrefix,
63 const QString &fileNameSuffix,
64 const QByteArray &outputMimeType,
66 const int sequenceNumberingOffset,
67 const bool onlyNeedsUniqueFrames,
69 : m_d(new
Private(image, range, sequenceNumberingOffset, onlyNeedsUniqueFrames, exportConfiguration))
71 m_d->filenamePrefix = fileNamePrefix;
72 m_d->filenameSuffix = fileNameSuffix;
73 m_d->outputMimeType = outputMimeType;
100 QString frameNumber = QString(
"%1").arg(frame +
m_d->sequenceNumberingOffset, 4, 10, QChar(
'0'));
101 QString filename =
m_d->filenamePrefix + frameNumber +
m_d->filenameSuffix;
103 if (!
m_d->savingDoc->exportDocumentSync(filename,
m_d->outputMimeType,
m_d->exportConfiguration)) {
109 identicals &=
m_d->range;
110 if( !
m_d->onlyNeedsUniqueFrames && identicals.
start() < identicals.
end() ) {
111 for (
int identicalFrame = (identicals.
start() + 1); identicalFrame <= identicals.
end(); identicalFrame++) {
112 QString identicalFrameNumber = QString(
"%1").arg(identicalFrame +
m_d->sequenceNumberingOffset, 4, 10, QChar(
'0'));
113 QString identicalFrameName =
m_d->filenamePrefix + identicalFrameNumber +
m_d->filenameSuffix;
115 QFile::copy(filename, identicalFrameName);
PythonPluginManager * instance
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void frameCancelledCallback(int frame, CancelReason cancelReason) override
frameCancelledCallback is called when the rendering of the frame was cancelled.
void sigCancelRegenerationInternal(int frame, KisAsyncAnimationRendererBase::CancelReason cancelReason)
const QScopedPointer< Private > m_d
void frameCompletedCallback(int frame, const KisRegion &requestedRegion) override
frameCompletedCallback is called by the renderer when a new frame becomes ready
KisAsyncAnimationFramesSavingRenderer(KisImageSP image, const QString &fileNamePrefix, const QString &fileNameSuffix, const QByteArray &outputMimeType, const KisTimeSpan &range, const int sequenceNumberingOffset, const bool onlyNeedsUniqueFrames, KisPropertiesConfigurationSP exportConfiguration)
~KisAsyncAnimationFramesSavingRenderer()
void sigCompleteRegenerationInternal(int frame)
const KoColorSpace * colorSpace() const
KisPaintDeviceSP projection() const
QRect bounds() const override
void setResolution(double xres, double yres)
static KisTimeSpan calculateIdenticalFramesRecursive(const KisNode *node, int time)
#define KIS_SAFE_ASSERT_RECOVER(cond)
KisDocument * createDocument(QList< KisNodeSP > nodes, KisImageSP srcImage, const QRect &copiedBounds)
QScopedPointer< KisDocument > savingDoc
KisPropertiesConfigurationSP exportConfiguration
bool onlyNeedsUniqueFrames
QByteArray outputMimeType
KisPaintDeviceSP savingDevice
Private(KisImageSP image, const KisTimeSpan &_range, int _sequenceNumberingOffset, bool _onlyNeedsUniqueFrames, KisPropertiesConfigurationSP _exportConfiguration)
int sequenceNumberingOffset
KisImageSP requestedImage
void notifyFrameCompleted(int frame)
void notifyFrameCancelled(int frame, KisAsyncAnimationRendererBase::CancelReason cancelReason)
KisRegion requestedRegion
bool addNode(KisNodeSP node, KisNodeSP parent=KisNodeSP(), KisNodeAdditionFlags flags=KisNodeAdditionFlag::None)
KisPaintDeviceSP paintDevice