事件通知代码

[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayerIMFMediaEngine音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

本部分列出了不特定于 DVD 的 DirectShow 事件。 有关特定于 DVD 的事件,请参阅 DVD 事件通知代码

筛选器通过调用 IMediaEventSink::Notify 方法将事件发送到 Filter Graph 管理器。 Filter Graph 管理器处理应用程序的一些事件和队列。 应用程序通过调用 IMediaEvent::GetEvent 方法检索它们。

在以下各节中,每个条目都列出了事件代码、事件参数的含义以及 Filter Graph Manager 针对事件的默认操作(如果有)。 若要替代默认操作,请调用 IMediaEvent::CancelDefaultHandling。 事件代码在头文件 Evcode.h 和 Audevcod.h 中定义。 如果没有默认操作,Filter Graph 管理器会自动通过事件队列) 将事件转发到应用程序 (。

自定义事件

筛选器可以使用EC_USER及更高范围内的事件代码定义自定义事件。 Filter Graph 管理器会将这些内容直接放在事件队列中。 但是,以下注意事项适用:

  • Filter Graph 管理器无法使用普通 的 IMediaEvent::FreeEventParams 方法释放事件参数。 应用程序必须释放与事件参数关联的任何内存或引用计数。
  • 筛选器应仅从准备处理事件的应用程序内发送事件。 (应用程序可以在筛选器上设置自定义属性,以指示发送 event 是安全的。)
事件通知代码 说明
EC_ACTIVATE 正在激活或停用视频窗口。
EC_BANDWIDTHCHANGE 不支持。
EC_BUFFERING_DATA 该图正在缓冲数据,或已停止缓冲数据。
EC_BUILT 生成图形后,由视频控件发送。 未转发到应用程序。
EC_CLOCK_CHANGED 引用时钟已更改。
EC_CLOCK_UNSET 时钟提供程序已断开连接。
EC_CODECAPI_EVENT 由编码器发送以向编码事件发出信号。
EC_COMPLETE 特定流中的所有数据都已呈现。
EC_CONTENTPROPERTY_CHANGED 不支持。
EC_DEVICE_LOST 即插即用设备已删除或再次可用。
EC_DISPLAY_CHANGED 显示模式已更改。
EC_END_OF_SEGMENT 已到达段的末尾。
EC_EOS_SOON 不支持。
EC_ERROR_STILLPLAYING 用于运行图形的异步命令失败。
EC_ERRORABORT 操作因错误而中止。
EC_ERRORABORTEX 操作因错误而中止。
EC_EXTDEVICE_MODE_CHANGE 不支持。
EC_FILE_CLOSED 源文件因意外事件而关闭。
EC_FULLSCREEN_LOST 视频呈现器正在退出全屏模式。
EC_GRAPH_CHANGED 筛选器图已更改。
EC_LENGTH_CHANGED 源的长度已更改。
EC_LOADSTATUS 打开网络文件时通知应用程序进度。
EC_MARKER_HIT 不支持。
EC_NEED_RESTART 筛选器正在请求重启图形。
EC_NEW_PIN 不支持。
EC_NOTIFY_WINDOW 通知视频呈现器窗口的筛选器。
EC_OLE_EVENT 筛选器正在向应用程序传递文本字符串。
EC_OPENING_FILE 图形正在打开文件,或已完成文件打开。
EC_PALETTE_CHANGED 视频调色板已更改。
EC_PAUSED 暂停请求已完成。
EC_PLEASE_REOPEN 源文件已更改。
EC_PREPROCESS_COMPLETE WM ASF 编写器筛选器在完成多通道编码的预处理时发送。
EC_PROCESSING_LATENCY 指示组件处理每个样本所花费的时间量。
EC_QUALITY_CHANGE 为了进行质量控制,该图正在删除样本。
EC_RENDER_FINISHED 不支持。
EC_REPAINT 视频呈现器需要重绘。
EC_SAMPLE_LATENCY 指定组件在处理示例时落后于计划的时间。
EC_SAMPLE_NEEDED 从增强的视频呈现器 (EVR) 筛选器请求新的输入示例。
EC_SCRUB_TIME 指定最新帧步骤的时间戳。
EC_SEGMENT_STARTED 新段已启动。
EC_SHUTTING_DOWN 筛选器图在被销毁之前正在关闭。
EC_SNDDEV_IN_ERROR 音频捕获筛选器中发生设备错误。
EC_SNDDEV_OUT_ERROR 音频呈现器筛选器中发生设备错误。
EC_STARVATION 筛选器未接收足够的数据。
EC_STATE_CHANGE 筛选器图的状态已更改。
EC_STATUS 包含两个任意状态字符串。
EC_STEP_COMPLETE 执行帧步进的筛选器已逐步减少指定的帧数。
EC_STREAM_CONTROL_STARTED 流控制启动命令已生效。
EC_STREAM_CONTROL_STOPPED 流控制停止命令已生效。
EC_STREAM_ERROR_STILLPLAYING 流中发生错误。 流仍在播放。
EC_STREAM_ERROR_STOPPED 流因错误而停止。
EC_TIMECODE_AVAILABLE 不支持。
EC_UNBUILT 在图形被拆毁时由视频控件发送。 未转发到应用程序。
EC_USERABORT 用户已终止播放。
EC_VIDEO_SIZE_CHANGED 本机视频大小已更改。
EC_VIDEOFRAMEREADY 视频帧已准备好显示。
EC_VMR_RECONNECTION_FAILED VMR-7 和 VMR-9 在无法接受来自上游解码器的动态格式更改请求时发送。
EC_VMR_RENDERDEVICE_SET 在 VMR 选择其呈现机制时发送。
EC_VMR_SURFACE_FLIPPED 当 VMR-7 的分配器演示者在呈现的图面上调用 DirectDraw Flip 方法时发送。
EC_WINDOW_DESTROYED 视频呈现器已销毁或从图形中删除。
EC_WMT_EVENT WM ASF 读取器筛选器在读取受数字版权管理保护的 ASF 文件时发送 (DRM) 。
EC_WMT_INDEX_EVENT 当应用程序使用 WM ASF 编写器为 Windows Media 视频文件编制索引时发送。

 

常量和 GUID

DirectShow 中的事件通知