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;
BMediaEventLooper
does 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
BMediaEventLooper
maintains aBTimedEventQueue
for you. Just push events onto the queue as you receive them and theBMediaEventLooper
pops 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—BMediaEventLooper
automatically intercepts them and pushes them onto the queue for you.The
BTimedEventQueue
employed byBMediaEventLooper
automatically 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”.