diff --git a/modules/video_capture/BUILD.gn b/modules/video_capture/BUILD.gn index 29a7bea9d9..c15dcedc2a 100644 --- a/modules/video_capture/BUILD.gn +++ b/modules/video_capture/BUILD.gn @@ -178,10 +178,13 @@ if (!build_with_chromium || is_linux || is_chromeos) { deps = [ ":video_capture_internal_impl", ":video_capture_module", + "../../api:rtc_error_matchers", "../../api:scoped_refptr", + "../../api/units:time_delta", "../../api/video:video_frame", "../../api/video:video_rtp_headers", "../../common_video", + "../../rtc_base:checks", "../../rtc_base:gunit_helpers", "../../rtc_base:timeutils", "../../rtc_base/synchronization:mutex", @@ -190,6 +193,7 @@ if (!build_with_chromium || is_linux || is_chromeos) { "../../test:test_main", "../../test:test_support", "../../test:video_test_common", + "../../test:wait_until", "//testing/gtest", "//third_party/abseil-cpp/absl/memory", ] diff --git a/modules/video_capture/test/video_capture_unittest.cc b/modules/video_capture/test/video_capture_unittest.cc index dec8de70cb..6d14f90727 100644 --- a/modules/video_capture/test/video_capture_unittest.cc +++ b/modules/video_capture/test/video_capture_unittest.cc @@ -12,22 +12,30 @@ #include +#include #include #include #include +#include +#include -#include "absl/memory/memory.h" #include "api/scoped_refptr.h" -#include "api/video/i420_buffer.h" +#include "api/test/rtc_error_matchers.h" +#include "api/units/time_delta.h" #include "api/video/video_frame.h" -#include "common_video/libyuv/include/webrtc_libyuv.h" +#include "api/video/video_rotation.h" +#include "api/video/video_sink_interface.h" +#include "modules/video_capture/video_capture_defines.h" #include "modules/video_capture/video_capture_factory.h" -#include "rtc_base/gunit.h" +#include "rtc_base/checks.h" #include "rtc_base/synchronization/mutex.h" #include "rtc_base/time_utils.h" #include "test/frame_utils.h" +#include "test/gmock.h" #include "test/gtest.h" +#include "test/wait_until.h" +using ::testing::Ge; using webrtc::VideoCaptureCapability; using webrtc::VideoCaptureFactory; using webrtc::VideoCaptureModule; @@ -203,7 +211,10 @@ TEST_F(VideoCaptureTest, MAYBE_CreateDelete) { EXPECT_LE(rtc::TimeMillis() - start_time, 4000); // Make sure 5 frames are captured. - EXPECT_TRUE_WAIT(capture_observer.incoming_frames() >= 5, kTimeOut); + EXPECT_THAT(webrtc::WaitUntil( + [&] { return capture_observer.incoming_frames(); }, Ge(5), + {.timeout = webrtc::TimeDelta::Millis(kTimeOut)}), + webrtc::IsRtcOk()); int64_t stop_time = rtc::TimeMillis(); EXPECT_EQ(0, module->StopCapture()); @@ -254,7 +265,10 @@ TEST_F(VideoCaptureTest, MAYBE_Capabilities) { capture_observer.SetExpectedCapability(capability); ASSERT_NO_FATAL_FAILURE(StartCapture(module.get(), capability)); // Make sure at least one frame is captured. - EXPECT_TRUE_WAIT(capture_observer.incoming_frames() >= 1, kTimeOut); + EXPECT_THAT(webrtc::WaitUntil( + [&] { return capture_observer.incoming_frames(); }, Ge(1), + {.timeout = webrtc::TimeDelta::Millis(kTimeOut)}), + webrtc::IsRtcOk()); EXPECT_EQ(0, module->StopCapture()); } @@ -317,8 +331,14 @@ TEST_F(VideoCaptureTest, DISABLED_TestTwoCameras) { ASSERT_NO_FATAL_FAILURE(StartCapture(module1.get(), capability1)); ASSERT_NO_FATAL_FAILURE(StartCapture(module2.get(), capability2)); - EXPECT_TRUE_WAIT(capture_observer1.incoming_frames() >= 5, kTimeOut); - EXPECT_TRUE_WAIT(capture_observer2.incoming_frames() >= 5, kTimeOut); + EXPECT_THAT(webrtc::WaitUntil( + [&] { return capture_observer1.incoming_frames(); }, Ge(5), + {.timeout = webrtc::TimeDelta::Millis(kTimeOut)}), + webrtc::IsRtcOk()); + EXPECT_THAT(webrtc::WaitUntil( + [&] { return capture_observer2.incoming_frames(); }, Ge(5), + {.timeout = webrtc::TimeDelta::Millis(kTimeOut)}), + webrtc::IsRtcOk()); EXPECT_EQ(0, module2->StopCapture()); EXPECT_EQ(0, module1->StopCapture()); } @@ -346,12 +366,18 @@ TEST_F(VideoCaptureTest, MAYBE_ConcurrentAccess) { // Starting module1 should work. ASSERT_NO_FATAL_FAILURE(StartCapture(module1.get(), capability)); - EXPECT_TRUE_WAIT(capture_observer1.incoming_frames() >= 5, kTimeOut); + EXPECT_THAT(webrtc::WaitUntil( + [&] { return capture_observer1.incoming_frames(); }, Ge(5), + {.timeout = webrtc::TimeDelta::Millis(kTimeOut)}), + webrtc::IsRtcOk()); // 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_THAT(webrtc::WaitUntil( + [&] { return capture_observer2.incoming_frames(); }, Ge(5), + {.timeout = webrtc::TimeDelta::Millis(kTimeOut)}), + webrtc::IsRtcOk()); EXPECT_EQ(0, module2->StopCapture()); }