CopperSpice API
1.9.2
|
Represents the implementation of a video filter. More...
Public Typedefs | |
using | RunFlags = QFlags< RunFlag > |
Public Types | |
enum | RunFlag |
Public Methods | |
virtual QVideoFrame | run (QVideoFrame *input, const QVideoSurfaceFormat &surfaceFormat, RunFlags flags) = 0 |
The QVideoFilterRunnable class represents the implementation of a filter that owns all graphics and computational resources, and performs the actual filtering or calculations.
Video filters are split into QAbstractVideoFilter and corresponding QVideoFilterRunnable instances. This is necessary to support threaded rendering scenarios. QVideoFilterRunnable instances always live on a worker thread and all its methods such as run(), the constructor, and the destructor, are guaranteed to be invoked on the worker thread.The OpenGL context is bound to the worker thread. QAbstractVideoFilter instances live on the main (GUI) thread.
Once created QVideoFilterRunnable instances are managed by CsMultimedia and will be automatically destroyed and recreated when necessary. For example when the scene graph is invalidated or the window changes or is closed. Creation happens via the QAbstractVideoFilter::createFilterRunnable() factory function.
Typedef for QFlags<RunFlag> which contains an OR combination of RunFlag values.
Refer to QVideoFilterRunnable::RunFlag for the enum documentation.
Constant | Value | Description |
---|---|---|
QVideoFilterRunnable::LastInChain | 0x01 | Indicates that the filter runnable's associated QAbstractVideoFilter is the last in the corresponding VideoOutput type's filters list, meaning that the returned frame is the one that is going to be presented to the scene graph without invoking any further filters. |
|
pure virtual |
You will need to reimplement this method to perform filtering or computation on the input video frame. Like a constructor or destructor this method is always called on the render thread with the OpenGL context bound. Implementations that do not modify the video frame can simply return input.
It is safe to access properties of the associated QAbstractVideoFilter instance from this method.
The value input will not be mapped and so the implementation of this method must call QVideoFrame::map() and QVideoFrame::unmap() when necessary.
The value surfaceFormat provides additional information. For example it can be used to determine the orientation of the input image. This is important for filters to operate on multiple platforms with multiple cameras.