| 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
|
|
|