Directshow Preview Only 和 Capture & Preview with a Single Graph
Directshow Preview Only and Capture & Preview with a single Graph
我有一个需要预览网络摄像头视频的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)第二复杂图,比用户同时观看和记录
相关文章:
- 如果您有Visual Studio 2017 Preview 2更新,您可以为我提供include/iosfwd文件吗?
- C++/WinRT,Windows SDK 17134的一部分与Visual Studio 15.8 Preview 3
- 如何使用 Win32 API 从 Excel VBA 中的非"Single-Threaded Apartment"线程调用 InternetGetProxyInfo
- CUDA 内核"Only a single pack parameter is allowed"解决方法?
- 是否有一个术语来表示"single mutex deadlock"(具有非递归互斥锁的死锁类型情况)?
- memory_order_seq_cst操作的"happens before"关系和"precedes in a single total order"关系有什么区别?
- Qt:初始化存储库中止与"fatal: Needed a single revision"
- 如何在任务栏上设置星号看起来像Skype Preview应用程序
- "single assignment"与"no early return"
- OpenCV SVM 在火车上抛出异常,"Bad argument (There is only a single class)"
- Directshow Preview Only 和 Capture & Preview with a Single Graph
- 使用 -g 选项编译,但"Single stepping until exit from function main, which has no line number information"
- 如何使用静态库创建QT控制台应用程序的Single exe,
- 来自SINGLE校准相机的2个连续帧的视差图.有可能吗
- Visual Studio 11 Developer Preview中的BitScanForward64问题
- Visual Studio 11 Developer Preview的开发适用性
- 全局变量和"single" "things"的全局变量 ?
- 如何使用Windows命令行上的命令行将C++文件编译为SINGLE文件
- "single allocation"对提升意味着什么:make_shared
- 在简单的图形编辑器中绘制"preview"线