| Index: webrtc/common_video/incoming_video_stream.cc
 | 
| diff --git a/webrtc/common_video/incoming_video_stream.cc b/webrtc/common_video/incoming_video_stream.cc
 | 
| index a4b25fcd2e5946c30b91da327b44984f445c2363..aa2d94704a2952c9a28d8317b99a81b51b4805dd 100644
 | 
| --- a/webrtc/common_video/incoming_video_stream.cc
 | 
| +++ b/webrtc/common_video/incoming_video_stream.cc
 | 
| @@ -28,11 +28,17 @@
 | 
|  #include "webrtc/system_wrappers/include/thread_wrapper.h"
 | 
|  #include "webrtc/system_wrappers/include/tick_util.h"
 | 
|  #include "webrtc/system_wrappers/include/trace.h"
 | 
| +#include "webrtc/video_renderer.h"
 | 
|  
 | 
|  namespace webrtc {
 | 
|  
 | 
|  IncomingVideoStream::IncomingVideoStream(uint32_t stream_id)
 | 
| +    : IncomingVideoStream(stream_id, nullptr) {}
 | 
| +
 | 
| +IncomingVideoStream::IncomingVideoStream(uint32_t stream_id,
 | 
| +                                         VideoRenderer* renderer)
 | 
|      : stream_id_(stream_id),
 | 
| +      renderer_(renderer),
 | 
|        stream_critsect_(CriticalSectionWrapper::CreateCriticalSection()),
 | 
|        thread_critsect_(CriticalSectionWrapper::CreateCriticalSection()),
 | 
|        buffer_critsect_(CriticalSectionWrapper::CreateCriticalSection()),
 | 
| @@ -49,8 +55,7 @@ IncomingVideoStream::IncomingVideoStream(uint32_t stream_id)
 | 
|        temp_frame_(),
 | 
|        start_image_(),
 | 
|        timeout_image_(),
 | 
| -      timeout_time_() {
 | 
| -}
 | 
| +      timeout_time_() {}
 | 
|  
 | 
|  IncomingVideoStream::~IncomingVideoStream() {
 | 
|    Stop();
 | 
| @@ -82,9 +87,10 @@ int32_t IncomingVideoStream::RenderFrame(const uint32_t stream_id,
 | 
|  
 | 
|    // Insert frame.
 | 
|    CriticalSectionScoped csB(buffer_critsect_.get());
 | 
| -  if (render_buffers_->AddFrame(video_frame) == 1)
 | 
| +  if (render_buffers_->AddFrame(video_frame) == 1 ||
 | 
| +      (renderer_ && renderer_->CanScheduleFrame())) {
 | 
|      deliver_buffer_event_->Set();
 | 
| -
 | 
| +  }
 | 
|    return 0;
 | 
|  }
 | 
|  
 | 
| @@ -214,11 +220,13 @@ bool IncomingVideoStream::IncomingVideoStreamProcess() {
 | 
|        wait_time = render_buffers_->TimeToNextFrameRelease();
 | 
|      }
 | 
|  
 | 
| -    // Set timer for next frame to render.
 | 
| -    if (wait_time > kEventMaxWaitTimeMs) {
 | 
| -      wait_time = kEventMaxWaitTimeMs;
 | 
| +    if (!renderer_ || !renderer_->CanScheduleFrame()) {
 | 
| +      // Set timer for next frame to render.
 | 
| +      if (wait_time > kEventMaxWaitTimeMs) {
 | 
| +        wait_time = kEventMaxWaitTimeMs;
 | 
| +      }
 | 
| +      deliver_buffer_event_->StartTimer(false, wait_time);
 | 
|      }
 | 
| -    deliver_buffer_event_->StartTimer(false, wait_time);
 | 
|  
 | 
|      if (frame_to_render.IsZeroSize()) {
 | 
|        if (render_callback_) {
 | 
| 
 |