OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <GLES2/gl2.h> | 5 #include <GLES2/gl2.h> |
6 | 6 |
7 #include "base/memory/shared_memory.h" | 7 #include "base/memory/shared_memory.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "ppapi/c/pp_errors.h" | 9 #include "ppapi/c/pp_errors.h" |
10 #include "ppapi/c/ppb_video_decoder.h" | 10 #include "ppapi/c/ppb_video_decoder.h" |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 return result; | 209 return result; |
210 } | 210 } |
211 | 211 |
212 void SendDecodeReply(const ResourceMessageCallParams& params, | 212 void SendDecodeReply(const ResourceMessageCallParams& params, |
213 uint32_t shm_id) { | 213 uint32_t shm_id) { |
214 SendReply(params, PP_OK, PpapiPluginMsg_VideoDecoder_DecodeReply(shm_id)); | 214 SendReply(params, PP_OK, PpapiPluginMsg_VideoDecoder_DecodeReply(shm_id)); |
215 } | 215 } |
216 | 216 |
217 void SendPictureReady(const ResourceMessageCallParams& params, | 217 void SendPictureReady(const ResourceMessageCallParams& params, |
218 uint32_t decode_count, | 218 uint32_t decode_count, |
219 uint32_t texture_id) { | 219 uint32_t texture_id, |
220 SendReply( | 220 PP_Rect* visible_rect) { |
221 params, | 221 SendReply(params, PP_OK, PpapiPluginMsg_VideoDecoder_PictureReady( |
222 PP_OK, | 222 decode_count, texture_id, *visible_rect)); |
223 PpapiPluginMsg_VideoDecoder_PictureReady(decode_count, texture_id)); | |
224 } | 223 } |
225 | 224 |
226 void SendFlushReply(const ResourceMessageCallParams& params) { | 225 void SendFlushReply(const ResourceMessageCallParams& params) { |
227 SendReply(params, PP_OK, PpapiPluginMsg_VideoDecoder_FlushReply()); | 226 SendReply(params, PP_OK, PpapiPluginMsg_VideoDecoder_FlushReply()); |
228 } | 227 } |
229 | 228 |
230 void SendResetReply(const ResourceMessageCallParams& params) { | 229 void SendResetReply(const ResourceMessageCallParams& params) { |
231 SendReply(params, PP_OK, PpapiPluginMsg_VideoDecoder_ResetReply()); | 230 SendReply(params, PP_OK, PpapiPluginMsg_VideoDecoder_ResetReply()); |
232 } | 231 } |
233 | 232 |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
424 ASSERT_FALSE(uncalled_cb.called()); | 423 ASSERT_FALSE(uncalled_cb.called()); |
425 // Free up the first decode buffer. | 424 // Free up the first decode buffer. |
426 SendDecodeReply(params, 0U); | 425 SendDecodeReply(params, 0U); |
427 // The decoder should run the pending callback. | 426 // The decoder should run the pending callback. |
428 ASSERT_TRUE(decode_cb.called()); | 427 ASSERT_TRUE(decode_cb.called()); |
429 ASSERT_EQ(PP_OK, decode_cb.result()); | 428 ASSERT_EQ(PP_OK, decode_cb.result()); |
430 decode_cb.Reset(); | 429 decode_cb.Reset(); |
431 | 430 |
432 // Now try to get a picture. No picture ready message has been received yet. | 431 // Now try to get a picture. No picture ready message has been received yet. |
433 PP_VideoPicture picture; | 432 PP_VideoPicture picture; |
| 433 PP_Rect visible_rect; |
434 ASSERT_EQ(PP_OK_COMPLETIONPENDING, | 434 ASSERT_EQ(PP_OK_COMPLETIONPENDING, |
435 CallGetPicture(decoder.get(), &picture, &get_picture_cb)); | 435 CallGetPicture(decoder.get(), &picture, &get_picture_cb)); |
436 ASSERT_FALSE(get_picture_cb.called()); | 436 ASSERT_FALSE(get_picture_cb.called()); |
437 // Calling GetPicture when another GetPicture is pending should fail. | 437 // Calling GetPicture when another GetPicture is pending should fail. |
438 ASSERT_EQ(PP_ERROR_INPROGRESS, | 438 ASSERT_EQ(PP_ERROR_INPROGRESS, |
439 CallGetPicture(decoder.get(), &picture, &uncalled_cb)); | 439 CallGetPicture(decoder.get(), &picture, &uncalled_cb)); |
440 ASSERT_FALSE(uncalled_cb.called()); | 440 ASSERT_FALSE(uncalled_cb.called()); |
441 // Send 'request textures' message to initialize textures. | 441 // Send 'request textures' message to initialize textures. |
442 SendRequestTextures(params); | 442 SendRequestTextures(params); |
443 // Send a picture ready message for Decode call 1. The GetPicture callback | 443 // Send a picture ready message for Decode call 1. The GetPicture callback |
444 // should complete. | 444 // should complete. |
445 SendPictureReady(params, 1U, kTextureId1); | 445 SendPictureReady(params, 1U, kTextureId1, &visible_rect); |
446 ASSERT_TRUE(get_picture_cb.called()); | 446 ASSERT_TRUE(get_picture_cb.called()); |
447 ASSERT_EQ(PP_OK, get_picture_cb.result()); | 447 ASSERT_EQ(PP_OK, get_picture_cb.result()); |
448 ASSERT_EQ(kDecodeId, picture.decode_id); | 448 ASSERT_EQ(kDecodeId, picture.decode_id); |
449 get_picture_cb.Reset(); | 449 get_picture_cb.Reset(); |
450 | 450 |
451 // Send a picture ready message for Decode call 2. Since there is no pending | 451 // Send a picture ready message for Decode call 2. Since there is no pending |
452 // GetPicture call, the picture should be queued. | 452 // GetPicture call, the picture should be queued. |
453 SendPictureReady(params, 2U, kTextureId2); | 453 SendPictureReady(params, 2U, kTextureId2, &visible_rect); |
454 // The next GetPicture should return synchronously. | 454 // The next GetPicture should return synchronously. |
455 ASSERT_EQ(PP_OK, CallGetPicture(decoder.get(), &picture, &uncalled_cb)); | 455 ASSERT_EQ(PP_OK, CallGetPicture(decoder.get(), &picture, &uncalled_cb)); |
456 ASSERT_FALSE(uncalled_cb.called()); | 456 ASSERT_FALSE(uncalled_cb.called()); |
457 ASSERT_EQ(kDecodeId, picture.decode_id); | 457 ASSERT_EQ(kDecodeId, picture.decode_id); |
458 } | 458 } |
459 #endif // !defined(OS_WIN) || !defined(ARCH_CPU_64_BITS) | 459 #endif // !defined(OS_WIN) || !defined(ARCH_CPU_64_BITS) |
460 | 460 |
461 // TODO(bbudge) Fix sync message testing on Windows 64 bit builds. The reply | 461 // TODO(bbudge) Fix sync message testing on Windows 64 bit builds. The reply |
462 // message for GetShm isn't received, causing Decode to fail. | 462 // message for GetShm isn't received, causing Decode to fail. |
463 // http://crbug.com/379260 | 463 // http://crbug.com/379260 |
464 #if !defined(OS_WIN) || !defined(ARCH_CPU_64_BITS) | 464 #if !defined(OS_WIN) || !defined(ARCH_CPU_64_BITS) |
465 TEST_F(VideoDecoderResourceTest, RecyclePicture) { | 465 TEST_F(VideoDecoderResourceTest, RecyclePicture) { |
466 LockingResourceReleaser decoder(CreateAndInitializeDecoder()); | 466 LockingResourceReleaser decoder(CreateAndInitializeDecoder()); |
467 ResourceMessageCallParams params; | 467 ResourceMessageCallParams params; |
468 MockCompletionCallback decode_cb, get_picture_cb, uncalled_cb; | 468 MockCompletionCallback decode_cb, get_picture_cb, uncalled_cb; |
469 | 469 |
470 // Get to a state where we have a picture to recycle. | 470 // Get to a state where we have a picture to recycle. |
471 PpapiHostMsg_VideoDecoder_GetShm shm_msg(0U, kDecodeBufferSize); | 471 PpapiHostMsg_VideoDecoder_GetShm shm_msg(0U, kDecodeBufferSize); |
472 ASSERT_EQ(PP_OK, CallDecode(decoder.get(), &decode_cb, &shm_msg)); | 472 ASSERT_EQ(PP_OK, CallDecode(decoder.get(), &decode_cb, &shm_msg)); |
473 uint32_t shm_id; | 473 uint32_t shm_id; |
474 uint32_t decode_size; | 474 uint32_t decode_size; |
475 int32_t decode_id; | 475 int32_t decode_id; |
476 CheckDecodeMsg(¶ms, &shm_id, &decode_size, &decode_id); | 476 CheckDecodeMsg(¶ms, &shm_id, &decode_size, &decode_id); |
477 SendDecodeReply(params, 0U); | 477 SendDecodeReply(params, 0U); |
478 // Send 'request textures' message to initialize textures. | 478 // Send 'request textures' message to initialize textures. |
479 SendRequestTextures(params); | 479 SendRequestTextures(params); |
480 // Call GetPicture and send 'picture ready' message to get a picture to | 480 // Call GetPicture and send 'picture ready' message to get a picture to |
481 // recycle. | 481 // recycle. |
482 PP_VideoPicture picture; | 482 PP_VideoPicture picture; |
| 483 PP_Rect visible_rect; |
483 ASSERT_EQ(PP_OK_COMPLETIONPENDING, | 484 ASSERT_EQ(PP_OK_COMPLETIONPENDING, |
484 CallGetPicture(decoder.get(), &picture, &get_picture_cb)); | 485 CallGetPicture(decoder.get(), &picture, &get_picture_cb)); |
485 SendPictureReady(params, 0U, kTextureId1); | 486 SendPictureReady(params, 0U, kTextureId1, &visible_rect); |
486 ASSERT_EQ(kTextureId1, picture.texture_id); | 487 ASSERT_EQ(kTextureId1, picture.texture_id); |
487 | 488 |
488 CallRecyclePicture(decoder.get(), picture); | 489 CallRecyclePicture(decoder.get(), picture); |
489 uint32_t texture_id; | 490 uint32_t texture_id; |
490 ASSERT_TRUE(CheckRecyclePictureMsg(¶ms, &texture_id)); | 491 ASSERT_TRUE(CheckRecyclePictureMsg(¶ms, &texture_id)); |
491 ASSERT_EQ(kTextureId1, texture_id); | 492 ASSERT_EQ(kTextureId1, texture_id); |
492 | 493 |
493 ClearCallbacks(decoder.get()); | 494 ClearCallbacks(decoder.get()); |
494 } | 495 } |
495 #endif // !defined(OS_WIN) || !defined(ARCH_CPU_64_BITS) | 496 #endif // !defined(OS_WIN) || !defined(ARCH_CPU_64_BITS) |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
573 ASSERT_FALSE(uncalled_cb.called()); | 574 ASSERT_FALSE(uncalled_cb.called()); |
574 ASSERT_EQ(PP_ERROR_RESOURCE_FAILED, CallFlush(decoder.get(), &uncalled_cb)); | 575 ASSERT_EQ(PP_ERROR_RESOURCE_FAILED, CallFlush(decoder.get(), &uncalled_cb)); |
575 ASSERT_FALSE(uncalled_cb.called()); | 576 ASSERT_FALSE(uncalled_cb.called()); |
576 ASSERT_EQ(PP_ERROR_RESOURCE_FAILED, CallReset(decoder.get(), &uncalled_cb)); | 577 ASSERT_EQ(PP_ERROR_RESOURCE_FAILED, CallReset(decoder.get(), &uncalled_cb)); |
577 ASSERT_FALSE(uncalled_cb.called()); | 578 ASSERT_FALSE(uncalled_cb.called()); |
578 } | 579 } |
579 #endif // !defined(OS_WIN) || !defined(ARCH_CPU_64_BITS) | 580 #endif // !defined(OS_WIN) || !defined(ARCH_CPU_64_BITS) |
580 | 581 |
581 } // namespace proxy | 582 } // namespace proxy |
582 } // namespace ppapi | 583 } // namespace ppapi |
OLD | NEW |