2012-08-16 78 views
1

我有一个需要预览视频摄像头一个DirectShow应用程序,而当用户点击“录音”,它需要开始捕捉视频到一个文件中。Directshow的预览只和捕捉和预览与单个图形

为此我创建单个捕获图形,与连接到连接到AVI_MUX滤波器保存到文件渲染滤波器和捕获销PREVIEW销。

它看起来是这样的:

     /[PREVIEW PIN]-->[VIDEO_RENDERER]--->[SCREEN] 
[VIDEO CAPTURE FILTER]/
         \ 
         \[CAPTURE PIN]--->[AVI_MUX]--->[FILE WRITER] 

当我在图表上调用run()的视频显示在屏幕上,并得到正确保存到文件中。

我的问题是,我怎么只能运行图的预览pin部分没有CAPTURE_PIN部分。

我最初的想法是手动启动/停止相应的过滤器,但后来我看了一下微软的DirectShow AMCAP样品,他们实际上创建两个单独的图表。一个用于预览,另一个用于捕获。如果用户想要预览视频,他们会销毁捕获图并创建预览图。如果用户想要录制视频,他们会破坏预览图并创建捕获图。

这似乎有点浪费,尤其是因为单个图形已经包含PREVIEW和CAPTURE引脚。这里有什么正确的方法?

回答

1

您可以尝试两种不同的图表之间切换:

1)首先简单的图,不是用户只是看

2)其次复杂的图形,比用户观看,并同时记录

+0

这是什么最后我最终做了。看起来像是浪费。 – Eternal21 2012-08-18 11:59:26

2

过滤器图可以改变状态作为一个整体,你不能单独和单独运行它的部分。

最简单的方法是分别建立预览图,当你需要开始录制,停止/关闭预览图,重建新的捕获图形。这肯定会对“开始记录”命令有一定的延迟。

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