Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Unified Diff: webrtc/common_video/incoming_video_stream.cc

Issue 2708723003: Introduce new constructor to PlatformThread. (Closed)
Patch Set: Disable RTC_DCHECK in channel_proxy + add TODO Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 ed7b9ea29d8267d47cda582cbf8773a171985660..c1f61d1cfb87c94b55f57246a4ceaf684f98526d 100644
--- a/webrtc/common_video/incoming_video_stream.cc
+++ b/webrtc/common_video/incoming_video_stream.cc
@@ -16,13 +16,18 @@
#include "webrtc/system_wrappers/include/event_wrapper.h"
namespace webrtc {
+namespace {
+const int kEventStartupTimeMs = 10;
+const int kEventMaxWaitTimeMs = 100;
+} // namespace
IncomingVideoStream::IncomingVideoStream(
int32_t delay_ms,
rtc::VideoSinkInterface<VideoFrame>* callback)
: incoming_render_thread_(&IncomingVideoStreamThreadFun,
this,
- "IncomingVideoStreamThread"),
+ "IncomingVideoStreamThread",
+ rtc::kRealtimePriority),
deliver_buffer_event_(EventTimerWrapper::Create()),
external_callback_(callback),
render_buffers_(new VideoRenderFrames(delay_ms)) {
@@ -32,7 +37,6 @@ IncomingVideoStream::IncomingVideoStream(
deliver_buffer_event_->StartTimer(false, kEventStartupTimeMs);
incoming_render_thread_.Start();
- incoming_render_thread_.SetPriority(rtc::kRealtimePriority);
}
IncomingVideoStream::~IncomingVideoStream() {
@@ -57,39 +61,44 @@ void IncomingVideoStream::OnFrame(const VideoFrame& video_frame) {
}
}
-bool IncomingVideoStream::IncomingVideoStreamThreadFun(void* obj) {
- return static_cast<IncomingVideoStream*>(obj)->IncomingVideoStreamProcess();
+// static
+void IncomingVideoStream::IncomingVideoStreamThreadFun(void* obj) {
+ static_cast<IncomingVideoStream*>(obj)->IncomingVideoStreamProcess();
}
-bool IncomingVideoStream::IncomingVideoStreamProcess() {
+void IncomingVideoStream::IncomingVideoStreamProcess() {
RTC_DCHECK_RUN_ON(&render_thread_checker_);
- if (kEventError != deliver_buffer_event_->Wait(kEventMaxWaitTimeMs)) {
- // Get a new frame to render and the time for the frame after this one.
- rtc::Optional<VideoFrame> frame_to_render;
- uint32_t wait_time;
- {
- rtc::CritScope cs(&buffer_critsect_);
- if (!render_buffers_.get()) {
- // Terminating
- return false;
+ while (true) {
+ if (kEventError != deliver_buffer_event_->Wait(kEventMaxWaitTimeMs)) {
+ // Get a new frame to render and the time for the frame after this one.
+ rtc::Optional<VideoFrame> frame_to_render;
+ uint32_t wait_time;
+ {
+ rtc::CritScope cs(&buffer_critsect_);
+ if (!render_buffers_.get()) {
+ // Terminating
+ return;
+ }
+
+ frame_to_render = render_buffers_->FrameToRender();
+ wait_time = render_buffers_->TimeToNextFrameRelease();
}
- frame_to_render = render_buffers_->FrameToRender();
- wait_time = render_buffers_->TimeToNextFrameRelease();
- }
- // Set timer for next frame to render.
- if (wait_time > kEventMaxWaitTimeMs) {
- wait_time = kEventMaxWaitTimeMs;
- }
+ // 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) {
- external_callback_->OnFrame(*frame_to_render);
+ if (frame_to_render) {
+ external_callback_->OnFrame(*frame_to_render);
+ }
+ } else {
+ RTC_NOTREACHED();
}
}
- return true;
}
} // namespace webrtc
« no previous file with comments | « webrtc/common_video/include/incoming_video_stream.h ('k') | webrtc/logging/rtc_event_log/rtc_event_log_helper_thread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698