mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-12 21:30:45 +01:00

Instead of passing it as optional parameter during construction, pass field trials as required parameters on use. Test that create the EncoderStreamFactory might not have an easy access to the actual field trials, but prod code has appropriate field trials when uses the factory. This way EncoderStreamFactory doesn't need to depend on global field trial string through FieldTrialBaseConfig class. Bug: webrtc:10335 Change-Id: I8f7030e41579ff2c5dd362c491a4e1624b23e690 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/347700 Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#42098}
73 lines
2.6 KiB
C++
73 lines
2.6 KiB
C++
/*
|
|
* 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 <string>
|
|
#include <vector>
|
|
|
|
#include "api/field_trials_view.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:
|
|
EncoderStreamFactory(std::string codec_name,
|
|
int max_qp,
|
|
bool is_screenshare,
|
|
bool conference_mode,
|
|
const webrtc::VideoEncoder::EncoderInfo& encoder_info,
|
|
absl::optional<webrtc::VideoSourceRestrictions>
|
|
restrictions = absl::nullopt);
|
|
|
|
std::vector<webrtc::VideoStream> CreateEncoderStreams(
|
|
const webrtc::FieldTrialsView& trials,
|
|
int width,
|
|
int height,
|
|
const webrtc::VideoEncoderConfig& encoder_config) override;
|
|
|
|
private:
|
|
std::vector<webrtc::VideoStream> CreateDefaultVideoStreams(
|
|
int width,
|
|
int height,
|
|
const webrtc::VideoEncoderConfig& encoder_config,
|
|
const absl::optional<webrtc::DataRate>& experimental_min_bitrate) const;
|
|
|
|
std::vector<webrtc::VideoStream>
|
|
CreateSimulcastOrConferenceModeScreenshareStreams(
|
|
const webrtc::FieldTrialsView& trials,
|
|
int width,
|
|
int height,
|
|
const webrtc::VideoEncoderConfig& encoder_config,
|
|
const absl::optional<webrtc::DataRate>& 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 int encoder_info_requested_resolution_alignment_;
|
|
const absl::optional<webrtc::VideoSourceRestrictions> restrictions_;
|
|
};
|
|
|
|
} // namespace cricket
|
|
|
|
#endif // VIDEO_CONFIG_ENCODER_STREAM_FACTORY_H_
|