OpenMAX过滤器OpenMAX过滤器基类由OpenMAX直接继承,在omx_base_port.c中定义。Filter组件含输入输出各一个端口。 Filter组件主要定义了BufferMgmtFunction方法,即Filter组件进行数据处理的通常行为。 函数主体是一个在OMX_StateIdle、OMX_StateExecuting或OMX_StatePause状态下,或OMX_TransStateLoadedToIdle转换过程中执行的死循环。 if 输入或输出端口正在被冲刷 等待冲刷完毕 if 需要输入缓冲且该缓冲队列信号量pInputSem非正(输入缓冲不可得),且当前状态并非Loaded或Invalid 阻塞本线程在bMgmtSem,等待情况发生变化 if 组件状态转为Loaded或Invalid 退出循环 if 需要输出缓冲且该缓冲队列信号量pOutputSem非正(输入缓冲不可得),且当前状态并非Loaded或Invalid 阻塞本线程在bMgmtSem,等待情况发生变化 if 组件状态转为Loaded或Invalid 退出循环 if 需要输入缓冲且缓冲队列信号量pInputSem为正 尝试从队列获取输入缓冲 if 需要输出缓冲且缓冲队列信号量pOutputSem为正 尝试从队列获取输出缓冲 if 输入和输出端口的Buffer都已得到 Mark处理,以及Mark事件。 输出缓冲的TimeStamp同步到输入缓冲。 调用BufferMgmtCallback回调函数进行Filter处理。 if 输入缓冲消耗殆尽(输入缓冲nFlags的EOS位置位) 将isInputBufferNeeded置为TRUE,表示后续需要获取输入缓冲。 if 输入码流完毕 将输入缓冲的nFlags赋给输出缓冲,并将输入缓冲的nFlags置为0 事件通知应用层 if 组件处于Pause态,并且其端口并未处于冲刷状态 阻塞在bStateSem信号量上(该信号量在Pause切换到Idle或Executing过程中脉冲) if 输出码流非空或者输入殆尽 // 返还输出缓冲 调用ReturnBufferFunction返还输出端口缓冲pOutputBuffer并将isOutputBufferNeeded置为TRUE,表示将输出缓冲送给后级,并后续需要再获取输出缓冲。 if 组件处于Pause态,并且其端口并未处于冲刷状态 阻塞在bStateSem信号量上(该信号量在Pause切换到Idle或Executing过程中脉冲) if 需要输入缓冲且当前输入缓冲pInputBuffer指针非空 // 返还输入缓冲 调用ReturnBufferFunction将pInputBuffer返还
|
|