OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/logging.h" | 6 #include "base/logging.h" |
7 #include "base/thread_task_runner_handle.h" | 7 #include "base/thread_task_runner_handle.h" |
8 #include "base/timer/timer.h" | 8 #include "base/timer/timer.h" |
9 #include "media/base/android/media_codec_audio_decoder.h" | 9 #include "media/base/android/media_codec_audio_decoder.h" |
10 #include "media/base/android/media_codec_bridge.h" | 10 #include "media/base/android/media_codec_bridge.h" |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 task_runner_->PostDelayedTask(FROM_HERE, base::Bind(data_available_cb_, data), | 270 task_runner_->PostDelayedTask(FROM_HERE, base::Bind(data_available_cb_, data), |
271 delay); | 271 delay); |
272 } | 272 } |
273 | 273 |
274 void MediaCodecDecoderTest::SetVideoSurface() { | 274 void MediaCodecDecoderTest::SetVideoSurface() { |
275 surface_texture_ = gfx::SurfaceTexture::Create(0); | 275 surface_texture_ = gfx::SurfaceTexture::Create(0); |
276 gfx::ScopedJavaSurface surface(surface_texture_.get()); | 276 gfx::ScopedJavaSurface surface(surface_texture_.get()); |
277 ASSERT_NE(nullptr, decoder_.get()); | 277 ASSERT_NE(nullptr, decoder_.get()); |
278 MediaCodecVideoDecoder* video_decoder = | 278 MediaCodecVideoDecoder* video_decoder = |
279 static_cast<MediaCodecVideoDecoder*>(decoder_.get()); | 279 static_cast<MediaCodecVideoDecoder*>(decoder_.get()); |
280 video_decoder->SetPendingSurface(surface.Pass()); | 280 video_decoder->SetVideoSurface(surface.Pass()); |
281 } | 281 } |
282 | 282 |
283 TEST_F(MediaCodecDecoderTest, AudioPrefetch) { | 283 TEST_F(MediaCodecDecoderTest, AudioPrefetch) { |
284 CreateAudioDecoder(); | 284 CreateAudioDecoder(); |
285 | 285 |
286 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); | 286 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); |
287 SetDataFactory(scoped_ptr<TestDataFactory>(new AudioFactory(duration))); | 287 SetDataFactory(scoped_ptr<TestDataFactory>(new AudioFactory(duration))); |
288 | 288 |
289 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 289 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
290 base::Unretained(this), true)); | 290 base::Unretained(this), true)); |
(...skipping 14 matching lines...) Expand all Loading... |
305 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 305 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
306 base::Unretained(this)))); | 306 base::Unretained(this)))); |
307 } | 307 } |
308 | 308 |
309 TEST_F(MediaCodecDecoderTest, AudioConfigureNoParams) { | 309 TEST_F(MediaCodecDecoderTest, AudioConfigureNoParams) { |
310 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 310 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
311 | 311 |
312 CreateAudioDecoder(); | 312 CreateAudioDecoder(); |
313 | 313 |
314 // Cannot configure without config parameters. | 314 // Cannot configure without config parameters. |
315 EXPECT_EQ(MediaCodecDecoder::CONFIG_FAILURE, decoder_->Configure()); | 315 EXPECT_EQ(MediaCodecDecoder::kConfigFailure, decoder_->Configure()); |
316 } | 316 } |
317 | 317 |
318 TEST_F(MediaCodecDecoderTest, AudioConfigureValidParams) { | 318 TEST_F(MediaCodecDecoderTest, AudioConfigureValidParams) { |
319 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 319 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
320 | 320 |
321 CreateAudioDecoder(); | 321 CreateAudioDecoder(); |
322 | 322 |
323 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); | 323 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); |
324 scoped_ptr<AudioFactory> factory(new AudioFactory(duration)); | 324 scoped_ptr<AudioFactory> factory(new AudioFactory(duration)); |
325 decoder_->SetDemuxerConfigs(factory->GetConfigs()); | 325 decoder_->SetDemuxerConfigs(factory->GetConfigs()); |
326 | 326 |
327 EXPECT_EQ(MediaCodecDecoder::CONFIG_OK, decoder_->Configure()); | 327 EXPECT_EQ(MediaCodecDecoder::kConfigOk, decoder_->Configure()); |
328 } | 328 } |
329 | 329 |
330 TEST_F(MediaCodecDecoderTest, VideoConfigureNoParams) { | 330 TEST_F(MediaCodecDecoderTest, VideoConfigureNoParams) { |
331 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 331 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
332 | 332 |
333 CreateVideoDecoder(); | 333 CreateVideoDecoder(); |
334 | 334 |
| 335 // decoder_->Configure() searches back for the key frame. |
| 336 // We have to prefetch decoder. |
| 337 |
| 338 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); |
| 339 SetDataFactory(scoped_ptr<VideoFactory>(new VideoFactory(duration))); |
| 340 |
| 341 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
| 342 base::Unretained(this), true)); |
| 343 |
| 344 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
| 345 base::Unretained(this)))); |
| 346 |
| 347 SetVideoSurface(); |
| 348 |
335 // Cannot configure without config parameters. | 349 // Cannot configure without config parameters. |
336 EXPECT_EQ(MediaCodecDecoder::CONFIG_FAILURE, decoder_->Configure()); | 350 EXPECT_EQ(MediaCodecDecoder::kConfigFailure, decoder_->Configure()); |
337 } | 351 } |
338 | 352 |
339 TEST_F(MediaCodecDecoderTest, VideoConfigureNoSurface) { | 353 TEST_F(MediaCodecDecoderTest, VideoConfigureNoSurface) { |
340 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 354 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
341 | 355 |
342 CreateVideoDecoder(); | 356 CreateVideoDecoder(); |
343 | 357 |
344 // decoder_->Configure() searches back for the key frame. | 358 // decoder_->Configure() searches back for the key frame. |
345 // We have to prefetch decoder. | 359 // We have to prefetch decoder. |
346 | 360 |
347 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); | 361 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); |
348 SetDataFactory(scoped_ptr<VideoFactory>(new VideoFactory(duration))); | 362 SetDataFactory(scoped_ptr<VideoFactory>(new VideoFactory(duration))); |
349 | 363 |
350 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 364 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
351 base::Unretained(this), true)); | 365 base::Unretained(this), true)); |
352 | 366 |
353 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 367 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
354 base::Unretained(this)))); | 368 base::Unretained(this)))); |
355 | 369 |
356 decoder_->SetDemuxerConfigs(GetConfigs()); | 370 decoder_->SetDemuxerConfigs(GetConfigs()); |
357 | 371 |
358 // Surface is not set, Configure() should fail. | 372 // Surface is not set, Configure() should fail. |
359 | 373 |
360 EXPECT_EQ(MediaCodecDecoder::CONFIG_FAILURE, decoder_->Configure()); | 374 EXPECT_EQ(MediaCodecDecoder::kConfigFailure, decoder_->Configure()); |
361 } | 375 } |
362 | 376 |
363 TEST_F(MediaCodecDecoderTest, VideoConfigureInvalidSurface) { | 377 TEST_F(MediaCodecDecoderTest, VideoConfigureInvalidSurface) { |
364 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 378 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
365 | 379 |
366 CreateVideoDecoder(); | 380 CreateVideoDecoder(); |
367 | 381 |
368 // decoder_->Configure() searches back for the key frame. | 382 // decoder_->Configure() searches back for the key frame. |
369 // We have to prefetch decoder. | 383 // We have to prefetch decoder. |
370 | 384 |
(...skipping 11 matching lines...) Expand all Loading... |
382 // Prepare the surface. | 396 // Prepare the surface. |
383 scoped_refptr<gfx::SurfaceTexture> surface_texture( | 397 scoped_refptr<gfx::SurfaceTexture> surface_texture( |
384 gfx::SurfaceTexture::Create(0)); | 398 gfx::SurfaceTexture::Create(0)); |
385 gfx::ScopedJavaSurface surface(surface_texture.get()); | 399 gfx::ScopedJavaSurface surface(surface_texture.get()); |
386 | 400 |
387 // Release the surface texture. | 401 // Release the surface texture. |
388 surface_texture = NULL; | 402 surface_texture = NULL; |
389 | 403 |
390 MediaCodecVideoDecoder* video_decoder = | 404 MediaCodecVideoDecoder* video_decoder = |
391 static_cast<MediaCodecVideoDecoder*>(decoder_.get()); | 405 static_cast<MediaCodecVideoDecoder*>(decoder_.get()); |
392 video_decoder->SetPendingSurface(surface.Pass()); | 406 video_decoder->SetVideoSurface(surface.Pass()); |
393 | 407 |
394 EXPECT_EQ(MediaCodecDecoder::CONFIG_FAILURE, decoder_->Configure()); | 408 EXPECT_EQ(MediaCodecDecoder::kConfigFailure, decoder_->Configure()); |
395 } | 409 } |
396 | 410 |
397 TEST_F(MediaCodecDecoderTest, VideoConfigureValidParams) { | 411 TEST_F(MediaCodecDecoderTest, VideoConfigureValidParams) { |
398 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 412 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
399 | 413 |
400 CreateVideoDecoder(); | 414 CreateVideoDecoder(); |
401 | 415 |
402 // decoder_->Configure() searches back for the key frame. | 416 // decoder_->Configure() searches back for the key frame. |
403 // We have to prefetch decoder. | 417 // We have to prefetch decoder. |
404 | 418 |
405 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); | 419 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); |
406 SetDataFactory(scoped_ptr<VideoFactory>(new VideoFactory(duration))); | 420 SetDataFactory(scoped_ptr<VideoFactory>(new VideoFactory(duration))); |
407 | 421 |
408 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 422 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
409 base::Unretained(this), true)); | 423 base::Unretained(this), true)); |
410 | 424 |
411 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 425 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
412 base::Unretained(this)))); | 426 base::Unretained(this)))); |
413 | 427 |
414 decoder_->SetDemuxerConfigs(GetConfigs()); | 428 decoder_->SetDemuxerConfigs(GetConfigs()); |
415 | 429 |
416 SetVideoSurface(); | 430 SetVideoSurface(); |
417 | 431 |
418 // Now we can expect Configure() to succeed. | 432 // Now we can expect Configure() to succeed. |
419 | 433 |
420 EXPECT_EQ(MediaCodecDecoder::CONFIG_OK, decoder_->Configure()); | 434 EXPECT_EQ(MediaCodecDecoder::kConfigOk, decoder_->Configure()); |
421 } | 435 } |
422 | 436 |
423 TEST_F(MediaCodecDecoderTest, AudioStartWithoutConfigure) { | 437 TEST_F(MediaCodecDecoderTest, AudioStartWithoutConfigure) { |
424 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 438 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
425 | 439 |
426 CreateAudioDecoder(); | 440 CreateAudioDecoder(); |
427 | 441 |
428 // Decoder has to be prefetched and configured before the start. | 442 // Decoder has to be prefetched and configured before the start. |
429 | 443 |
430 // Wrong state: not prefetched | 444 // Wrong state: not prefetched |
(...skipping 26 matching lines...) Expand all Loading... |
457 | 471 |
458 // Prefetch to avoid starvation at the beginning of playback. | 472 // Prefetch to avoid starvation at the beginning of playback. |
459 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 473 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
460 base::Unretained(this), true)); | 474 base::Unretained(this), true)); |
461 | 475 |
462 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 476 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
463 base::Unretained(this)))); | 477 base::Unretained(this)))); |
464 | 478 |
465 decoder_->SetDemuxerConfigs(GetConfigs()); | 479 decoder_->SetDemuxerConfigs(GetConfigs()); |
466 | 480 |
467 EXPECT_EQ(MediaCodecDecoder::CONFIG_OK, decoder_->Configure()); | 481 EXPECT_EQ(MediaCodecDecoder::kConfigOk, decoder_->Configure()); |
468 | 482 |
469 EXPECT_TRUE(decoder_->Start(base::TimeDelta::FromMilliseconds(0))); | 483 EXPECT_TRUE(decoder_->Start(base::TimeDelta::FromMilliseconds(0))); |
470 | 484 |
471 EXPECT_TRUE(WaitForCondition( | 485 EXPECT_TRUE(WaitForCondition( |
472 base::Bind(&MediaCodecDecoderTest::is_stopped, base::Unretained(this)), | 486 base::Bind(&MediaCodecDecoderTest::is_stopped, base::Unretained(this)), |
473 timeout)); | 487 timeout)); |
474 | 488 |
475 EXPECT_TRUE(decoder_->IsStopped()); | 489 EXPECT_TRUE(decoder_->IsStopped()); |
476 EXPECT_TRUE(decoder_->IsCompleted()); | 490 EXPECT_TRUE(decoder_->IsCompleted()); |
477 | 491 |
(...skipping 18 matching lines...) Expand all Loading... |
496 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 510 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
497 base::Unretained(this), true)); | 511 base::Unretained(this), true)); |
498 | 512 |
499 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 513 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
500 base::Unretained(this)))); | 514 base::Unretained(this)))); |
501 | 515 |
502 decoder_->SetDemuxerConfigs(GetConfigs()); | 516 decoder_->SetDemuxerConfigs(GetConfigs()); |
503 | 517 |
504 SetVideoSurface(); | 518 SetVideoSurface(); |
505 | 519 |
506 EXPECT_EQ(MediaCodecDecoder::CONFIG_OK, decoder_->Configure()); | 520 EXPECT_EQ(MediaCodecDecoder::kConfigOk, decoder_->Configure()); |
507 | 521 |
508 EXPECT_TRUE(decoder_->Start(base::TimeDelta::FromMilliseconds(0))); | 522 EXPECT_TRUE(decoder_->Start(base::TimeDelta::FromMilliseconds(0))); |
509 | 523 |
510 EXPECT_TRUE(WaitForCondition( | 524 EXPECT_TRUE(WaitForCondition( |
511 base::Bind(&MediaCodecDecoderTest::is_stopped, base::Unretained(this)), | 525 base::Bind(&MediaCodecDecoderTest::is_stopped, base::Unretained(this)), |
512 timeout)); | 526 timeout)); |
513 | 527 |
514 EXPECT_TRUE(decoder_->IsStopped()); | 528 EXPECT_TRUE(decoder_->IsStopped()); |
515 EXPECT_TRUE(decoder_->IsCompleted()); | 529 EXPECT_TRUE(decoder_->IsCompleted()); |
516 | 530 |
(...skipping 16 matching lines...) Expand all Loading... |
533 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 547 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
534 base::Unretained(this), true)); | 548 base::Unretained(this), true)); |
535 | 549 |
536 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 550 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
537 base::Unretained(this)))); | 551 base::Unretained(this)))); |
538 | 552 |
539 decoder_->SetDemuxerConfigs(GetConfigs()); | 553 decoder_->SetDemuxerConfigs(GetConfigs()); |
540 | 554 |
541 SetVideoSurface(); | 555 SetVideoSurface(); |
542 | 556 |
543 EXPECT_EQ(MediaCodecDecoder::CONFIG_OK, decoder_->Configure()); | 557 EXPECT_EQ(MediaCodecDecoder::kConfigOk, decoder_->Configure()); |
544 | 558 |
545 SetStopRequestAtTime(stop_request_time); | 559 SetStopRequestAtTime(stop_request_time); |
546 | 560 |
547 // Start from the beginning. | 561 // Start from the beginning. |
548 EXPECT_TRUE(decoder_->Start(base::TimeDelta::FromMilliseconds(0))); | 562 EXPECT_TRUE(decoder_->Start(base::TimeDelta::FromMilliseconds(0))); |
549 | 563 |
550 EXPECT_TRUE(WaitForCondition( | 564 EXPECT_TRUE(WaitForCondition( |
551 base::Bind(&MediaCodecDecoderTest::is_stopped, base::Unretained(this)), | 565 base::Bind(&MediaCodecDecoderTest::is_stopped, base::Unretained(this)), |
552 timeout)); | 566 timeout)); |
553 | 567 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
601 // Prefetch. | 615 // Prefetch. |
602 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 616 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
603 base::Unretained(this), true)); | 617 base::Unretained(this), true)); |
604 | 618 |
605 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 619 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
606 base::Unretained(this)))); | 620 base::Unretained(this)))); |
607 | 621 |
608 // Configure. | 622 // Configure. |
609 decoder_->SetDemuxerConfigs(GetConfigs()); | 623 decoder_->SetDemuxerConfigs(GetConfigs()); |
610 | 624 |
611 EXPECT_EQ(MediaCodecDecoder::CONFIG_OK, decoder_->Configure()); | 625 EXPECT_EQ(MediaCodecDecoder::kConfigOk, decoder_->Configure()); |
612 | 626 |
613 // Start. | 627 // Start. |
614 EXPECT_TRUE(decoder_->Start(base::TimeDelta::FromMilliseconds(0))); | 628 EXPECT_TRUE(decoder_->Start(base::TimeDelta::FromMilliseconds(0))); |
615 | 629 |
616 // Wait for starvation. | 630 // Wait for starvation. |
617 EXPECT_TRUE(WaitForCondition( | 631 EXPECT_TRUE(WaitForCondition( |
618 base::Bind(&MediaCodecDecoderTest::is_starved, base::Unretained(this)), | 632 base::Bind(&MediaCodecDecoderTest::is_starved, base::Unretained(this)), |
619 timeout)); | 633 timeout)); |
620 | 634 |
621 EXPECT_FALSE(decoder_->IsStopped()); | 635 EXPECT_FALSE(decoder_->IsStopped()); |
622 EXPECT_FALSE(decoder_->IsCompleted()); | 636 EXPECT_FALSE(decoder_->IsCompleted()); |
623 | 637 |
624 EXPECT_GT(pts_stat_.num_values(), 0); | 638 EXPECT_GT(pts_stat_.num_values(), 0); |
625 | 639 |
626 // After starvation we should be able to stop decoder. | 640 // After starvation we should be able to stop decoder. |
627 decoder_->RequestToStop(); | 641 decoder_->RequestToStop(); |
628 | 642 |
629 EXPECT_TRUE(WaitForCondition( | 643 EXPECT_TRUE(WaitForCondition( |
630 base::Bind(&MediaCodecDecoderTest::is_stopped, base::Unretained(this)))); | 644 base::Bind(&MediaCodecDecoderTest::is_stopped, base::Unretained(this)))); |
631 | 645 |
632 EXPECT_TRUE(decoder_->IsStopped()); | 646 EXPECT_TRUE(decoder_->IsStopped()); |
633 EXPECT_FALSE(decoder_->IsCompleted()); | 647 EXPECT_FALSE(decoder_->IsCompleted()); |
634 } | 648 } |
635 | 649 |
636 } // namespace media | 650 } // namespace media |
OLD | NEW |