打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
OpenMAX大意(六)

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返还




本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
OpenMAX Call Sequences
设备管理(五)
Cache与Buffer区别
VHDL程序实体
射频混频器介绍
PLC输入和输出端口怎么接线?老电工对着电路图一根根教你接PLC!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服