fake_webrtc_video_engine.h (5125B)
1 /* 2 * Copyright (c) 2010 The WebRTC project authors. All Rights Reserved. 3 * 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. 9 */ 10 11 #ifndef MEDIA_ENGINE_FAKE_WEBRTC_VIDEO_ENGINE_H_ 12 #define MEDIA_ENGINE_FAKE_WEBRTC_VIDEO_ENGINE_H_ 13 14 #include <stddef.h> 15 #include <stdint.h> 16 17 #include <memory> 18 #include <optional> 19 #include <string> 20 #include <vector> 21 22 #include "api/environment/environment.h" 23 #include "api/fec_controller_override.h" 24 #include "api/video/encoded_image.h" 25 #include "api/video/video_frame.h" 26 #include "api/video/video_frame_type.h" 27 #include "api/video_codecs/scalability_mode.h" 28 #include "api/video_codecs/sdp_video_format.h" 29 #include "api/video_codecs/video_codec.h" 30 #include "api/video_codecs/video_decoder.h" 31 #include "api/video_codecs/video_decoder_factory.h" 32 #include "api/video_codecs/video_encoder.h" 33 #include "api/video_codecs/video_encoder_factory.h" 34 #include "rtc_base/event.h" 35 #include "rtc_base/synchronization/mutex.h" 36 #include "rtc_base/thread_annotations.h" 37 38 namespace webrtc { 39 40 class FakeWebRtcVideoDecoderFactory; 41 class FakeWebRtcVideoEncoderFactory; 42 43 // Fake class for mocking out VideoDecoder 44 class FakeWebRtcVideoDecoder : public VideoDecoder { 45 public: 46 explicit FakeWebRtcVideoDecoder(FakeWebRtcVideoDecoderFactory* factory); 47 ~FakeWebRtcVideoDecoder(); 48 49 bool Configure(const Settings& settings) override; 50 int32_t Decode(const EncodedImage&, int64_t) override; 51 int32_t RegisterDecodeCompleteCallback(DecodedImageCallback*) override; 52 int32_t Release() override; 53 54 int GetNumFramesReceived() const; 55 56 private: 57 int num_frames_received_; 58 FakeWebRtcVideoDecoderFactory* factory_; 59 }; 60 61 // Fake class for mocking out VideoDecoderFactory. 62 class FakeWebRtcVideoDecoderFactory : public VideoDecoderFactory { 63 public: 64 FakeWebRtcVideoDecoderFactory(); 65 66 std::vector<SdpVideoFormat> GetSupportedFormats() const override; 67 std::unique_ptr<VideoDecoder> Create(const Environment& env, 68 const SdpVideoFormat& format) override; 69 70 void DecoderDestroyed(FakeWebRtcVideoDecoder* decoder); 71 void AddSupportedVideoCodec(const SdpVideoFormat& format); 72 void AddSupportedVideoCodecType(const std::string& name); 73 int GetNumCreatedDecoders(); 74 const std::vector<FakeWebRtcVideoDecoder*>& decoders(); 75 76 private: 77 std::vector<SdpVideoFormat> supported_codec_formats_; 78 std::vector<FakeWebRtcVideoDecoder*> decoders_; 79 int num_created_decoders_; 80 }; 81 82 // Fake class for mocking out VideoEnoder 83 class FakeWebRtcVideoEncoder : public VideoEncoder { 84 public: 85 explicit FakeWebRtcVideoEncoder(FakeWebRtcVideoEncoderFactory* factory); 86 ~FakeWebRtcVideoEncoder(); 87 88 void SetFecControllerOverride( 89 FecControllerOverride* fec_controller_override) override; 90 int32_t InitEncode(const VideoCodec* codecSettings, 91 const VideoEncoder::Settings& settings) override; 92 int32_t Encode(const VideoFrame& inputImage, 93 const std::vector<VideoFrameType>* frame_types) override; 94 int32_t RegisterEncodeCompleteCallback( 95 EncodedImageCallback* callback) override; 96 int32_t Release() override; 97 void SetRates(const RateControlParameters& parameters) override; 98 VideoEncoder::EncoderInfo GetEncoderInfo() const override; 99 100 bool WaitForInitEncode(); 101 VideoCodec GetCodecSettings(); 102 int GetNumEncodedFrames(); 103 104 private: 105 Mutex mutex_; 106 Event init_encode_event_; 107 int num_frames_encoded_ RTC_GUARDED_BY(mutex_); 108 VideoCodec codec_settings_ RTC_GUARDED_BY(mutex_); 109 FakeWebRtcVideoEncoderFactory* factory_; 110 }; 111 112 // Fake class for mocking out VideoEncoderFactory. 113 class FakeWebRtcVideoEncoderFactory : public VideoEncoderFactory { 114 public: 115 FakeWebRtcVideoEncoderFactory(); 116 117 std::vector<SdpVideoFormat> GetSupportedFormats() const override; 118 VideoEncoderFactory::CodecSupport QueryCodecSupport( 119 const SdpVideoFormat& format, 120 std::optional<std::string> scalability_mode) const override; 121 std::unique_ptr<VideoEncoder> Create(const Environment& env, 122 const SdpVideoFormat& format) override; 123 124 bool WaitForCreatedVideoEncoders(int num_encoders); 125 void EncoderDestroyed(FakeWebRtcVideoEncoder* encoder); 126 void set_encoders_have_internal_sources(bool internal_source); 127 void AddSupportedVideoCodec(const SdpVideoFormat& format); 128 void AddSupportedVideoCodecType( 129 const std::string& name, 130 const std::vector<ScalabilityMode>& scalability_modes = {}); 131 int GetNumCreatedEncoders(); 132 const std::vector<FakeWebRtcVideoEncoder*> encoders(); 133 134 private: 135 Mutex mutex_; 136 Event created_video_encoder_event_; 137 std::vector<SdpVideoFormat> formats_; 138 std::vector<FakeWebRtcVideoEncoder*> encoders_ RTC_GUARDED_BY(mutex_); 139 int num_created_encoders_ RTC_GUARDED_BY(mutex_); 140 bool vp8_factory_mode_; 141 }; 142 143 } // namespace webrtc 144 145 146 #endif // MEDIA_ENGINE_FAKE_WEBRTC_VIDEO_ENGINE_H_