【发布时间】:2012-06-04 11:58:56
【问题描述】:
我在我的应用程序中使用 DirectShow 从网络摄像头捕获视频。我在使用相机预览和捕捉 1080P 视频时遇到问题。例如:罗技的 HD Pro Webcam C910 摄像头。 1080P 视频预览非常生涩,没有观察到高清清晰度。我可以看到枚举的设备名称是“USB Video Device”
今天我们在这些 XP 机器上安装了罗技网络摄像头软件。在该应用程序中,我们可以毫无抖动地观看 1080P 视频。此外,我们在罗技应用程序中录制了 1080P 视频,并以高质量观看了它们。
但是当我测试我的应用程序时,
我可以看到枚举的设备名称已更改为“Logitech Pro Webcam C910”,而不是之前的“USB Video Device”。
-
我的应用程序占用的 CPU 是 20%,但进程“SYSTEM”占用了 60%+,整个 CPU 围绕 100% 运行
虽然视频质量已经有了很大的提高,但抖动仍然存在,可能是由于 100% 的 CPU。
当我关闭我的应用程序时,“系统”进程的高 CPU 利用率消失了。
关于我的应用程序 - 它使用 ICaptureGraphBuilder2::RenderStream 创建预览和捕获流。
在 Capture Stream 中,我将相机过滤器连接到 NULL 渲染器,并将样本采集器作为中间过滤器。
在预览流中,我有
g_pBuild->RenderStream(&PIN_CATEGORY_PREVIEW,&MEDIATYPE_Video,cam,NULL,NULL);
预览显示在使用 IVideoWindow 接口指定的窗口上。我使用以下
g_vidWin->put_Owner((OAHWND)(HWND)hWnd);
g_vidWin->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS);
g_vidWin->put_MessageDrain((OAHWND)hWnd);
我尝试将帧速率设置为不同的值(AvgTimePerFrame = 500000 (20 fps) 和 666667(15 fps) 等。
但是所有的试验,仍然给出相同的结果。清晰度变得更加清晰,但仍然存在一些混蛋,由于“系统”的利用率超过 60%,CPU 几乎是 100%。当我关闭我的视频应用程序时,“系统”的使用率又回到 1-2%。
非常欢迎对此提供任何帮助。
提前致谢,
【问题讨论】:
-
也许更多信息会有所帮助。运行 Logitech 应用程序时,SYSTEM 对 CPU 的消耗是多少?也许这只是设备驱动程序用尽了你的周期。我不确定更改 AvgTimePerFrame 会影响相机的实际帧速率。你在哪里设置?我没有 C910,但我有几台其他罗技相机,它们的帧速率似乎受分辨率和曝光设置的控制。
-
当 Logitech 应用程序运行时,SYSTEM 使用的 CPU 不超过 2% 我的印象是更改 AvgTimePerFrame 会更改帧速率。你能告诉我DirectShow设置/界面方法的确切过程,可以设置帧率吗?
-
对于我的罗技,我知道影响帧速率的唯一方法是更改分辨率和曝光设置。相机自行决定要使用的速率。我不确定,但我认为 VIDEOINFO 结构中的平均速率是您的源过滤器设置的,用于向其他过滤器建议他们应该预期的速率。它不会改变源过滤器自身的速率;它可以帮助其他过滤器知道会发生什么。您的相机将以它想要的任何速率抽取样本。见msdn.microsoft.com/en-us/library/windows/desktop/…
-
谢谢史蒂文斯。顺便问一下,您对 Windows XP 中的“SYSTEM”进程过度使用 CPU 有任何指示吗?哪个论坛将是理想的场所?罗技论坛?
-
不,这很令人费解。您的应用程序中还发生了什么?如果您使用您在 graphedt.exe 中提到的过滤器构建图表,您会看到这种 CPU 消耗吗?
标签: directshow preview frame-rate