Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(147)

Unified Diff: webrtc/video/video_send_stream.cc

Issue 1600973002: Initialize VideoEncoder objects asynchronously. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rename new_codec_settings Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/video/video_send_stream.h ('k') | webrtc/video/video_send_stream_tests.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video/video_send_stream.cc
diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc
index 656d5517941754df85a99a073d9634718a46c365..419c960910fad60dde1e4eef6c9b86defc7a6b05 100644
--- a/webrtc/video/video_send_stream.cc
+++ b/webrtc/video/video_send_stream.cc
@@ -92,13 +92,12 @@ std::string VideoSendStream::Config::ToString() const {
std::stringstream ss;
ss << "{encoder_settings: " << encoder_settings.ToString();
ss << ", rtp: " << rtp.ToString();
- ss << ", pre_encode_callback: "
- << (pre_encode_callback != nullptr ? "(I420FrameCallback)" : "nullptr");
- ss << ", post_encode_callback: " << (post_encode_callback != nullptr
- ? "(EncodedFrameObserver)"
- : "nullptr");
- ss << ", local_renderer: " << (local_renderer != nullptr ? "(VideoRenderer)"
- : "nullptr");
+ if (pre_encode_callback)
+ ss << ", pre_encode_effects: (I420FrameCallback)";
+ if (post_encode_callback)
+ ss << ", post_encode_callback: (EncodedFrameObserver)";
+ if (local_renderer)
+ ss << ", local_renderer: (VideoRenderer)";
ss << ", render_delay_ms: " << render_delay_ms;
ss << ", target_delay_ms: " << target_delay_ms;
ss << ", suspend_below_min_bitrate: " << (suspend_below_min_bitrate ? "on"
@@ -127,8 +126,7 @@ VideoSendStream::VideoSendStream(
module_process_thread_(module_process_thread),
call_stats_(call_stats),
congestion_controller_(congestion_controller),
- encoder_feedback_(new EncoderStateFeedback()),
- use_config_bitrate_(true) {
+ encoder_feedback_(new EncoderStateFeedback()) {
LOG(LS_INFO) << "VideoSendStream: " << config_.ToString();
RTC_DCHECK(!config_.rtp.ssrcs.empty());
@@ -207,22 +205,14 @@ VideoSendStream::VideoSendStream(
vie_channel_->SetRTCPCName(config_.rtp.c_name.c_str());
input_.reset(new internal::VideoCaptureInput(
- module_process_thread_, vie_encoder_.get(), config_.local_renderer,
- &stats_proxy_, this, config_.encoding_time_observer));
+ module_process_thread_, vie_encoder_.get(), vie_encoder_->vcm(), this,
+ config_, &stats_proxy_, this));
// 28 to match packet overhead in ModuleRtpRtcpImpl.
RTC_DCHECK_LE(config_.rtp.max_packet_size, static_cast<size_t>(0xFFFF - 28));
vie_channel_->SetMTU(static_cast<uint16_t>(config_.rtp.max_packet_size + 28));
- RTC_DCHECK(config.encoder_settings.encoder != nullptr);
- RTC_DCHECK_GE(config.encoder_settings.payload_type, 0);
- RTC_DCHECK_LE(config.encoder_settings.payload_type, 127);
- RTC_CHECK_EQ(0, vie_encoder_->RegisterExternalEncoder(
- config.encoder_settings.encoder,
- config.encoder_settings.payload_type,
- config.encoder_settings.internal_source));
-
- RTC_CHECK(ReconfigureVideoEncoder(encoder_config));
+ ReconfigureVideoEncoder(encoder_config);
vie_channel_->RegisterSendSideDelayObserver(&stats_proxy_);
@@ -230,7 +220,7 @@ VideoSendStream::VideoSendStream(
vie_encoder_->RegisterPostEncodeImageCallback(&encoded_frame_proxy_);
if (config_.suspend_below_min_bitrate)
- vie_encoder_->SuspendBelowMinBitrate();
+ bitrate_allocator->EnforceMinBitrate(false);
congestion_controller_->AddEncoder(vie_encoder_.get());
encoder_feedback_->AddEncoder(ssrcs, vie_encoder_.get());
@@ -254,9 +244,6 @@ VideoSendStream::~VideoSendStream() {
// channel is deleted.
input_.reset();
- vie_encoder_->DeRegisterExternalEncoder(
- config_.encoder_settings.payload_type);
-
call_stats_->DeregisterStatsObserver(vie_channel_->GetStatsObserver());
congestion_controller_->SetChannelRembStatus(false, false,
vie_channel_->rtp_rtcp());
@@ -294,7 +281,7 @@ void VideoSendStream::Stop() {
transport_adapter_.Disable();
}
-bool VideoSendStream::ReconfigureVideoEncoder(
+void VideoSendStream::ReconfigureVideoEncoder(
const VideoEncoderConfig& config) {
TRACE_EVENT0("webrtc", "VideoSendStream::(Re)configureVideoEncoder");
LOG(LS_INFO) << "(Re)configureVideoEncoder: " << config.ToString();
@@ -428,23 +415,12 @@ bool VideoSendStream::ReconfigureVideoEncoder(
RTC_DCHECK_GT(streams[0].max_framerate, 0);
video_codec.maxFramerate = streams[0].max_framerate;
- if (!SetSendCodec(video_codec))
- return false;
-
- // Clear stats for disabled layers.
- for (size_t i = video_codec.numberOfSimulcastStreams;
- i < config_.rtp.ssrcs.size(); ++i) {
- stats_proxy_.OnInactiveSsrc(config_.rtp.ssrcs[i]);
- }
-
- stats_proxy_.SetContentType(config.content_type);
+ input_->TriggerSetSendCodec(video_codec);
RTC_DCHECK_GE(config.min_transmit_bitrate_bps, 0);
vie_encoder_->SetMinTransmitBitrate(config.min_transmit_bitrate_bps / 1000);
encoder_config_ = config;
- use_config_bitrate_ = false;
- return true;
}
bool VideoSendStream::DeliverRtcp(const uint8_t* packet, size_t length) {
@@ -541,7 +517,7 @@ int VideoSendStream::GetPaddingNeededBps() const {
return vie_encoder_->GetPaddingNeededBps();
}
-bool VideoSendStream::SetSendCodec(VideoCodec video_codec) {
+void VideoSendStream::SetSendCodec(VideoCodec video_codec) {
static const int kEncoderMinBitrate = 30;
if (video_codec.maxBitrate == 0) {
// Unset max bitrate -> cap to one bit per pixel.
@@ -558,15 +534,8 @@ bool VideoSendStream::SetSendCodec(VideoCodec video_codec) {
// Stop the media flow while reconfiguring.
vie_encoder_->Pause();
- if (vie_encoder_->SetEncoder(video_codec) != 0) {
- LOG(LS_ERROR) << "Failed to set encoder.";
- return false;
- }
-
- if (vie_channel_->SetSendCodec(video_codec, false) != 0) {
- LOG(LS_ERROR) << "Failed to set send codec.";
- return false;
- }
+ vie_encoder_->SetEncoder(video_codec);
+ vie_channel_->SetSendCodec(video_codec);
// Not all configured SSRCs have to be utilized (simulcast senders don't have
// to send on all SSRCs at once etc.)
@@ -576,8 +545,17 @@ bool VideoSendStream::SetSendCodec(VideoCodec video_codec) {
// Restart the media flow
vie_encoder_->Restart();
+ // Clear stats for disabled layers.
+ for (size_t i = video_codec.numberOfSimulcastStreams;
+ i < config_.rtp.ssrcs.size(); ++i) {
+ stats_proxy_.OnInactiveSsrc(config_.rtp.ssrcs[i]);
+ }
- return true;
+ VideoEncoderConfig::ContentType content_type =
+ video_codec.mode == kRealtimeVideo
+ ? VideoEncoderConfig::ContentType::kRealtimeVideo
+ : VideoEncoderConfig::ContentType::kScreen;
+ stats_proxy_.SetContentType(content_type);
}
} // namespace internal
« no previous file with comments | « webrtc/video/video_send_stream.h ('k') | webrtc/video/video_send_stream_tests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698