Index: remoting/host/screen_recorder.cc |
diff --git a/remoting/host/screen_recorder.cc b/remoting/host/screen_recorder.cc |
index ab96a53708cf35a6c6db14f1e7d1fea6ef8635ff..5e98ff1706877a9b7e69bf5cbc953cfffe2af90b 100644 |
--- a/remoting/host/screen_recorder.cc |
+++ b/remoting/host/screen_recorder.cc |
@@ -142,6 +142,9 @@ void ScreenRecorder::DoStart() { |
return; |
} |
+ capturer()->SetCursorShapeChangedCallback( |
+ base::Bind(&ScreenRecorder::CursorShapeChangedCallback, this)); |
Wez
2012/05/16 00:20:04
nit: Could we do this in the ScreenRecorder's cons
garykac
2012/05/22 00:42:03
Wrong thread.
|
+ |
capturer()->Start(); |
capture_timer_.reset(new base::OneShotTimer<ScreenRecorder>()); |
@@ -214,6 +217,18 @@ void ScreenRecorder::CaptureDoneCallback( |
FROM_HERE, base::Bind(&ScreenRecorder::DoEncode, this, capture_data)); |
} |
+void ScreenRecorder::CursorShapeChangedCallback( |
+ scoped_refptr<CursorShapeData> cursor_data) { |
+ DCHECK_EQ(capture_loop_, MessageLoop::current()); |
+ |
+ if (!is_recording()) |
+ return; |
+ |
+ encode_loop_->PostTask( |
+ FROM_HERE, base::Bind(&ScreenRecorder::DoEncodeCursor, |
+ this, cursor_data)); |
+} |
+ |
void ScreenRecorder::DoFinishOneRecording() { |
DCHECK_EQ(capture_loop_, MessageLoop::current()); |
@@ -307,6 +322,36 @@ void ScreenRecorder::DoEncode( |
base::Bind(&ScreenRecorder::EncodedDataAvailableCallback, this)); |
} |
+void ScreenRecorder::DoEncodeCursor(scoped_refptr<CursorShapeData> cursor) { |
+ DCHECK_EQ(encode_loop_, MessageLoop::current()); |
+ |
+ scoped_ptr<VideoPacket> packet(new VideoPacket()); |
+ packet->set_flags(VideoPacket::CURSOR_SHAPE); |
+ |
+ CursorShapeInfo* info = packet->mutable_cursor_shape(); |
+ info->set_width(16); |
+ info->set_height(16); |
+ info->set_hotspot_x(0); |
+ info->set_hotspot_y(0); |
+ |
+ packet->mutable_data()->resize(16 * 16 * 4); |
+ uint8* data = const_cast<uint8*>(reinterpret_cast<const uint8*>( |
+ packet->mutable_data()->data())); |
+ // TODO(garykac) Copy real cursor data into packet. |
Wez
2012/05/16 00:20:04
Copying the data should be implemented in this CL,
garykac
2012/05/22 00:42:03
Done.
|
+ for (int y = 0; y < 16; y++) { |
+ for (int x = 0; x < 16; x++) { |
+ *data++ = 0xff; |
+ *data++ = 0xff; |
+ *data++ = 0xff; |
+ *data++ = 0xff; |
+ } |
+ } |
+ |
+ network_loop_->PostTask( |
+ FROM_HERE, base::Bind(&ScreenRecorder::DoSendVideoPacket, this, |
+ base::Passed(packet.Pass()))); |
+} |
+ |
void ScreenRecorder::DoStopOnEncodeThread(const base::Closure& done_task) { |
DCHECK_EQ(encode_loop_, MessageLoop::current()); |