forked from mirrors/gecko-dev
Bug 1694304 - cherry-pick libwebrtc 28ac56a415. r=webrtc-reviewers,jib
Upstream commit: https://webrtc.googlesource.com/src/+/28ac56a415a7513f1ebfb985659bf2012d84df3f In VideoCaptureDS::Stop() fully stop the device This makes the device light turn off when stopped. Bug: webrtc:15109 Change-Id: I1deecbc2463e2e316e01ff1f061ab6b0313c1aa1 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/302200 Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org> Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org> Reviewed-by: Per Kjellander <perkj@webrtc.org> Cr-Commit-Position: refs/heads/main@{#39953} Differential Revision: https://phabricator.services.mozilla.com/D176507
This commit is contained in:
parent
3f56c738cc
commit
9984155fe0
2 changed files with 41 additions and 10 deletions
|
|
@ -341,3 +341,36 @@ TEST_F(VideoCaptureTest, DISABLED_TestTwoCameras) {
|
|||
EXPECT_EQ(0, module2->StopCapture());
|
||||
EXPECT_EQ(0, module1->StopCapture());
|
||||
}
|
||||
|
||||
#ifdef WEBRTC_MAC
|
||||
// No VideoCaptureImpl on Mac.
|
||||
#define MAYBE_ConcurrentAccess DISABLED_ConcurrentAccess
|
||||
#else
|
||||
#define MAYBE_ConcurrentAccess ConcurrentAccess
|
||||
#endif
|
||||
TEST_F(VideoCaptureTest, MAYBE_ConcurrentAccess) {
|
||||
TestVideoCaptureCallback capture_observer1;
|
||||
rtc::scoped_refptr<VideoCaptureModule> module1(
|
||||
OpenVideoCaptureDevice(0, &capture_observer1));
|
||||
ASSERT_TRUE(module1.get() != NULL);
|
||||
VideoCaptureCapability capability;
|
||||
device_info_->GetCapability(module1->CurrentDeviceName(), 0, capability);
|
||||
capture_observer1.SetExpectedCapability(capability);
|
||||
|
||||
TestVideoCaptureCallback capture_observer2;
|
||||
rtc::scoped_refptr<VideoCaptureModule> module2(
|
||||
OpenVideoCaptureDevice(0, &capture_observer2));
|
||||
ASSERT_TRUE(module2.get() != NULL);
|
||||
capture_observer2.SetExpectedCapability(capability);
|
||||
|
||||
// Starting module1 should work.
|
||||
ASSERT_NO_FATAL_FAILURE(StartCapture(module1.get(), capability));
|
||||
EXPECT_TRUE_WAIT(capture_observer1.incoming_frames() >= 5, kTimeOut);
|
||||
|
||||
// When module1 is stopped, starting module2 for the same device should work.
|
||||
EXPECT_EQ(0, module1->StopCapture());
|
||||
ASSERT_NO_FATAL_FAILURE(StartCapture(module2.get(), capability));
|
||||
EXPECT_TRUE_WAIT(capture_observer2.incoming_frames() >= 5, kTimeOut);
|
||||
|
||||
EXPECT_EQ(0, module2->StopCapture());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -113,17 +113,9 @@ int32_t VideoCaptureDS::Init(const char* deviceUniqueIdUTF8) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
// Temporary connect here.
|
||||
// This is done so that no one else can use the capture device.
|
||||
if (SetCameraOutput(_requestedCapability) != 0) {
|
||||
return -1;
|
||||
}
|
||||
hr = _mediaControl->Pause();
|
||||
if (FAILED(hr)) {
|
||||
RTC_LOG(LS_INFO)
|
||||
<< "Failed to Pause the Capture device. Is it already occupied? " << hr;
|
||||
return -1;
|
||||
}
|
||||
RTC_LOG(LS_INFO) << "Capture device '" << deviceUniqueIdUTF8
|
||||
<< "' initialized.";
|
||||
return 0;
|
||||
|
|
@ -139,7 +131,13 @@ int32_t VideoCaptureDS::StartCapture(const VideoCaptureCapability& capability) {
|
|||
return -1;
|
||||
}
|
||||
}
|
||||
HRESULT hr = _mediaControl->Run();
|
||||
HRESULT hr = _mediaControl->Pause();
|
||||
if (FAILED(hr)) {
|
||||
RTC_LOG(LS_INFO)
|
||||
<< "Failed to Pause the Capture device. Is it already occupied? " << hr;
|
||||
return -1;
|
||||
}
|
||||
hr = _mediaControl->Run();
|
||||
if (FAILED(hr)) {
|
||||
RTC_LOG(LS_INFO) << "Failed to start the Capture device.";
|
||||
return -1;
|
||||
|
|
@ -150,7 +148,7 @@ int32_t VideoCaptureDS::StartCapture(const VideoCaptureCapability& capability) {
|
|||
int32_t VideoCaptureDS::StopCapture() {
|
||||
MutexLock lock(&api_lock_);
|
||||
|
||||
HRESULT hr = _mediaControl->Pause();
|
||||
HRESULT hr = _mediaControl->StopWhenReady();
|
||||
if (FAILED(hr)) {
|
||||
RTC_LOG(LS_INFO) << "Failed to stop the capture graph. " << hr;
|
||||
return -1;
|
||||
|
|
|
|||
Loading…
Reference in a new issue