1 /* 2 * Copyright (c) 2017 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 12 #ifndef MEDIA_ENGINE_ENCODER_SIMULCAST_PROXY_H_ 13 #define MEDIA_ENGINE_ENCODER_SIMULCAST_PROXY_H_ 14 15 #include <stddef.h> 16 #include <stdint.h> 17 18 #include <memory> 19 #include <vector> 20 21 #include "api/video/video_bitrate_allocation.h" 22 #include "api/video/video_frame.h" 23 #include "api/video_codecs/sdp_video_format.h" 24 #include "api/video_codecs/video_codec.h" 25 #include "api/video_codecs/video_encoder.h" 26 #include "api/video_codecs/video_encoder_factory.h" 27 #include "modules/video_coding/include/video_codec_interface.h" 28 #include "rtc_base/system/rtc_export.h" 29 30 namespace webrtc { 31 32 // This class provides fallback to SimulcastEncoderAdapter if default VP8Encoder 33 // doesn't support simulcast for provided settings. 34 class RTC_EXPORT EncoderSimulcastProxy : public VideoEncoder { 35 public: 36 EncoderSimulcastProxy(VideoEncoderFactory* factory, 37 const SdpVideoFormat& format); 38 // Deprecated. Remove once all clients use constructor with both factory and 39 // SdpVideoFormat; 40 explicit EncoderSimulcastProxy(VideoEncoderFactory* factory); 41 42 ~EncoderSimulcastProxy() override; 43 44 // Implements VideoEncoder. 45 int Release() override; 46 void SetFecControllerOverride( 47 FecControllerOverride* fec_controller_override) override; 48 int InitEncode(const VideoCodec* codec_settings, 49 const VideoEncoder::Settings& settings) override; 50 int Encode(const VideoFrame& input_image, 51 const std::vector<VideoFrameType>* frame_types) override; 52 int RegisterEncodeCompleteCallback(EncodedImageCallback* callback) override; 53 void SetRates(const RateControlParameters& parameters) override; 54 void OnPacketLossRateUpdate(float packet_loss_rate) override; 55 void OnRttUpdate(int64_t rtt_ms) override; 56 void OnLossNotification(const LossNotification& loss_notification) override; 57 EncoderInfo GetEncoderInfo() const override; 58 59 private: 60 VideoEncoderFactory* const factory_; 61 SdpVideoFormat video_format_; 62 std::unique_ptr<VideoEncoder> encoder_; 63 EncodedImageCallback* callback_; 64 }; 65 66 } // namespace webrtc 67 68 #endif // MEDIA_ENGINE_ENCODER_SIMULCAST_PROXY_H_ 69