Pass VideoEncoderFactory from WebrtcVideoEngine to VideoStreamEncoder.
In preparation for also moving the responsibility for encoder creation. Bug: webrtc:8830 Change-Id: Ic3d2039a86cd31c1b4157f5df4e97b607c81f1d7 Reviewed-on: https://webrtc-review.googlesource.com/55264 Commit-Queue: Niels Moller <nisse@webrtc.org> Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> Reviewed-by: Magnus Jedvert <magjed@webrtc.org> Cr-Commit-Position: refs/heads/master@{#22630}
This commit is contained in:
parent
ff4cac9c48
commit
88614b0b06
@ -213,6 +213,7 @@ rtc_source_set("video_stream_api") {
|
||||
"../api:optional",
|
||||
"../api:transport_api",
|
||||
"../api:video_frame_api",
|
||||
"../api/video_codecs:video_codecs_api",
|
||||
"../common_video:common_video",
|
||||
"../modules/rtp_rtcp:rtp_rtcp_format",
|
||||
"../rtc_base:checks",
|
||||
|
||||
@ -86,7 +86,9 @@ std::string VideoSendStream::Config::ToString() const {
|
||||
|
||||
std::string VideoSendStream::Config::EncoderSettings::ToString() const {
|
||||
std::stringstream ss;
|
||||
ss << "{encoder: " << (encoder ? "(VideoEncoder)" : "nullptr");
|
||||
ss << "{encoder_factory: "
|
||||
<< (encoder_factory ? "(VideoEncoderFactory)" : "(nullptr)");
|
||||
ss << ", encoder: " << (encoder ? "(VideoEncoder)" : "nullptr");
|
||||
ss << '}';
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
@ -21,6 +21,7 @@
|
||||
#include "api/rtp_headers.h"
|
||||
#include "api/videosinkinterface.h"
|
||||
#include "api/videosourceinterface.h"
|
||||
#include "api/video_codecs/video_encoder_factory.h"
|
||||
#include "call/rtp_config.h"
|
||||
#include "call/video_config.h"
|
||||
#include "common_types.h" // NOLINT(build/include)
|
||||
@ -128,6 +129,10 @@ class VideoSendStream {
|
||||
// cpu adaptation.
|
||||
bool experiment_cpu_load_estimator = false;
|
||||
|
||||
// Ownership stays with WebrtcVideoEngine (delegated from PeerConnection).
|
||||
VideoEncoderFactory* encoder_factory = nullptr;
|
||||
|
||||
// TODO(nisse): Delete, let VideoStreamEncoder create the encoder.
|
||||
// Uninitialized VideoEncoder instance to be used for encoding. Will be
|
||||
// initialized from inside the VideoSendStream.
|
||||
VideoEncoder* encoder = nullptr;
|
||||
|
||||
@ -1133,9 +1133,10 @@ bool WebRtcVideoChannel::AddSendStream(const StreamParams& sp) {
|
||||
video_config_.periodic_alr_bandwidth_probing;
|
||||
config.encoder_settings.experiment_cpu_load_estimator =
|
||||
video_config_.experiment_cpu_load_estimator;
|
||||
config.encoder_settings.encoder_factory = encoder_factory_;
|
||||
|
||||
WebRtcVideoSendStream* stream = new WebRtcVideoSendStream(
|
||||
call_, sp, std::move(config), default_send_options_, encoder_factory_,
|
||||
call_, sp, std::move(config), default_send_options_,
|
||||
video_config_.enable_cpu_adaptation,
|
||||
bitrate_config_.max_bitrate_bps, send_codec_, send_rtp_extensions_,
|
||||
send_params_);
|
||||
@ -1574,7 +1575,6 @@ WebRtcVideoChannel::WebRtcVideoSendStream::WebRtcVideoSendStream(
|
||||
const StreamParams& sp,
|
||||
webrtc::VideoSendStream::Config config,
|
||||
const VideoOptions& options,
|
||||
webrtc::VideoEncoderFactory* encoder_factory,
|
||||
bool enable_cpu_overuse_detection,
|
||||
int max_bitrate_bps,
|
||||
const rtc::Optional<VideoCodecSettings>& codec_settings,
|
||||
@ -1588,7 +1588,6 @@ WebRtcVideoChannel::WebRtcVideoSendStream::WebRtcVideoSendStream(
|
||||
call_(call),
|
||||
enable_cpu_overuse_detection_(enable_cpu_overuse_detection),
|
||||
source_(nullptr),
|
||||
encoder_factory_(encoder_factory),
|
||||
stream_(nullptr),
|
||||
encoder_sink_(nullptr),
|
||||
parameters_(std::move(config), options, max_bitrate_bps, codec_settings),
|
||||
@ -1730,15 +1729,19 @@ void WebRtcVideoChannel::WebRtcVideoSendStream::SetCodec(
|
||||
|
||||
const webrtc::SdpVideoFormat format(codec_settings.codec.name,
|
||||
codec_settings.codec.params);
|
||||
|
||||
// We can't overwrite |allocated_encoder_| immediately, because we
|
||||
// need to release it after the RecreateWebRtcStream() call.
|
||||
std::unique_ptr<webrtc::VideoEncoder> new_encoder =
|
||||
encoder_factory_->CreateVideoEncoder(format);
|
||||
// TODO(nisse): Leave to VideoStreamEncoder.
|
||||
parameters_.config.encoder_settings.encoder_factory->CreateVideoEncoder(
|
||||
format);
|
||||
|
||||
parameters_.config.encoder_settings.encoder = new_encoder.get();
|
||||
|
||||
const webrtc::VideoEncoderFactory::CodecInfo info =
|
||||
encoder_factory_->QueryVideoEncoder(format);
|
||||
parameters_.config.encoder_settings.encoder_factory->QueryVideoEncoder(
|
||||
format);
|
||||
parameters_.config.encoder_settings.full_overuse_time =
|
||||
info.is_hardware_accelerated;
|
||||
parameters_.config.encoder_settings.internal_source =
|
||||
|
||||
@ -259,7 +259,6 @@ class WebRtcVideoChannel : public VideoMediaChannel, public webrtc::Transport {
|
||||
const StreamParams& sp,
|
||||
webrtc::VideoSendStream::Config config,
|
||||
const VideoOptions& options,
|
||||
webrtc::VideoEncoderFactory* encoder_factory,
|
||||
bool enable_cpu_overuse_detection,
|
||||
int max_bitrate_bps,
|
||||
const rtc::Optional<VideoCodecSettings>& codec_settings,
|
||||
@ -337,8 +336,6 @@ class WebRtcVideoChannel : public VideoMediaChannel, public webrtc::Transport {
|
||||
const bool enable_cpu_overuse_detection_;
|
||||
rtc::VideoSourceInterface<webrtc::VideoFrame>* source_
|
||||
RTC_GUARDED_BY(&thread_checker_);
|
||||
webrtc::VideoEncoderFactory* const encoder_factory_
|
||||
RTC_GUARDED_BY(&thread_checker_);
|
||||
|
||||
webrtc::VideoSendStream* stream_ RTC_GUARDED_BY(&thread_checker_);
|
||||
rtc::VideoSinkInterface<webrtc::VideoFrame>* encoder_sink_
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user