Bug 1434439 - Avoid stray capability requirement in StartCapture failure case.
MozReview-Commit-ID: BEgnoOizMjt
--- 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;
}