【视频处理工程】5、DirectShow的事件交互和数据流控制机制

DirectShow通过事件通知(Event Notifation)机制使应用程序与Filter Graph Manager之间实现交互控制。当filter状态转换、播放完成、出错或者重绘视频窗口等时刻会发出特定事件消息,又filter graph manager处理或者转发给应用程序处理。

在Filter Graph Manager中定义了三个接口用于处理事件通知,即IMediaEventSink、IMediaEvent和IMediaEventEx。

  • IMediaEventSink:主要用于filter内部,向Filter Graph Manager发送通知消息;
  • IMediaEvent:向应用程序提供处理Filter Graph Manager发出事件的接口;
  • IMediaEventEx:IMediaEvent接口的扩展,可以使用窗口消息通知应用程序;
事件处理的大致流程:

  1. 满足一定条件时,Filter Graph中的一个filter向 Filter Graph Manager发送一条消息;
  2. Filter Graph Manager或者按照默认方法直接处理事件,或者放入事件队列中由应用程序处理;
  3. 应用程序获知有消息发出后,使用IMediaEventEx接口的方法从事件队列中读取消息并作相应处理。

DirectShow的数据流控制机制通过Filter Graph Manager的另一个接口IMediaControl实现。该接口包含了控制Filter Graph Manager的运行、暂停和停止动作。主要通过该接口的run、stop、pause函数实现。


ps:干货略少……

你可能感兴趣的:(事件,控制,directshow)