Index: webrtc/video/video_send_stream.cc |
diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc |
index 964475fd388e30288b82ac5bcf667b5c8274b13a..52cba448c737a0e3d640acd532936d0447f04636 100644 |
--- a/webrtc/video/video_send_stream.cc |
+++ b/webrtc/video/video_send_stream.cc |
@@ -16,6 +16,7 @@ |
#include <vector> |
#include "webrtc/common_types.h" |
+#include "webrtc/common_video/include/video_bitrate_allocator.h" |
#include "webrtc/base/checks.h" |
#include "webrtc/base/file.h" |
#include "webrtc/base/logging.h" |
@@ -285,7 +286,8 @@ namespace internal { |
// arbitrary thread. |
class VideoSendStreamImpl : public webrtc::BitrateAllocatorObserver, |
public webrtc::VCMProtectionCallback, |
- public ViEEncoder::EncoderSink { |
+ public ViEEncoder::EncoderSink, |
+ public VideoBitrateAllocationObserver { |
public: |
VideoSendStreamImpl(SendStatisticsProxy* stats_proxy, |
rtc::TaskQueue* worker_queue, |
@@ -348,6 +350,9 @@ class VideoSendStreamImpl : public webrtc::BitrateAllocatorObserver, |
const CodecSpecificInfo* codec_specific_info, |
const RTPFragmentationHeader* fragmentation) override; |
+ // Implements VideoBitrateAllocationObserver. |
+ void OnBitrateAllocationUpdated(const BitrateAllocation& allocation) override; |
+ |
void ConfigureProtection(); |
void ConfigureSsrcs(); |
void SignalEncoderTimedOut(); |
@@ -580,7 +585,6 @@ VideoSendStream::VideoSendStream( |
vie_encoder_.reset(new ViEEncoder( |
num_cpu_cores, &stats_proxy_, config_.encoder_settings, |
config_.pre_encode_callback, config_.post_encode_callback)); |
- |
worker_queue_->PostTask(std::unique_ptr<rtc::QueuedTask>(new ConstructionTask( |
&send_stream_, &thread_sync_event_, &stats_proxy_, vie_encoder_.get(), |
module_process_thread, call_stats, congestion_controller, |
@@ -592,7 +596,7 @@ VideoSendStream::VideoSendStream( |
// it was created on. |
thread_sync_event_.Wait(rtc::Event::kForever); |
send_stream_->RegisterProcessThread(module_process_thread); |
- |
+ vie_encoder_->SetBitrateObserver(send_stream_.get()); |
vie_encoder_->RegisterProcessThread(module_process_thread); |
ReconfigureVideoEncoder(std::move(encoder_config)); |
@@ -826,7 +830,7 @@ void VideoSendStreamImpl::DeRegisterProcessThread() { |
VideoSendStreamImpl::~VideoSendStreamImpl() { |
RTC_DCHECK_RUN_ON(worker_queue_); |
- RTC_DCHECK(!payload_router_.active()) |
+ RTC_DCHECK(!payload_router_.IsActive()) |
<< "VideoSendStreamImpl::Stop not called"; |
LOG(LS_INFO) << "~VideoSendStreamInternal: " << config_->ToString(); |
@@ -850,10 +854,10 @@ bool VideoSendStreamImpl::DeliverRtcp(const uint8_t* packet, size_t length) { |
void VideoSendStreamImpl::Start() { |
RTC_DCHECK_RUN_ON(worker_queue_); |
LOG(LS_INFO) << "VideoSendStream::Start"; |
- if (payload_router_.active()) |
+ if (payload_router_.IsActive()) |
return; |
TRACE_EVENT_INSTANT0("webrtc", "VideoSendStream::Start"); |
- payload_router_.set_active(true); |
+ payload_router_.SetActive(true); |
bitrate_allocator_->AddObserver( |
this, encoder_min_bitrate_bps_, encoder_max_bitrate_bps_, |
@@ -875,10 +879,10 @@ void VideoSendStreamImpl::Start() { |
void VideoSendStreamImpl::Stop() { |
RTC_DCHECK_RUN_ON(worker_queue_); |
LOG(LS_INFO) << "VideoSendStream::Stop"; |
- if (!payload_router_.active()) |
+ if (!payload_router_.IsActive()) |
return; |
TRACE_EVENT_INSTANT0("webrtc", "VideoSendStream::Stop"); |
- payload_router_.set_active(false); |
+ payload_router_.SetActive(false); |
bitrate_allocator_->RemoveObserver(this); |
{ |
rtc::CritScope lock(&encoder_activity_crit_sect_); |
@@ -900,6 +904,11 @@ void VideoSendStreamImpl::SignalEncoderTimedOut() { |
} |
} |
+void VideoSendStreamImpl::OnBitrateAllocationUpdated( |
+ const BitrateAllocation& allocation) { |
+ payload_router_.OnBitrateAllocationUpdated(allocation); |
+} |
+ |
void VideoSendStreamImpl::SignalEncoderActive() { |
RTC_DCHECK_RUN_ON(worker_queue_); |
LOG(LS_INFO) << "SignalEncoderActive, Encoder is active."; |
@@ -942,7 +951,7 @@ void VideoSendStreamImpl::OnEncoderConfigurationChanged( |
streams[0].width, streams[0].height, number_of_temporal_layers, |
config_->rtp.max_packet_size); |
- if (payload_router_.active()) { |
+ if (payload_router_.IsActive()) { |
// The send stream is started already. Update the allocator with new bitrate |
// limits. |
bitrate_allocator_->AddObserver( |
@@ -1150,7 +1159,7 @@ uint32_t VideoSendStreamImpl::OnBitrateUpdated(uint32_t bitrate_bps, |
uint8_t fraction_loss, |
int64_t rtt) { |
RTC_DCHECK_RUN_ON(worker_queue_); |
- RTC_DCHECK(payload_router_.active()) |
+ RTC_DCHECK(payload_router_.IsActive()) |
<< "VideoSendStream::Start has not been called."; |
// Get the encoder target rate. It is the estimated network rate - |
// protection overhead. |