BMediaEventLooper¶
The BMediaEventLooper class provides a control thread that
automatically queues received media events and calls the
HandleEvent() function you implement to
process them as necessary. This takes a lot of the drudgery out of writing
nodes:
You don’t have to write a service thread to receive and process incoming messages;
BMediaEventLooperdoes this for you (much like aBLooper, hence the similarity in names).You don’t have to write code to queue up events until it’s time to handle them, since
BMediaEventLoopermaintains aBTimedEventQueuefor you. Just push events onto the queue as you receive them and theBMediaEventLooperpops them off for you at the appropriate times and asks you to handle them.If all your node needs to do is know when
Start(),Stop(), andSeek()requests come due, your node doesn’t even have to override these functions—BMediaEventLooperautomatically intercepts them and pushes them onto the queue for you.The
BTimedEventQueueemployed byBMediaEventLooperautomatically provides support for queueing multiple start, stop, and seek events.
BMediaEventLooper maintains two queues: one for real-time
events, and one for normal events. Events in the real-time queue are
handled according to their real time, while events in the other 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.
Implementing a Node (the Easy Way)¶
Although BMediaEventLooper does take away a lot of the
complicated node construction work, there’s still work to be done. There
are still plenty of hooks you have to implement yourself (which ones,
exactly, depend on whether you’re a producer or a consumer).
You can study a specific example of how to implement a node using
BMediaEventLooper by reading “A BMediaEventLooper Example”.