Index: remoting/client/plugin/pepper_view.cc |
=================================================================== |
--- remoting/client/plugin/pepper_view.cc (revision 57131) |
+++ remoting/client/plugin/pepper_view.cc (working copy) |
@@ -5,7 +5,6 @@ |
#include "remoting/client/plugin/pepper_view.h" |
#include "base/message_loop.h" |
-#include "remoting/base/decoder_zlib.h" |
#include "remoting/client/plugin/chromoting_instance.h" |
#include "remoting/client/plugin/pepper_util.h" |
#include "third_party/ppapi/cpp/device_context_2d.h" |
@@ -17,8 +16,6 @@ |
PepperView::PepperView(ChromotingInstance* instance) |
: instance_(instance), |
- backing_store_width_(0), |
- backing_store_height_(0), |
viewport_x_(0), |
viewport_y_(0), |
viewport_width_(0), |
@@ -63,13 +60,13 @@ |
} else if (frame_) { |
uint32_t* frame_data = |
reinterpret_cast<uint32_t*>(frame_->data(media::VideoFrame::kRGBPlane)); |
- int max_height = std::min(backing_store_height_, image.size().height()); |
- int max_width = std::min(backing_store_width_, image.size().width()); |
+ int max_height = std::min(frame_height_, image.size().height()); |
+ int max_width = std::min(frame_width_, image.size().width()); |
for (int y = 0; y < max_height; y++) { |
for (int x = 0; x < max_width; x++) { |
// Force alpha to be set to 255. |
*image.GetAddr32(pp::Point(x, y)) = |
- frame_data[y*backing_store_width_ + x] | 0xFF000000; |
+ frame_data[y*frame_width_ + x] | 0xFF000000; |
} |
} |
} else { |
@@ -135,8 +132,11 @@ |
return; |
} |
- backing_store_width_ = width; |
- backing_store_height_ = height; |
+ frame_width_ = width; |
+ frame_height_ = height; |
+ |
+ // Reset |frame_| - it will be recreated by the next update stream. |
+ frame_ = NULL; |
} |
void PepperView::HandleBeginUpdateStream(HostMessage* msg) { |
@@ -149,24 +149,14 @@ |
scoped_ptr<HostMessage> deleter(msg); |
- // TODO(hclam): Use the information from the message to create the decoder. |
- // We lazily construct the decoder. |
- if (!decoder_.get()) { |
- decoder_.reset(new DecoderZlib()); |
- } |
- |
+ // Make sure the |frame_| is initialized. |
if (!frame_) { |
media::VideoFrame::CreateFrame(media::VideoFrame::RGB32, |
- backing_store_width_, |
- backing_store_height_, |
+ frame_width_, frame_height_, |
base::TimeDelta(), base::TimeDelta(), |
&frame_); |
+ CHECK(frame_); |
} |
- |
- // Tell the decoder to do start decoding. |
- decoder_->BeginDecode(frame_, &update_rects_, |
- NewRunnableMethod(this, &PepperView::OnPartialDecodeDone), |
- NewRunnableMethod(this, &PepperView::OnDecodeDone)); |
} |
void PepperView::HandleUpdateStreamPacket(HostMessage* msg) { |
@@ -177,7 +167,14 @@ |
return; |
} |
- decoder_->PartialDecode(msg); |
+ // Lazily initialize the decoder. |
+ SetupDecoder(msg->update_stream_packet().begin_rect().encoding()); |
+ if (!decoder_->IsStarted()) { |
+ BeginDecoding(NewRunnableMethod(this, &PepperView::OnPartialDecodeDone), |
+ NewRunnableMethod(this, &PepperView::OnDecodeDone)); |
+ } |
+ |
+ Decode(msg); |
} |
void PepperView::HandleEndUpdateStream(HostMessage* msg) { |
@@ -189,7 +186,7 @@ |
} |
scoped_ptr<HostMessage> deleter(msg); |
- decoder_->EndDecode(); |
+ EndDecoding(); |
} |
void PepperView::OnPaintDone() { |