Index: remoting/capturer/video_frame_capturer_win.cc |
diff --git a/remoting/host/video_frame_capturer_win.cc b/remoting/capturer/video_frame_capturer_win.cc |
similarity index 93% |
rename from remoting/host/video_frame_capturer_win.cc |
rename to remoting/capturer/video_frame_capturer_win.cc |
index 65a3c196792a84f9397f879cac75fb3496900663..931cfe7e3565b82a6522491f327d9e5d3c245e09 100644 |
--- a/remoting/host/video_frame_capturer_win.cc |
+++ b/remoting/capturer/video_frame_capturer_win.cc |
@@ -2,7 +2,7 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "remoting/host/video_frame_capturer.h" |
+#include "remoting/capturer/video_frame_capturer.h" |
#include <windows.h> |
@@ -16,14 +16,15 @@ |
#include "base/utf_string_conversions.h" |
#include "base/win/scoped_gdi_object.h" |
#include "base/win/scoped_hdc.h" |
-#include "remoting/base/capture_data.h" |
-#include "remoting/base/shared_buffer_factory.h" |
-#include "remoting/host/differ.h" |
-#include "remoting/host/video_frame.h" |
-#include "remoting/host/video_frame_capturer_helper.h" |
-#include "remoting/host/video_frame_queue.h" |
-#include "remoting/host/win/desktop.h" |
-#include "remoting/host/win/scoped_thread_desktop.h" |
+#include "remoting/capturer/capture_data.h" |
+#include "remoting/capturer/differ.h" |
+#include "remoting/capturer/mouse_cursor_shape.h" |
+#include "remoting/capturer/shared_buffer_factory.h" |
+#include "remoting/capturer/video_frame.h" |
+#include "remoting/capturer/video_frame_capturer_helper.h" |
+#include "remoting/capturer/video_frame_queue.h" |
+#include "remoting/capturer/win/desktop.h" |
+#include "remoting/capturer/win/scoped_thread_desktop.h" |
#include "remoting/proto/control.pb.h" |
#include "third_party/skia/include/core/SkColorPriv.h" |
@@ -119,8 +120,7 @@ class VideoFrameCapturerWin : public VideoFrameCapturer { |
// Snapshot of the last cursor bitmap we sent to the client. This is used |
// to diff against the current cursor so we only send a cursor-change |
// message when the shape has changed. |
- scoped_array<uint8> last_cursor_; |
- SkISize last_cursor_size_; |
+ MouseCursorShape last_cursor_; |
ScopedThreadDesktop desktop_; |
@@ -214,7 +214,6 @@ void VideoFrameWin::AllocateBitmap(HDC desktop_dc, const SkISize& size) { |
VideoFrameCapturerWin::VideoFrameCapturerWin() |
: shared_buffer_factory_(NULL), |
delegate_(NULL), |
- last_cursor_size_(SkISize::Make(0, 0)), |
desktop_dc_rect_(SkIRect::MakeEmpty()), |
pixel_format_(media::VideoFrame::RGB32), |
composition_func_(NULL) { |
@@ -224,7 +223,6 @@ VideoFrameCapturerWin::VideoFrameCapturerWin( |
SharedBufferFactory* shared_buffer_factory) |
: shared_buffer_factory_(shared_buffer_factory), |
delegate_(NULL), |
- last_cursor_size_(SkISize::Make(0, 0)), |
desktop_dc_rect_(SkIRect::MakeEmpty()), |
pixel_format_(media::VideoFrame::RGB32), |
composition_func_(NULL) { |
@@ -505,11 +503,10 @@ void VideoFrameCapturerWin::CaptureCursor() { |
} |
int data_size = height * width * kBytesPerPixel; |
- scoped_ptr<protocol::CursorShapeInfo> cursor_proto( |
- new protocol::CursorShapeInfo()); |
- cursor_proto->mutable_data()->resize(data_size); |
- uint8* cursor_dst_data = const_cast<uint8*>(reinterpret_cast<const uint8*>( |
- cursor_proto->mutable_data()->data())); |
+ scoped_ptr<MouseCursorShape> cursor; |
+ cursor->data.resize(data_size); |
+ uint8* cursor_dst_data = |
+ reinterpret_cast<uint8*>(string_as_array(&cursor->data)); |
// Copy/convert cursor bitmap into format needed by chromotocol. |
int row_bytes = bitmap.bmWidthBytes; |
@@ -520,7 +517,7 @@ void VideoFrameCapturerWin::CaptureCursor() { |
} |
// Copy across colour cursor imagery. |
- // CursorShapeInfo stores imagery top-down, and premultiplied |
+ // MouseCursorShape stores imagery top-down, and premultiplied |
// by the alpha channel, whereas windows stores them bottom-up |
// and not premultiplied. |
uint8* cursor_src_data = reinterpret_cast<uint8*>(bitmap.bmBits); |
@@ -587,26 +584,21 @@ void VideoFrameCapturerWin::CaptureCursor() { |
} |
} |
+ cursor->size.set(width, height); |
+ cursor->hotspot.set(hotspot_x, hotspot_y); |
+ |
// Compare the current cursor with the last one we sent to the client. If |
// they're the same, then don't bother sending the cursor again. |
- if (last_cursor_size_.equals(width, height) && |
- memcmp(last_cursor_.get(), cursor_dst_data, data_size) == 0) { |
+ if (last_cursor_ == *cursor) { |
return; |
} |
VLOG(3) << "Sending updated cursor: " << width << "x" << height; |
- cursor_proto->set_width(width); |
- cursor_proto->set_height(height); |
- cursor_proto->set_hotspot_x(hotspot_x); |
- cursor_proto->set_hotspot_y(hotspot_y); |
- |
// Record the last cursor image that we sent to the client. |
- last_cursor_.reset(new uint8[data_size]); |
- memcpy(last_cursor_.get(), cursor_dst_data, data_size); |
- last_cursor_size_ = SkISize::Make(width, height); |
+ last_cursor_ = *cursor; |
- delegate_->OnCursorShapeChanged(cursor_proto.Pass()); |
+ delegate_->OnCursorShapeChanged(cursor.Pass()); |
} |
} // namespace |