Index: webrtc/video/vie_encoder.cc |
diff --git a/webrtc/video/vie_encoder.cc b/webrtc/video/vie_encoder.cc |
index c2598f48a9079a9a103ab1f5cf66216997132ffc..e71935377dc8109d2c9f40618d888336ce68ffac 100644 |
--- a/webrtc/video/vie_encoder.cc |
+++ b/webrtc/video/vie_encoder.cc |
@@ -19,6 +19,7 @@ |
#include "webrtc/base/logging.h" |
#include "webrtc/base/trace_event.h" |
#include "webrtc/base/timeutils.h" |
+#include "webrtc/common_video/include/video_bitrate_allocator.h" |
#include "webrtc/modules/pacing/paced_sender.h" |
#include "webrtc/modules/video_coding/codecs/vp8/temporal_layers.h" |
#include "webrtc/modules/video_coding/include/video_coding.h" |
@@ -26,7 +27,6 @@ |
#include "webrtc/video/overuse_frame_detector.h" |
#include "webrtc/video/send_statistics_proxy.h" |
#include "webrtc/video_frame.h" |
- |
namespace webrtc { |
namespace { |
@@ -268,6 +268,7 @@ ViEEncoder::ViEEncoder(uint32_t number_of_cores, |
last_frame_log_ms_(clock_->TimeInMilliseconds()), |
captured_frame_count_(0), |
dropped_frame_count_(0), |
+ bitrate_observer_(nullptr), |
encoder_queue_("EncoderQueue") { |
encoder_queue_.PostTask([this] { |
RTC_DCHECK_RUN_ON(&encoder_queue_); |
@@ -290,6 +291,7 @@ void ViEEncoder::Stop() { |
RTC_DCHECK_RUN_ON(&encoder_queue_); |
overuse_detector_.StopCheckForOveruse(); |
rate_allocator_.reset(); |
+ bitrate_observer_ = nullptr; |
video_sender_.RegisterExternalEncoder(nullptr, settings_.payload_type, |
false); |
shutdown_event_.Set(); |
@@ -311,6 +313,16 @@ void ViEEncoder::DeRegisterProcessThread() { |
module_process_thread_->DeRegisterModule(&video_sender_); |
} |
+void ViEEncoder::SetBitrateObserver( |
+ VideoBitrateAllocationObserver* bitrate_observer) { |
+ RTC_DCHECK_RUN_ON(&thread_checker_); |
+ encoder_queue_.PostTask([this, bitrate_observer] { |
+ RTC_DCHECK_RUN_ON(&encoder_queue_); |
+ RTC_DCHECK(!bitrate_observer_); |
+ bitrate_observer_ = bitrate_observer; |
+ }); |
+} |
+ |
void ViEEncoder::SetSource( |
rtc::VideoSourceInterface<VideoFrame>* source, |
const VideoSendStream::DegradationPreference& degradation_preference) { |
@@ -407,7 +419,8 @@ void ViEEncoder::ReconfigureEncoder() { |
RTC_DCHECK(success); |
} |
- video_sender_.UpdateChannelParemeters(rate_allocator_.get()); |
+ video_sender_.UpdateChannelParemeters(rate_allocator_.get(), |
+ bitrate_observer_); |
if (stats_proxy_) { |
int framerate = stats_proxy_->GetSendFrameRate(); |
if (framerate == 0) |
@@ -639,7 +652,8 @@ void ViEEncoder::OnBitrateUpdated(uint32_t bitrate_bps, |
<< " rtt " << round_trip_time_ms; |
video_sender_.SetChannelParameters(bitrate_bps, fraction_lost, |
- round_trip_time_ms, rate_allocator_.get()); |
+ round_trip_time_ms, rate_allocator_.get(), |
+ bitrate_observer_); |
encoder_start_bitrate_bps_ = |
bitrate_bps != 0 ? bitrate_bps : encoder_start_bitrate_bps_; |