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