blob: 3db4225cedab5d680824d2359cbabb40af338077 [file] [log] [blame]
henrike@webrtc.org28e20752013-07-10 00:45:361/*
kjellander1afca732016-02-08 04:46:452 * Copyright (c) 2010 The WebRTC project authors. All Rights Reserved.
henrike@webrtc.org28e20752013-07-10 00:45:363 *
kjellander1afca732016-02-08 04:46:454 * 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.org28e20752013-07-10 00:45:369 */
10
Steve Anton10542f22019-01-11 17:11:0011#ifndef MEDIA_ENGINE_FAKE_WEBRTC_VIDEO_ENGINE_H_
12#define MEDIA_ENGINE_FAKE_WEBRTC_VIDEO_ENGINE_H_
henrike@webrtc.org28e20752013-07-10 00:45:3613
Yves Gerey3e707812018-11-28 15:47:4914#include <stddef.h>
15#include <stdint.h>
Jonas Olssona4d87372019-07-05 17:08:3316
Anders Carlsson67537952018-05-03 09:28:2917#include <memory>
ilnikd60d06a2017-04-05 10:02:2018#include <string>
Anders Carlsson67537952018-05-03 09:28:2919#include <vector>
henrike@webrtc.org28e20752013-07-10 00:45:3620
Elad Alon8f01c4e2019-06-28 13:19:4321#include "api/fec_controller_override.h"
Yves Gerey3e707812018-11-28 15:47:4922#include "api/video/encoded_image.h"
23#include "api/video/video_bitrate_allocation.h"
24#include "api/video/video_frame.h"
25#include "api/video_codecs/sdp_video_format.h"
26#include "api/video_codecs/video_codec.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3127#include "api/video_codecs/video_decoder.h"
Anders Carlsson67537952018-05-03 09:28:2928#include "api/video_codecs/video_decoder_factory.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3129#include "api/video_codecs/video_encoder.h"
Anders Carlsson67537952018-05-03 09:28:2930#include "api/video_codecs/video_encoder_factory.h"
Yves Gerey3e707812018-11-28 15:47:4931#include "modules/video_coding/include/video_codec_interface.h"
Anders Carlsson67537952018-05-03 09:28:2932#include "rtc_base/event.h"
Markus Handell1e257ca2020-07-07 13:43:1133#include "rtc_base/synchronization/mutex.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3134#include "rtc_base/thread_annotations.h"
henrike@webrtc.org28e20752013-07-10 00:45:3635
henrike@webrtc.org28e20752013-07-10 00:45:3636namespace cricket {
Anders Carlsson67537952018-05-03 09:28:2937
38class FakeWebRtcVideoDecoderFactory;
39class FakeWebRtcVideoEncoderFactory;
henrike@webrtc.org28e20752013-07-10 00:45:3640
41// Fake class for mocking out webrtc::VideoDecoder
42class FakeWebRtcVideoDecoder : public webrtc::VideoDecoder {
43 public:
Anders Carlsson67537952018-05-03 09:28:2944 explicit FakeWebRtcVideoDecoder(FakeWebRtcVideoDecoderFactory* factory);
45 ~FakeWebRtcVideoDecoder();
henrike@webrtc.org28e20752013-07-10 00:45:3646
Danil Chapovalovd08930d2021-08-12 11:26:5547 bool Configure(const Settings& settings) override;
Tony Herre55b593f2023-08-29 14:05:4948 int32_t Decode(const webrtc::EncodedImage&, int64_t) override;
Anders Carlsson5f2bb622018-05-14 07:48:0649 int32_t RegisterDecodeCompleteCallback(
50 webrtc::DecodedImageCallback*) override;
51 int32_t Release() override;
henrike@webrtc.org28e20752013-07-10 00:45:3652
Anders Carlsson67537952018-05-03 09:28:2953 int GetNumFramesReceived() const;
henrike@webrtc.org28e20752013-07-10 00:45:3654
55 private:
56 int num_frames_received_;
Anders Carlsson67537952018-05-03 09:28:2957 FakeWebRtcVideoDecoderFactory* factory_;
henrike@webrtc.org28e20752013-07-10 00:45:3658};
59
Anders Carlsson67537952018-05-03 09:28:2960// Fake class for mocking out webrtc::VideoDecoderFactory.
Anders Carlsson67537952018-05-03 09:28:2961class FakeWebRtcVideoDecoderFactory : public webrtc::VideoDecoderFactory {
henrike@webrtc.org28e20752013-07-10 00:45:3662 public:
Anders Carlsson67537952018-05-03 09:28:2963 FakeWebRtcVideoDecoderFactory();
henrike@webrtc.org28e20752013-07-10 00:45:3664
Anders Carlsson67537952018-05-03 09:28:2965 std::vector<webrtc::SdpVideoFormat> GetSupportedFormats() const override;
66 std::unique_ptr<webrtc::VideoDecoder> CreateVideoDecoder(
67 const webrtc::SdpVideoFormat& format) override;
henrike@webrtc.org28e20752013-07-10 00:45:3668
Anders Carlsson67537952018-05-03 09:28:2969 void DecoderDestroyed(FakeWebRtcVideoDecoder* decoder);
Johannes Kron3e983682020-03-29 20:17:0070 void AddSupportedVideoCodecType(const std::string& name);
Anders Carlsson67537952018-05-03 09:28:2971 int GetNumCreatedDecoders();
72 const std::vector<FakeWebRtcVideoDecoder*>& decoders();
sakal1fd95952016-06-22 07:46:1573
henrike@webrtc.org28e20752013-07-10 00:45:3674 private:
Anders Carlsson67537952018-05-03 09:28:2975 std::vector<webrtc::SdpVideoFormat> supported_codec_formats_;
henrike@webrtc.org28e20752013-07-10 00:45:3676 std::vector<FakeWebRtcVideoDecoder*> decoders_;
77 int num_created_decoders_;
78};
79
80// Fake class for mocking out webrtc::VideoEnoder
81class FakeWebRtcVideoEncoder : public webrtc::VideoEncoder {
82 public:
Anders Carlsson67537952018-05-03 09:28:2983 explicit FakeWebRtcVideoEncoder(FakeWebRtcVideoEncoderFactory* factory);
84 ~FakeWebRtcVideoEncoder();
henrike@webrtc.org28e20752013-07-10 00:45:3685
Elad Alon8f01c4e2019-06-28 13:19:4386 void SetFecControllerOverride(
87 webrtc::FecControllerOverride* fec_controller_override) override;
Erik Språng08127a92016-11-16 15:41:3088 int32_t InitEncode(const webrtc::VideoCodec* codecSettings,
Elad Alon370f93a2019-06-11 12:57:5789 const VideoEncoder::Settings& settings) override;
Niels Möller87e2d782019-03-07 09:18:2390 int32_t Encode(
91 const webrtc::VideoFrame& inputImage,
Niels Möller87e2d782019-03-07 09:18:2392 const std::vector<webrtc::VideoFrameType>* frame_types) override;
Erik Språng08127a92016-11-16 15:41:3093 int32_t RegisterEncodeCompleteCallback(
Anders Carlsson67537952018-05-03 09:28:2994 webrtc::EncodedImageCallback* callback) override;
95 int32_t Release() override;
Erik Språng16cb8f52019-04-12 11:59:0996 void SetRates(const RateControlParameters& parameters) override;
Mirta Dvornicicccc1b572019-01-15 11:42:1897 webrtc::VideoEncoder::EncoderInfo GetEncoderInfo() const override;
pbos@webrtc.org7fe1e032014-10-14 04:25:3398
Anders Carlsson67537952018-05-03 09:28:2999 bool WaitForInitEncode();
100 webrtc::VideoCodec GetCodecSettings();
101 int GetNumEncodedFrames();
pbos@webrtc.org7fe1e032014-10-14 04:25:33102
103 private:
Markus Handell1e257ca2020-07-07 13:43:11104 webrtc::Mutex mutex_;
pbos14fe7082016-04-20 13:35:56105 rtc::Event init_encode_event_;
Markus Handell1e257ca2020-07-07 13:43:11106 int num_frames_encoded_ RTC_GUARDED_BY(mutex_);
107 webrtc::VideoCodec codec_settings_ RTC_GUARDED_BY(mutex_);
Anders Carlsson67537952018-05-03 09:28:29108 FakeWebRtcVideoEncoderFactory* factory_;
henrike@webrtc.org28e20752013-07-10 00:45:36109};
110
Anders Carlsson67537952018-05-03 09:28:29111// Fake class for mocking out webrtc::VideoEncoderFactory.
Anders Carlsson67537952018-05-03 09:28:29112class FakeWebRtcVideoEncoderFactory : public webrtc::VideoEncoderFactory {
henrike@webrtc.org28e20752013-07-10 00:45:36113 public:
Anders Carlsson67537952018-05-03 09:28:29114 FakeWebRtcVideoEncoderFactory();
henrike@webrtc.org28e20752013-07-10 00:45:36115
Anders Carlsson67537952018-05-03 09:28:29116 std::vector<webrtc::SdpVideoFormat> GetSupportedFormats() const override;
Åsa Perssonb7f91132023-01-02 18:46:13117 webrtc::VideoEncoderFactory::CodecSupport QueryCodecSupport(
118 const webrtc::SdpVideoFormat& format,
119 absl::optional<std::string> scalability_mode) const override;
Anders Carlsson67537952018-05-03 09:28:29120 std::unique_ptr<webrtc::VideoEncoder> CreateVideoEncoder(
121 const webrtc::SdpVideoFormat& format) override;
henrike@webrtc.org28e20752013-07-10 00:45:36122
Anders Carlsson67537952018-05-03 09:28:29123 bool WaitForCreatedVideoEncoders(int num_encoders);
124 void EncoderDestroyed(FakeWebRtcVideoEncoder* encoder);
125 void set_encoders_have_internal_sources(bool internal_source);
126 void AddSupportedVideoCodec(const webrtc::SdpVideoFormat& format);
philipel31718d72023-09-13 12:44:23127 void AddSupportedVideoCodecType(
128 const std::string& name,
129 const std::vector<webrtc::ScalabilityMode>& scalability_modes = {});
Anders Carlsson67537952018-05-03 09:28:29130 int GetNumCreatedEncoders();
131 const std::vector<FakeWebRtcVideoEncoder*> encoders();
henrike@webrtc.org28e20752013-07-10 00:45:36132
133 private:
Markus Handell1e257ca2020-07-07 13:43:11134 webrtc::Mutex mutex_;
pbos14fe7082016-04-20 13:35:56135 rtc::Event created_video_encoder_event_;
Anders Carlsson67537952018-05-03 09:28:29136 std::vector<webrtc::SdpVideoFormat> formats_;
Markus Handell1e257ca2020-07-07 13:43:11137 std::vector<FakeWebRtcVideoEncoder*> encoders_ RTC_GUARDED_BY(mutex_);
138 int num_created_encoders_ RTC_GUARDED_BY(mutex_);
Anders Carlsson67537952018-05-03 09:28:29139 bool vp8_factory_mode_;
pthatcher@webrtc.org52cd8282015-03-18 02:24:43140};
141
henrike@webrtc.org28e20752013-07-10 00:45:36142} // namespace cricket
143
Steve Anton10542f22019-01-11 17:11:00144#endif // MEDIA_ENGINE_FAKE_WEBRTC_VIDEO_ENGINE_H_