|
Krita Source Code Documentation
|
The KisPlaybackEngineMLT class is an implementation of KisPlaybackEngine that uses MLT (Media Lovin' Toolkit) to drive image frame changes and animation audio with (hopefully) close to frame-perfect synchronization. More...
#include <KisPlaybackEngineMLT.h>
Inheritance diagram for KisPlaybackEngineMLT:Classes | |
| struct | FrameWaitingInterface |
| struct | Private |
| struct | StopAndResume |
| The StopAndResumeConsumer struct is used to encapsulate optional stop-and-then-resume behavior of a consumer. Using RAII, we can stop a consumer at construction and simply resume it when it exits scope. More... | |
Public Slots | |
| bool | isMute () override |
| PlaybackStats | playbackStatistics () const override |
| void | seek (int frameIndex, SeekOptionFlags flags=SEEK_FINALIZE|SEEK_PUSH_AUDIO) override |
| void | setDropFramesMode (bool value) override |
| void | setMute (bool val) override |
| bool | supportsAudio () override |
| bool | supportsVariablePlaybackSpeed () override |
Public Slots inherited from KisPlaybackEngine | |
| bool | dropFrames () const |
| virtual void | firstFrame () |
| virtual bool | isMute ()=0 |
| virtual void | lastFrame () |
| virtual void | nextFrame () |
| virtual void | nextKeyframe () |
| virtual void | nextMatchingKeyframe () |
| virtual void | nextUnfilteredKeyframe () |
| virtual void | pause () |
| virtual void | play () |
| virtual PlaybackStats | playbackStatistics () const =0 |
| virtual void | playPause () |
| virtual void | previousFrame () |
| virtual void | previousKeyframe () |
| virtual void | previousMatchingKeyframe () |
| previousMatchingKeyframe && nextMatchingKeyframe Navigate to the next keyframe that has the same color-label as the current keyframe. Useful to quickly navigate to user-specified 'similar' keyframes. E.g. Contact points in an animation might have a specific color to specify importance and be quickly swapped between. | |
| virtual void | previousUnfilteredKeyframe () |
| previousUnfilteredKeyframe && nextUnfilteredKeyframe Navigate to keyframes based on the current onion skin filtration. This lets users easily navigate to the next visible "onion-skinned" keyframe on the active layer. | |
| virtual void | seek (int frameIndex, SeekOptionFlags options=SEEK_FINALIZE|SEEK_PUSH_AUDIO)=0 |
| virtual void | setDropFramesMode (bool value) |
| virtual void | setMute (bool val)=0 |
| virtual void | stop () |
| virtual bool | supportsAudio ()=0 |
| virtual bool | supportsVariablePlaybackSpeed ()=0 |
Signals | |
| void | sigChangeActiveCanvasFrame (int p_frame) |
Signals inherited from KisPlaybackEngine | |
| void | sigDropFramesModeChanged (bool value) |
Public Member Functions | |
| FrameWaitingInterface * | frameWaitingInterface () |
| KisPlaybackEngineMLT (QObject *parent=nullptr) | |
| ~KisPlaybackEngineMLT () | |
Public Member Functions inherited from KisPlaybackEngine | |
| KisPlaybackEngine (QObject *parent=nullptr) | |
| ~KisPlaybackEngine () | |
Public Member Functions inherited from KoCanvasObserverBase | |
| KoCanvasObserverBase () | |
| KoCanvasBase * | observedCanvas () const |
| virtual QString | observerName () |
| void | setObservedCanvas (KoCanvasBase *canvas) |
| void | unsetObservedCanvas () |
| virtual | ~KoCanvasObserverBase () |
Protected Slots | |
| void | canvasDestroyed (QObject *canvas) |
| void | setAudioVolume (qreal volumeNormalized) |
| setAudioVolume | |
| void | setCanvas (KoCanvasBase *canvas) override |
| void | throttledSetSpeed (const double speed) |
| throttledSetSpeed | |
| void | throttledShowFrame (const int frame) |
| throttledShowFrame | |
| void | unsetCanvas () override |
Protected Slots inherited from KisPlaybackEngine | |
| virtual void | setCanvas (KoCanvasBase *p_canvas) override |
| virtual void | unsetCanvas () override |
Private Member Functions | |
| void | setupProducer (boost::optional< QFileInfo > file) |
| Sets up an MLT::Producer object in response to audio being added to a Krita document or when canvas changes. | |
Private Attributes | |
| QScopedPointer< Private > | m_d |
Additional Inherited Members | |
Protected Member Functions inherited from KisPlaybackEngine | |
| class KisCanvas2 * | activeCanvas () const |
| int | frameWrap (int frame, int startFrame, int endFrame) |
Protected Member Functions inherited from KoCanvasObserverBase | |
| virtual void | setCanvas (KoCanvasBase *canvas)=0 |
| virtual void | unsetCanvas ()=0 |
The KisPlaybackEngineMLT class is an implementation of KisPlaybackEngine that uses MLT (Media Lovin' Toolkit) to drive image frame changes and animation audio with (hopefully) close to frame-perfect synchronization.
If MLT is unavailable or unwanted, Krita can instead use KisPlaybackEngineQT which may be simpler but has different characteristics and is not designed with audio-video synchronization in mind.
Definition at line 35 of file KisPlaybackEngineMLT.h.
|
explicit |
Definition at line 367 of file KisPlaybackEngineMLT.cpp.
References connect(), sigChangeActiveCanvasFrame(), and throttledShowFrame().
| KisPlaybackEngineMLT::~KisPlaybackEngineMLT | ( | ) |
Definition at line 374 of file KisPlaybackEngineMLT.cpp.
|
protectedslot |
We cannot use QMap::remove here, because the canvas is already half-destroyed and we cannot up-cast to KisCanvas2 anymore
Definition at line 533 of file KisPlaybackEngineMLT.cpp.
References KIS_SAFE_ASSERT_RECOVER_RETURN, and m_d.
| KisPlaybackEngineMLT::FrameWaitingInterface * KisPlaybackEngineMLT::frameWaitingInterface | ( | ) |
Definition at line 590 of file KisPlaybackEngineMLT.cpp.
References m_d.
|
overrideslot |
Definition at line 613 of file KisPlaybackEngineMLT.cpp.
References m_d.
|
overrideslot |
Definition at line 618 of file KisPlaybackEngineMLT.cpp.
References KisPlaybackEngine::activeCanvas(), KisPlaybackEngine::PlaybackStats::droppedFramesPortion, KisPlaybackEngine::PlaybackStats::expectedFps, m_d, PLAYBACK_PULL, qFuzzyIsNull(), and KisPlaybackEngine::PlaybackStats::realFps.
|
overrideslot |
Definition at line 378 of file KisPlaybackEngineMLT.cpp.
References KisPlaybackEngine::activeCanvas(), KisCanvas2::animationState(), KIS_ASSERT, m_d, PLAYBACK_PUSH, SEEK_FINALIZE, SEEK_PUSH_AUDIO, and KisCanvasAnimationState::showFrame().
|
protectedslot |
setAudioVolume
| volume | (normalized) |
Definition at line 579 of file KisPlaybackEngineMLT.cpp.
References m_d.
|
overrideprotectedslot |
Both, producer and consumers store frame rate in their private properties and do not track updates in the profile, so we should recreate all the three to actually make the changes to take effect.
Theoretically, we could just call set_profile on all the three, but the fact that we embed one more producer into our own one, prevents it from working.
Definition at line 438 of file KisPlaybackEngineMLT.cpp.
References KisPlaybackEngine::activeCanvas(), KisCanvas2::animationState(), connect(), KisCanvas2::image(), KIS_SAFE_ASSERT_RECOVER_RETURN, m_d, KisCanvasAnimationState::mediaInfo(), KisCanvasAnimationState::playbackSpeed(), setAudioVolume(), KisPlaybackEngine::setCanvas(), setupProducer(), KisCanvasAnimationState::sigAudioLevelChanged(), KisImageAnimationInterface::sigFramerateChanged(), KisCanvasAnimationState::sigPlaybackMediaChanged(), KisImageAnimationInterface::sigPlaybackRangeChanged(), KisCanvasAnimationState::sigPlaybackSpeedChanged(), KisCanvasAnimationState::sigPlaybackStateChanged(), and value().
|
overrideslot |
Definition at line 595 of file KisPlaybackEngineMLT.cpp.
References m_d, KisPlaybackEngine::setDropFramesMode(), and value().
|
overrideslot |
Definition at line 603 of file KisPlaybackEngineMLT.cpp.
References KisPlaybackEngine::activeCanvas(), KisCanvas2::animationState(), KisCanvasAnimationState::currentVolume(), KIS_SAFE_ASSERT_RECOVER_RETURN, m_d, and setAudioVolume().
|
private |
Sets up an MLT::Producer object in response to audio being added to a Krita document or when canvas changes.
| file | An optional file to be loaded by MLT. |
Definition at line 395 of file KisPlaybackEngineMLT.cpp.
References KisPlaybackEngine::activeCanvas(), KisImage::animationInterface(), canvasDestroyed(), connect(), KisImageAnimationInterface::documentPlaybackRange(), KisTimeSpan::end(), KisAndroidFileProxy::getFileFromContentUri(), KisCanvas2::image(), KIS_ASSERT, KIS_SAFE_ASSERT_RECOVER_NOOP, m_d, ppVar, and KisTimeSpan::start().
|
signal |
|
inlineoverrideslot |
Definition at line 51 of file KisPlaybackEngineMLT.h.
|
inlineoverrideslot |
Definition at line 52 of file KisPlaybackEngineMLT.h.
|
protectedslot |
throttledSetSpeed
| speed |
Because MLT needs to be stopped and restarted to change playback speed we use this function to limit the frequency of speed change requests.
Definition at line 573 of file KisPlaybackEngineMLT.cpp.
References m_d.
|
protectedslot |
throttledShowFrame
| frame |
In order to throttle calls from MLT to respect our playback mode, we need to redirect showFrame calls to this thread and enforce that we only allow MLT to show frames when we are in PULL mode.
Definition at line 549 of file KisPlaybackEngineMLT.cpp.
References KisPlaybackEngine::activeCanvas(), KisCanvas2::animationState(), m_d, PLAYBACK_PULL, and KisCanvasAnimationState::showFrame().
|
overrideprotectedslot |
Definition at line 529 of file KisPlaybackEngineMLT.cpp.
References setCanvas().
|
private |
Definition at line 104 of file KisPlaybackEngineMLT.h.