我在我的应用程序中使用 DirectShow 从网络摄像头捕获视频。我在使用相机预览和捕捉 1080P 视频时遇到问题。例如:罗技的 HD Pro Webcam C910 摄像头。1080P 视频预览非常生涩,没有观察到高清清晰度。我可以看到枚举的设备名称是“USB 视频设备”
今天我们在这些 XP 机器上安装了罗技网络摄像头软件。在该应用程序中,我们可以毫无抖动地观看 1080P 视频。此外,我们在罗技应用程序中录制了 1080P 视频,并以高质量观看了它们。
但是当我测试我的应用程序时,
我可以看到枚举的设备名称已更改为“Logitech Pro Webcam C910”,而不是之前的“USB 视频设备”。
我的应用程序占用的 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%。
非常欢迎对此提供任何帮助。
提前致谢,