Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Directshow仅预览和捕获&;使用单个图形预览_C++_Video_Directshow_Capture_Preview - Fatal编程技术网

C++ Directshow仅预览和捕获&;使用单个图形预览

C++ Directshow仅预览和捕获&;使用单个图形预览,c++,video,directshow,capture,preview,C++,Video,Directshow,Capture,Preview,我有一个Directshow应用程序,需要预览网络摄像头视频,当用户单击“录制”时,它需要开始将视频捕获到文件中 为此,我创建了一个捕获图,预览管脚连接到渲染过滤器,捕获管脚连接到保存到文件的AVI_MUX过滤器 它看起来像这样: /[PREVIEW PIN]-->[VIDEO_RENDERER]--->[SCREEN] [VIDEO CAPTURE FILTER] / \

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

为此,我创建了一个捕获图,预览管脚连接到渲染过滤器,捕获管脚连接到保存到文件的AVI_MUX过滤器

它看起来像这样:

                        /[PREVIEW PIN]-->[VIDEO_RENDERER]--->[SCREEN]
[VIDEO CAPTURE FILTER] /
                       \
                        \[CAPTURE PIN]--->[AVI_MUX]--->[FILE WRITER]
当我在图形上调用Run()时,视频会显示在屏幕上并正确保存到文件中

我的问题是,如何只运行图的预览PIN部分而不运行CAPTURE_PIN部分

我最初的想法是手动启动/停止各个过滤器,但后来我查看了Microsoft的Directshow amcap示例,它们实际上创建了两个独立的图形。一个用于预览,一个用于捕获。如果用户想要预览视频,他们会破坏捕获图并创建预览图。如果用户想要录制视频,他们会破坏预览图并创建捕获图


这似乎有点浪费,特别是因为单个图形已经包含预览和捕获引脚。这里的正确方法是什么?

过滤器图形可以作为一个整体更改状态,您不能单独或单独运行其部分

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


另一种选择是使用多个图形,在两个图形之间共享数据,分别使用代码或启动/停止图形。

您可以尝试在两个不同的图形之间切换:

1) 第一个简单的图形,用户只需观看即可


2) 第二个复杂的图形,比用户同时观看和记录要复杂得多

这就是我最后要做的。看起来像是浪费。