| Index: webrtc/video/video_send_stream.cc
|
| diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc
|
| index cecc7e9b399645d511ec14c27c0977b5cdd18839..9e38384381f8d76ac15ef4b0d3b8e59457f82ae3 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()),
|
| @@ -516,18 +513,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);
|
| }
|
|
|
| @@ -565,8 +561,11 @@ void VideoSendStream::EncoderProcess() {
|
| this, encoder_settings->video_codec.minBitrate * 1000,
|
| encoder_settings->video_codec.maxBitrate * 1000) /
|
| 1000;
|
| +
|
| + payload_router_.SetSendStreams(encoder_settings->streams);
|
| 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);
|
| @@ -596,7 +595,7 @@ void VideoSendStream::ReconfigureVideoEncoder(
|
| {
|
| rtc::CritScope lock(&encoder_settings_crit_);
|
| pending_encoder_settings_ = rtc::Optional<EncoderSettings>(
|
| - {video_codec, config.min_transmit_bitrate_bps});
|
| + {video_codec, config.min_transmit_bitrate_bps, config.streams});
|
| }
|
| encoder_wakeup_event_.Set();
|
| }
|
| @@ -615,6 +614,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|;
|
| + 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);
|
| }
|
|
|
|
|