OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "remoting/host/fake_screen_capturer.h" | 5 #include "remoting/host/fake_desktop_capturer.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
11 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" | 11 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" |
12 | 12 |
13 namespace remoting { | 13 namespace remoting { |
14 | 14 |
15 // FakeScreenCapturer generates a white picture of size kWidth x kHeight | 15 // FakeDesktopCapturer generates a white picture of size kWidth x kHeight |
16 // with a rectangle of size kBoxWidth x kBoxHeight. The rectangle moves kSpeed | 16 // with a rectangle of size kBoxWidth x kBoxHeight. The rectangle moves kSpeed |
17 // pixels per frame along both axes, and bounces off the sides of the screen. | 17 // pixels per frame along both axes, and bounces off the sides of the screen. |
18 static const int kWidth = FakeScreenCapturer::kWidth; | 18 static const int kWidth = FakeDesktopCapturer::kWidth; |
19 static const int kHeight = FakeScreenCapturer::kHeight; | 19 static const int kHeight = FakeDesktopCapturer::kHeight; |
20 static const int kBoxWidth = 140; | 20 static const int kBoxWidth = 140; |
21 static const int kBoxHeight = 140; | 21 static const int kBoxHeight = 140; |
22 static const int kSpeed = 20; | 22 static const int kSpeed = 20; |
23 | 23 |
24 COMPILE_ASSERT(kBoxWidth < kWidth && kBoxHeight < kHeight, bad_box_size); | 24 COMPILE_ASSERT(kBoxWidth < kWidth && kBoxHeight < kHeight, bad_box_size); |
25 COMPILE_ASSERT((kBoxWidth % kSpeed == 0) && (kWidth % kSpeed == 0) && | 25 COMPILE_ASSERT((kBoxWidth % kSpeed == 0) && (kWidth % kSpeed == 0) && |
26 (kBoxHeight % kSpeed == 0) && (kHeight % kSpeed == 0), | 26 (kBoxHeight % kSpeed == 0) && (kHeight % kSpeed == 0), |
27 sizes_must_be_multiple_of_kSpeed); | 27 sizes_must_be_multiple_of_kSpeed); |
28 | 28 |
29 namespace { | 29 namespace { |
30 | 30 |
31 class DefaultFrameGenerator | 31 class DefaultFrameGenerator |
32 : public base::RefCountedThreadSafe<DefaultFrameGenerator> { | 32 : public base::RefCountedThreadSafe<DefaultFrameGenerator> { |
33 public: | 33 public: |
34 DefaultFrameGenerator() | 34 DefaultFrameGenerator() |
35 : bytes_per_row_(0), | 35 : bytes_per_row_(0), |
36 box_pos_x_(0), | 36 box_pos_x_(0), |
37 box_pos_y_(0), | 37 box_pos_y_(0), |
38 box_speed_x_(kSpeed), | 38 box_speed_x_(kSpeed), |
39 box_speed_y_(kSpeed), | 39 box_speed_y_(kSpeed), |
40 first_frame_(true) {} | 40 first_frame_(true) {} |
41 | 41 |
42 scoped_ptr<webrtc::DesktopFrame> GenerateFrame( | 42 scoped_ptr<webrtc::DesktopFrame> GenerateFrame( |
43 webrtc::ScreenCapturer::Callback* callback); | 43 webrtc::DesktopCapturer::Callback* callback); |
44 | 44 |
45 private: | 45 private: |
46 friend class base::RefCountedThreadSafe<DefaultFrameGenerator>; | 46 friend class base::RefCountedThreadSafe<DefaultFrameGenerator>; |
47 ~DefaultFrameGenerator() {} | 47 ~DefaultFrameGenerator() {} |
48 | 48 |
49 webrtc::DesktopSize size_; | 49 webrtc::DesktopSize size_; |
50 int bytes_per_row_; | 50 int bytes_per_row_; |
51 int box_pos_x_; | 51 int box_pos_x_; |
52 int box_pos_y_; | 52 int box_pos_y_; |
53 int box_speed_x_; | 53 int box_speed_x_; |
54 int box_speed_y_; | 54 int box_speed_y_; |
55 bool first_frame_; | 55 bool first_frame_; |
56 | 56 |
57 DISALLOW_COPY_AND_ASSIGN(DefaultFrameGenerator); | 57 DISALLOW_COPY_AND_ASSIGN(DefaultFrameGenerator); |
58 }; | 58 }; |
59 | 59 |
60 scoped_ptr<webrtc::DesktopFrame> DefaultFrameGenerator::GenerateFrame( | 60 scoped_ptr<webrtc::DesktopFrame> DefaultFrameGenerator::GenerateFrame( |
61 webrtc::ScreenCapturer::Callback* callback) { | 61 webrtc::DesktopCapturer::Callback* callback) { |
62 const int kBytesPerPixel = webrtc::DesktopFrame::kBytesPerPixel; | 62 const int kBytesPerPixel = webrtc::DesktopFrame::kBytesPerPixel; |
63 int buffer_size = kWidth * kHeight * kBytesPerPixel; | 63 int buffer_size = kWidth * kHeight * kBytesPerPixel; |
64 webrtc::SharedMemory* shared_memory = | 64 webrtc::SharedMemory* shared_memory = |
65 callback->CreateSharedMemory(buffer_size); | 65 callback->CreateSharedMemory(buffer_size); |
66 scoped_ptr<webrtc::DesktopFrame> frame; | 66 scoped_ptr<webrtc::DesktopFrame> frame; |
67 if (shared_memory) { | 67 if (shared_memory) { |
68 frame.reset(new webrtc::SharedMemoryDesktopFrame( | 68 frame.reset(new webrtc::SharedMemoryDesktopFrame( |
69 webrtc::DesktopSize(kWidth, kHeight), bytes_per_row_, shared_memory)); | 69 webrtc::DesktopSize(kWidth, kHeight), bytes_per_row_, shared_memory)); |
70 } else { | 70 } else { |
71 frame.reset( | 71 frame.reset( |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 old_box_pos_x, old_box_pos_y, kBoxWidth, kBoxHeight)); | 113 old_box_pos_x, old_box_pos_y, kBoxWidth, kBoxHeight)); |
114 frame->mutable_updated_region()->AddRect(webrtc::DesktopRect::MakeXYWH( | 114 frame->mutable_updated_region()->AddRect(webrtc::DesktopRect::MakeXYWH( |
115 box_pos_x_, box_pos_y_, kBoxWidth, kBoxHeight)); | 115 box_pos_x_, box_pos_y_, kBoxWidth, kBoxHeight)); |
116 } | 116 } |
117 | 117 |
118 return frame.Pass(); | 118 return frame.Pass(); |
119 } | 119 } |
120 | 120 |
121 } // namespace | 121 } // namespace |
122 | 122 |
123 FakeScreenCapturer::FakeScreenCapturer() | 123 FakeDesktopCapturer::FakeDesktopCapturer() |
124 : callback_(NULL), | 124 : callback_(NULL) { |
125 mouse_shape_observer_(NULL) { | |
126 frame_generator_ = base::Bind(&DefaultFrameGenerator::GenerateFrame, | 125 frame_generator_ = base::Bind(&DefaultFrameGenerator::GenerateFrame, |
127 new DefaultFrameGenerator()); | 126 new DefaultFrameGenerator()); |
128 } | 127 } |
129 | 128 |
130 FakeScreenCapturer::~FakeScreenCapturer() {} | 129 FakeDesktopCapturer::~FakeDesktopCapturer() {} |
131 | 130 |
132 void FakeScreenCapturer::set_frame_generator( | 131 void FakeDesktopCapturer::set_frame_generator( |
133 const FrameGenerator& frame_generator) { | 132 const FrameGenerator& frame_generator) { |
134 DCHECK(!callback_); | 133 DCHECK(!callback_); |
135 frame_generator_ = frame_generator; | 134 frame_generator_ = frame_generator; |
136 } | 135 } |
137 | 136 |
138 void FakeScreenCapturer::Start(Callback* callback) { | 137 void FakeDesktopCapturer::Start(Callback* callback) { |
139 DCHECK(!callback_); | 138 DCHECK(!callback_); |
140 DCHECK(callback); | 139 DCHECK(callback); |
141 callback_ = callback; | 140 callback_ = callback; |
142 } | 141 } |
143 | 142 |
144 void FakeScreenCapturer::Capture(const webrtc::DesktopRegion& region) { | 143 void FakeDesktopCapturer::Capture(const webrtc::DesktopRegion& region) { |
145 base::Time capture_start_time = base::Time::Now(); | 144 base::Time capture_start_time = base::Time::Now(); |
146 scoped_ptr<webrtc::DesktopFrame> frame = frame_generator_.Run(callback_); | 145 scoped_ptr<webrtc::DesktopFrame> frame = frame_generator_.Run(callback_); |
147 frame->set_capture_time_ms( | 146 frame->set_capture_time_ms( |
148 (base::Time::Now() - capture_start_time).InMillisecondsRoundedUp()); | 147 (base::Time::Now() - capture_start_time).InMillisecondsRoundedUp()); |
149 callback_->OnCaptureCompleted(frame.release()); | 148 callback_->OnCaptureCompleted(frame.release()); |
150 } | 149 } |
151 | 150 |
152 void FakeScreenCapturer::SetMouseShapeObserver( | |
153 MouseShapeObserver* mouse_shape_observer) { | |
154 DCHECK(!mouse_shape_observer_); | |
155 DCHECK(mouse_shape_observer); | |
156 mouse_shape_observer_ = mouse_shape_observer; | |
157 } | |
158 | |
159 bool FakeScreenCapturer::GetScreenList(ScreenList* screens) { | |
160 NOTIMPLEMENTED(); | |
161 return false; | |
162 } | |
163 | |
164 bool FakeScreenCapturer::SelectScreen(webrtc::ScreenId id) { | |
165 NOTIMPLEMENTED(); | |
166 return false; | |
167 } | |
168 | |
169 } // namespace remoting | 151 } // namespace remoting |
OLD | NEW |