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 <memory> |
5 #include <utility> | 6 #include <utility> |
6 | 7 |
7 #include "base/bind.h" | 8 #include "base/bind.h" |
8 #include "base/logging.h" | 9 #include "base/logging.h" |
9 #include "base/macros.h" | 10 #include "base/macros.h" |
| 11 #include "base/memory/ptr_util.h" |
10 #include "base/thread_task_runner_handle.h" | 12 #include "base/thread_task_runner_handle.h" |
11 #include "base/timer/timer.h" | 13 #include "base/timer/timer.h" |
12 #include "media/base/android/audio_media_codec_decoder.h" | 14 #include "media/base/android/audio_media_codec_decoder.h" |
13 #include "media/base/android/media_codec_util.h" | 15 #include "media/base/android/media_codec_util.h" |
14 #include "media/base/android/media_statistics.h" | 16 #include "media/base/android/media_statistics.h" |
15 #include "media/base/android/sdk_media_codec_bridge.h" | 17 #include "media/base/android/sdk_media_codec_bridge.h" |
16 #include "media/base/android/test_data_factory.h" | 18 #include "media/base/android/test_data_factory.h" |
17 #include "media/base/android/test_statistics.h" | 19 #include "media/base/android/test_statistics.h" |
18 #include "media/base/android/video_media_codec_decoder.h" | 20 #include "media/base/android/video_media_codec_decoder.h" |
19 #include "media/base/timestamp_constants.h" | 21 #include "media/base/timestamp_constants.h" |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 protected: | 152 protected: |
151 typedef base::Callback<bool()> Predicate; | 153 typedef base::Callback<bool()> Predicate; |
152 | 154 |
153 typedef base::Callback<void(const DemuxerData&)> DataAvailableCallback; | 155 typedef base::Callback<void(const DemuxerData&)> DataAvailableCallback; |
154 | 156 |
155 // Waits for condition to become true or for timeout to expire. | 157 // Waits for condition to become true or for timeout to expire. |
156 // Returns true if the condition becomes true. | 158 // Returns true if the condition becomes true. |
157 bool WaitForCondition(const Predicate& condition, | 159 bool WaitForCondition(const Predicate& condition, |
158 const base::TimeDelta& timeout = kDefaultTimeout); | 160 const base::TimeDelta& timeout = kDefaultTimeout); |
159 | 161 |
160 void SetDataFactory(scoped_ptr<TestDataFactory> factory) { | 162 void SetDataFactory(std::unique_ptr<TestDataFactory> factory) { |
161 data_factory_ = std::move(factory); | 163 data_factory_ = std::move(factory); |
162 } | 164 } |
163 | 165 |
164 DemuxerConfigs GetConfigs() const { | 166 DemuxerConfigs GetConfigs() const { |
165 // ASSERT_NE does not compile here because it expects void return value. | 167 // ASSERT_NE does not compile here because it expects void return value. |
166 EXPECT_NE(nullptr, data_factory_.get()); | 168 EXPECT_NE(nullptr, data_factory_.get()); |
167 return data_factory_->GetConfigs(); | 169 return data_factory_->GetConfigs(); |
168 } | 170 } |
169 | 171 |
170 void CreateAudioDecoder(); | 172 void CreateAudioDecoder(); |
(...skipping 27 matching lines...) Expand all Loading... |
198 decoder_->RequestToStop(); | 200 decoder_->RequestToStop(); |
199 } | 201 } |
200 } | 202 } |
201 | 203 |
202 void OnVideoSizeChanged(const gfx::Size& video_size) { | 204 void OnVideoSizeChanged(const gfx::Size& video_size) { |
203 video_size_ = video_size; | 205 video_size_ = video_size; |
204 } | 206 } |
205 | 207 |
206 void OnVideoCodecCreated() {} | 208 void OnVideoCodecCreated() {} |
207 | 209 |
208 scoped_ptr<MediaCodecDecoder> decoder_; | 210 std::unique_ptr<MediaCodecDecoder> decoder_; |
209 scoped_ptr<TestDataFactory> data_factory_; | 211 std::unique_ptr<TestDataFactory> data_factory_; |
210 Minimax<base::TimeDelta> pts_stat_; | 212 Minimax<base::TimeDelta> pts_stat_; |
211 gfx::Size video_size_; | 213 gfx::Size video_size_; |
212 | 214 |
213 private: | 215 private: |
214 bool is_timeout_expired() const { return is_timeout_expired_; } | 216 bool is_timeout_expired() const { return is_timeout_expired_; } |
215 void SetTimeoutExpired(bool value) { is_timeout_expired_ = value; } | 217 void SetTimeoutExpired(bool value) { is_timeout_expired_ = value; } |
216 | 218 |
217 base::MessageLoop message_loop_; | 219 base::MessageLoop message_loop_; |
218 bool is_timeout_expired_; | 220 bool is_timeout_expired_; |
219 | 221 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 return true; | 261 return true; |
260 } | 262 } |
261 message_loop_.RunUntilIdle(); | 263 message_loop_.RunUntilIdle(); |
262 } while (!is_timeout_expired()); | 264 } while (!is_timeout_expired()); |
263 | 265 |
264 DCHECK(!timer.IsRunning()); | 266 DCHECK(!timer.IsRunning()); |
265 return false; | 267 return false; |
266 } | 268 } |
267 | 269 |
268 void MediaCodecDecoderTest::CreateAudioDecoder() { | 270 void MediaCodecDecoderTest::CreateAudioDecoder() { |
269 decoder_ = scoped_ptr<MediaCodecDecoder>(new AudioMediaCodecDecoder( | 271 decoder_ = base::WrapUnique(new AudioMediaCodecDecoder( |
270 task_runner_, &frame_statistics_, | 272 task_runner_, &frame_statistics_, |
271 base::Bind(&MediaCodecDecoderTest::OnDataRequested, | 273 base::Bind(&MediaCodecDecoderTest::OnDataRequested, |
272 base::Unretained(this)), | 274 base::Unretained(this)), |
273 base::Bind(&MediaCodecDecoderTest::OnStarvation, base::Unretained(this)), | 275 base::Bind(&MediaCodecDecoderTest::OnStarvation, base::Unretained(this)), |
274 base::Bind(&MediaCodecDecoderTest::OnDecoderDrained, | 276 base::Bind(&MediaCodecDecoderTest::OnDecoderDrained, |
275 base::Unretained(this)), | 277 base::Unretained(this)), |
276 base::Bind(&MediaCodecDecoderTest::OnStopDone, base::Unretained(this)), | 278 base::Bind(&MediaCodecDecoderTest::OnStopDone, base::Unretained(this)), |
277 base::Bind(&MediaCodecDecoderTest::OnKeyRequired, base::Unretained(this)), | 279 base::Bind(&MediaCodecDecoderTest::OnKeyRequired, base::Unretained(this)), |
278 base::Bind(&MediaCodecDecoderTest::OnError, base::Unretained(this)), | 280 base::Bind(&MediaCodecDecoderTest::OnError, base::Unretained(this)), |
279 base::Bind(&MediaCodecDecoderTest::OnUpdateCurrentTime, | 281 base::Bind(&MediaCodecDecoderTest::OnUpdateCurrentTime, |
280 base::Unretained(this)))); | 282 base::Unretained(this)))); |
281 | 283 |
282 data_available_cb_ = base::Bind(&MediaCodecDecoder::OnDemuxerDataAvailable, | 284 data_available_cb_ = base::Bind(&MediaCodecDecoder::OnDemuxerDataAvailable, |
283 base::Unretained(decoder_.get())); | 285 base::Unretained(decoder_.get())); |
284 } | 286 } |
285 | 287 |
286 void MediaCodecDecoderTest::CreateVideoDecoder() { | 288 void MediaCodecDecoderTest::CreateVideoDecoder() { |
287 decoder_ = scoped_ptr<MediaCodecDecoder>(new VideoMediaCodecDecoder( | 289 decoder_ = base::WrapUnique(new VideoMediaCodecDecoder( |
288 task_runner_, &frame_statistics_, | 290 task_runner_, &frame_statistics_, |
289 base::Bind(&MediaCodecDecoderTest::OnDataRequested, | 291 base::Bind(&MediaCodecDecoderTest::OnDataRequested, |
290 base::Unretained(this)), | 292 base::Unretained(this)), |
291 base::Bind(&MediaCodecDecoderTest::OnStarvation, base::Unretained(this)), | 293 base::Bind(&MediaCodecDecoderTest::OnStarvation, base::Unretained(this)), |
292 base::Bind(&MediaCodecDecoderTest::OnDecoderDrained, | 294 base::Bind(&MediaCodecDecoderTest::OnDecoderDrained, |
293 base::Unretained(this)), | 295 base::Unretained(this)), |
294 base::Bind(&MediaCodecDecoderTest::OnStopDone, base::Unretained(this)), | 296 base::Bind(&MediaCodecDecoderTest::OnStopDone, base::Unretained(this)), |
295 base::Bind(&MediaCodecDecoderTest::OnKeyRequired, base::Unretained(this)), | 297 base::Bind(&MediaCodecDecoderTest::OnKeyRequired, base::Unretained(this)), |
296 base::Bind(&MediaCodecDecoderTest::OnError, base::Unretained(this)), | 298 base::Bind(&MediaCodecDecoderTest::OnError, base::Unretained(this)), |
297 base::Bind(&MediaCodecDecoderTest::OnUpdateCurrentTime, | 299 base::Bind(&MediaCodecDecoderTest::OnUpdateCurrentTime, |
(...skipping 24 matching lines...) Expand all Loading... |
322 ASSERT_NE(nullptr, decoder_.get()); | 324 ASSERT_NE(nullptr, decoder_.get()); |
323 VideoMediaCodecDecoder* video_decoder = | 325 VideoMediaCodecDecoder* video_decoder = |
324 static_cast<VideoMediaCodecDecoder*>(decoder_.get()); | 326 static_cast<VideoMediaCodecDecoder*>(decoder_.get()); |
325 video_decoder->SetVideoSurface(std::move(surface)); | 327 video_decoder->SetVideoSurface(std::move(surface)); |
326 } | 328 } |
327 | 329 |
328 TEST_F(MediaCodecDecoderTest, AudioPrefetch) { | 330 TEST_F(MediaCodecDecoderTest, AudioPrefetch) { |
329 CreateAudioDecoder(); | 331 CreateAudioDecoder(); |
330 | 332 |
331 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); | 333 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); |
332 SetDataFactory(scoped_ptr<TestDataFactory>(new AudioFactory(duration))); | 334 SetDataFactory(base::WrapUnique(new AudioFactory(duration))); |
333 | 335 |
334 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 336 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
335 base::Unretained(this), true)); | 337 base::Unretained(this), true)); |
336 | 338 |
337 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 339 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
338 base::Unretained(this)))); | 340 base::Unretained(this)))); |
339 } | 341 } |
340 | 342 |
341 TEST_F(MediaCodecDecoderTest, VideoPrefetch) { | 343 TEST_F(MediaCodecDecoderTest, VideoPrefetch) { |
342 CreateVideoDecoder(); | 344 CreateVideoDecoder(); |
343 | 345 |
344 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); | 346 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); |
345 SetDataFactory(scoped_ptr<VideoFactory>(new VideoFactory(duration))); | 347 SetDataFactory(base::WrapUnique(new VideoFactory(duration))); |
346 | 348 |
347 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 349 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
348 base::Unretained(this), true)); | 350 base::Unretained(this), true)); |
349 | 351 |
350 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 352 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
351 base::Unretained(this)))); | 353 base::Unretained(this)))); |
352 } | 354 } |
353 | 355 |
354 TEST_F(MediaCodecDecoderTest, AudioConfigureNoParams) { | 356 TEST_F(MediaCodecDecoderTest, AudioConfigureNoParams) { |
355 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 357 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
356 | 358 |
357 CreateAudioDecoder(); | 359 CreateAudioDecoder(); |
358 | 360 |
359 // Cannot configure without config parameters. | 361 // Cannot configure without config parameters. |
360 EXPECT_EQ(MediaCodecDecoder::kConfigFailure, decoder_->Configure(nullptr)); | 362 EXPECT_EQ(MediaCodecDecoder::kConfigFailure, decoder_->Configure(nullptr)); |
361 } | 363 } |
362 | 364 |
363 TEST_F(MediaCodecDecoderTest, AudioConfigureValidParams) { | 365 TEST_F(MediaCodecDecoderTest, AudioConfigureValidParams) { |
364 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 366 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
365 | 367 |
366 CreateAudioDecoder(); | 368 CreateAudioDecoder(); |
367 | 369 |
368 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); | 370 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); |
369 scoped_ptr<AudioFactory> factory(new AudioFactory(duration)); | 371 std::unique_ptr<AudioFactory> factory(new AudioFactory(duration)); |
370 decoder_->SetDemuxerConfigs(factory->GetConfigs()); | 372 decoder_->SetDemuxerConfigs(factory->GetConfigs()); |
371 | 373 |
372 EXPECT_EQ(MediaCodecDecoder::kConfigOk, decoder_->Configure(nullptr)); | 374 EXPECT_EQ(MediaCodecDecoder::kConfigOk, decoder_->Configure(nullptr)); |
373 } | 375 } |
374 | 376 |
375 TEST_F(MediaCodecDecoderTest, VideoConfigureNoParams) { | 377 TEST_F(MediaCodecDecoderTest, VideoConfigureNoParams) { |
376 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 378 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
377 | 379 |
378 CreateVideoDecoder(); | 380 CreateVideoDecoder(); |
379 | 381 |
380 // decoder_->Configure() searches back for the key frame. | 382 // decoder_->Configure() searches back for the key frame. |
381 // We have to prefetch decoder. | 383 // We have to prefetch decoder. |
382 | 384 |
383 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); | 385 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); |
384 SetDataFactory(scoped_ptr<VideoFactory>(new VideoFactory(duration))); | 386 SetDataFactory(base::WrapUnique(new VideoFactory(duration))); |
385 | 387 |
386 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 388 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
387 base::Unretained(this), true)); | 389 base::Unretained(this), true)); |
388 | 390 |
389 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 391 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
390 base::Unretained(this)))); | 392 base::Unretained(this)))); |
391 | 393 |
392 SetVideoSurface(); | 394 SetVideoSurface(); |
393 | 395 |
394 // Cannot configure without config parameters. | 396 // Cannot configure without config parameters. |
395 EXPECT_EQ(MediaCodecDecoder::kConfigFailure, decoder_->Configure(nullptr)); | 397 EXPECT_EQ(MediaCodecDecoder::kConfigFailure, decoder_->Configure(nullptr)); |
396 } | 398 } |
397 | 399 |
398 TEST_F(MediaCodecDecoderTest, VideoConfigureNoSurface) { | 400 TEST_F(MediaCodecDecoderTest, VideoConfigureNoSurface) { |
399 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 401 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
400 | 402 |
401 CreateVideoDecoder(); | 403 CreateVideoDecoder(); |
402 | 404 |
403 // decoder_->Configure() searches back for the key frame. | 405 // decoder_->Configure() searches back for the key frame. |
404 // We have to prefetch decoder. | 406 // We have to prefetch decoder. |
405 | 407 |
406 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); | 408 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); |
407 SetDataFactory(scoped_ptr<VideoFactory>(new VideoFactory(duration))); | 409 SetDataFactory(base::WrapUnique(new VideoFactory(duration))); |
408 | 410 |
409 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 411 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
410 base::Unretained(this), true)); | 412 base::Unretained(this), true)); |
411 | 413 |
412 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 414 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
413 base::Unretained(this)))); | 415 base::Unretained(this)))); |
414 | 416 |
415 decoder_->SetDemuxerConfigs(GetConfigs()); | 417 decoder_->SetDemuxerConfigs(GetConfigs()); |
416 | 418 |
417 // Surface is not set, Configure() should fail. | 419 // Surface is not set, Configure() should fail. |
418 | 420 |
419 EXPECT_EQ(MediaCodecDecoder::kConfigFailure, decoder_->Configure(nullptr)); | 421 EXPECT_EQ(MediaCodecDecoder::kConfigFailure, decoder_->Configure(nullptr)); |
420 } | 422 } |
421 | 423 |
422 TEST_F(MediaCodecDecoderTest, VideoConfigureInvalidSurface) { | 424 TEST_F(MediaCodecDecoderTest, VideoConfigureInvalidSurface) { |
423 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 425 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
424 | 426 |
425 CreateVideoDecoder(); | 427 CreateVideoDecoder(); |
426 | 428 |
427 // decoder_->Configure() searches back for the key frame. | 429 // decoder_->Configure() searches back for the key frame. |
428 // We have to prefetch decoder. | 430 // We have to prefetch decoder. |
429 | 431 |
430 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); | 432 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); |
431 SetDataFactory(scoped_ptr<VideoFactory>(new VideoFactory(duration))); | 433 SetDataFactory(base::WrapUnique(new VideoFactory(duration))); |
432 | 434 |
433 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 435 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
434 base::Unretained(this), true)); | 436 base::Unretained(this), true)); |
435 | 437 |
436 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 438 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
437 base::Unretained(this)))); | 439 base::Unretained(this)))); |
438 | 440 |
439 decoder_->SetDemuxerConfigs(GetConfigs()); | 441 decoder_->SetDemuxerConfigs(GetConfigs()); |
440 | 442 |
441 // Prepare the surface. | 443 // Prepare the surface. |
(...skipping 13 matching lines...) Expand all Loading... |
455 | 457 |
456 TEST_F(MediaCodecDecoderTest, VideoConfigureValidParams) { | 458 TEST_F(MediaCodecDecoderTest, VideoConfigureValidParams) { |
457 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 459 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
458 | 460 |
459 CreateVideoDecoder(); | 461 CreateVideoDecoder(); |
460 | 462 |
461 // decoder_->Configure() searches back for the key frame. | 463 // decoder_->Configure() searches back for the key frame. |
462 // We have to prefetch decoder. | 464 // We have to prefetch decoder. |
463 | 465 |
464 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); | 466 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); |
465 SetDataFactory(scoped_ptr<VideoFactory>(new VideoFactory(duration))); | 467 SetDataFactory(base::WrapUnique(new VideoFactory(duration))); |
466 | 468 |
467 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 469 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
468 base::Unretained(this), true)); | 470 base::Unretained(this), true)); |
469 | 471 |
470 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 472 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
471 base::Unretained(this)))); | 473 base::Unretained(this)))); |
472 | 474 |
473 decoder_->SetDemuxerConfigs(GetConfigs()); | 475 decoder_->SetDemuxerConfigs(GetConfigs()); |
474 | 476 |
475 SetVideoSurface(); | 477 SetVideoSurface(); |
476 | 478 |
477 // Now we can expect Configure() to succeed. | 479 // Now we can expect Configure() to succeed. |
478 | 480 |
479 EXPECT_EQ(MediaCodecDecoder::kConfigOk, decoder_->Configure(nullptr)); | 481 EXPECT_EQ(MediaCodecDecoder::kConfigOk, decoder_->Configure(nullptr)); |
480 } | 482 } |
481 | 483 |
482 TEST_F(MediaCodecDecoderTest, AudioStartWithoutConfigure) { | 484 TEST_F(MediaCodecDecoderTest, AudioStartWithoutConfigure) { |
483 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 485 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
484 | 486 |
485 CreateAudioDecoder(); | 487 CreateAudioDecoder(); |
486 | 488 |
487 // Decoder has to be prefetched and configured before the start. | 489 // Decoder has to be prefetched and configured before the start. |
488 | 490 |
489 // Wrong state: not prefetched | 491 // Wrong state: not prefetched |
490 EXPECT_FALSE(decoder_->Start(base::TimeDelta::FromMilliseconds(0))); | 492 EXPECT_FALSE(decoder_->Start(base::TimeDelta::FromMilliseconds(0))); |
491 | 493 |
492 // Do the prefetch. | 494 // Do the prefetch. |
493 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); | 495 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); |
494 SetDataFactory(scoped_ptr<AudioFactory>(new AudioFactory(duration))); | 496 SetDataFactory(base::WrapUnique(new AudioFactory(duration))); |
495 | 497 |
496 // Prefetch to avoid starvation at the beginning of playback. | 498 // Prefetch to avoid starvation at the beginning of playback. |
497 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 499 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
498 base::Unretained(this), true)); | 500 base::Unretained(this), true)); |
499 | 501 |
500 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 502 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
501 base::Unretained(this)))); | 503 base::Unretained(this)))); |
502 | 504 |
503 // Still, decoder is not configured. | 505 // Still, decoder is not configured. |
504 EXPECT_FALSE(decoder_->Start(base::TimeDelta::FromMilliseconds(0))); | 506 EXPECT_FALSE(decoder_->Start(base::TimeDelta::FromMilliseconds(0))); |
505 } | 507 } |
506 | 508 |
507 // http://crbug.com/518900 | 509 // http://crbug.com/518900 |
508 TEST_F(MediaCodecDecoderTest, DISABLED_AudioPlayTillCompletion) { | 510 TEST_F(MediaCodecDecoderTest, DISABLED_AudioPlayTillCompletion) { |
509 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 511 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
510 | 512 |
511 DVLOG(0) << "AudioPlayTillCompletion started"; | 513 DVLOG(0) << "AudioPlayTillCompletion started"; |
512 | 514 |
513 CreateAudioDecoder(); | 515 CreateAudioDecoder(); |
514 | 516 |
515 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); | 517 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); |
516 base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(1500); | 518 base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(1500); |
517 | 519 |
518 SetDataFactory(scoped_ptr<AudioFactory>(new AudioFactory(duration))); | 520 SetDataFactory(base::WrapUnique(new AudioFactory(duration))); |
519 | 521 |
520 // Prefetch to avoid starvation at the beginning of playback. | 522 // Prefetch to avoid starvation at the beginning of playback. |
521 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 523 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
522 base::Unretained(this), true)); | 524 base::Unretained(this), true)); |
523 | 525 |
524 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 526 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
525 base::Unretained(this)))); | 527 base::Unretained(this)))); |
526 | 528 |
527 decoder_->SetDemuxerConfigs(GetConfigs()); | 529 decoder_->SetDemuxerConfigs(GetConfigs()); |
528 | 530 |
(...skipping 21 matching lines...) Expand all Loading... |
550 TEST_F(MediaCodecDecoderTest, VideoPlayTillCompletion) { | 552 TEST_F(MediaCodecDecoderTest, VideoPlayTillCompletion) { |
551 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 553 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
552 | 554 |
553 CreateVideoDecoder(); | 555 CreateVideoDecoder(); |
554 | 556 |
555 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); | 557 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); |
556 // The first output frame might come out with significant delay. Apparently | 558 // The first output frame might come out with significant delay. Apparently |
557 // the codec does initial configuration at this time. We increase the timeout | 559 // the codec does initial configuration at this time. We increase the timeout |
558 // to leave a room of 1 second for this initial configuration. | 560 // to leave a room of 1 second for this initial configuration. |
559 base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(1500); | 561 base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(1500); |
560 SetDataFactory(scoped_ptr<VideoFactory>(new VideoFactory(duration))); | 562 SetDataFactory(base::WrapUnique(new VideoFactory(duration))); |
561 | 563 |
562 // Prefetch | 564 // Prefetch |
563 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 565 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
564 base::Unretained(this), true)); | 566 base::Unretained(this), true)); |
565 | 567 |
566 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 568 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
567 base::Unretained(this)))); | 569 base::Unretained(this)))); |
568 | 570 |
569 decoder_->SetDemuxerConfigs(GetConfigs()); | 571 decoder_->SetDemuxerConfigs(GetConfigs()); |
570 | 572 |
(...skipping 17 matching lines...) Expand all Loading... |
588 | 590 |
589 TEST_F(MediaCodecDecoderTest, VideoStopAndResume) { | 591 TEST_F(MediaCodecDecoderTest, VideoStopAndResume) { |
590 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 592 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
591 | 593 |
592 CreateVideoDecoder(); | 594 CreateVideoDecoder(); |
593 | 595 |
594 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); | 596 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(500); |
595 base::TimeDelta stop_request_time = base::TimeDelta::FromMilliseconds(200); | 597 base::TimeDelta stop_request_time = base::TimeDelta::FromMilliseconds(200); |
596 base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(1000); | 598 base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(1000); |
597 | 599 |
598 SetDataFactory(scoped_ptr<VideoFactory>(new VideoFactory(duration))); | 600 SetDataFactory(base::WrapUnique(new VideoFactory(duration))); |
599 | 601 |
600 // Prefetch | 602 // Prefetch |
601 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 603 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
602 base::Unretained(this), true)); | 604 base::Unretained(this), true)); |
603 | 605 |
604 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 606 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
605 base::Unretained(this)))); | 607 base::Unretained(this)))); |
606 | 608 |
607 decoder_->SetDemuxerConfigs(GetConfigs()); | 609 decoder_->SetDemuxerConfigs(GetConfigs()); |
608 | 610 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
659 TEST_F(MediaCodecDecoderTest, DISABLED_AudioStarvationAndStop) { | 661 TEST_F(MediaCodecDecoderTest, DISABLED_AudioStarvationAndStop) { |
660 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 662 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
661 | 663 |
662 CreateAudioDecoder(); | 664 CreateAudioDecoder(); |
663 | 665 |
664 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(200); | 666 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(200); |
665 base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(400); | 667 base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(400); |
666 | 668 |
667 AudioFactory* factory = new AudioFactory(duration); | 669 AudioFactory* factory = new AudioFactory(duration); |
668 factory->SetStarvationMode(true); | 670 factory->SetStarvationMode(true); |
669 SetDataFactory(scoped_ptr<AudioFactory>(factory)); | 671 SetDataFactory(base::WrapUnique(factory)); |
670 | 672 |
671 // Prefetch. | 673 // Prefetch. |
672 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, | 674 decoder_->Prefetch(base::Bind(&MediaCodecDecoderTest::SetPrefetched, |
673 base::Unretained(this), true)); | 675 base::Unretained(this), true)); |
674 | 676 |
675 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, | 677 EXPECT_TRUE(WaitForCondition(base::Bind(&MediaCodecDecoderTest::is_prefetched, |
676 base::Unretained(this)))); | 678 base::Unretained(this)))); |
677 | 679 |
678 // Configure. | 680 // Configure. |
679 decoder_->SetDemuxerConfigs(GetConfigs()); | 681 decoder_->SetDemuxerConfigs(GetConfigs()); |
(...skipping 26 matching lines...) Expand all Loading... |
706 TEST_F(MediaCodecDecoderTest, VideoFirstUnitIsReconfig) { | 708 TEST_F(MediaCodecDecoderTest, VideoFirstUnitIsReconfig) { |
707 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); | 709 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); |
708 | 710 |
709 // Test that the kConfigChanged unit that comes before the first data unit | 711 // Test that the kConfigChanged unit that comes before the first data unit |
710 // gets processed, i.e. is not lost. | 712 // gets processed, i.e. is not lost. |
711 | 713 |
712 CreateVideoDecoder(); | 714 CreateVideoDecoder(); |
713 | 715 |
714 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(200); | 716 base::TimeDelta duration = base::TimeDelta::FromMilliseconds(200); |
715 base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(1000); | 717 base::TimeDelta timeout = base::TimeDelta::FromMilliseconds(1000); |
716 SetDataFactory(scoped_ptr<VideoFactory>(new VideoFactory(duration))); | 718 SetDataFactory(base::WrapUnique(new VideoFactory(duration))); |
717 | 719 |
718 // Ask factory to produce initial configuration unit. The configuraton will | 720 // Ask factory to produce initial configuration unit. The configuraton will |
719 // be factory.GetConfigs(). | 721 // be factory.GetConfigs(). |
720 data_factory_->RequestInitialConfigs(); | 722 data_factory_->RequestInitialConfigs(); |
721 | 723 |
722 // Create am alternative configuration (we just alter video size). | 724 // Create am alternative configuration (we just alter video size). |
723 DemuxerConfigs alt_configs = data_factory_->GetConfigs(); | 725 DemuxerConfigs alt_configs = data_factory_->GetConfigs(); |
724 alt_configs.video_size = gfx::Size(100, 100); | 726 alt_configs.video_size = gfx::Size(100, 100); |
725 | 727 |
726 // Pass the alternative configuration to decoder. | 728 // Pass the alternative configuration to decoder. |
(...skipping 25 matching lines...) Expand all Loading... |
752 | 754 |
753 EXPECT_TRUE(decoder_->IsStopped()); | 755 EXPECT_TRUE(decoder_->IsStopped()); |
754 EXPECT_TRUE(decoder_->IsCompleted()); | 756 EXPECT_TRUE(decoder_->IsCompleted()); |
755 EXPECT_EQ(data_factory_->last_pts(), pts_stat_.max()); | 757 EXPECT_EQ(data_factory_->last_pts(), pts_stat_.max()); |
756 | 758 |
757 // Check that the reported video size is the one from the in-stream configs. | 759 // Check that the reported video size is the one from the in-stream configs. |
758 EXPECT_EQ(data_factory_->GetConfigs().video_size, video_size_); | 760 EXPECT_EQ(data_factory_->GetConfigs().video_size, video_size_); |
759 } | 761 } |
760 | 762 |
761 } // namespace media | 763 } // namespace media |
OLD | NEW |