tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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_