summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/moz-patch-stack/0101.patch
blob: 95fe9665c6414f6859069a95580ac8092cfaff9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
From: Andreas Pehrson <apehrson@mozilla.com>
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 <ilnik@webrtc.org>
    Reviewed-by: Per Kjellander <perkj@webrtc.org>
    Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org>
    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<int>(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