From: Andreas Pehrson Date: Wed, 10 May 2023 08:01:00 +0000 Subject: Bug 1828065 - cherry-pick upstream libwebrtc commit 6fc1ae58be. r=webrtc-reviewers,mjf Upstream commit: https://webrtc.googlesource.com/src/+/6fc1ae58be7cbb61ad0431d90eb7a7dc333de2f2 In DeviceInfoDS check that out vars were set Bug: chromium:1441804 Change-Id: Id07cb61519315d77c2d7cdab1053efaaf7473e1a Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/304060 Reviewed-by: Ilya Nikolaevskiy Reviewed-by: Per Kjellander Commit-Queue: Ilya Nikolaevskiy Cr-Commit-Position: refs/heads/main@{#39982} Differential Revision: https://phabricator.services.mozilla.com/D177236 Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/60d381b6016ae5af0181b44c6a31b41eab094793 --- modules/video_capture/windows/device_info_ds.cc | 13 +++++++------ modules/video_capture/windows/help_functions_ds.cc | 3 +++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/modules/video_capture/windows/device_info_ds.cc b/modules/video_capture/windows/device_info_ds.cc index 6b4c57d01e..2c192fe4f6 100644 --- a/modules/video_capture/windows/device_info_ds.cc +++ b/modules/video_capture/windows/device_info_ds.cc @@ -505,9 +505,9 @@ int32_t DeviceInfoDS::CreateCapabilityMap(const char* deviceUniqueIdUTF8) } if (hrVC == S_OK) { - LONGLONG* frameDurationList; - LONGLONG maxFPS; - long listSize; + LONGLONG* frameDurationList = NULL; + LONGLONG maxFPS = 0; + long listSize = 0; SIZE size; size.cx = capability.width; size.cy = capability.height; @@ -520,9 +520,10 @@ int32_t DeviceInfoDS::CreateCapabilityMap(const char* deviceUniqueIdUTF8) hrVC = videoControlConfig->GetFrameRateList( outputCapturePin, tmp, size, &listSize, &frameDurationList); - // On some odd cameras, you may get a 0 for duration. - // GetMaxOfFrameArray returns the lowest duration (highest FPS) - if (hrVC == S_OK && listSize > 0 && + // On some odd cameras, you may get a 0 for duration. Some others may + // not update the out vars. GetMaxOfFrameArray returns the lowest + // duration (highest FPS), or 0 if there was no list with elements. + if (hrVC == S_OK && 0 != (maxFPS = GetMaxOfFrameArray(frameDurationList, listSize))) { capability.maxFPS = static_cast(10000000 / maxFPS); capability.supportFrameRateControl = true; diff --git a/modules/video_capture/windows/help_functions_ds.cc b/modules/video_capture/windows/help_functions_ds.cc index b767726107..47fecfe4a1 100644 --- a/modules/video_capture/windows/help_functions_ds.cc +++ b/modules/video_capture/windows/help_functions_ds.cc @@ -21,6 +21,9 @@ namespace webrtc { namespace videocapturemodule { // This returns minimum :), which will give max frame rate... LONGLONG GetMaxOfFrameArray(LONGLONG* maxFps, long size) { + if (!maxFps || size <= 0) { + return 0; + } LONGLONG maxFPS = maxFps[0]; for (int i = 0; i < size; i++) { if (maxFPS > maxFps[i]) -- 2.34.1