OMXCodec与OMX事件处理流程
来源:互联网 发布:网络打印机怎么添加 编辑:程序博客网 时间:2024/06/05 16:35
从时序图看,首先我们要建立个OMXCodecObserver,该类是OMXCodec的内部类,在create函数中被创建,并把对应的OMXCodec加入都自己的观察范围内,具体代码如下:
framework/base/media/libstagefright/OMXCodec.cpp
sp<MediaSource> OMXCodec::Create(
const sp<IOMX> &omx,
const sp<MetaData> &meta, bool createEncoder,
const sp<MediaSource> &source,
const char *matchComponentName,
uint32_t flags) {
.....
sp<OMXCodecObserver> observer = new OMXCodecObserver;
...............
observer->setCodec(codec);
...................
}
其次初始化它的callback事件和事件的派发处理函数
OMX主要的callback事件有哪些呢?在framework/base/media/libstagefright/omx/OMXNodeInstance.cpp中的kCallbacks函数有如下定义:
// static
OMX_CALLBACKTYPE OMXNodeInstance::kCallbacks = {
&OnEvent, &OnEmptyBufferDone, &OnFillBufferDone
};
callback在哪定义呢?看framework/base/media/libstagefright/omx/OMX.cpp中的
status_t OMX::allocateNode(
.......................
OMXNodeInstance *instance = new OMXNodeInstance(this, observer);
OMX_COMPONENTTYPE *handle;
OMX_ERRORTYPE err = mMaster->makeComponentInstance(
name, &OMXNodeInstance::kCallbacks,
instance, &handle);
..............
mDispatchers.add(*node, new CallbackDispatcher(instance));
...................
}
即每个component对应一组callback事件。
这些callback由哪些函数返回呢?具体的定义在framework/base/media/libstagefright/openmax/OMX_Core.h
callback EventHandler()
#define OMX_SendCommand( \
hComponent, \
Cmd, \
nParam, \
pCmdData) \
((OMX_COMPONENTTYPE*)hComponent)->SendCommand( \
hComponent, \
Cmd, \
nParam, \
pCmdData)
EmptyBufferDone call back.
#define OMX_EmptyThisBuffer( \
hComponent, \
pBuffer) \
((OMX_COMPONENTTYPE*)hComponent)->EmptyThisBuffer( \
hComponent, \
pBuffer) /* Macro End */
FillBufferDone call back
#define OMX_FillThisBuffer( \
hComponent, \
pBuffer) \
((OMX_COMPONENTTYPE*)hComponent)->FillThisBuffer( \
hComponent, \
pBuffer) /* Macro End */
有了callback事件,如何dispatch呢?其实我们在allocateNote函数已经定义好了我们的dispatch函数
mDispatchers.add(*node, new CallbackDispatcher(instance));
有了oberser, callback event , callbackdispatcher,那么一个callback event 如何从OMX传到OMXCodec呢?下面我们以emptybuffer流程来具体看下,时序图如下:
- OMXCodec与OMX事件处理流程
- OMXCodec与OMX事件处理流程
- OMXCodec与OMX事件处理流程
- OMXCodec与OMX事件处理流程
- OMXCodec与OMX事件处理流程
- OMXCodec与OMX事件处理流程
- OMXCodec与OMX事件处理流程
- OMXCodec与OMX事件处理流程
- OMXCodec与OMX事件处理流程
- Android Multimedia框架总结(十二)CodeC部分之OMXCodec与OMX事件回调流程
- OMXCodec执行流程细节
- Andoird OMXCodec 流程分析
- OMXCodec执行流程细节
- E/OMXCodec( 255): [OMX.google.amrnb.encoder]出错问题分析
- OMXCodec,
- Android事件处理流程
- C#事件处理流程
- BREW事件处理流程
- 工厂模式(工厂方法模式,抽象工厂模式) Java
- 10.SVM的优缺点
- c/c++面试题
- Android应用之——百度地图定位返回4.9E-324的解决方案
- 十大机器学习算法之Apriori
- OMXCodec与OMX事件处理流程
- 深入分析 Java I/O 的工作机制(网络 I/O 优化)
- 转行做软件编程开发的经历
- Shader山下(三)逐帧动画
- 1
- SDUTACM 数据结构实验之链表八:Farey序列
- Android中基于Nuplayer的RTSP框架解析
- having和where 的区别
- BigPipe:高性能的“流水线技术”网页