Index: webrtc/test/frame_generator_capturer.cc |
diff --git a/webrtc/test/frame_generator_capturer.cc b/webrtc/test/frame_generator_capturer.cc |
index 0b2f1d64bdf49dbfbed487fefdc65622193d2b6a..00efbc8b40b467e2248169349ac498997b8de3d2 100644 |
--- a/webrtc/test/frame_generator_capturer.cc |
+++ b/webrtc/test/frame_generator_capturer.cc |
@@ -10,44 +10,16 @@ |
#include "webrtc/test/frame_generator_capturer.h" |
-#include <utility> |
-#include <vector> |
- |
#include "webrtc/base/criticalsection.h" |
#include "webrtc/base/platform_thread.h" |
-#include "webrtc/base/task_queue.h" |
#include "webrtc/system_wrappers/include/clock.h" |
+#include "webrtc/system_wrappers/include/event_wrapper.h" |
#include "webrtc/system_wrappers/include/sleep.h" |
#include "webrtc/test/frame_generator.h" |
#include "webrtc/video_send_stream.h" |
namespace webrtc { |
namespace test { |
- |
-class FrameGeneratorCapturer::InsertFrameTask : public rtc::QueuedTask { |
- public: |
- // Repeats in |repeat_interval_ms|. One-time if |repeat_interval_ms| == 0. |
- InsertFrameTask( |
- webrtc::test::FrameGeneratorCapturer* frame_generator_capturer, |
- uint32_t repeat_interval_ms) |
- : frame_generator_capturer_(frame_generator_capturer), |
- repeat_interval_ms_(repeat_interval_ms) {} |
- |
- private: |
- bool Run() override { |
- if (repeat_interval_ms_ > 0) { |
- rtc::TaskQueue::Current()->PostDelayedTask( |
- std::unique_ptr<rtc::QueuedTask>(this), |
- repeat_interval_ms_); |
- } |
- frame_generator_capturer_->InsertFrame(); |
- // Task should be deleted only if it's not repeating. |
- return repeat_interval_ms_ == 0; |
- } |
- |
- webrtc::test::FrameGeneratorCapturer* const frame_generator_capturer_; |
- const uint32_t repeat_interval_ms_; |
-}; |
FrameGeneratorCapturer* FrameGeneratorCapturer::Create(int width, |
int height, |
@@ -89,7 +61,8 @@ |
sending_(false), |
sink_(nullptr), |
sink_wants_observer_(nullptr), |
- task_queue_("FrameGeneratorQueue", rtc::TaskQueue::Priority::HIGH), |
+ tick_(EventTimerWrapper::Create()), |
+ thread_(FrameGeneratorCapturer::Run, this, "FrameGeneratorCapturer"), |
frame_generator_(std::move(frame_generator)), |
target_fps_(target_fps), |
first_frame_capture_time_(-1) { |
@@ -99,6 +72,8 @@ |
FrameGeneratorCapturer::~FrameGeneratorCapturer() { |
Stop(); |
+ |
+ thread_.Stop(); |
} |
void FrameGeneratorCapturer::SetFakeRotation(VideoRotation rotation) { |
@@ -112,11 +87,15 @@ |
if (frame_generator_.get() == NULL) |
return false; |
- task_queue_.PostDelayedTask( |
- std::unique_ptr<rtc::QueuedTask>( |
- new InsertFrameTask(this, 1000 / target_fps_)), |
- 1000 / target_fps_); |
+ if (!tick_->StartTimer(true, 1000 / target_fps_)) |
+ return false; |
+ thread_.Start(); |
+ thread_.SetPriority(rtc::kHighPriority); |
+ return true; |
+} |
+bool FrameGeneratorCapturer::Run(void* obj) { |
+ static_cast<FrameGeneratorCapturer*>(obj)->InsertFrame(); |
return true; |
} |
@@ -134,6 +113,7 @@ |
sink_->OnFrame(*frame); |
} |
} |
+ tick_->Wait(WEBRTC_EVENT_INFINITE); |
} |
void FrameGeneratorCapturer::Start() { |
@@ -175,11 +155,7 @@ |
} |
void FrameGeneratorCapturer::ForceFrame() { |
- // One-time non-repeating task, |
- // therefore repeat_interval_ms is 0 in InsertFrameTask() |
- task_queue_.PostTask( |
- std::unique_ptr<rtc::QueuedTask>(new InsertFrameTask(this, 0))); |
+ tick_->Set(); |
} |
- |
-} // namespace test |
-} // namespace webrtc |
+} // test |
+} // webrtc |