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:
Niels Möller 2018-03-27 16:39:01 +02:00 committed by Commit Bot
parent ff4cac9c48
commit 88614b0b06
5 changed files with 17 additions and 9 deletions

View File

@ -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",

View File

@ -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();
}

View File

@ -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;

View File

@ -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 =

View File

@ -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_