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..7e77c93887422fb5689f8172b37969347bda4258 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_->PrerendererSmoothingDisabled())) { |
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_->PrerendererSmoothingDisabled()) { |
+ // 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_) { |