OpenMAX端口基类在omx_base_port.c中定义。1. 端口构造和析构 端口常用的数据包括 sPortParam - 端口参数,包含: nPortIndex - 端口索引 nBufferCountActual - 端口的缓冲个数 nBufferCountMin - 端口最小缓冲个数 bEnabled - 端口使能 bPopulated - 端口活动 eDir - 端口方向(输入或输出)2. 端口方法 - Port_AllocateBuffer - Port_UseBuffer - Port_FreeBuffer - Port_DisablePort - Port_EnablePort - Port_SendBufferFunction 该函数将指定Buffer装入队列 首先进行一些必要的检查 然后在当前端口并未正在被冲刷的情况下,将Buffer装入队列并拉升队列信号量pBufferSem,同时提升bMgmtSem信号量通知缓冲处理线程; 如果当前端口正被冲刷,则如果当前端口是主动方,则进行队列操作,否则报错。 - FlushProcessingBuffers 冲刷该端口的所有缓冲 if 缓冲管理线程在等待缓冲 拉起信号量bMgmtSem if 在Pause状态 脉冲bStateSem信号量以击穿Pause态的等待 [? 如此击穿是否导致缓冲处理线程若干时间后在Pause态下发生一次循环并处理若干Buffer,这一过程是否对主动或被动方而言都是合理的?]
清零bMgmtSem信号量
[这样应该能致使缓冲处理线程在获取Buffer处阻塞,但是否合理?]
取出队列中的Buffer,对每个Buffer if 当前端口是Tunneled模式下的被动方(非Supplier) 则调用对端组件的FillThisBuffer或EmptyThisBuffer else if 当前端口是Tunneled模式下主动方 则将Buffer加回队列,由本侧(缓冲处理线程)处理该缓冲 else 调用当前端口BufferProcessedCallback通知应用层,让应用层处理Buffer。 如果当前是Tunneled模式下主动方但尚未获得其全部Buffer(队列的nelem值不等于端口的nNumAssignedBuffers)则等待直到全部获取。
总结:对于主动方,该过程就是等待集齐所有的Buffer,对于被动方就是将所有的Buffer转到对方。对于非Tunneled模式则交由应用层干预。
虽然均是将Buffer交到主动方,但在被动方调用冲刷和在主动方调用效果略有不同:如果在被动方调用,则将缓冲立即送到主动方,这样主动方收到了需要它
进行处理的Buffer可能是:输出情形:取走一部分的需要填的输出Buffer,或输入情形:填入了一部分的需要取的输入Buffer;如果主动方调
用,则当他收到被动方送来的Buffer时,这些Buffer已经是被动方处理完毕的,即:输出情形:完全取空的输出Buffer,或输入情形:完全填满
的输入Buffer。 - ReturnBufferFunction if 端口是Tunneled模式下被动方
如果它是输入口,则通过调用对应输出口组件的FillThisBuffer方法将Buffer还给对方(主动方),并要求其向Buffer中提供数据;如
果它是输出口,则通过调用对应输入口组件的EmptyThisBuffer方法返还Buffer并要求其从Buffer中排空数据。 else if 端口是Tunneled模式下主动方且不在冲刷过程中
如果它是输入口,则调用对端组件FillThisBuffer方法递送Buffer并其向Buffer中提供数据,如果失败则将该Buffer加回队列;
如果是输出口,则调用对端组件FillThisBuffer方法递送Buffer并要求其取走数据,如果失败则将该Buffer加回队列。加回队列即将
Buffer收回本处。 else if 非Tunneled模式 调用端口的BufferProcessedCallback方法通知应用层,由应用层处理数据。 else(Tunneled模式主动方且在冲刷过程中) 直接将Buffer装入队列。(冲刷过程正在等待收集缓冲) - ComponentTunnelRequest - Port_AllocateTunnelBuffer - Port_FreeTunnelBuffer
分享到:
相关推荐
openmax实现 包装了,ffmpeg,libogg,libmad,写了读取,解复用,解码,slink等组件。
raspberrypi-openmax-h264, 用 树莓派 记录 H.264 视频的OpenMAX IL示例 openmax-h264 使用 树莓派 记录 H.264 视频的OpenMAX IL示例Broadcom提供的多媒体抽象层( MMAL ) 库没有文档化,因此几乎不可能理解如何使用...
OpenMAX implementation sample for ARM
openmax IL API 手册, 希望对大家有用
This document details the Application Programming Interface (API) for the OpenMAX Integration Layer (IL). Developed as an open standard by The Khronos Group, the IL serves as a low-level interface ...
OpenMAX is a royalty-free, cross-platform API that provides abstractions for routines especially useful for computer graphics, video, and audio.
对openmax IL/AL框架的分析,android平台openmax多媒体引擎分析,一个很好的在android上移植openmax时的参考资料,同时包含介绍了Android_系统下Stagefright_Player框架,对我开发起到了一定的帮助!
OpenMax DL库的全部接口函数代码
arm-download-openmax基本实现
OpenMax权威资料,从网上收罗的,很实用哦
StageFright_和OpenMAX的運作
Android OpenMAX资料,详细阐述了Android OpenMax的架构及开发流程
OpenMax_中文介绍 AL等的介绍 感兴趣的朋友可以下来看一看
openmax_al_1_0_specs
openmax il 介绍,帮助你更好的理解openmax
android-移植调试-openMax多媒体引擎android-移植调试-openMax多媒体引擎
这个是关于openmax标准中的core与component之间的调用机制,很好的文档。
喜欢多媒体的朋友可以看一下。 gstreamer和openmax的关系。
android openmax 的实现
1, OpenMAX IL 1.0 Specification PDF 2, omx_il_v1 ZIP