Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: trunk/src/content/browser/renderer_host/media/desktop_capture_device_unittest.cc

Issue 84393002: Revert 236927 "Reorganize media::VideoCapture* types" (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "content/browser/renderer_host/media/desktop_capture_device.h" 5 #include "content/browser/renderer_host/media/desktop_capture_device.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/sequenced_task_runner.h" 8 #include "base/sequenced_task_runner.h"
9 #include "base/synchronization/waitable_event.h" 9 #include "base/synchronization/waitable_event.h"
10 #include "base/test/test_timeouts.h" 10 #include "base/test/test_timeouts.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 scoped_refptr<Buffer>(media::VideoFrame::Format format, 44 scoped_refptr<Buffer>(media::VideoFrame::Format format,
45 const gfx::Size& dimensions)); 45 const gfx::Size& dimensions));
46 MOCK_METHOD0(OnError, void()); 46 MOCK_METHOD0(OnError, void());
47 MOCK_METHOD7(OnIncomingCapturedFrame, 47 MOCK_METHOD7(OnIncomingCapturedFrame,
48 void(const uint8* data, 48 void(const uint8* data,
49 int length, 49 int length,
50 base::Time timestamp, 50 base::Time timestamp,
51 int rotation, 51 int rotation,
52 bool flip_vert, 52 bool flip_vert,
53 bool flip_horiz, 53 bool flip_horiz,
54 const media::VideoCaptureFormat& frame_format)); 54 const media::VideoCaptureCapability& frame_info));
55 MOCK_METHOD5(OnIncomingCapturedBuffer, 55 MOCK_METHOD5(OnIncomingCapturedBuffer,
56 void(const scoped_refptr<Buffer>& buffer, 56 void(const scoped_refptr<Buffer>& buffer,
57 media::VideoFrame::Format format, 57 media::VideoFrame::Format format,
58 const gfx::Size& dimensions, 58 const gfx::Size& dimensions,
59 base::Time timestamp, 59 base::Time timestamp,
60 int frame_rate)); 60 int frame_rate));
61 }; 61 };
62 62
63 // TODO(sergeyu): Move this to a separate file where it can be reused. 63 // TODO(sergeyu): Move this to a separate file where it can be reused.
64 class FakeScreenCapturer : public webrtc::ScreenCapturer { 64 class FakeScreenCapturer : public webrtc::ScreenCapturer {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 #define MAYBE_Capture DISABLED_Capture 113 #define MAYBE_Capture DISABLED_Capture
114 #else 114 #else
115 #define MAYBE_Capture Capture 115 #define MAYBE_Capture Capture
116 #endif 116 #endif
117 TEST_F(DesktopCaptureDeviceTest, MAYBE_Capture) { 117 TEST_F(DesktopCaptureDeviceTest, MAYBE_Capture) {
118 scoped_ptr<webrtc::DesktopCapturer> capturer( 118 scoped_ptr<webrtc::DesktopCapturer> capturer(
119 webrtc::ScreenCapturer::Create()); 119 webrtc::ScreenCapturer::Create());
120 DesktopCaptureDevice capture_device( 120 DesktopCaptureDevice capture_device(
121 worker_pool_->GetSequencedTaskRunner(worker_pool_->GetSequenceToken()), 121 worker_pool_->GetSequencedTaskRunner(worker_pool_->GetSequenceToken()),
122 capturer.Pass()); 122 capturer.Pass());
123 media::VideoCaptureFormat format; 123 media::VideoCaptureCapability caps;
124 base::WaitableEvent done_event(false, false); 124 base::WaitableEvent done_event(false, false);
125 int frame_size; 125 int frame_size;
126 126
127 scoped_ptr<MockDeviceClient> client(new MockDeviceClient()); 127 scoped_ptr<MockDeviceClient> client(new MockDeviceClient());
128 EXPECT_CALL(*client, OnError()).Times(0); 128 EXPECT_CALL(*client, OnError()).Times(0);
129 EXPECT_CALL(*client, OnIncomingCapturedFrame(_, _, _, _, _, _, _)) 129 EXPECT_CALL(*client, OnIncomingCapturedFrame(_, _, _, _, _, _, _))
130 .WillRepeatedly( 130 .WillRepeatedly(
131 DoAll(SaveArg<1>(&frame_size), 131 DoAll(SaveArg<1>(&frame_size),
132 SaveArg<6>(&format), 132 SaveArg<6>(&caps),
133 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal))); 133 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal)));
134 134
135 media::VideoCaptureParams capture_params; 135 media::VideoCaptureCapability capture_format(
136 capture_params.requested_format.frame_size.SetSize(640, 480); 136 640, 480, kFrameRate, media::PIXEL_FORMAT_I420,
137 capture_params.requested_format.frame_rate = kFrameRate; 137 media::ConstantResolutionVideoCaptureDevice);
138 capture_params.requested_format.pixel_format = media::PIXEL_FORMAT_I420;
139 capture_params.allow_resolution_change = false;
140 capture_device.AllocateAndStart( 138 capture_device.AllocateAndStart(
141 capture_params, client.PassAs<media::VideoCaptureDevice::Client>()); 139 capture_format, client.PassAs<media::VideoCaptureDevice::Client>());
142 EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout())); 140 EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout()));
143 capture_device.StopAndDeAllocate(); 141 capture_device.StopAndDeAllocate();
144 142
145 EXPECT_GT(format.frame_size.width(), 0); 143 EXPECT_GT(caps.width, 0);
146 EXPECT_GT(format.frame_size.height(), 0); 144 EXPECT_GT(caps.height, 0);
147 EXPECT_EQ(kFrameRate, format.frame_rate); 145 EXPECT_EQ(kFrameRate, caps.frame_rate);
148 EXPECT_EQ(media::PIXEL_FORMAT_ARGB, format.pixel_format); 146 EXPECT_EQ(media::PIXEL_FORMAT_ARGB, caps.color);
149 147
150 EXPECT_EQ(format.frame_size.GetArea() * 4, frame_size); 148 EXPECT_EQ(caps.width * caps.height * 4, frame_size);
151 worker_pool_->FlushForTesting(); 149 worker_pool_->FlushForTesting();
152 } 150 }
153 151
154 // Test that screen capturer behaves correctly if the source frame size changes 152 // Test that screen capturer behaves correctly if the source frame size changes
155 // but the caller cannot cope with variable resolution output. 153 // but the caller cannot cope with variable resolution output.
156 TEST_F(DesktopCaptureDeviceTest, ScreenResolutionChangeConstantResolution) { 154 TEST_F(DesktopCaptureDeviceTest, ScreenResolutionChangeConstantResolution) {
157 FakeScreenCapturer* mock_capturer = new FakeScreenCapturer(); 155 FakeScreenCapturer* mock_capturer = new FakeScreenCapturer();
158 156
159 DesktopCaptureDevice capture_device( 157 DesktopCaptureDevice capture_device(
160 worker_pool_->GetSequencedTaskRunner(worker_pool_->GetSequenceToken()), 158 worker_pool_->GetSequencedTaskRunner(worker_pool_->GetSequenceToken()),
161 scoped_ptr<webrtc::DesktopCapturer>(mock_capturer)); 159 scoped_ptr<webrtc::DesktopCapturer>(mock_capturer));
162 160
163 media::VideoCaptureFormat format; 161 media::VideoCaptureCapability caps;
164 base::WaitableEvent done_event(false, false); 162 base::WaitableEvent done_event(false, false);
165 int frame_size; 163 int frame_size;
166 164
167 scoped_ptr<MockDeviceClient> client(new MockDeviceClient()); 165 scoped_ptr<MockDeviceClient> client(new MockDeviceClient());
168 EXPECT_CALL(*client, OnError()).Times(0); 166 EXPECT_CALL(*client, OnError()).Times(0);
169 EXPECT_CALL(*client, OnIncomingCapturedFrame(_, _, _, _, _, _, _)) 167 EXPECT_CALL(*client, OnIncomingCapturedFrame(_, _, _, _, _, _, _))
170 .WillRepeatedly( 168 .WillRepeatedly(
171 DoAll(SaveArg<1>(&frame_size), 169 DoAll(SaveArg<1>(&frame_size),
172 SaveArg<6>(&format), 170 SaveArg<6>(&caps),
173 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal))); 171 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal)));
174 172
175 media::VideoCaptureParams capture_params; 173 media::VideoCaptureCapability capture_format(
176 capture_params.requested_format.frame_size.SetSize(kTestFrameWidth1, 174 kTestFrameWidth1,
177 kTestFrameHeight1); 175 kTestFrameHeight1,
178 capture_params.requested_format.frame_rate = kFrameRate; 176 kFrameRate,
179 capture_params.requested_format.pixel_format = media::PIXEL_FORMAT_I420; 177 media::PIXEL_FORMAT_I420,
180 capture_params.allow_resolution_change = false; 178 media::ConstantResolutionVideoCaptureDevice);
181 179
182 capture_device.AllocateAndStart( 180 capture_device.AllocateAndStart(
183 capture_params, client.PassAs<media::VideoCaptureDevice::Client>()); 181 capture_format, client.PassAs<media::VideoCaptureDevice::Client>());
184 182
185 // Capture at least two frames, to ensure that the source frame size has 183 // Capture at least two frames, to ensure that the source frame size has
186 // changed while capturing. 184 // changed while capturing.
187 EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout())); 185 EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout()));
188 done_event.Reset(); 186 done_event.Reset();
189 EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout())); 187 EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout()));
190 188
191 capture_device.StopAndDeAllocate(); 189 capture_device.StopAndDeAllocate();
192 190
193 EXPECT_EQ(kTestFrameWidth1, format.frame_size.width()); 191 EXPECT_EQ(kTestFrameWidth1, caps.width);
194 EXPECT_EQ(kTestFrameHeight1, format.frame_size.height()); 192 EXPECT_EQ(kTestFrameHeight1, caps.height);
195 EXPECT_EQ(kFrameRate, format.frame_rate); 193 EXPECT_EQ(kFrameRate, caps.frame_rate);
196 EXPECT_EQ(media::PIXEL_FORMAT_ARGB, format.pixel_format); 194 EXPECT_EQ(media::PIXEL_FORMAT_ARGB, caps.color);
197 195
198 EXPECT_EQ(format.frame_size.GetArea() * 4, frame_size); 196 EXPECT_EQ(caps.width * caps.height * 4, frame_size);
199 worker_pool_->FlushForTesting(); 197 worker_pool_->FlushForTesting();
200 } 198 }
201 199
202 // Test that screen capturer behaves correctly if the source frame size changes 200 // Test that screen capturer behaves correctly if the source frame size changes
203 // and the caller can cope with variable resolution output. 201 // and the caller can cope with variable resolution output.
204 TEST_F(DesktopCaptureDeviceTest, ScreenResolutionChangeVariableResolution) { 202 TEST_F(DesktopCaptureDeviceTest, ScreenResolutionChangeVariableResolution) {
205 FakeScreenCapturer* mock_capturer = new FakeScreenCapturer(); 203 FakeScreenCapturer* mock_capturer = new FakeScreenCapturer();
206 204
207 DesktopCaptureDevice capture_device( 205 DesktopCaptureDevice capture_device(
208 worker_pool_->GetSequencedTaskRunner(worker_pool_->GetSequenceToken()), 206 worker_pool_->GetSequencedTaskRunner(worker_pool_->GetSequenceToken()),
209 scoped_ptr<webrtc::DesktopCapturer>(mock_capturer)); 207 scoped_ptr<webrtc::DesktopCapturer>(mock_capturer));
210 208
211 media::VideoCaptureFormat format; 209 media::VideoCaptureCapability caps;
212 base::WaitableEvent done_event(false, false); 210 base::WaitableEvent done_event(false, false);
213 211
214 scoped_ptr<MockDeviceClient> client(new MockDeviceClient()); 212 scoped_ptr<MockDeviceClient> client(new MockDeviceClient());
215 EXPECT_CALL(*client, OnError()).Times(0); 213 EXPECT_CALL(*client, OnError()).Times(0);
216 EXPECT_CALL(*client, OnIncomingCapturedFrame(_, _, _, _, _, _, _)) 214 EXPECT_CALL(*client, OnIncomingCapturedFrame(_, _, _, _, _, _, _))
217 .WillRepeatedly( 215 .WillRepeatedly(
218 DoAll(SaveArg<6>(&format), 216 DoAll(SaveArg<6>(&caps),
219 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal))); 217 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal)));
220 218
221 media::VideoCaptureParams capture_params; 219 media::VideoCaptureCapability capture_format(
222 capture_params.requested_format.frame_size.SetSize(kTestFrameWidth2, 220 kTestFrameWidth2,
223 kTestFrameHeight2); 221 kTestFrameHeight2,
224 capture_params.requested_format.frame_rate = kFrameRate; 222 kFrameRate,
225 capture_params.requested_format.pixel_format = media::PIXEL_FORMAT_I420; 223 media::PIXEL_FORMAT_I420,
226 capture_params.allow_resolution_change = false; 224 media::VariableResolutionVideoCaptureDevice);
227 225
228 capture_device.AllocateAndStart( 226 capture_device.AllocateAndStart(
229 capture_params, client.PassAs<media::VideoCaptureDevice::Client>()); 227 capture_format, client.PassAs<media::VideoCaptureDevice::Client>());
230 228
231 // Capture at least three frames, to ensure that the source frame size has 229 // Capture at least three frames, to ensure that the source frame size has
232 // changed at least twice while capturing. 230 // changed at least twice while capturing.
233 EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout())); 231 EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout()));
234 done_event.Reset(); 232 done_event.Reset();
235 EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout())); 233 EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout()));
236 done_event.Reset(); 234 done_event.Reset();
237 EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout())); 235 EXPECT_TRUE(done_event.TimedWait(TestTimeouts::action_max_timeout()));
238 236
239 capture_device.StopAndDeAllocate(); 237 capture_device.StopAndDeAllocate();
240 238
241 EXPECT_EQ(kTestFrameWidth1, format.frame_size.width()); 239 EXPECT_EQ(kTestFrameWidth1, caps.width);
242 EXPECT_EQ(kTestFrameHeight1, format.frame_size.height()); 240 EXPECT_EQ(kTestFrameHeight1, caps.height);
243 EXPECT_EQ(kFrameRate, format.frame_rate); 241 EXPECT_EQ(kFrameRate, caps.frame_rate);
244 EXPECT_EQ(media::PIXEL_FORMAT_ARGB, format.pixel_format); 242 EXPECT_EQ(media::PIXEL_FORMAT_ARGB, caps.color);
245 worker_pool_->FlushForTesting(); 243 worker_pool_->FlushForTesting();
246 } 244 }
247 245
248 } // namespace content 246 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698