| Index: webrtc/video/vie_encoder.cc
 | 
| diff --git a/webrtc/video/vie_encoder.cc b/webrtc/video/vie_encoder.cc
 | 
| index 91fc1f0db21ad80a32868185fcfba8273376f2c0..ec20ad95fdede4ff6a26737542bdd3f98e8da05e 100644
 | 
| --- a/webrtc/video/vie_encoder.cc
 | 
| +++ b/webrtc/video/vie_encoder.cc
 | 
| @@ -17,26 +17,18 @@
 | 
|  #include "webrtc/base/checks.h"
 | 
|  #include "webrtc/base/logging.h"
 | 
|  #include "webrtc/base/trace_event.h"
 | 
| -#include "webrtc/common_video/include/frame_callback.h"
 | 
| -#include "webrtc/common_video/include/video_image.h"
 | 
| -#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
 | 
|  #include "webrtc/modules/pacing/paced_sender.h"
 | 
| -#include "webrtc/modules/utility/include/process_thread.h"
 | 
| -#include "webrtc/modules/video_coding/include/video_codec_interface.h"
 | 
|  #include "webrtc/modules/video_coding/include/video_coding.h"
 | 
|  #include "webrtc/modules/video_coding/include/video_coding_defines.h"
 | 
| -#include "webrtc/system_wrappers/include/clock.h"
 | 
|  #include "webrtc/system_wrappers/include/metrics.h"
 | 
|  #include "webrtc/system_wrappers/include/tick_util.h"
 | 
|  #include "webrtc/video/overuse_frame_detector.h"
 | 
| -#include "webrtc/video/payload_router.h"
 | 
|  #include "webrtc/video/send_statistics_proxy.h"
 | 
|  #include "webrtc/video_frame.h"
 | 
|  
 | 
