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

Unified Diff: remoting/client/plugin/pepper_video_renderer_2d.cc

Issue 1236663002: Allow shaped-desktop hosts to send shape only when it changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Simplify FrameConsumerProxy Created 5 years, 5 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: remoting/client/plugin/pepper_video_renderer_2d.cc
diff --git a/remoting/client/plugin/pepper_video_renderer_2d.cc b/remoting/client/plugin/pepper_video_renderer_2d.cc
index 678e829edccddad43c74d9a9aed9fcbd94de193f..9584e91ad241cec557dd5b264878f0b930a86dec 100644
--- a/remoting/client/plugin/pepper_video_renderer_2d.cc
+++ b/remoting/client/plugin/pepper_video_renderer_2d.cc
@@ -19,7 +19,6 @@
#include "remoting/base/util.h"
#include "remoting/client/chromoting_stats.h"
#include "remoting/client/client_context.h"
-#include "remoting/client/frame_consumer_proxy.h"
#include "remoting/client/frame_producer.h"
#include "remoting/client/software_video_renderer.h"
#include "remoting/proto/video.pb.h"
@@ -70,8 +69,7 @@ PepperVideoRenderer2D::PepperVideoRenderer2D()
flush_pending_(false),
frame_received_(false),
debug_dirty_region_(false),
- callback_factory_(this),
- weak_factory_(this) {
+ callback_factory_(this) {
}
PepperVideoRenderer2D::~PepperVideoRenderer2D() {
@@ -93,6 +91,7 @@ bool PepperVideoRenderer2D::Initialize(pp::Instance* instance,
const ClientContext& context,
EventHandler* event_handler) {
DCHECK(CalledOnValidThread());
+ DCHECK(context.main_task_runner()->BelongsToCurrentThread());
DCHECK(!instance_);
DCHECK(!event_handler_);
DCHECK(instance);
@@ -100,11 +99,8 @@ bool PepperVideoRenderer2D::Initialize(pp::Instance* instance,
instance_ = instance;
event_handler_ = event_handler;
- frame_consumer_proxy_ = new FrameConsumerProxy(
- context.main_task_runner(), weak_factory_.GetWeakPtr());
software_video_renderer_.reset(new SoftwareVideoRenderer(
- context.main_task_runner(), context.decode_task_runner(),
- frame_consumer_proxy_));
+ context.main_task_runner(), context.decode_task_runner(), this));
Sergey Ulanov 2015/07/13 21:00:32 I think we still need FrameConsumerProxy. Software
Wez 2015/07/14 02:26:44 SoftwareVideoRenderer delegates decode-thread work
Sergey Ulanov 2015/07/14 16:12:24 I see, sorry I messed. This makes sense.
Sergey Ulanov 2015/07/14 16:13:22 I meant I mIssed it.
return true;
}
@@ -207,7 +203,7 @@ void PepperVideoRenderer2D::ApplyBuffer(const webrtc::DesktopSize& view_size,
const webrtc::DesktopRect& clip_area,
webrtc::DesktopFrame* buffer,
const webrtc::DesktopRegion& region,
- const webrtc::DesktopRegion& shape) {
+ const webrtc::DesktopRegion* shape) {
DCHECK(CalledOnValidThread());
if (!frame_received_) {
@@ -216,15 +212,20 @@ void PepperVideoRenderer2D::ApplyBuffer(const webrtc::DesktopSize& view_size,
}
// We cannot use the data in the buffer if its dimensions don't match the
// current view size.
- // TODO(alexeypa): We could rescale and draw it (or even draw it without
- // rescaling) to reduce the perceived lag while we are waiting for
- // the properly scaled data.
if (!view_size_.equals(view_size)) {
FreeBuffer(buffer);
AllocateBuffers();
} else {
FlushBuffer(clip_area, buffer, region);
- event_handler_->OnVideoShape(shape);
+ if (shape) {
+ if (!source_shape_ || !source_shape_->Equals(*shape)) {
+ source_shape_ = make_scoped_ptr(new webrtc::DesktopRegion(*shape));
+ event_handler_->OnVideoShape(source_shape_.get());
+ }
+ } else if (source_shape_) {
+ source_shape_ = nullptr;
+ event_handler_->OnVideoShape(nullptr);
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698