Base class for all pipeline processing nodes. More...
#include <medianode.h>


Public Types | |
| enum | State { Idle , Configured , Running , ErrorState } |
| Node lifecycle state. More... | |
| enum | ThreadingPolicy { UseGraphPool , DedicatedThread , CustomPool } |
| Threading policy for this node. More... | |
Public Types inherited from ObjectBase | |
| using | SlotVariantFunc = std::function< void(const VariantList &)> |
| Function type for invoking a slot with a list of Variants. | |
Public Member Functions | |
| MediaNode (ObjectBase *parent=nullptr) | |
| Constructs a MediaNode. | |
| virtual | ~MediaNode () |
| Virtual destructor. | |
| State | state () const |
| Returns the current state. | |
| const String & | name () const |
| Returns the node name. | |
| void | setName (const String &name) |
| Sets the node name. | |
| const MediaPort::PtrList & | inputPorts () const |
| Returns the list of input ports. | |
| const MediaPort::PtrList & | outputPorts () const |
| Returns the list of output ports. | |
| MediaPort::Ptr | inputPort (int index) const |
| Returns the input port at the given index. | |
| MediaPort::Ptr | outputPort (int index) const |
| Returns the output port at the given index. | |
| MediaPort::Ptr | inputPort (const String &name) const |
| Returns the input port with the given name. | |
| MediaPort::Ptr | outputPort (const String &name) const |
| Returns the output port with the given name. | |
| int | inputPortCount () const |
| Returns the number of input ports. | |
| int | outputPortCount () const |
| Returns the number of output ports. | |
| void | setThreadingPolicy (ThreadingPolicy policy) |
| Sets the threading policy. | |
| void | setThreadingPolicy (ThreadPool *pool) |
| Sets a custom thread pool and switches policy to CustomPool. | |
| ThreadingPolicy | threadingPolicy () const |
| Returns the current threading policy. | |
| ThreadPool * | customThreadPool () const |
| Returns the custom thread pool, or nullptr if not using CustomPool. | |
| void | setIdealQueueSize (int size) |
| Sets the ideal input queue depth. | |
| int | idealQueueSize () const |
| Returns the ideal input queue size. | |
| int | queuedFrameCount () const |
| Returns the current input queue depth. | |
| virtual Error | configure () |
| Validates ports and allocates resources. | |
| virtual Error | start () |
| Begins processing. | |
| virtual void | stop () |
| Stops processing. | |
| virtual void | process ()=0 |
| Processes one cycle of data. | |
| virtual void | starvation () |
| Called when the node's input queue is empty and data is needed. | |
| virtual Map< String, Variant > | properties () const |
| Returns all configurable properties as key-value pairs. | |
| virtual Error | setProperty (const String &name, const Variant &value) |
| Sets a property by name. | |
| Variant | property (const String &name) const |
| Gets a single property value by name. | |
| NodeStats | stats () const |
| Returns a snapshot of the node's performance statistics. | |
| void | resetStats () |
| Resets all statistics counters to zero. | |
| virtual Map< String, Variant > | extendedStats () const |
| Returns additional node-specific statistics. | |
| PROMEKI_SIGNAL (stateChanged, State) | |
| Emitted when the node's state changes. | |
| PROMEKI_SIGNAL (errorOccurred, Error) | |
| Emitted when an error occurs. | |
| PROMEKI_SIGNAL (messageEmitted, NodeMessage) | |
| Emitted when the node produces a message. | |
Public Member Functions inherited from ObjectBase | |
| ObjectBase (ObjectBase *p=nullptr) | |
| Default ObjectBase constructor. | |
| virtual | ~ObjectBase () |
| Destructor. Emits aboutToDestroy, detaches from parent, and destroys children. | |
| ObjectBase * | parent () const |
| Returns the parent object, if one. nullptr if none. | |
| void | setParent (ObjectBase *p) |
| Sets the parent of this object. If the object already has a parent, it will be removed as a child from the old parent and added as a child to the new one. | |
| const ObjectBaseList & | childList () const |
| Returns a list of children of this object. | |
| template<typename... Args> | |
| int | registerSlot (Slot< Args... > *slot) |
| Registers a slot with this object and assigns it an ID. | |
| EventLoop * | eventLoop () const |
| Returns the EventLoop this object is affiliated with. | |
| void | moveToThread (EventLoop *loop) |
| Changes the EventLoop affinity of this object. | |
| int | startTimer (unsigned int intervalMs, bool singleShot=false) |
| Starts a timer on this object's EventLoop. | |
| void | stopTimer (int timerId) |
| Stops a timer previously started with startTimer(). | |
| template<typename... Args> | |
| PROMEKI_NAMESPACE_BEGIN void | connect (Signal< Args... > *signal, Slot< Args... > *slot) |
Static Public Member Functions | |
| static void | registerNodeType (const String &typeName, std::function< MediaNode *()> factory) |
| Registers a node type for runtime creation. | |
| static MediaNode * | createNode (const String &typeName) |
| Creates a node by registered type name. | |
| static List< String > | registeredNodeTypes () |
| Returns the list of all registered node type names. | |
Static Public Member Functions inherited from ObjectBase | |
| static const MetaInfo & | metaInfo () |
| Returns the MetaInfo for the ObjectBase class. | |
| template<typename... Args> | |
| static void | connect (Signal< Args... > *signal, Slot< Args... > *slot) |
| connects a signal and slot together. This function assumes both the signal and slot exist in a ObjectBase or derived object | |
Protected Member Functions | |
| void | enqueueInput (Frame::Ptr frame) |
| Enqueues a frame into this node's input queue. | |
| void | recordProcessTiming (double duration) |
| Records timing for a process() call. | |
| void | recordStarvation () |
| Records a starvation event. | |
| void | addInputPort (MediaPort::Ptr port) |
| Adds an input port to this node. | |
| void | addOutputPort (MediaPort::Ptr port) |
| Adds an output port to this node. | |
| void | setState (State state) |
| Sets the node state and emits stateChanged. | |
| Frame::Ptr | dequeueInput () |
| Dequeues a frame from this node's input queue. | |
| void | deliverOutput (int portIndex, Frame::Ptr frame) |
| Delivers a frame to all outgoing links on the given output port. | |
| void | deliverOutput (Frame::Ptr frame) |
| Delivers a frame to all outgoing links on all output ports. | |
| void | emitMessage (Severity severity, const String &message, uint64_t frameNumber=0) |
| Emits a message with the given severity and text. | |
| void | emitWarning (const String &message) |
| Emits a Warning-severity message. | |
| void | emitError (const String &message) |
| Emits an Error-severity message. | |
Protected Member Functions inherited from ObjectBase | |
| ObjectBase * | signalSender () |
| Returns the ObjectBase that emitted the signal currently being handled. | |
| virtual void | event (Event *e) |
| Called by EventLoop to deliver events to this object. | |
| virtual void | timerEvent (TimerEvent *e) |
| Called when a timer fires for this object. | |
Friends | |
| class | MediaGraph |
| class | MediaLink |
| class | MediaPipeline |
Additional Inherited Members | |
Public Attributes inherited from ObjectBase | |
| Signal< ObjectBase * > | aboutToDestroySignal = Signal< ObjectBase * >(this, aboutToDestroySignalName) |
Static Public Attributes inherited from ObjectBase | |
| static constexpr const char * | aboutToDestroySignalName = PROMEKI_STRINGIFY( aboutToDestroy ) "(" PROMEKI_STRINGIFY_ARGS( ObjectBase * ) ")" |
| static SignalMeta | aboutToDestroySignalMeta = SignalMeta(metaInfo(), aboutToDestroySignalName) |
Base class for all pipeline processing nodes.
MediaNode is the ObjectBase-derived base class for all processing nodes in the media pipeline framework. It manages input and output ports, lifecycle state transitions, threading policy, and provides a uniform property interface for future JSON serialization.
Concrete node subclasses override the virtual lifecycle methods (configure, start, stop, process, starvation) to implement their specific processing logic.
| MediaNode::MediaNode | ( | ObjectBase * | parent = nullptr | ) |
Constructs a MediaNode.
| parent | Optional parent object. |
|
protected |
Adds an input port to this node.
| port | The port to add. |
|
protected |
Adds an output port to this node.
| port | The port to add. |
Validates ports and allocates resources.
Transitions the node from Idle to Configured on success.
Reimplemented in FrameDemuxNode, JpegEncoderNode, RtpAudioSinkNode, RtpVideoSinkNode, TestPatternNode, and TimecodeOverlayNode.
Creates a node by registered type name.
| typeName | The type name to instantiate. |
|
protected |
Delivers a frame to all outgoing links on all output ports.
Convenience for single-output nodes.
| frame | The frame to deliver. |
|
protected |
Delivers a frame to all outgoing links on the given output port.
Source nodes call this from process() to push frames downstream.
| portIndex | The output port index. |
| frame | The frame to deliver. |
|
protected |
Dequeues a frame from this node's input queue.
Returns a null Ptr if the queue is empty. Subclasses call this from process() to pull input frames.
Emits an Error-severity message.
Also transitions the node to ErrorState and emits errorOccurred.
| message | The error text. |
|
protected |
Emits a message with the given severity and text.
Auto-populates timestamp and node pointer. Subclasses call this to report events during processing.
| severity | The message severity. |
| message | The message text. |
| frameNumber | The frame number this relates to (0 if not frame-specific). |
Emits a Warning-severity message.
| message | The warning text. |
|
protected |
Enqueues a frame into this node's input queue.
Called by the pipeline to deliver frames from upstream nodes.
| frame | The frame to enqueue. |
Returns additional node-specific statistics.
Override in concrete nodes to expose custom statistics (e.g., "packetsSent", "bytesSent" for RTP nodes).
Reimplemented in JpegEncoderNode, RtpAudioSinkNode, RtpVideoSinkNode, and TestPatternNode.
| MediaPort::Ptr MediaNode::inputPort | ( | const String & | name | ) | const |
Returns the input port with the given name.
| name | The port name. |
| MediaPort::Ptr MediaNode::inputPort | ( | int | index | ) | const |
Returns the input port at the given index.
| index | Zero-based port index. |
| MediaPort::Ptr MediaNode::outputPort | ( | const String & | name | ) | const |
Returns the output port with the given name.
| name | The port name. |
| MediaPort::Ptr MediaNode::outputPort | ( | int | index | ) | const |
Returns the output port at the given index.
| index | Zero-based port index. |
Processes one cycle of data.
Pure virtual — must be implemented by concrete node subclasses.
Implemented in FrameDemuxNode, JpegEncoderNode, RtpAudioSinkNode, RtpVideoSinkNode, TestPatternNode, and TimecodeOverlayNode.
Returns all configurable properties as key-value pairs.
Concrete nodes override this to expose their configuration.
Gets a single property value by name.
| name | The property name. |
|
protected |
Records a starvation event.
Called by the pipeline when starvation() is invoked. Increments starvationCount.
Returns the list of all registered node type names.
|
static |
Registers a node type for runtime creation.
| typeName | The unique type name string. |
| factory | A factory function that creates a new instance. |
|
inline |
Sets the ideal input queue depth.
The pipeline uses this as a hint for back-pressure.
| size | Target queue depth (default: 2). |
Sets the node name.
| name | The human-readable node name. |
Sets a property by name.
| name | The property name. |
| value | The value to set. |
Sets the node state and emits stateChanged.
| state | The new state. |
|
inline |
Sets the threading policy.
| policy | The threading policy to use. |
|
inline |
Sets a custom thread pool and switches policy to CustomPool.
| pool | The custom thread pool. |
Begins processing.
Transitions the node from Configured to Running on success.
Reimplemented in RtpAudioSinkNode, RtpVideoSinkNode, and TestPatternNode.
Called when the node's input queue is empty and data is needed.
Override for nodes that need to handle starvation (e.g. log, insert silence/black, repeat last frame). Default: no-op.
Reimplemented in RtpAudioSinkNode, and RtpVideoSinkNode.
| NodeStats MediaNode::stats | ( | ) | const |
Returns a snapshot of the node's performance statistics.
Stops processing.
Transitions the node from Running to Idle.
Reimplemented in RtpAudioSinkNode, RtpVideoSinkNode, and TestPatternNode.