jlmiller@webrtc.org | 5f93d0a | 2015-01-20 21:36:13 +0000 | [diff] [blame] | 1 | /* |
kjellander | 1afca73 | 2016-02-07 20:46:45 -0800 | [diff] [blame] | 2 | * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. |
jlmiller@webrtc.org | 5f93d0a | 2015-01-20 21:36:13 +0000 | [diff] [blame] | 3 | * |
kjellander | 1afca73 | 2016-02-07 20:46:45 -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. |
jlmiller@webrtc.org | 5f93d0a | 2015-01-20 21:36:13 +0000 | [diff] [blame] | 9 | */ |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 10 | |
kjellander@webrtc.org | 5ad1297 | 2016-02-12 06:39:40 +0100 | [diff] [blame] | 11 | #ifndef WEBRTC_MEDIA_ENGINE_FAKEWEBRTCVIDEOCAPTUREMODULE_H_ |
| 12 | #define WEBRTC_MEDIA_ENGINE_FAKEWEBRTCVIDEOCAPTUREMODULE_H_ |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 13 | |
| 14 | #include <vector> |
| 15 | |
nisse | af91689 | 2017-01-10 07:44:26 -0800 | [diff] [blame] | 16 | #include "webrtc/api/video/i420_buffer.h" |
kjellander | a96e2d7 | 2016-02-04 23:52:28 -0800 | [diff] [blame] | 17 | #include "webrtc/media/base/testutils.h" |
kjellander@webrtc.org | 5ad1297 | 2016-02-12 06:39:40 +0100 | [diff] [blame] | 18 | #include "webrtc/media/engine/webrtcvideocapturer.h" |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 19 | |
| 20 | class FakeWebRtcVcmFactory; |
| 21 | |
| 22 | // Fake class for mocking out webrtc::VideoCaptureModule. |
| 23 | class FakeWebRtcVideoCaptureModule : public webrtc::VideoCaptureModule { |
| 24 | public: |
nisse | b29b9c8 | 2016-12-12 00:22:56 -0800 | [diff] [blame] | 25 | FakeWebRtcVideoCaptureModule(FakeWebRtcVcmFactory* factory) |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 26 | : factory_(factory), |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 27 | callback_(NULL), |
nisse | b29b9c8 | 2016-12-12 00:22:56 -0800 | [diff] [blame] | 28 | running_(false) { |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 29 | } |
Peter Boström | 09c3a1e | 2016-03-22 17:17:39 +0100 | [diff] [blame] | 30 | ~FakeWebRtcVideoCaptureModule(); |
kjellander@webrtc.org | 14665ff | 2015-03-04 12:58:35 +0000 | [diff] [blame] | 31 | void RegisterCaptureDataCallback( |
nisse | b29b9c8 | 2016-12-12 00:22:56 -0800 | [diff] [blame] | 32 | rtc::VideoSinkInterface<webrtc::VideoFrame>* callback) override { |
| 33 | callback_ = callback; |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 34 | } |
kjellander@webrtc.org | 14665ff | 2015-03-04 12:58:35 +0000 | [diff] [blame] | 35 | void DeRegisterCaptureDataCallback() override { callback_ = NULL; } |
kjellander@webrtc.org | 14665ff | 2015-03-04 12:58:35 +0000 | [diff] [blame] | 36 | int32_t StartCapture(const webrtc::VideoCaptureCapability& cap) override { |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 37 | if (running_) return -1; |
| 38 | cap_ = cap; |
| 39 | running_ = true; |
| 40 | return 0; |
| 41 | } |
kjellander@webrtc.org | 14665ff | 2015-03-04 12:58:35 +0000 | [diff] [blame] | 42 | int32_t StopCapture() override { |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 43 | running_ = false; |
| 44 | return 0; |
| 45 | } |
kjellander@webrtc.org | 14665ff | 2015-03-04 12:58:35 +0000 | [diff] [blame] | 46 | const char* CurrentDeviceName() const override { |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 47 | return NULL; // not implemented |
| 48 | } |
kjellander@webrtc.org | 14665ff | 2015-03-04 12:58:35 +0000 | [diff] [blame] | 49 | bool CaptureStarted() override { return running_; } |
| 50 | int32_t CaptureSettings(webrtc::VideoCaptureCapability& settings) override { |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 51 | if (!running_) return -1; |
| 52 | settings = cap_; |
| 53 | return 0; |
| 54 | } |
mallinath@webrtc.org | 67ee6b9 | 2014-02-03 16:57:16 +0000 | [diff] [blame] | 55 | |
kjellander@webrtc.org | 14665ff | 2015-03-04 12:58:35 +0000 | [diff] [blame] | 56 | int32_t SetCaptureRotation(webrtc::VideoRotation rotation) override { |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 57 | return -1; // not implemented |
| 58 | } |
kjellander@webrtc.org | 14665ff | 2015-03-04 12:58:35 +0000 | [diff] [blame] | 59 | bool SetApplyRotation(bool enable) override { |
nisse | 7924697 | 2016-08-23 05:50:09 -0700 | [diff] [blame] | 60 | return true; // ignored |
guoweis@webrtc.org | 1226e92 | 2015-02-11 18:37:54 +0000 | [diff] [blame] | 61 | } |
kjellander@webrtc.org | 14665ff | 2015-03-04 12:58:35 +0000 | [diff] [blame] | 62 | bool GetApplyRotation() override { |
guoweis@webrtc.org | 1226e92 | 2015-02-11 18:37:54 +0000 | [diff] [blame] | 63 | return true; // Rotation compensation is turned on. |
| 64 | } |
Niels Möller | 739fcb9 | 2016-02-29 13:11:45 +0100 | [diff] [blame] | 65 | void SendFrame(int w, int h) { |
| 66 | if (!running_) return; |
nisse | 744494f | 2016-05-16 23:51:04 -0700 | [diff] [blame] | 67 | |
| 68 | rtc::scoped_refptr<webrtc::I420Buffer> buffer = |
nisse | af91689 | 2017-01-10 07:44:26 -0800 | [diff] [blame] | 69 | webrtc::I420Buffer::Create(w, h); |
nisse | 744494f | 2016-05-16 23:51:04 -0700 | [diff] [blame] | 70 | // Initialize memory to satisfy DrMemory tests. See |
| 71 | // https://bugs.chromium.org/p/libyuv/issues/detail?id=377 |
| 72 | buffer->InitializeData(); |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 73 | if (callback_) { |
nisse | b29b9c8 | 2016-12-12 00:22:56 -0800 | [diff] [blame] | 74 | callback_->OnFrame( |
nisse | 744494f | 2016-05-16 23:51:04 -0700 | [diff] [blame] | 75 | webrtc::VideoFrame(buffer, 0, 0, webrtc::kVideoRotation_0)); |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 76 | } |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 77 | } |
| 78 | |
| 79 | const webrtc::VideoCaptureCapability& cap() const { |
| 80 | return cap_; |
| 81 | } |
| 82 | |
| 83 | private: |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 84 | FakeWebRtcVcmFactory* factory_; |
nisse | b29b9c8 | 2016-12-12 00:22:56 -0800 | [diff] [blame] | 85 | rtc::VideoSinkInterface<webrtc::VideoFrame>* callback_; |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 86 | bool running_; |
| 87 | webrtc::VideoCaptureCapability cap_; |
henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 88 | }; |
| 89 | |
kjellander@webrtc.org | 5ad1297 | 2016-02-12 06:39:40 +0100 | [diff] [blame] | 90 | #endif // WEBRTC_MEDIA_ENGINE_FAKEWEBRTCVIDEOCAPTUREMODULE_H_ |