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); |
+ } |
} |
} |