OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
241 | 241 |
242 *outWindow = _window; | 242 *outWindow = _window; |
243 *outDisplay = _display; | 243 *outDisplay = _display; |
244 | 244 |
245 return 0; | 245 return 0; |
246 } | 246 } |
247 #endif // WEBRTC_LINUX | 247 #endif // WEBRTC_LINUX |
248 | 248 |
249 // Note: Mac code is in testApi_mac.mm. | 249 // Note: Mac code is in testApi_mac.mm. |
250 | 250 |
251 class MyRenderCallback: public VideoRenderCallback | 251 class MyRenderCallback: public rtc::VideoSinkInterface<VideoFrame> |
252 { | 252 { |
253 public: | 253 public: |
254 MyRenderCallback() : | 254 MyRenderCallback() : |
255 _cnt(0) | 255 _cnt(0) |
256 { | 256 { |
257 } | 257 } |
258 ; | 258 ; |
259 ~MyRenderCallback() | 259 ~MyRenderCallback() |
260 { | 260 { |
261 } | 261 } |
262 ; | 262 ; |
263 virtual int32_t RenderFrame(const uint32_t streamId, | 263 void OnFrame(const VideoFrame& videoFrame) override { |
264 const VideoFrame& videoFrame) { | |
265 _cnt++; | 264 _cnt++; |
266 if (_cnt % 100 == 0) | 265 if (_cnt % 100 == 0) |
267 { | 266 { |
268 printf("Render callback %d \n",_cnt); | 267 printf("Render callback %d \n",_cnt); |
269 } | 268 } |
270 return 0; | |
271 } | 269 } |
272 int32_t _cnt; | 270 int32_t _cnt; |
273 }; | 271 }; |
274 | 272 |
275 void GetTestVideoFrame(VideoFrame* frame, uint8_t startColor) { | 273 void GetTestVideoFrame(VideoFrame* frame, uint8_t startColor) { |
276 // changing color | 274 // changing color |
277 static uint8_t color = startColor; | 275 static uint8_t color = startColor; |
278 | 276 |
279 memset(frame->buffer(kYPlane), color, frame->allocated_size(kYPlane)); | 277 memset(frame->buffer(kYPlane), color, frame->allocated_size(kYPlane)); |
280 memset(frame->buffer(kUPlane), color, frame->allocated_size(kUPlane)); | 278 memset(frame->buffer(kUPlane), color, frame->allocated_size(kUPlane)); |
281 memset(frame->buffer(kVPlane), color, frame->allocated_size(kVPlane)); | 279 memset(frame->buffer(kVPlane), color, frame->allocated_size(kVPlane)); |
282 | 280 |
283 ++color; | 281 ++color; |
284 } | 282 } |
285 | 283 |
286 int TestSingleStream(VideoRender* renderModule) { | 284 int TestSingleStream(VideoRender* renderModule) { |
287 int error = 0; | 285 int error = 0; |
288 // Add settings for a stream to render | 286 // Add settings for a stream to render |
289 printf("Add stream 0 to entire window\n"); | 287 printf("Add stream 0 to entire window\n"); |
290 const int streamId0 = 0; | 288 const int streamId0 = 0; |
291 VideoRenderCallback* renderCallback0 = renderModule->AddIncomingRenderStream (streamId0, 0, 0.0f, 0.0f, 1.0f, 1.0f); | 289 rtc::VideoSinkInterface<VideoFrame>* renderCallback0 = renderModule->AddInco mingRenderStream(streamId0, 0, 0.0f, 0.0f, 1.0f, 1.0f); |
perkj_webrtc
2016/03/31 05:11:58
line length
nisse-webrtc
2016/03/31 07:07:20
Done.
| |
292 assert(renderCallback0 != NULL); | 290 assert(renderCallback0 != NULL); |
293 | 291 |
294 printf("Start render\n"); | 292 printf("Start render\n"); |
295 error = renderModule->StartRender(streamId0); | 293 error = renderModule->StartRender(streamId0); |
296 if (error != 0) { | 294 if (error != 0) { |
297 // TODO(phoglund): This test will not work if compiled in release mode. | 295 // TODO(phoglund): This test will not work if compiled in release mode. |
298 // This rather silly construct here is to avoid compilation errors when | 296 // This rather silly construct here is to avoid compilation errors when |
299 // compiling in release. Release => no asserts => unused 'error' variable. | 297 // compiling in release. Release => no asserts => unused 'error' variable. |
300 assert(false); | 298 assert(false); |
301 } | 299 } |
302 | 300 |
303 // Loop through an I420 file and render each frame | 301 // Loop through an I420 file and render each frame |
304 const int width = 352; | 302 const int width = 352; |
305 const int half_width = (width + 1) / 2; | 303 const int half_width = (width + 1) / 2; |
306 const int height = 288; | 304 const int height = 288; |
307 | 305 |
308 VideoFrame videoFrame0; | 306 VideoFrame videoFrame0; |
309 videoFrame0.CreateEmptyFrame(width, height, width, half_width, half_width); | 307 videoFrame0.CreateEmptyFrame(width, height, width, half_width, half_width); |
310 | 308 |
311 const uint32_t renderDelayMs = 500; | 309 const uint32_t renderDelayMs = 500; |
312 | 310 |
313 for (int i=0; i<TEST_FRAME_NUM; i++) { | 311 for (int i=0; i<TEST_FRAME_NUM; i++) { |
314 GetTestVideoFrame(&videoFrame0, TEST_STREAM0_START_COLOR); | 312 GetTestVideoFrame(&videoFrame0, TEST_STREAM0_START_COLOR); |
315 // Render this frame with the specified delay | 313 // Render this frame with the specified delay |
316 videoFrame0.set_render_time_ms(TickTime::MillisecondTimestamp() | 314 videoFrame0.set_render_time_ms(TickTime::MillisecondTimestamp() |
317 + renderDelayMs); | 315 + renderDelayMs); |
318 renderCallback0->RenderFrame(streamId0, videoFrame0); | 316 renderCallback0->OnFrame(videoFrame0); |
319 SleepMs(1000/TEST_FRAME_RATE); | 317 SleepMs(1000/TEST_FRAME_RATE); |
320 } | 318 } |
321 | 319 |
322 | 320 |
323 // Shut down | 321 // Shut down |
324 printf("Closing...\n"); | 322 printf("Closing...\n"); |
325 error = renderModule->StopRender(streamId0); | 323 error = renderModule->StopRender(streamId0); |
326 assert(error == 0); | 324 assert(error == 0); |
327 | 325 |
328 error = renderModule->DeleteIncomingRenderStream(streamId0); | 326 error = renderModule->DeleteIncomingRenderStream(streamId0); |
(...skipping 16 matching lines...) Expand all Loading... | |
345 return 0; | 343 return 0; |
346 } | 344 } |
347 | 345 |
348 int TestBitmapText(VideoRender* renderModule) { | 346 int TestBitmapText(VideoRender* renderModule) { |
349 #if defined(WIN32) | 347 #if defined(WIN32) |
350 | 348 |
351 int error = 0; | 349 int error = 0; |
352 // Add settings for a stream to render | 350 // Add settings for a stream to render |
353 printf("Add stream 0 to entire window\n"); | 351 printf("Add stream 0 to entire window\n"); |
354 const int streamId0 = 0; | 352 const int streamId0 = 0; |
355 VideoRenderCallback* renderCallback0 = renderModule->AddIncomingRenderStream (streamId0, 0, 0.0f, 0.0f, 1.0f, 1.0f); | 353 rtc::VideoSinkInterface<VideoFrame>* renderCallback0 = renderModule->AddInco mingRenderStream(streamId0, 0, 0.0f, 0.0f, 1.0f, 1.0f); |
perkj_webrtc
2016/03/31 05:11:58
line length
| |
356 assert(renderCallback0 != NULL); | 354 assert(renderCallback0 != NULL); |
357 | 355 |
358 printf("Adding Bitmap\n"); | 356 printf("Adding Bitmap\n"); |
359 DDCOLORKEY ColorKey; // black | 357 DDCOLORKEY ColorKey; // black |
360 ColorKey.dwColorSpaceHighValue = RGB(0, 0, 0); | 358 ColorKey.dwColorSpaceHighValue = RGB(0, 0, 0); |
361 ColorKey.dwColorSpaceLowValue = RGB(0, 0, 0); | 359 ColorKey.dwColorSpaceLowValue = RGB(0, 0, 0); |
362 HBITMAP hbm = (HBITMAP)LoadImage(NULL, | 360 HBITMAP hbm = (HBITMAP)LoadImage(NULL, |
363 (LPCTSTR)_T("renderStartImage.bmp"), | 361 (LPCTSTR)_T("renderStartImage.bmp"), |
364 IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); | 362 IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); |
365 renderModule->SetBitmap(hbm, 0, &ColorKey, 0.0f, 0.0f, 0.3f, | 363 renderModule->SetBitmap(hbm, 0, &ColorKey, 0.0f, 0.0f, 0.3f, |
(...skipping 16 matching lines...) Expand all Loading... | |
382 VideoFrame videoFrame0; | 380 VideoFrame videoFrame0; |
383 videoFrame0.CreateEmptyFrame(width, height, width, half_width, half_width); | 381 videoFrame0.CreateEmptyFrame(width, height, width, half_width, half_width); |
384 | 382 |
385 const uint32_t renderDelayMs = 500; | 383 const uint32_t renderDelayMs = 500; |
386 | 384 |
387 for (int i=0; i<TEST_FRAME_NUM; i++) { | 385 for (int i=0; i<TEST_FRAME_NUM; i++) { |
388 GetTestVideoFrame(&videoFrame0, TEST_STREAM0_START_COLOR); | 386 GetTestVideoFrame(&videoFrame0, TEST_STREAM0_START_COLOR); |
389 // Render this frame with the specified delay | 387 // Render this frame with the specified delay |
390 videoFrame0.set_render_time_ms(TickTime::MillisecondTimestamp() + | 388 videoFrame0.set_render_time_ms(TickTime::MillisecondTimestamp() + |
391 renderDelayMs); | 389 renderDelayMs); |
392 renderCallback0->RenderFrame(streamId0, videoFrame0); | 390 renderCallback0->OnFrame(videoFrame0); |
393 SleepMs(1000/TEST_FRAME_RATE); | 391 SleepMs(1000/TEST_FRAME_RATE); |
394 } | 392 } |
395 // Sleep and let all frames be rendered before closing | 393 // Sleep and let all frames be rendered before closing |
396 SleepMs(renderDelayMs*2); | 394 SleepMs(renderDelayMs*2); |
397 | 395 |
398 | 396 |
399 // Shut down | 397 // Shut down |
400 printf("Closing...\n"); | 398 printf("Closing...\n"); |
401 ColorKey.dwColorSpaceHighValue = RGB(0,0,0); | 399 ColorKey.dwColorSpaceHighValue = RGB(0,0,0); |
402 ColorKey.dwColorSpaceLowValue = RGB(0,0,0); | 400 ColorKey.dwColorSpaceLowValue = RGB(0,0,0); |
(...skipping 10 matching lines...) Expand all Loading... | |
413 | 411 |
414 return 0; | 412 return 0; |
415 } | 413 } |
416 | 414 |
417 int TestMultipleStreams(VideoRender* renderModule) { | 415 int TestMultipleStreams(VideoRender* renderModule) { |
418 int error = 0; | 416 int error = 0; |
419 | 417 |
420 // Add settings for a stream to render | 418 // Add settings for a stream to render |
421 printf("Add stream 0\n"); | 419 printf("Add stream 0\n"); |
422 const int streamId0 = 0; | 420 const int streamId0 = 0; |
423 VideoRenderCallback* renderCallback0 = | 421 rtc::VideoSinkInterface<VideoFrame>* renderCallback0 = |
perkj_webrtc
2016/03/31 05:11:58
line length here and below
nisse-webrtc
2016/03/31 07:07:20
Not my lines... But I'll break them anyway.
| |
424 renderModule->AddIncomingRenderStream(streamId0, 0, 0.0f, 0.0f, 0.45f, 0 .45f); | 422 renderModule->AddIncomingRenderStream(streamId0, 0, 0.0f, 0.0f, 0.45f, 0 .45f); |
425 assert(renderCallback0 != NULL); | 423 assert(renderCallback0 != NULL); |
426 printf("Add stream 1\n"); | 424 printf("Add stream 1\n"); |
427 const int streamId1 = 1; | 425 const int streamId1 = 1; |
428 VideoRenderCallback* renderCallback1 = | 426 rtc::VideoSinkInterface<VideoFrame>* renderCallback1 = |
429 renderModule->AddIncomingRenderStream(streamId1, 0, 0.55f, 0.0f, 1.0f, 0 .45f); | 427 renderModule->AddIncomingRenderStream(streamId1, 0, 0.55f, 0.0f, 1.0f, 0 .45f); |
430 assert(renderCallback1 != NULL); | 428 assert(renderCallback1 != NULL); |
431 printf("Add stream 2\n"); | 429 printf("Add stream 2\n"); |
432 const int streamId2 = 2; | 430 const int streamId2 = 2; |
433 VideoRenderCallback* renderCallback2 = | 431 rtc::VideoSinkInterface<VideoFrame>* renderCallback2 = |
434 renderModule->AddIncomingRenderStream(streamId2, 0, 0.0f, 0.55f, 0.45f, 1.0f); | 432 renderModule->AddIncomingRenderStream(streamId2, 0, 0.0f, 0.55f, 0.45f, 1.0f); |
435 assert(renderCallback2 != NULL); | 433 assert(renderCallback2 != NULL); |
436 printf("Add stream 3\n"); | 434 printf("Add stream 3\n"); |
437 const int streamId3 = 3; | 435 const int streamId3 = 3; |
438 VideoRenderCallback* renderCallback3 = | 436 rtc::VideoSinkInterface<VideoFrame>* renderCallback3 = |
439 renderModule->AddIncomingRenderStream(streamId3, 0, 0.55f, 0.55f, 1.0f, 1.0f); | 437 renderModule->AddIncomingRenderStream(streamId3, 0, 0.55f, 0.55f, 1.0f, 1.0f); |
440 assert(renderCallback3 != NULL); | 438 assert(renderCallback3 != NULL); |
441 error = renderModule->StartRender(streamId0); | 439 error = renderModule->StartRender(streamId0); |
442 if (error != 0) { | 440 if (error != 0) { |
443 // TODO(phoglund): This test will not work if compiled in release mode. | 441 // TODO(phoglund): This test will not work if compiled in release mode. |
444 // This rather silly construct here is to avoid compilation errors when | 442 // This rather silly construct here is to avoid compilation errors when |
445 // compiling in release. Release => no asserts => unused 'error' variable. | 443 // compiling in release. Release => no asserts => unused 'error' variable. |
446 assert(false); | 444 assert(false); |
447 } | 445 } |
448 error = renderModule->StartRender(streamId1); | 446 error = renderModule->StartRender(streamId1); |
(...skipping 18 matching lines...) Expand all Loading... | |
467 videoFrame3.CreateEmptyFrame(width, height, width, half_width, half_width); | 465 videoFrame3.CreateEmptyFrame(width, height, width, half_width, half_width); |
468 | 466 |
469 const uint32_t renderDelayMs = 500; | 467 const uint32_t renderDelayMs = 500; |
470 | 468 |
471 // Render frames with the specified delay. | 469 // Render frames with the specified delay. |
472 for (int i=0; i<TEST_FRAME_NUM; i++) { | 470 for (int i=0; i<TEST_FRAME_NUM; i++) { |
473 GetTestVideoFrame(&videoFrame0, TEST_STREAM0_START_COLOR); | 471 GetTestVideoFrame(&videoFrame0, TEST_STREAM0_START_COLOR); |
474 | 472 |
475 videoFrame0.set_render_time_ms(TickTime::MillisecondTimestamp() + | 473 videoFrame0.set_render_time_ms(TickTime::MillisecondTimestamp() + |
476 renderDelayMs); | 474 renderDelayMs); |
477 renderCallback0->RenderFrame(streamId0, videoFrame0); | 475 renderCallback0->OnFrame(videoFrame0); |
478 | 476 |
479 GetTestVideoFrame(&videoFrame1, TEST_STREAM1_START_COLOR); | 477 GetTestVideoFrame(&videoFrame1, TEST_STREAM1_START_COLOR); |
480 videoFrame1.set_render_time_ms(TickTime::MillisecondTimestamp() + | 478 videoFrame1.set_render_time_ms(TickTime::MillisecondTimestamp() + |
481 renderDelayMs); | 479 renderDelayMs); |
482 renderCallback1->RenderFrame(streamId1, videoFrame1); | 480 renderCallback1->OnFrame(videoFrame1); |
483 | 481 |
484 GetTestVideoFrame(&videoFrame2, TEST_STREAM2_START_COLOR); | 482 GetTestVideoFrame(&videoFrame2, TEST_STREAM2_START_COLOR); |
485 videoFrame2.set_render_time_ms(TickTime::MillisecondTimestamp() + | 483 videoFrame2.set_render_time_ms(TickTime::MillisecondTimestamp() + |
486 renderDelayMs); | 484 renderDelayMs); |
487 renderCallback2->RenderFrame(streamId2, videoFrame2); | 485 renderCallback2->OnFrame(videoFrame2); |
488 | 486 |
489 GetTestVideoFrame(&videoFrame3, TEST_STREAM3_START_COLOR); | 487 GetTestVideoFrame(&videoFrame3, TEST_STREAM3_START_COLOR); |
490 videoFrame3.set_render_time_ms(TickTime::MillisecondTimestamp() + | 488 videoFrame3.set_render_time_ms(TickTime::MillisecondTimestamp() + |
491 renderDelayMs); | 489 renderDelayMs); |
492 renderCallback3->RenderFrame(streamId3, videoFrame3); | 490 renderCallback3->OnFrame(videoFrame3); |
493 | 491 |
494 SleepMs(1000/TEST_FRAME_RATE); | 492 SleepMs(1000/TEST_FRAME_RATE); |
495 } | 493 } |
496 | 494 |
497 // Shut down | 495 // Shut down |
498 printf("Closing...\n"); | 496 printf("Closing...\n"); |
499 error = renderModule->StopRender(streamId0); | 497 error = renderModule->StopRender(streamId0); |
500 assert(error == 0); | 498 assert(error == 0); |
501 error = renderModule->DeleteIncomingRenderStream(streamId0); | 499 error = renderModule->DeleteIncomingRenderStream(streamId0); |
502 assert(error == 0); | 500 assert(error == 0); |
(...skipping 11 matching lines...) Expand all Loading... | |
514 assert(error == 0); | 512 assert(error == 0); |
515 | 513 |
516 return 0; | 514 return 0; |
517 } | 515 } |
518 | 516 |
519 int TestExternalRender(VideoRender* renderModule) { | 517 int TestExternalRender(VideoRender* renderModule) { |
520 int error = 0; | 518 int error = 0; |
521 MyRenderCallback *externalRender = new MyRenderCallback(); | 519 MyRenderCallback *externalRender = new MyRenderCallback(); |
522 | 520 |
523 const int streamId0 = 0; | 521 const int streamId0 = 0; |
524 VideoRenderCallback* renderCallback0 = | 522 rtc::VideoSinkInterface<VideoFrame>* renderCallback0 = |
525 renderModule->AddIncomingRenderStream(streamId0, 0, 0.0f, 0.0f, | 523 renderModule->AddIncomingRenderStream(streamId0, 0, 0.0f, 0.0f, |
526 1.0f, 1.0f); | 524 1.0f, 1.0f); |
527 assert(renderCallback0 != NULL); | 525 assert(renderCallback0 != NULL); |
528 error = renderModule->AddExternalRenderCallback(streamId0, externalRender); | 526 error = renderModule->AddExternalRenderCallback(streamId0, externalRender); |
529 if (error != 0) { | 527 if (error != 0) { |
530 // TODO(phoglund): This test will not work if compiled in release mode. | 528 // TODO(phoglund): This test will not work if compiled in release mode. |
531 // This rather silly construct here is to avoid compilation errors when | 529 // This rather silly construct here is to avoid compilation errors when |
532 // compiling in release. Release => no asserts => unused 'error' variable. | 530 // compiling in release. Release => no asserts => unused 'error' variable. |
533 assert(false); | 531 assert(false); |
534 } | 532 } |
535 | 533 |
536 error = renderModule->StartRender(streamId0); | 534 error = renderModule->StartRender(streamId0); |
537 assert(error == 0); | 535 assert(error == 0); |
538 | 536 |
539 const int width = 352; | 537 const int width = 352; |
540 const int half_width = (width + 1) / 2; | 538 const int half_width = (width + 1) / 2; |
541 const int height = 288; | 539 const int height = 288; |
542 VideoFrame videoFrame0; | 540 VideoFrame videoFrame0; |
543 videoFrame0.CreateEmptyFrame(width, height, width, half_width, half_width); | 541 videoFrame0.CreateEmptyFrame(width, height, width, half_width, half_width); |
544 | 542 |
545 const uint32_t renderDelayMs = 500; | 543 const uint32_t renderDelayMs = 500; |
546 int frameCount = TEST_FRAME_NUM; | 544 int frameCount = TEST_FRAME_NUM; |
547 for (int i=0; i<frameCount; i++) { | 545 for (int i=0; i<frameCount; i++) { |
548 videoFrame0.set_render_time_ms(TickTime::MillisecondTimestamp() + | 546 videoFrame0.set_render_time_ms(TickTime::MillisecondTimestamp() + |
549 renderDelayMs); | 547 renderDelayMs); |
550 renderCallback0->RenderFrame(streamId0, videoFrame0); | 548 renderCallback0->OnFrame(videoFrame0); |
551 SleepMs(33); | 549 SleepMs(33); |
552 } | 550 } |
553 | 551 |
554 // Sleep and let all frames be rendered before closing | 552 // Sleep and let all frames be rendered before closing |
555 SleepMs(2*renderDelayMs); | 553 SleepMs(2*renderDelayMs); |
556 | 554 |
557 // Shut down | 555 // Shut down |
558 printf("Closing...\n"); | 556 printf("Closing...\n"); |
559 error = renderModule->StopRender(streamId0); | 557 error = renderModule->StopRender(streamId0); |
560 assert(error == 0); | 558 assert(error == 0); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
636 Display* display; | 634 Display* display; |
637 WebRtcCreateWindow(&testWindow, &display, 0, 352, 288); | 635 WebRtcCreateWindow(&testWindow, &display, 0, 352, 288); |
638 VideoRenderType windowType = kRenderX11; | 636 VideoRenderType windowType = kRenderX11; |
639 window = (void*)testWindow; | 637 window = (void*)testWindow; |
640 #endif // WEBRTC_LINUX | 638 #endif // WEBRTC_LINUX |
641 | 639 |
642 RunVideoRenderTests(window, windowType); | 640 RunVideoRenderTests(window, windowType); |
643 return 0; | 641 return 0; |
644 } | 642 } |
645 #endif // !WEBRTC_MAC | 643 #endif // !WEBRTC_MAC |
OLD | NEW |