前言:上篇文中分析到AwesomePlayer到OMX服务,
曾介绍到,OMX服务主要完成三个任务: NodeInstance列表的管理,NodeInstance的操作, 事件的处理。
最后这个事件处理就是今天放大看的内容。要一步一步一Codec,事件传递必不可少,
看下今天的Agenda:
(1)OMXCodec与OMX callback事件的处理时序图
(2)如何从OMX中dispatch到OMXCodec(附时序图)
(3)缓冲区更新过程
(4)onMessage回调
OMXCodec与OMX callback事件的处理时序图OMXCodec与OMX callback事件的处理时序图:
从时序图看,
首先我们要建立个OMXCodecObserver,该类是OMXCodec的内部类,在create函数中被创建,并把对应的OMXCodec加入都自己的观察范围内,
具体代码如下:
framework/base/media/libstagefright/OMXCodec.cpp
其次初始化它的callback事件和事件的派发处理函数
OMX主要的callback事件有哪些呢?
在framework/base/media/libstagefright/omx/OMXNodeInstance.cpp中的kCallbacks函数有如下定义:

callback在哪定义呢?
看framework/base/media/libstagefright/omx/OMX.cpp中的
即每个component对应一组callback事件。
这些callback由哪些函数返回呢?具体的定义在framework/base/media/libstagefright/openmax/OMX_Core.h
有了callback事件,如何dispatch呢?其实我们在allocateNote函数已经定义好了我们的dispatch函数
mDispatchers.add(*node, new CallbackDispatcher(instance));
待更新。。。。
本文深入探讨了OMXCodec中事件处理的机制,包括OMXcallback事件的时序图,事件从OMX到OMXCodec的分发过程,缓冲区更新流程及onMessage回调的细节。
3万+

被折叠的 条评论
为什么被折叠?



