OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2008 Google Inc. | 3 * Copyright 2008 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 cricket::VideoFormat::FpsToInterval(5), cricket::FOURCC_ARGB)); | 207 cricket::VideoFormat::FpsToInterval(5), cricket::FOURCC_ARGB)); |
208 capturer_.ResetSupportedFormats(formats); | 208 capturer_.ResetSupportedFormats(formats); |
209 | 209 |
210 EXPECT_EQ(cricket::CS_RUNNING, capturer_.Start(cricket::VideoFormat( | 210 EXPECT_EQ(cricket::CS_RUNNING, capturer_.Start(cricket::VideoFormat( |
211 kWidth, | 211 kWidth, |
212 kHeight, | 212 kHeight, |
213 cricket::VideoFormat::FpsToInterval(30), | 213 cricket::VideoFormat::FpsToInterval(30), |
214 cricket::FOURCC_ARGB))); | 214 cricket::FOURCC_ARGB))); |
215 EXPECT_TRUE(capturer_.IsRunning()); | 215 EXPECT_TRUE(capturer_.IsRunning()); |
216 EXPECT_EQ(0, renderer_.num_rendered_frames()); | 216 EXPECT_EQ(0, renderer_.num_rendered_frames()); |
217 renderer_.SetSize(kWidth, kHeight, 0); | |
218 EXPECT_TRUE(capturer_.CaptureFrame()); | 217 EXPECT_TRUE(capturer_.CaptureFrame()); |
219 EXPECT_EQ(1, renderer_.num_rendered_frames()); | 218 EXPECT_EQ(1, renderer_.num_rendered_frames()); |
| 219 EXPECT_EQ(kWidth, renderer_.width()); |
| 220 EXPECT_EQ(kHeight, renderer_.height()); |
220 } | 221 } |
221 | 222 |
222 TEST_F(VideoCapturerTest, TestRotationPending) { | 223 TEST_F(VideoCapturerTest, TestRotationPending) { |
223 int kWidth = 800; | 224 int kWidth = 800; |
224 int kHeight = 400; | 225 int kHeight = 400; |
225 int frame_count = 0; | 226 int frame_count = 0; |
226 | 227 |
227 std::vector<cricket::VideoFormat> formats; | 228 std::vector<cricket::VideoFormat> formats; |
228 formats.push_back(cricket::VideoFormat(kWidth, kHeight, | 229 formats.push_back(cricket::VideoFormat(kWidth, kHeight, |
229 cricket::VideoFormat::FpsToInterval(5), | 230 cricket::VideoFormat::FpsToInterval(5), |
230 cricket::FOURCC_I420)); | 231 cricket::FOURCC_I420)); |
231 | 232 |
232 capturer_.ResetSupportedFormats(formats); | 233 capturer_.ResetSupportedFormats(formats); |
233 // capturer_ should compensate rotation as default. | 234 // capturer_ should compensate rotation as default. |
234 capturer_.UpdateAspectRatio(400, 200); | 235 capturer_.UpdateAspectRatio(400, 200); |
235 | 236 |
236 EXPECT_EQ(cricket::CS_RUNNING, | 237 EXPECT_EQ(cricket::CS_RUNNING, |
237 capturer_.Start(cricket::VideoFormat( | 238 capturer_.Start(cricket::VideoFormat( |
238 kWidth, kHeight, cricket::VideoFormat::FpsToInterval(30), | 239 kWidth, kHeight, cricket::VideoFormat::FpsToInterval(30), |
239 cricket::FOURCC_I420))); | 240 cricket::FOURCC_I420))); |
240 EXPECT_TRUE(capturer_.IsRunning()); | 241 EXPECT_TRUE(capturer_.IsRunning()); |
241 EXPECT_EQ(0, renderer_.num_rendered_frames()); | 242 EXPECT_EQ(0, renderer_.num_rendered_frames()); |
242 | 243 |
243 // If the frame's rotation is compensated anywhere in the pipeline based on | 244 // If the frame's rotation is compensated anywhere in the pipeline based on |
244 // the rotation information, the renderer should be given the right dimension | 245 // the rotation information, the renderer should be given the right dimension |
245 // such that the frame could be rendered. | 246 // such that the frame could be rendered. |
246 | 247 |
247 // Swap the dimension for the next 2 frames which are rotated by 90 and 270 | |
248 // degree. | |
249 renderer_.SetSize(kHeight, kWidth, 0); | |
250 | |
251 capturer_.SetRotation(webrtc::kVideoRotation_90); | 248 capturer_.SetRotation(webrtc::kVideoRotation_90); |
252 EXPECT_TRUE(capturer_.CaptureFrame()); | 249 EXPECT_TRUE(capturer_.CaptureFrame()); |
253 EXPECT_EQ(++frame_count, renderer_.num_rendered_frames()); | 250 EXPECT_EQ(++frame_count, renderer_.num_rendered_frames()); |
| 251 // Swapped width and height |
| 252 EXPECT_EQ(kWidth, renderer_.height()); |
| 253 EXPECT_EQ(kHeight, renderer_.width()); |
254 | 254 |
255 capturer_.SetRotation(webrtc::kVideoRotation_270); | 255 capturer_.SetRotation(webrtc::kVideoRotation_270); |
256 EXPECT_TRUE(capturer_.CaptureFrame()); | 256 EXPECT_TRUE(capturer_.CaptureFrame()); |
257 EXPECT_EQ(++frame_count, renderer_.num_rendered_frames()); | 257 EXPECT_EQ(++frame_count, renderer_.num_rendered_frames()); |
258 | 258 // Swapped width and height |
259 // Reset the renderer to have corresponding width and height. | 259 EXPECT_EQ(kWidth, renderer_.height()); |
260 renderer_.SetSize(kWidth, kHeight, 0); | 260 EXPECT_EQ(kHeight, renderer_.width()); |
261 | 261 |
262 capturer_.SetRotation(webrtc::kVideoRotation_180); | 262 capturer_.SetRotation(webrtc::kVideoRotation_180); |
263 EXPECT_TRUE(capturer_.CaptureFrame()); | 263 EXPECT_TRUE(capturer_.CaptureFrame()); |
264 EXPECT_EQ(++frame_count, renderer_.num_rendered_frames()); | 264 EXPECT_EQ(++frame_count, renderer_.num_rendered_frames()); |
| 265 // Back to normal width and height |
| 266 EXPECT_EQ(kWidth, renderer_.width()); |
| 267 EXPECT_EQ(kHeight, renderer_.height()); |
265 } | 268 } |
266 | 269 |
267 TEST_F(VideoCapturerTest, TestRotationApplied) { | 270 TEST_F(VideoCapturerTest, TestRotationApplied) { |
268 int kWidth = 800; | 271 int kWidth = 800; |
269 int kHeight = 400; | 272 int kHeight = 400; |
270 | 273 |
271 std::vector<cricket::VideoFormat> formats; | 274 std::vector<cricket::VideoFormat> formats; |
272 formats.push_back(cricket::VideoFormat(kWidth, kHeight, | 275 formats.push_back(cricket::VideoFormat(kWidth, kHeight, |
273 cricket::VideoFormat::FpsToInterval(5), | 276 cricket::VideoFormat::FpsToInterval(5), |
274 cricket::FOURCC_I420)); | 277 cricket::FOURCC_I420)); |
275 | 278 |
276 capturer_.ResetSupportedFormats(formats); | 279 capturer_.ResetSupportedFormats(formats); |
277 // capturer_ should not compensate rotation. | 280 // capturer_ should not compensate rotation. |
278 capturer_.SetApplyRotation(false); | 281 capturer_.SetApplyRotation(false); |
279 capturer_.UpdateAspectRatio(400, 200); | 282 capturer_.UpdateAspectRatio(400, 200); |
280 set_expected_compensation(false); | 283 set_expected_compensation(false); |
281 | 284 |
282 EXPECT_EQ(cricket::CS_RUNNING, | 285 EXPECT_EQ(cricket::CS_RUNNING, |
283 capturer_.Start(cricket::VideoFormat( | 286 capturer_.Start(cricket::VideoFormat( |
284 kWidth, kHeight, cricket::VideoFormat::FpsToInterval(30), | 287 kWidth, kHeight, cricket::VideoFormat::FpsToInterval(30), |
285 cricket::FOURCC_I420))); | 288 cricket::FOURCC_I420))); |
286 EXPECT_TRUE(capturer_.IsRunning()); | 289 EXPECT_TRUE(capturer_.IsRunning()); |
287 EXPECT_EQ(0, renderer_.num_rendered_frames()); | 290 EXPECT_EQ(0, renderer_.num_rendered_frames()); |
288 | 291 |
289 renderer_.SetSize(kWidth, kHeight, 0); | |
290 | |
291 // If the frame's rotation is compensated anywhere in the pipeline, the frame | 292 // If the frame's rotation is compensated anywhere in the pipeline, the frame |
292 // won't have its original dimension out from capturer. Since the renderer | 293 // won't have its original dimension out from capturer. Since the renderer |
293 // here has the same dimension as the capturer, it will skip that frame as the | 294 // here has the same dimension as the capturer, it will skip that frame as the |
294 // resolution won't match anymore. | 295 // resolution won't match anymore. |
295 | 296 |
296 int frame_count = 0; | 297 int frame_count = 0; |
297 capturer_.SetRotation(webrtc::kVideoRotation_0); | 298 capturer_.SetRotation(webrtc::kVideoRotation_0); |
298 EXPECT_TRUE(capturer_.CaptureFrame()); | 299 EXPECT_TRUE(capturer_.CaptureFrame()); |
299 EXPECT_EQ(++frame_count, renderer_.num_rendered_frames()); | 300 EXPECT_EQ(++frame_count, renderer_.num_rendered_frames()); |
300 | 301 |
(...skipping 23 matching lines...) Expand all Loading... |
324 cricket::VideoFormat::FpsToInterval(5), cricket::FOURCC_ARGB)); | 325 cricket::VideoFormat::FpsToInterval(5), cricket::FOURCC_ARGB)); |
325 capturer_.ResetSupportedFormats(formats); | 326 capturer_.ResetSupportedFormats(formats); |
326 | 327 |
327 EXPECT_EQ(cricket::CS_RUNNING, capturer_.Start(cricket::VideoFormat( | 328 EXPECT_EQ(cricket::CS_RUNNING, capturer_.Start(cricket::VideoFormat( |
328 kWidth, | 329 kWidth, |
329 kHeight, | 330 kHeight, |
330 cricket::VideoFormat::FpsToInterval(30), | 331 cricket::VideoFormat::FpsToInterval(30), |
331 cricket::FOURCC_ARGB))); | 332 cricket::FOURCC_ARGB))); |
332 EXPECT_TRUE(capturer_.IsRunning()); | 333 EXPECT_TRUE(capturer_.IsRunning()); |
333 EXPECT_EQ(0, renderer_.num_rendered_frames()); | 334 EXPECT_EQ(0, renderer_.num_rendered_frames()); |
334 renderer_.SetSize(2050, 1538, 0); | |
335 EXPECT_TRUE(capturer_.CaptureFrame()); | 335 EXPECT_TRUE(capturer_.CaptureFrame()); |
336 EXPECT_EQ(1, renderer_.num_rendered_frames()); | 336 EXPECT_EQ(1, renderer_.num_rendered_frames()); |
| 337 EXPECT_EQ(kWidth / 2, renderer_.width()); |
| 338 EXPECT_EQ(kHeight / 2, renderer_.height()); |
337 } | 339 } |
338 | 340 |
339 TEST_F(VideoCapturerTest, TestFourccMatch) { | 341 TEST_F(VideoCapturerTest, TestFourccMatch) { |
340 cricket::VideoFormat desired(640, 480, | 342 cricket::VideoFormat desired(640, 480, |
341 cricket::VideoFormat::FpsToInterval(30), | 343 cricket::VideoFormat::FpsToInterval(30), |
342 cricket::FOURCC_ANY); | 344 cricket::FOURCC_ANY); |
343 cricket::VideoFormat best; | 345 cricket::VideoFormat best; |
344 EXPECT_TRUE(capturer_.GetBestCaptureFormat(desired, &best)); | 346 EXPECT_TRUE(capturer_.GetBestCaptureFormat(desired, &best)); |
345 EXPECT_EQ(640, best.width); | 347 EXPECT_EQ(640, best.width); |
346 EXPECT_EQ(480, best.height); | 348 EXPECT_EQ(480, best.height); |
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
806 capturer_.set_enable_camera_list(true); | 808 capturer_.set_enable_camera_list(true); |
807 capturer_.ConstrainSupportedFormats(vga_format); | 809 capturer_.ConstrainSupportedFormats(vga_format); |
808 EXPECT_EQ(2u, capturer_.GetSupportedFormats()->size()); | 810 EXPECT_EQ(2u, capturer_.GetSupportedFormats()->size()); |
809 // To make sure it's not just the camera list being broken, add in VGA and | 811 // To make sure it's not just the camera list being broken, add in VGA and |
810 // try again. This time, only the VGA format should be there. | 812 // try again. This time, only the VGA format should be there. |
811 supported_formats.push_back(vga_format); | 813 supported_formats.push_back(vga_format); |
812 capturer_.ResetSupportedFormats(supported_formats); | 814 capturer_.ResetSupportedFormats(supported_formats); |
813 ASSERT_EQ(1u, capturer_.GetSupportedFormats()->size()); | 815 ASSERT_EQ(1u, capturer_.GetSupportedFormats()->size()); |
814 EXPECT_EQ(vga_format.height, capturer_.GetSupportedFormats()->at(0).height); | 816 EXPECT_EQ(vga_format.height, capturer_.GetSupportedFormats()->at(0).height); |
815 } | 817 } |
OLD | NEW |