|  namespace webrtc {
 | 
|  
 | 
|  static const float kStopPaddingThresholdMs = 2000;
 | 
| -static const int kMinKeyFrameRequestIntervalMs = 300;
 | 
|  
 | 
|  class QMVideoSettingsCallback : public VCMQMSettingsCallback {
 | 
|   public:
 | 
| @@ -54,12 +46,10 @@ class QMVideoSettingsCallback : public VCMQMSettingsCallback {
 | 
|  };
 | 
|  
 | 
|  ViEEncoder::ViEEncoder(uint32_t number_of_cores,
 | 
| -                       const std::vector<uint32_t>& ssrcs,
 | 
|                         ProcessThread* module_process_thread,
 | 
|                         SendStatisticsProxy* stats_proxy,
 | 
|                         OveruseFrameDetector* overuse_detector)
 | 
|      : number_of_cores_(number_of_cores),
 | 
| -      ssrcs_(ssrcs),
 | 
|        vp_(VideoProcessing::Create()),
 | 
|        qm_callback_(new QMVideoSettingsCallback(vp_.get())),
 | 
|        video_sender_(Clock::GetRealTimeClock(),
 | 
| @@ -76,7 +66,6 @@ ViEEncoder::ViEEncoder(uint32_t number_of_cores,
 | 
|        network_is_transmitting_(true),
 | 
|        encoder_paused_(true),
 | 
|        encoder_paused_and_dropped_frame_(false),
 | 
| -      time_last_intra_request_ms_(ssrcs.size(), -1),
 | 
|        module_process_thread_(module_process_thread),
 | 
|        has_received_sli_(false),
 | 
|        picture_id_sli_(0),
 | 
| @@ -156,11 +145,6 @@ void ViEEncoder::SetEncoder(const webrtc::VideoCodec& video_codec,
 | 
|    }
 | 
|  
 | 
|    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 =
 | 
|          VideoEncoderConfig::ContentType::kRealtimeVideo;
 | 
|      switch (video_codec.mode) {
 | 
| @@ -353,30 +337,6 @@ int32_t ViEEncoder::Encoded(const EncodedImage& encoded_image,
 | 
|    }
 | 
|  
 | 
|    overuse_detector_->FrameSent(encoded_image._timeStamp);
 | 
| -  if (kEnableFrameRecording) {
 | 
| -    int layer = codec_specific_info->codecType == kVideoCodecVP8
 | 
| -                    ? codec_specific_info->codecSpecific.VP8.simulcastIdx
 | 
| -                    : 0;
 | 
| -    IvfFileWriter* file_writer;
 | 
| -    {
 | 
| -      rtc::CritScope lock(&data_cs_);
 | 
| -      if (file_writers_[layer] == nullptr) {
 | 
| -        std::ostringstream oss;
 | 
| -        oss << "send_bitstream_ssrc";
 | 
| -        for (uint32_t ssrc : ssrcs_)
 | 
| -          oss << "_" << ssrc;
 | 
| -        oss << "_layer" << layer << ".ivf";
 | 
| -        file_writers_[layer] =
 | 
| -            IvfFileWriter::Open(oss.str(), codec_specific_info->codecType);
 | 
| -      }
 | 
| -      file_writer = file_writers_[layer].get();
 | 
| -    }
 | 
| -    if (file_writer) {
 | 
| -      bool ok = file_writer->WriteFrame(encoded_image);
 | 
| -      RTC_DCHECK(ok);
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
|    return success;
 | 
|  }
 | 
|  
 | 
| @@ -387,40 +347,22 @@ void ViEEncoder::SendStatistics(uint32_t bit_rate,
 | 
|      stats_proxy_->OnEncoderStatsUpdate(frame_rate, bit_rate, encoder_name);
 | 
|  }
 | 
|  
 | 
| -void ViEEncoder::OnReceivedSLI(uint32_t /*ssrc*/,
 | 
| -                               uint8_t picture_id) {
 | 
| +void ViEEncoder::OnReceivedSLI(uint8_t picture_id) {
 | 
|    rtc::CritScope lock(&data_cs_);
 | 
|    picture_id_sli_ = picture_id;
 | 
|    has_received_sli_ = true;
 | 
|  }
 | 
|  
 | 
| -void ViEEncoder::OnReceivedRPSI(uint32_t /*ssrc*/,
 | 
| -                                uint64_t picture_id) {
 | 
| +void ViEEncoder::OnReceivedRPSI(uint64_t picture_id) {
 | 
|    rtc::CritScope lock(&data_cs_);
 | 
|    picture_id_rpsi_ = picture_id;
 | 
|    has_received_rpsi_ = true;
 | 
|  }
 | 
|  
 | 
| -void ViEEncoder::OnReceivedIntraFrameRequest(uint32_t ssrc) {
 | 
| +void ViEEncoder::OnReceivedIntraFrameRequest(size_t stream_index) {
 | 
|    // Key frame request from remote side, signal to VCM.
 | 
|    TRACE_EVENT0("webrtc", "OnKeyFrameRequest");
 | 
| -
 | 
| -  for (size_t i = 0; i < ssrcs_.size(); ++i) {
 | 
| -    if (ssrcs_[i] != ssrc)
 | 
| -      continue;
 | 
| -    int64_t now_ms = TickTime::MillisecondTimestamp();
 | 
| -    {
 | 
| -      rtc::CritScope lock(&data_cs_);
 | 
| -      if (time_last_intra_request_ms_[i] + kMinKeyFrameRequestIntervalMs >
 | 
| -          now_ms) {
 | 
| -        return;
 | 
| -      }
 | 
| -      time_last_intra_request_ms_[i] = now_ms;
 | 
| -    }
 | 
| -    video_sender_.IntraFrameRequest(static_cast<int>(i));
 | 
| -    return;
 | 
| -  }
 | 
| -  RTC_NOTREACHED() << "Should not receive keyframe requests on unknown SSRCs.";
 | 
| +  video_sender_.IntraFrameRequest(stream_index);
 | 
|  }
 | 
|  
 | 
|  void ViEEncoder::OnBitrateUpdated(uint32_t bitrate_bps,
 | 
| @@ -443,8 +385,8 @@ void ViEEncoder::OnBitrateUpdated(uint32_t bitrate_bps,
 | 
|    if (!video_suspension_changed)
 | 
|      return;
 | 
|    // Video suspend-state changed, inform codec observer.
 | 
| -  LOG(LS_INFO) << "Video suspend state changed " << video_is_suspended
 | 
| -               << " for ssrc " << ssrcs_[0];
 | 
| +  LOG(LS_INFO) << "Video suspend state changed " << video_is_suspended;
 | 
| +
 | 
|    if (stats_proxy_)
 | 
|      stats_proxy_->OnSuspendChange(video_is_suspended);
 | 
|  }
 | 
| 
 |