From ad69ca73d41c5e7c3da0f72e70f8806c6e2d67d9 Mon Sep 17 00:00:00 2001 From: "braveyao@webrtc.org" Date: Wed, 25 Jul 2012 03:02:15 +0000 Subject: [PATCH] webrtc crashes with virtual cameras on Windows. In the market, there are several Virtual Camera apps which could allow multi-apps share one camera at same time. We have several reports that at least two of them would cause Webrtc crash because of 0 maxFPS read from their drivers. Finally I can reproduce and verify with one of them, 'Asus Virtual Camera' as in feedback. So I submit the fix as we discussed before. BUG = Issue 464 & 675 TEST = ViE_Win_Test with virtual camera app installed Review URL: https://webrtc-codereview.appspot.com/698005 git-svn-id: http://webrtc.googlecode.com/svn/trunk@2526 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../video_capture/main/source/Windows/sink_filter_windows.cc | 4 +++- .../main/source/Windows/video_capture_windows.cc | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/modules/video_capture/main/source/Windows/sink_filter_windows.cc b/src/modules/video_capture/main/source/Windows/sink_filter_windows.cc index b91526e1d1..ec9d2bf1c4 100644 --- a/src/modules/video_capture/main/source/Windows/sink_filter_windows.cc +++ b/src/modules/video_capture/main/source/Windows/sink_filter_windows.cc @@ -75,7 +75,9 @@ CaptureInputPin::GetMediaType (IN int iPosition, OUT CMediaType * pmt) pvi->bmiHeader.biPlanes = 1; pvi->bmiHeader.biClrImportant = 0; pvi->bmiHeader.biClrUsed = 0; - pvi->AvgTimePerFrame = 10000000/_requestedCapability.maxFPS; + if (_requestedCapability.maxFPS != 0) { + pvi->AvgTimePerFrame = 10000000/_requestedCapability.maxFPS; + } SetRectEmpty(&(pvi->rcSource)); // we want the whole image area rendered. SetRectEmpty(&(pvi->rcTarget)); // no particular destination rectangle diff --git a/src/modules/video_capture/main/source/Windows/video_capture_windows.cc b/src/modules/video_capture/main/source/Windows/video_capture_windows.cc index d3477347d6..4c2d52419e 100644 --- a/src/modules/video_capture/main/source/Windows/video_capture_windows.cc +++ b/src/modules/video_capture/main/source/Windows/video_capture_windows.cc @@ -229,6 +229,9 @@ WebRtc_Word32 VideoCaptureDS::SetCameraOutput( if (capability.maxFPS > requestedCapability.maxFPS) { capability.maxFPS = requestedCapability.maxFPS; + } else if (capability.maxFPS <= 0) + { + capability.maxFPS = 30; } // Store the new expected capture delay _captureDelay = capability.expectedCaptureDelay;