henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 1 | /* |
kjellander | b24317b | 2016-02-10 07:54:43 -0800 | [diff] [blame] | 2 | * Copyright 2012 The WebRTC project authors. All Rights Reserved. |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 3 | * |
kjellander | b24317b | 2016-02-10 07:54:43 -0800 | [diff] [blame] | 4 | * Use of this source code is governed by a BSD-style license |
| 5 | * that can be found in the LICENSE file in the root of the source |
| 6 | * tree. An additional intellectual property rights grant can be found |
| 7 | * in the file PATENTS. All contributing project authors may |
| 8 | * be found in the AUTHORS file in the root of the source tree. |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 9 | */ |
| 10 | |
| 11 | // FakePeriodicVideoCapturer implements a fake cricket::VideoCapturer that |
| 12 | // creates video frames periodically after it has been started. |
| 13 | |
Mirko Bonadei | 92ea95e | 2017-09-15 06:47:31 +0200 | [diff] [blame] | 14 | #ifndef PC_TEST_FAKEPERIODICVIDEOCAPTURER_H_ |
| 15 | #define PC_TEST_FAKEPERIODICVIDEOCAPTURER_H_ |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 16 | |
Per | fb45d17 | 2016-02-29 12:07:35 +0100 | [diff] [blame] | 17 | #include <vector> |
| 18 | |
Mirko Bonadei | 92ea95e | 2017-09-15 06:47:31 +0200 | [diff] [blame] | 19 | #include "media/base/fakevideocapturer.h" |
| 20 | #include "rtc_base/thread.h" |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 21 | |
| 22 | namespace webrtc { |
| 23 | |
Per | fb45d17 | 2016-02-29 12:07:35 +0100 | [diff] [blame] | 24 | class FakePeriodicVideoCapturer : public cricket::FakeVideoCapturer, |
| 25 | public rtc::MessageHandler { |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 26 | public: |
| 27 | FakePeriodicVideoCapturer() { |
| 28 | std::vector<cricket::VideoFormat> formats; |
| 29 | formats.push_back(cricket::VideoFormat(1280, 720, |
| 30 | cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420)); |
| 31 | formats.push_back(cricket::VideoFormat(640, 480, |
| 32 | cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420)); |
| 33 | formats.push_back(cricket::VideoFormat(640, 360, |
| 34 | cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420)); |
| 35 | formats.push_back(cricket::VideoFormat(320, 240, |
| 36 | cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420)); |
| 37 | formats.push_back(cricket::VideoFormat(160, 120, |
| 38 | cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420)); |
| 39 | ResetSupportedFormats(formats); |
Per | fb45d17 | 2016-02-29 12:07:35 +0100 | [diff] [blame] | 40 | } |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 41 | |
| 42 | virtual cricket::CaptureState Start(const cricket::VideoFormat& format) { |
| 43 | cricket::CaptureState state = FakeVideoCapturer::Start(format); |
| 44 | if (state != cricket::CS_FAILED) { |
Taylor Brandstetter | 5d97a9a | 2016-06-10 14:17:27 -0700 | [diff] [blame] | 45 | rtc::Thread::Current()->Post(RTC_FROM_HERE, this, MSG_CREATEFRAME); |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 46 | } |
| 47 | return state; |
| 48 | } |
| 49 | virtual void Stop() { |
buildbot@webrtc.org | d4e598d | 2014-07-29 17:36:52 +0000 | [diff] [blame] | 50 | rtc::Thread::Current()->Clear(this); |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 51 | } |
| 52 | // Inherited from MesageHandler. |
buildbot@webrtc.org | d4e598d | 2014-07-29 17:36:52 +0000 | [diff] [blame] | 53 | virtual void OnMessage(rtc::Message* msg) { |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 54 | if (msg->message_id == MSG_CREATEFRAME) { |
| 55 | if (IsRunning()) { |
| 56 | CaptureFrame(); |
Taylor Brandstetter | 5d97a9a | 2016-06-10 14:17:27 -0700 | [diff] [blame] | 57 | rtc::Thread::Current()->PostDelayed( |
| 58 | RTC_FROM_HERE, static_cast<int>(GetCaptureFormat()->interval / |
| 59 | rtc::kNumNanosecsPerMillisec), |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 60 | this, MSG_CREATEFRAME); |
| 61 | } |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 62 | } |
| 63 | } |
| 64 | |
| 65 | private: |
| 66 | enum { |
| 67 | // Offset 0xFF to make sure this don't collide with base class messages. |
| 68 | MSG_CREATEFRAME = 0xFF |
| 69 | }; |
| 70 | }; |
| 71 | |
| 72 | } // namespace webrtc |
| 73 | |
Mirko Bonadei | 92ea95e | 2017-09-15 06:47:31 +0200 | [diff] [blame] | 74 | #endif // PC_TEST_FAKEPERIODICVIDEOCAPTURER_H_ |