From 88614b0b064938fa2fdc2bf2731c3e8fe1aff853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= Date: Tue, 27 Mar 2018 16:39:01 +0200 Subject: [PATCH] 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 Reviewed-by: Rasmus Brandt Reviewed-by: Magnus Jedvert Cr-Commit-Position: refs/heads/master@{#22630} --- call/BUILD.gn | 1 + call/video_send_stream.cc | 4 +++- call/video_send_stream.h | 5 +++++ media/engine/webrtcvideoengine.cc | 13 ++++++++----- media/engine/webrtcvideoengine.h | 3 --- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/call/BUILD.gn b/call/BUILD.gn index c615f9dd22..2a0e38a3bb 100644 --- a/call/BUILD.gn +++ b/call/BUILD.gn @@ -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", diff --git a/call/video_send_stream.cc b/call/video_send_stream.cc index cb857b1371..e1b2991d6f 100644 --- a/call/video_send_stream.cc +++ b/call/video_send_stream.cc @@ -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(); } diff --git a/call/video_send_stream.h b/call/video_send_stream.h index 34bb5aea96..0019a95c65 100644 --- a/call/video_send_stream.h +++ b/call/video_send_stream.h @@ -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; diff --git a/media/engine/webrtcvideoengine.cc b/media/engine/webrtcvideoengine.cc index df0b33d322..b5ae3cba80 100644 --- a/media/engine/webrtcvideoengine.cc +++ b/media/engine/webrtcvideoengine.cc @@ -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& 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 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 = diff --git a/media/engine/webrtcvideoengine.h b/media/engine/webrtcvideoengine.h index 07e6c70e93..2a03a530ea 100644 --- a/media/engine/webrtcvideoengine.h +++ b/media/engine/webrtcvideoengine.h @@ -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& codec_settings, @@ -337,8 +336,6 @@ class WebRtcVideoChannel : public VideoMediaChannel, public webrtc::Transport { const bool enable_cpu_overuse_detection_; rtc::VideoSourceInterface* 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* encoder_sink_