BMediaEventLooper

Constructor and Destructor

BMediaEventLooper()

explicit BMediaEventLooper::BMediaEventLooper(uint32 *apiVersion = B_BEOS_VERSION)

You need to override this function to handle your node’s initialization needs. The apiVersion argument indicates the version of the BeOS API the object was written for; you should let the default value be used—this will cause your node to inherit the API version of the BeOS version you’re compiling under.

~BMediaEventLooper()

virtual BMediaEventLooper::~BMediaEventLooper()

Calls Quit() to stop the control thread and free allocated memory.

Member Functions

CleanUpEvent()

virtual void BMediaEventLooper::CleanUpEvent(const media_timed_event *event)

Implement this function to clean up after custom events you’ve created and added to your queue. It’s called when a custom event is removed from the queue, to let you handle any special tidying-up that the event might require.

ControlLoop()

virtual void BMediaEventLooper::ControlLoop()

This function waits for messages, pops events off the queue, and calls DispatchEvent(). It’s called automatically when the BMediaEventLooper is Run().

Warning

If you choose to reimplement this function, be very careful; it’s very easy to cause Bad Things to happen.

ControlThread()

thread_id BMediaEventLooper::ControlThread()

Returns the control thread’s thread_id.

DispatchEvent()

void BMediaEventLooper::DispatchEvent(const media_timed_event *event, bigtime_t lateness, bool realTimeEvent = false)

Calls HandleEvent() to let your code handle the specified event. If your code doesn’t handle it, this function may have a default handler to process it. In general, you won’t call this function.

BMediaEventLooper compensates your performance time by adding the event latency (see SetEventLatency()) and the scheduling latency (or, for real-time events, only the scheduling latency).

It’s the control loop’s job to remove the event from the queue; this function doesn’t do that.

EventQueue(), RealTimeQueue()

BTimedEventQueue *BMediaEventLooper::EventQueue()
BTimedEventQueue *BMediaEventLooper::RealTimeQueue()

EventQueue() returns a pointer to the BTimedEventQueue used by the message handler. RealTimeQueue() returns a pointer to the BTimedEventQueue used to queue real-time events.

Note

Events in the real-time queue are handled according to their real time, while events in the normal event queue are handled based on their performance time. So the values of the time stamps on events in these two queues are handled differently; keep this in mind if you need to peek into the queues yourself.

ControlLoop()

virtual void BMediaEventLooper::ControlLoop(const media_timed_event *event, bigtime_t lateness, bool realTimeEvent = false)

Implement this function to handle incoming media events. The event argument references a media_timed_event structure that describes the event. lateness indicates how late the event is, and realTimeEvent is true if the event needs to be handled in real time.

The BMediaEventLooper will call this function from the DispatchEvent() function. It’s the control loop’s job to remove the event from the queue.

NodeRegistered()

virtual void BMediaEventLooper::NodeRegistered()

The Media Server calls this hook function after the node has been registered. This is derived from BMediaNode; BMediaEventLooper implements it to call Run() automatically when the node is registered; if you implement NodeRegistered() you should call through to BMediaNode::NodeRegistered() after you’ve done your custom operations.

Quit()

void BMediaEventLooper::Quit()

Closes the node’s control port and closes the control thread. Blocks until the control thread is gone.

Run()

void BMediaEventLooper::Run()

Spawns and runs the control thread; this is called automatically by the default NodeRegistered() implementation. If you override NodeRegistered(), be sure you call through to the default implementation, or call Run().

SchedulingLatency()

bigtime_t BMediaEventLooper::SchedulingLatency() const

Returns the scheduling latnecy, in microseconds, of the node.

SetBufferDuration(), BufferDuration()

void BMediaEventLooper::SetBufferDuration(bigtime_t duration)
bigtime_t BMediaEventLooper::BufferDuration() const

SetBufferDuration() sets the duration of the node’s buffers. The duration is clamped to 0 if it’s less than 0.

BufferDuration() returns the duration of the nodes’ buffers.

SetEventLatency(), EventLatency()

void BMediaEventLooper::SetEventLatency(bigtime_t latency)
bigtime_t BMediaEventLooper::EventLatency() const

SetEventLatency() sets the event latency. The event latency is the upstream and downstream algorithmic latency of your node—but should not include scheduling latency. This latency is taken into account by the BMediaEventLooper when deciding when to pop events off the queue for you to process.

EventLatency() returns the event latency.

SetOfflineTime(), OfflineTime()

void BMediaEventLooper::SetOfflineTime(bigtime_t offlineTime)
virtual bigtime_t BMediaEventLooper::OfflineTime()

SetOfflineTime() sets the time that OfflineTime() will return.

Augment OfflineTime() to compute the node’s current time; it’s called by the Media Kit when it’s in offline mode. Update any appropriate internal information as well, then call through to the BMediaEventLooper implementation.

SetPriority(), Priority()

void BMediaEventLooper::SetPriority(int32 priority)
int32 BMediaEventLooper::Priority() const

SetPriority() sets the control thread’s priority. Values less than 0 are clamped to 0, and values greater than 120 are clamped to 120.

Priority() returns the control thread’s current priority.

SetRunState(), RunState()

void BMediaEventLooper::SetRunState(run_state state)
run_state BMediaEventLooper::RunState() const

SetRunState() sets the node’s current run state.

RunState() returns the current run state.

Constants

run_state

Declared in: media/MediaEventLooper.h

Constant

Description

B_IN_DISTRESS.

The node is experiencing problems.

B_UNREGISTERED.

The node hasn’t been registered with the Media roster yet.

B_STOPPED.

The node isn’t running.

B_STARTED.

The node is running.

B_QUITTING.

The node’s in the process of shutting down.

B_TERMINATED.

The node has been terminated.

B_USER_RUN_STATES.

Base for user-defined run states.