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