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

Unified Diff: webrtc/common_video/incoming_video_stream.cc

Issue 1419673014: Remove frame time scheduing in IncomingVideoStream (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Totally disable the functionality Created 5 years, 1 month 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 79bbb8a7b67732e9226f4740f0d73d6cfb0a2d30..a146d93ff71ca62db8b4b8aa17bdf345bd106013 100644
--- a/webrtc/common_video/incoming_video_stream.cc
+++ b/webrtc/common_video/incoming_video_stream.cc
@@ -22,7 +22,6 @@
#endif
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
-#include "webrtc/common_video/video_render_frames.h"
#include "webrtc/system_wrappers/include/critical_section_wrapper.h"
#include "webrtc/system_wrappers/include/event_wrapper.h"
#include "webrtc/system_wrappers/include/thread_wrapper.h"
@@ -35,13 +34,9 @@ IncomingVideoStream::IncomingVideoStream(uint32_t stream_id)
: stream_id_(stream_id),
stream_critsect_(CriticalSectionWrapper::CreateCriticalSection()),
thread_critsect_(CriticalSectionWrapper::CreateCriticalSection()),
- buffer_critsect_(CriticalSectionWrapper::CreateCriticalSection()),
- incoming_render_thread_(),
- deliver_buffer_event_(EventTimerWrapper::Create()),
running_(false),
external_callback_(nullptr),
render_callback_(nullptr),
- render_buffers_(new VideoRenderFrames()),
incoming_rate_(0),
last_rate_calculation_time_ms_(0),
num_frames_since_last_calculation_(0),
@@ -64,7 +59,6 @@ VideoRenderCallback* IncomingVideoStream::ModuleCallback() {
int32_t IncomingVideoStream::RenderFrame(const uint32_t stream_id,
const VideoFrame& video_frame) {
CriticalSectionScoped csS(stream_critsect_.get());
-
if (!running_) {
return -1;
}
@@ -80,10 +74,33 @@ int32_t IncomingVideoStream::RenderFrame(const uint32_t stream_id,
last_rate_calculation_time_ms_ = now_ms;
}
- // Insert frame.
- CriticalSectionScoped csB(buffer_critsect_.get());
- if (render_buffers_->AddFrame(video_frame) == 1)
- deliver_buffer_event_->Set();
+ CriticalSectionScoped cs(thread_critsect_.get());
+ if (video_frame.IsZeroSize()) {
+ if (render_callback_) {
+ if (last_render_time_ms_ == 0 && !start_image_.IsZeroSize()) {
+ // We have not rendered anything and have a start image.
+ temp_frame_.CopyFrame(start_image_);
+ render_callback_->RenderFrame(stream_id_, temp_frame_);
+ } else if (!timeout_image_.IsZeroSize() &&
+ last_render_time_ms_ + timeout_time_ <
+ TickTime::MillisecondTimestamp()) {
+ // Render a timeout image.
+ temp_frame_.CopyFrame(timeout_image_);
+ render_callback_->RenderFrame(stream_id_, temp_frame_);
+ }
+ }
+
+ // No frame.
+ return 0;
+ }
+
+ // Send frame for rendering.
+ if (external_callback_) {
+ external_callback_->RenderFrame(stream_id_, video_frame);
+ } else if (render_callback_) {
+ render_callback_->RenderFrame(stream_id_, video_frame);
+ }
+ last_render_time_ms_ = video_frame.render_time_ms();
return 0;
}
@@ -112,8 +129,7 @@ int32_t IncomingVideoStream::SetExpectedRenderDelay(
if (running_) {
return -1;
}
- CriticalSectionScoped cs(buffer_critsect_.get());
- return render_buffers_->SetRenderDelay(delay_ms);
+ return 0;
}
void IncomingVideoStream::SetExternalCallback(
@@ -124,64 +140,17 @@ void IncomingVideoStream::SetExternalCallback(
int32_t IncomingVideoStream::Start() {
CriticalSectionScoped csS(stream_critsect_.get());
- if (running_) {
- return 0;
- }
-
- CriticalSectionScoped csT(thread_critsect_.get());
- assert(incoming_render_thread_ == NULL);
-
- incoming_render_thread_ = ThreadWrapper::CreateThread(
- IncomingVideoStreamThreadFun, this, "IncomingVideoStreamThread");
- if (!incoming_render_thread_) {
- return -1;
- }
-
- if (incoming_render_thread_->Start()) {
- } else {
- return -1;
- }
- incoming_render_thread_->SetPriority(kRealtimePriority);
- deliver_buffer_event_->StartTimer(false, kEventStartupTimeMs);
-
running_ = true;
return 0;
}
int32_t IncomingVideoStream::Stop() {
CriticalSectionScoped cs_stream(stream_critsect_.get());
-
- if (!running_) {
- return 0;
- }
-
- ThreadWrapper* thread = NULL;
- {
- CriticalSectionScoped cs_thread(thread_critsect_.get());
- if (incoming_render_thread_) {
- // Setting the incoming render thread to NULL marks that we're performing
- // a shutdown and will make IncomingVideoStreamProcess abort after wakeup.
- thread = incoming_render_thread_.release();
- deliver_buffer_event_->StopTimer();
- // Set the event to allow the thread to wake up and shut down without
- // waiting for a timeout.
- deliver_buffer_event_->Set();
- }
- }
- if (thread) {
- if (thread->Stop()) {
- delete thread;
- } else {
- assert(false);
- }
- }
running_ = false;
return 0;
}
int32_t IncomingVideoStream::Reset() {
- CriticalSectionScoped cs_buffer(buffer_critsect_.get());
- render_buffers_->ReleaseAllFrames();
return 0;
}
@@ -194,63 +163,4 @@ uint32_t IncomingVideoStream::IncomingRate() const {
return incoming_rate_;
}
-bool IncomingVideoStream::IncomingVideoStreamThreadFun(void* obj) {
- return static_cast<IncomingVideoStream*>(obj)->IncomingVideoStreamProcess();
-}
-
-bool IncomingVideoStream::IncomingVideoStreamProcess() {
- if (kEventError != deliver_buffer_event_->Wait(kEventMaxWaitTimeMs)) {
- CriticalSectionScoped cs(thread_critsect_.get());
- if (incoming_render_thread_ == NULL) {
- // Terminating
- return false;
- }
- // Get a new frame to render and the time for the frame after this one.
- VideoFrame frame_to_render;
- uint32_t wait_time;
- {
- CriticalSectionScoped cs(buffer_critsect_.get());
- 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;
- }
- deliver_buffer_event_->StartTimer(false, wait_time);
-
- if (frame_to_render.IsZeroSize()) {
- if (render_callback_) {
- if (last_render_time_ms_ == 0 && !start_image_.IsZeroSize()) {
- // We have not rendered anything and have a start image.
- temp_frame_.CopyFrame(start_image_);
- render_callback_->RenderFrame(stream_id_, temp_frame_);
- } else if (!timeout_image_.IsZeroSize() &&
- last_render_time_ms_ + timeout_time_ <
- TickTime::MillisecondTimestamp()) {
- // Render a timeout image.
- temp_frame_.CopyFrame(timeout_image_);
- render_callback_->RenderFrame(stream_id_, temp_frame_);
- }
- }
-
- // No frame.
- return true;
- }
-
- // Send frame for rendering.
- if (external_callback_) {
- external_callback_->RenderFrame(stream_id_, frame_to_render);
- } else if (render_callback_) {
- render_callback_->RenderFrame(stream_id_, frame_to_render);
- }
-
- // We're done with this frame.
- if (!frame_to_render.IsZeroSize())
- last_render_time_ms_ = frame_to_render.render_time_ms();
- }
- return true;
-}
-
} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698