gpt4 book ai didi

c++ - Directshow Preview Only 和 Capture & Preview with a single Graph

转载 作者:行者123 更新时间:2023-11-30 03:00:30 26 4
gpt4 key购买 nike

我有一个需要预览网络摄像头视频的 Directshow 应用程序,当用户单击“录制”时,它需要开始将视频捕获到文件中。

为此,我创建了一个 Capture Graph,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 引脚。什么是正确的方法?

最佳答案

Filter graph 可以作为一个整体改变状态,你不能单独单独运行它的一部分。

最简单的解决方案是单独构建预览图,当您需要开始录制时,停止/关闭预览图并重建新的捕获图。这肯定会涉及到响应“开始记录”命令的一定延迟。

另一种选择是使用多个图表,在两者之间共享数据,在代码中或使用 "bridging" ,并分别开始/停止图形。

关于c++ - Directshow Preview Only 和 Capture & Preview with a single Graph,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11989883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com