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 40871af1211d7c5d94c73eea4f9fdf7cdd701995..8c7c3cc205a1b194a2a7097304ba094fb26c7018 100644 |
| --- a/webrtc/video/video_send_stream.cc |
| +++ b/webrtc/video/video_send_stream.cc |
| @@ -372,16 +372,13 @@ VideoSendStream::VideoSendStream( |
| this, |
| config.post_encode_callback, |
| &stats_proxy_), |
| - vie_encoder_( |
| - num_cpu_cores, |
| - config_.rtp.ssrcs, |
| - module_process_thread_, |
| - &stats_proxy_, |
| - config.pre_encode_callback, |
| - &overuse_detector_, |
| - congestion_controller_->pacer(), |
| - &payload_router_, |
| - config.post_encode_callback ? &encoded_frame_proxy_ : nullptr), |
| + vie_encoder_(num_cpu_cores, |
| + config_.rtp.ssrcs, |
| + module_process_thread_, |
| + &stats_proxy_, |
| + config.pre_encode_callback, |
| + &overuse_detector_, |
| + congestion_controller_->pacer()), |
| video_sender_(vie_encoder_.video_sender()), |
| bandwidth_observer_(congestion_controller_->GetBitrateController() |
| ->CreateRtcpBandwidthObserver()), |
| @@ -499,18 +496,17 @@ void VideoSendStream::Start() { |
| if (payload_router_.active()) |
| return; |
| TRACE_EVENT_INSTANT0("webrtc", "VideoSendStream::Start"); |
| - vie_encoder_.Pause(); |
| payload_router_.set_active(true); |
| // Was not already started, trigger a keyframe. |
| vie_encoder_.SendKeyFrame(); |
| - vie_encoder_.Restart(); |
| + vie_encoder_.Start(); |
| } |
| void VideoSendStream::Stop() { |
| if (!payload_router_.active()) |
| return; |
| TRACE_EVENT_INSTANT0("webrtc", "VideoSendStream::Stop"); |
| - // TODO(pbos): Make sure the encoder stops here. |
| + vie_encoder_.Pause(); |
| payload_router_.set_active(false); |
| } |
| @@ -544,8 +540,11 @@ void VideoSendStream::EncoderProcess() { |
| this, encoder_settings->video_codec.minBitrate * 1000, |
| encoder_settings->video_codec.maxBitrate * 1000) / |
| 1000; |
| + |
| + payload_router_.SetSendCodec(encoder_settings->video_codec); |
|
pbos-webrtc
2016/04/22 15:24:20
Perhaps the encoder settings' VideoStreams can be
|
| vie_encoder_.SetEncoder(encoder_settings->video_codec, |
| - encoder_settings->min_transmit_bitrate_bps); |
| + encoder_settings->min_transmit_bitrate_bps, |
| + payload_router_.MaxPayloadLength(), this); |
| if (config_.suspend_below_min_bitrate) { |
| video_sender_->SuspendBelowMinBitrate(); |
| bitrate_allocator_->EnforceMinBitrate(false); |
| @@ -600,6 +599,16 @@ void VideoSendStream::NormalUsage() { |
| config_.overuse_callback->OnLoadUpdate(LoadObserver::kUnderuse); |
| } |
| +int32_t VideoSendStream::Encoded(const EncodedImage& encoded_image, |
| + const CodecSpecificInfo* codec_specific_info, |
| + const RTPFragmentationHeader* fragmentation) { |
| + // |encoded_frame_proxy_| forwards frames to |config_.post_encode_callback|; |
|
pbos-webrtc
2016/04/22 15:24:20
Should encoded_frame_proxy_ also contain payload_r
perkj_webrtc
2016/04/27 08:00:57
EncodedFrameProxy is used on the receive side and
|
| + encoded_frame_proxy_.Encoded(encoded_image, codec_specific_info, |
| + fragmentation); |
| + return payload_router_.Encoded(encoded_image, codec_specific_info, |
| + fragmentation); |
| +} |
| + |
| void VideoSendStream::ConfigureProtection() { |
| // Enable NACK, FEC or both. |
| const bool enable_protection_nack = config_.rtp.nack.rtp_history_ms > 0; |
| @@ -736,6 +745,7 @@ int VideoSendStream::GetPaddingNeededBps() const { |
| 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); |
| } |