summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/pc/test/frame_generator_capturer_video_track_source.h
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/pc/test/frame_generator_capturer_video_track_source.h')
-rw-r--r--third_party/libwebrtc/pc/test/frame_generator_capturer_video_track_source.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/third_party/libwebrtc/pc/test/frame_generator_capturer_video_track_source.h b/third_party/libwebrtc/pc/test/frame_generator_capturer_video_track_source.h
new file mode 100644
index 0000000000..50a3d26c2e
--- /dev/null
+++ b/third_party/libwebrtc/pc/test/frame_generator_capturer_video_track_source.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2018 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef PC_TEST_FRAME_GENERATOR_CAPTURER_VIDEO_TRACK_SOURCE_H_
+#define PC_TEST_FRAME_GENERATOR_CAPTURER_VIDEO_TRACK_SOURCE_H_
+
+#include <memory>
+#include <utility>
+
+#include "api/task_queue/default_task_queue_factory.h"
+#include "api/task_queue/task_queue_factory.h"
+#include "api/test/create_frame_generator.h"
+#include "pc/video_track_source.h"
+#include "test/frame_generator_capturer.h"
+
+namespace webrtc {
+
+// Implements a VideoTrackSourceInterface to be used for creating VideoTracks.
+// The video source is generated using a FrameGeneratorCapturer, specifically
+// a SquareGenerator that generates frames with randomly sized and colored
+// squares.
+class FrameGeneratorCapturerVideoTrackSource : public VideoTrackSource {
+ public:
+ static const int kDefaultFramesPerSecond = 30;
+ static const int kDefaultWidth = 640;
+ static const int kDefaultHeight = 480;
+ static const int kNumSquaresGenerated = 50;
+
+ struct Config {
+ int frames_per_second = kDefaultFramesPerSecond;
+ int width = kDefaultWidth;
+ int height = kDefaultHeight;
+ int num_squares_generated = 50;
+ };
+
+ FrameGeneratorCapturerVideoTrackSource(Config config,
+ Clock* clock,
+ bool is_screencast)
+ : VideoTrackSource(false /* remote */),
+ task_queue_factory_(CreateDefaultTaskQueueFactory()),
+ is_screencast_(is_screencast) {
+ video_capturer_ = std::make_unique<test::FrameGeneratorCapturer>(
+ clock,
+ test::CreateSquareFrameGenerator(config.width, config.height,
+ absl::nullopt,
+ config.num_squares_generated),
+ config.frames_per_second, *task_queue_factory_);
+ video_capturer_->Init();
+ }
+
+ FrameGeneratorCapturerVideoTrackSource(
+ std::unique_ptr<test::FrameGeneratorCapturer> video_capturer,
+ bool is_screencast)
+ : VideoTrackSource(false /* remote */),
+ video_capturer_(std::move(video_capturer)),
+ is_screencast_(is_screencast) {}
+
+ ~FrameGeneratorCapturerVideoTrackSource() = default;
+
+ void Start() { SetState(kLive); }
+
+ void Stop() { SetState(kMuted); }
+
+ bool is_screencast() const override { return is_screencast_; }
+
+ protected:
+ rtc::VideoSourceInterface<VideoFrame>* source() override {
+ return video_capturer_.get();
+ }
+
+ private:
+ const std::unique_ptr<TaskQueueFactory> task_queue_factory_;
+ std::unique_ptr<test::FrameGeneratorCapturer> video_capturer_;
+ const bool is_screencast_;
+};
+
+} // namespace webrtc
+
+#endif // PC_TEST_FRAME_GENERATOR_CAPTURER_VIDEO_TRACK_SOURCE_H_