/* * Copyright (c) 2022 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef VIDEO_CONFIG_ENCODER_STREAM_FACTORY_H_ #define VIDEO_CONFIG_ENCODER_STREAM_FACTORY_H_ #include #include #include "api/transport/field_trial_based_config.h" #include "api/units/data_rate.h" #include "api/video_codecs/video_encoder.h" #include "call/adaptation/video_source_restrictions.h" #include "video/config/video_encoder_config.h" namespace cricket { class EncoderStreamFactory : public webrtc::VideoEncoderConfig::VideoStreamFactoryInterface { public: // Note: this constructor is used by testcase in downstream. EncoderStreamFactory(std::string codec_name, int max_qp, bool is_screenshare, bool conference_mode); EncoderStreamFactory(std::string codec_name, int max_qp, bool is_screenshare, bool conference_mode, const webrtc::VideoEncoder::EncoderInfo& encoder_info, absl::optional restrictions = absl::nullopt, const webrtc::FieldTrialsView* trials = nullptr); std::vector CreateEncoderStreams( int width, int height, const webrtc::VideoEncoderConfig& encoder_config) override; private: std::vector CreateDefaultVideoStreams( int width, int height, const webrtc::VideoEncoderConfig& encoder_config, const absl::optional& experimental_min_bitrate) const; std::vector CreateSimulcastOrConferenceModeScreenshareStreams( int width, int height, const webrtc::VideoEncoderConfig& encoder_config, const absl::optional& experimental_min_bitrate) const; webrtc::Resolution GetLayerResolutionFromRequestedResolution( int in_frame_width, int in_frame_height, webrtc::Resolution requested_resolution) const; const std::string codec_name_; const int max_qp_; const bool is_screenshare_; // Allows a screenshare specific configuration, which enables temporal // layering and various settings. const bool conference_mode_; const webrtc::FieldTrialBasedConfig fallback_trials_; const webrtc::FieldTrialsView& trials_; const int encoder_info_requested_resolution_alignment_; const absl::optional restrictions_; }; } // namespace cricket #endif // VIDEO_CONFIG_ENCODER_STREAM_FACTORY_H_