我有一个需要预览网络摄像头视频的 Directshow 应用程序,当用户单击“录制”时,它需要开始将视频捕获到文件中。
为此,我创建了一个捕获图,其中 PREVIEW 引脚连接到 RENDER 过滤器,CAPTURE 引脚连接到保存到文件的 AVI_MUX 过滤器。
它看起来像这样:
/[PREVIEW PIN]-->[VIDEO_RENDERER]--->[SCREEN]
[VIDEO CAPTURE FILTER] /
\
\[CAPTURE PIN]--->[AVI_MUX]--->[FILE WRITER]
当我在图表上调用 Run() 时,视频会显示在屏幕上并正确保存到文件中。
我的问题是,我怎样才能只运行图表的 PREVIEW PIN 部分而没有 CAPTURE_PIN 部分。
我最初的想法是手动启动/停止相应的过滤器,但后来我查看了 Microsoft 的 Directshow amcap 示例,它们实际上创建了两个单独的图表。一个用于预览,一个用于捕获。如果用户想要预览视频,他们会破坏捕获图并创建预览图。如果用户想要录制视频,他们会破坏预览图并创建捕获图。
这似乎有点浪费,特别是因为单个图表已经包含 PREVIEW 和 CAPTURE 引脚。这里的正确方法是什么?