Index: webrtc/video/vie_encoder.cc |
diff --git a/webrtc/video/vie_encoder.cc b/webrtc/video/vie_encoder.cc |
index 5722d06c1e651a4961896e49e774e83e9ed5218d..50ecd821ede0df202e1093d9eb5e40d13db5f230 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 { |
@@ -265,6 +265,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_); |
@@ -287,6 +288,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); |
quality_scaler_ = nullptr; |
@@ -309,6 +311,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) { |
@@ -400,7 +412,9 @@ 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) |
@@ -655,7 +669,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_; |