Index: webrtc/video/vie_encoder.cc |
diff --git a/webrtc/video/vie_encoder.cc b/webrtc/video/vie_encoder.cc |
index 1433879f2d623a3086009308bf9ddf9dd6f551d9..7a453efc10e85508d75eebbe6775b00f031b0974 100644 |
--- a/webrtc/video/vie_encoder.cc |
+++ b/webrtc/video/vie_encoder.cc |
@@ -120,7 +120,7 @@ ViEEncoder::ViEEncoder(uint32_t number_of_cores, |
bitrate_allocator_(bitrate_allocator), |
time_of_last_frame_activity_ms_(0), |
encoder_config_(), |
- min_transmit_bitrate_kbps_(0), |
+ min_transmit_bitrate_bps_(0), |
last_observed_bitrate_bps_(0), |
network_is_transmitting_(true), |
encoder_paused_(false), |
@@ -194,7 +194,8 @@ int32_t ViEEncoder::DeRegisterExternalEncoder(uint8_t pl_type) { |
} |
return 0; |
} |
-void ViEEncoder::SetEncoder(const webrtc::VideoCodec& video_codec) { |
+void ViEEncoder::SetEncoder(const webrtc::VideoCodec& video_codec, |
+ int min_transmit_bitrate_bps) { |
RTC_DCHECK(send_payload_router_ != NULL); |
// Setting target width and height for VPM. |
RTC_CHECK_EQ(VPM_OK, |
@@ -207,6 +208,7 @@ void ViEEncoder::SetEncoder(const webrtc::VideoCodec& video_codec) { |
rtc::CritScope lock(&data_cs_); |
encoder_config_ = video_codec; |
encoder_paused_ = true; |
+ min_transmit_bitrate_bps_ = min_transmit_bitrate_bps; |
} |
// Add a bitrate observer to the allocator and update the start, max and |
@@ -232,6 +234,26 @@ void ViEEncoder::SetEncoder(const webrtc::VideoCodec& video_codec) { |
// Restart the media flow |
Restart(); |
+ if (stats_proxy_) { |
+ // Clear stats for disabled layers. |
+ for (size_t i = video_codec.numberOfSimulcastStreams; i < ssrcs_.size(); |
+ ++i) { |
+ stats_proxy_->OnInactiveSsrc(ssrcs_[i]); |
+ } |
+ VideoEncoderConfig::ContentType content_type; |
+ switch (video_codec.mode) { |
+ case kRealtimeVideo: |
+ content_type = VideoEncoderConfig::ContentType::kRealtimeVideo; |
+ break; |
+ case kScreensharing: |
+ content_type = VideoEncoderConfig::ContentType::kScreen; |
+ break; |
+ default: |
+ RTC_NOTREACHED(); |
+ break; |
+ } |
+ stats_proxy_->SetContentType(content_type); |
+ } |
} |
int ViEEncoder::GetPaddingNeededBps() const { |
@@ -242,11 +264,11 @@ int ViEEncoder::GetPaddingNeededBps() const { |
{ |
rtc::CritScope lock(&data_cs_); |
bool send_padding = encoder_config_.numberOfSimulcastStreams > 1 || |
- video_suspended_ || min_transmit_bitrate_kbps_ > 0; |
+ video_suspended_ || min_transmit_bitrate_bps_ > 0; |
if (!send_padding) |
return 0; |
time_of_last_frame_activity_ms = time_of_last_frame_activity_ms_; |
- min_transmit_bitrate_bps = 1000 * min_transmit_bitrate_kbps_; |
+ min_transmit_bitrate_bps = min_transmit_bitrate_bps_; |
bitrate_bps = last_observed_bitrate_bps_; |
send_codec = encoder_config_; |
} |
@@ -488,12 +510,6 @@ void ViEEncoder::OnReceivedIntraFrameRequest(uint32_t ssrc) { |
RTC_NOTREACHED() << "Should not receive keyframe requests on unknown SSRCs."; |
} |
-void ViEEncoder::SetMinTransmitBitrate(int min_transmit_bitrate_kbps) { |
- assert(min_transmit_bitrate_kbps >= 0); |
- rtc::CritScope lock(&data_cs_); |
- min_transmit_bitrate_kbps_ = min_transmit_bitrate_kbps; |
-} |
- |
// Called from ViEBitrateObserver. |
void ViEEncoder::OnNetworkChanged(uint32_t bitrate_bps, |
uint8_t fraction_lost, |