Bug 1434439 - Avoid stray capability requirement in StartCapture failure case. draft
authorJan-Ivar Bruaroey <jib@mozilla.com>
Tue, 27 Feb 2018 14:04:57 -0500
changeset 763384 b4d2b4d82e02918e4c91e8a8dfa1360dd0104073
parent 760185 580d833df9c44acec686a9fb88b5f27e9d29f68d
push id101444
push userjbruaroey@mozilla.com
push dateMon, 05 Mar 2018 22:20:06 +0000
bugs1434439
milestone60.0a1
Bug 1434439 - Avoid stray capability requirement in StartCapture failure case. MozReview-Commit-ID: BEgnoOizMjt
dom/media/systemservices/CamerasParent.cpp
--- a/dom/media/systemservices/CamerasParent.cpp
+++ b/dom/media/systemservices/CamerasParent.cpp
@@ -881,21 +881,22 @@ CamerasParent::RecvStartCapture(const Ca
           capability.width = ipcCaps.width();
           capability.height = ipcCaps.height();
           capability.maxFPS = ipcCaps.maxFPS();
           capability.expectedCaptureDelay = ipcCaps.expectedCaptureDelay();
           capability.rawType = static_cast<webrtc::RawVideoType>(ipcCaps.rawType());
           capability.codecType = static_cast<webrtc::VideoCodecType>(ipcCaps.codecType());
           capability.interlaced = ipcCaps.interlaced();
 
-#ifdef DEBUG
-          auto deviceUniqueID = sDeviceUniqueIDs.find(capnum);
-          MOZ_ASSERT(deviceUniqueID == sDeviceUniqueIDs.end());
-#endif
+          MOZ_DIAGNOSTIC_ASSERT(sDeviceUniqueIDs.find(capnum) ==
+                                sDeviceUniqueIDs.end());
           sDeviceUniqueIDs.emplace(capnum, cap.VideoCapture()->CurrentDeviceName());
+
+          MOZ_DIAGNOSTIC_ASSERT(sAllRequestedCapabilities.find(capnum) ==
+                                sAllRequestedCapabilities.end());
           sAllRequestedCapabilities.emplace(capnum, capability);
 
           if (aCapEngine == CameraEngine) {
             for (const auto &it : sDeviceUniqueIDs) {
               if (strcmp(it.second, cap.VideoCapture()->CurrentDeviceName()) == 0) {
                 capability.width = std::max(
                   capability.width, sAllRequestedCapabilities[it.first].width);
                 capability.height = std::max(
@@ -945,16 +946,19 @@ CamerasParent::RecvStartCapture(const Ca
             }
           }
 
           error = cap.VideoCapture()->StartCapture(capability);
 
           if (!error) {
             cap.VideoCapture()->RegisterCaptureDataCallback(
               static_cast<rtc::VideoSinkInterface<webrtc::VideoFrame>*>(*cbh));
+          } else {
+            sDeviceUniqueIDs.erase(capnum);
+            sAllRequestedCapabilities.erase(capnum);
           }
         });
       }
       RefPtr<nsIRunnable> ipc_runnable =
         media::NewRunnableFrom([self, error]() -> nsresult {
           if (!self->mChildIsAlive) {
             return NS_ERROR_FAILURE;
           }