blob: 0d5299922f1dd0a6c8634a1be075d0d2f55f0daf [file] [log] [blame]
jlmiller@webrtc.org5f93d0a2015-01-20 21:36:13 +00001/*
kjellander1afca732016-02-07 20:46:45 -08002 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved.
jlmiller@webrtc.org5f93d0a2015-01-20 21:36:13 +00003 *
kjellander1afca732016-02-07 20:46:45 -08004 * 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.org5f93d0a2015-01-20 21:36:13 +00009 */
henrike@webrtc.org28e20752013-07-10 00:45:36 +000010
kjellander@webrtc.org5ad12972016-02-12 06:39:40 +010011#ifndef WEBRTC_MEDIA_ENGINE_FAKEWEBRTCVIDEOCAPTUREMODULE_H_
12#define WEBRTC_MEDIA_ENGINE_FAKEWEBRTCVIDEOCAPTUREMODULE_H_
henrike@webrtc.org28e20752013-07-10 00:45:36 +000013
14#include <vector>
15
nisseaf916892017-01-10 07:44:26 -080016#include "webrtc/api/video/i420_buffer.h"
kjellandera96e2d72016-02-04 23:52:28 -080017#include "webrtc/media/base/testutils.h"
kjellander@webrtc.org5ad12972016-02-12 06:39:40 +010018#include "webrtc/media/engine/webrtcvideocapturer.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000019
20class FakeWebRtcVcmFactory;
21
22// Fake class for mocking out webrtc::VideoCaptureModule.
23class FakeWebRtcVideoCaptureModule : public webrtc::VideoCaptureModule {
24 public:
nisseb29b9c82016-12-12 00:22:56 -080025 FakeWebRtcVideoCaptureModule(FakeWebRtcVcmFactory* factory)
henrike@webrtc.org28e20752013-07-10 00:45:36 +000026 : factory_(factory),
henrike@webrtc.org28e20752013-07-10 00:45:36 +000027 callback_(NULL),
nisseb29b9c82016-12-12 00:22:56 -080028 running_(false) {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000029 }
Peter Boström09c3a1e2016-03-22 17:17:39 +010030 ~FakeWebRtcVideoCaptureModule();
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000031 void RegisterCaptureDataCallback(
nisseb29b9c82016-12-12 00:22:56 -080032 rtc::VideoSinkInterface<webrtc::VideoFrame>* callback) override {
33 callback_ = callback;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000034 }
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000035 void DeRegisterCaptureDataCallback() override { callback_ = NULL; }
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000036 int32_t StartCapture(const webrtc::VideoCaptureCapability& cap) override {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000037 if (running_) return -1;
38 cap_ = cap;
39 running_ = true;
40 return 0;
41 }
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000042 int32_t StopCapture() override {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000043 running_ = false;
44 return 0;
45 }
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000046 const char* CurrentDeviceName() const override {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000047 return NULL; // not implemented
48 }
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000049 bool CaptureStarted() override { return running_; }
50 int32_t CaptureSettings(webrtc::VideoCaptureCapability& settings) override {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000051 if (!running_) return -1;
52 settings = cap_;
53 return 0;
54 }
mallinath@webrtc.org67ee6b92014-02-03 16:57:16 +000055
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000056 int32_t SetCaptureRotation(webrtc::VideoRotation rotation) override {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000057 return -1; // not implemented
58 }
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000059 bool SetApplyRotation(bool enable) override {
nisse79246972016-08-23 05:50:09 -070060 return true; // ignored
guoweis@webrtc.org1226e922015-02-11 18:37:54 +000061 }
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000062 bool GetApplyRotation() override {
guoweis@webrtc.org1226e922015-02-11 18:37:54 +000063 return true; // Rotation compensation is turned on.
64 }
Niels Möller739fcb92016-02-29 13:11:45 +010065 void SendFrame(int w, int h) {
66 if (!running_) return;
nisse744494f2016-05-16 23:51:04 -070067
68 rtc::scoped_refptr<webrtc::I420Buffer> buffer =
nisseaf916892017-01-10 07:44:26 -080069 webrtc::I420Buffer::Create(w, h);
nisse744494f2016-05-16 23:51:04 -070070 // Initialize memory to satisfy DrMemory tests. See
71 // https://bugs.chromium.org/p/libyuv/issues/detail?id=377
72 buffer->InitializeData();
henrike@webrtc.org28e20752013-07-10 00:45:36 +000073 if (callback_) {
nisseb29b9c82016-12-12 00:22:56 -080074 callback_->OnFrame(
nisse744494f2016-05-16 23:51:04 -070075 webrtc::VideoFrame(buffer, 0, 0, webrtc::kVideoRotation_0));
henrike@webrtc.org28e20752013-07-10 00:45:36 +000076 }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000077 }
78
79 const webrtc::VideoCaptureCapability& cap() const {
80 return cap_;
81 }
82
83 private:
henrike@webrtc.org28e20752013-07-10 00:45:36 +000084 FakeWebRtcVcmFactory* factory_;
nisseb29b9c82016-12-12 00:22:56 -080085 rtc::VideoSinkInterface<webrtc::VideoFrame>* callback_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000086 bool running_;
87 webrtc::VideoCaptureCapability cap_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000088};
89
kjellander@webrtc.org5ad12972016-02-12 06:39:40 +010090#endif // WEBRTC_MEDIA_ENGINE_FAKEWEBRTCVIDEOCAPTUREMODULE_H_