Chromium Code Reviews| Index: webrtc/video/video_send_stream.cc |
| diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc |
| index 95552704b8fc9bb522caf7b9197f354fc01f93e6..ce0cf589358bb273ff7c16454ed88b2302de3430 100644 |
| --- a/webrtc/video/video_send_stream.cc |
| +++ b/webrtc/video/video_send_stream.cc |
| @@ -383,6 +383,7 @@ VideoSendStream::VideoSendStream( |
| encoder_feedback_(Clock::GetRealTimeClock(), |
| config.rtp.ssrcs, |
| &vie_encoder_), |
| + post_encode_protection_(Clock::GetRealTimeClock(), this), |
| video_sender_(vie_encoder_.video_sender()), |
| bandwidth_observer_(congestion_controller_->GetBitrateController() |
| ->CreateRtcpBandwidthObserver()), |
| @@ -417,8 +418,6 @@ VideoSendStream::VideoSendStream( |
| congestion_controller_->packet_router()->AddRtpModule(rtp_rtcp); |
| } |
| - video_sender_->RegisterProtectionCallback(this); |
| - |
| for (size_t i = 0; i < config_.rtp.extensions.size(); ++i) { |
| const std::string& extension = config_.rtp.extensions[i].name; |
| int id = config_.rtp.extensions[i].id; |
| @@ -566,6 +565,13 @@ void VideoSendStream::EncoderProcess() { |
| stats_proxy_.OnInactiveSsrc(config_.rtp.ssrcs[i]); |
| } |
| + post_encode_protection_.SetEncodingData( |
| + encoder_settings->video_codec.startBitrate * 1000, |
| + encoder_settings->video_codec.width, |
| + encoder_settings->video_codec.height, |
| + encoder_settings->video_codec.maxFramerate, |
| + encoder_settings->streams.size(), payload_router_.MaxPayloadLength()); |
|
stefan-webrtc
2016/05/19 12:52:40
num_layers should be the number of temporal layers
perkj_webrtc
2016/06/01 20:55:23
Done.
|
| + |
| // We might've gotten new settings while configuring the encoder settings, |
| // restart from the top to see if that's the case before trying to encode |
| // a frame (which might correspond to the last frame size). |
| @@ -622,6 +628,7 @@ int32_t VideoSendStream::Encoded(const EncodedImage& encoded_image, |
| // |encoded_frame_proxy_| forwards frames to |config_.post_encode_callback|; |
| encoded_frame_proxy_.Encoded(encoded_image, codec_specific_info, |
| fragmentation); |
| + post_encode_protection_.UpdateWithEncodedData(encoded_image); |
| int32_t return_value = payload_router_.Encoded( |
| encoded_image, codec_specific_info, fragmentation); |
| @@ -701,8 +708,8 @@ void VideoSendStream::ConfigureProtection() { |
| } |
| } |
| - vie_encoder_.SetProtectionMethod(enable_protection_nack, |
| - enable_protection_fec); |
| + post_encode_protection_.SetProtectionMethod(enable_protection_fec, |
| + enable_protection_nack); |
| } |
| void VideoSendStream::ConfigureSsrcs() { |
| @@ -780,7 +787,12 @@ void VideoSendStream::OnBitrateUpdated(uint32_t bitrate_bps, |
| uint8_t fraction_loss, |
| int64_t rtt) { |
| payload_router_.SetTargetSendBitrate(bitrate_bps); |
| - vie_encoder_.OnBitrateUpdated(bitrate_bps, fraction_loss, rtt); |
| + // Get the encoder target rate. It is the estimated network rate - |
| + // protection overhead. |
| + uint32_t encoder_target_rate = |
| + post_encode_protection_.SetTargetRates(bitrate_bps, fraction_loss, rtt); |
| + |
| + vie_encoder_.OnBitrateUpdated(encoder_target_rate, fraction_loss, rtt); |
| } |
| int VideoSendStream::ProtectionRequest(const FecProtectionParams* delta_params, |