| 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 <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 #include <memory> |
| 8 #include <vector> | 9 #include <vector> |
| 9 | 10 |
| 10 #include "base/bind.h" | 11 #include "base/bind.h" |
| 11 #include "base/command_line.h" | 12 #include "base/command_line.h" |
| 12 #include "base/files/file_path.h" | 13 #include "base/files/file_path.h" |
| 13 #include "base/files/memory_mapped_file.h" | 14 #include "base/files/memory_mapped_file.h" |
| 14 #include "base/logging.h" | 15 #include "base/logging.h" |
| 15 #include "base/macros.h" | 16 #include "base/macros.h" |
| 17 #include "base/memory/ptr_util.h" |
| 16 #include "base/memory/ref_counted.h" | 18 #include "base/memory/ref_counted.h" |
| 17 #include "base/memory/scoped_ptr.h" | |
| 18 #include "base/memory/scoped_vector.h" | 19 #include "base/memory/scoped_vector.h" |
| 19 #include "base/message_loop/message_loop.h" | 20 #include "base/message_loop/message_loop.h" |
| 20 #include "base/path_service.h" | 21 #include "base/path_service.h" |
| 21 #include "base/single_thread_task_runner.h" | 22 #include "base/single_thread_task_runner.h" |
| 22 #include "base/thread_task_runner_handle.h" | 23 #include "base/thread_task_runner_handle.h" |
| 23 #include "base/threading/thread.h" | 24 #include "base/threading/thread.h" |
| 24 #include "base/threading/thread_checker.h" | 25 #include "base/threading/thread_checker.h" |
| 25 #include "base/time/time.h" | 26 #include "base/time/time.h" |
| 26 #include "chromecast/base/task_runner_impl.h" | 27 #include "chromecast/base/task_runner_impl.h" |
| 27 #include "chromecast/media/cma/base/decoder_buffer_adapter.h" | 28 #include "chromecast/media/cma/base/decoder_buffer_adapter.h" |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 .Append(FILE_PATH_LITERAL("test")).Append(FILE_PATH_LITERAL("data")) | 84 .Append(FILE_PATH_LITERAL("test")).Append(FILE_PATH_LITERAL("data")) |
| 84 .AppendASCII(name); | 85 .AppendASCII(name); |
| 85 return file_path; | 86 return file_path; |
| 86 } | 87 } |
| 87 | 88 |
| 88 class BufferFeeder : public MediaPipelineBackend::Decoder::Delegate { | 89 class BufferFeeder : public MediaPipelineBackend::Decoder::Delegate { |
| 89 public: | 90 public: |
| 90 explicit BufferFeeder(const base::Closure& eos_cb); | 91 explicit BufferFeeder(const base::Closure& eos_cb); |
| 91 ~BufferFeeder() override {} | 92 ~BufferFeeder() override {} |
| 92 | 93 |
| 93 static scoped_ptr<BufferFeeder> LoadAudio(MediaPipelineBackend* backend, | 94 static std::unique_ptr<BufferFeeder> LoadAudio(MediaPipelineBackend* backend, |
| 94 const std::string& filename, | 95 const std::string& filename, |
| 95 const base::Closure& eos_cb); | 96 const base::Closure& eos_cb); |
| 96 static scoped_ptr<BufferFeeder> LoadVideo(MediaPipelineBackend* backend, | 97 static std::unique_ptr<BufferFeeder> LoadVideo(MediaPipelineBackend* backend, |
| 97 const std::string& filename, | 98 const std::string& filename, |
| 98 bool raw_h264, | 99 bool raw_h264, |
| 99 const base::Closure& eos_cb); | 100 const base::Closure& eos_cb); |
| 100 | 101 |
| 101 bool eos() const { return eos_; } | 102 bool eos() const { return eos_; } |
| 102 MediaPipelineBackend::Decoder* decoder() const { return decoder_; } | 103 MediaPipelineBackend::Decoder* decoder() const { return decoder_; } |
| 103 int64_t last_pushed_pts() const { return last_pushed_pts_; } | 104 int64_t last_pushed_pts() const { return last_pushed_pts_; } |
| 104 | 105 |
| 105 void SetAudioConfig(const AudioConfig& config) { audio_config_ = config; } | 106 void SetAudioConfig(const AudioConfig& config) { audio_config_ = config; } |
| 106 void SetVideoConfig(const VideoConfig& config) { video_config_ = config; } | 107 void SetVideoConfig(const VideoConfig& config) { video_config_ = config; } |
| 107 | 108 |
| 108 void FeedContinuousPcm(); | 109 void FeedContinuousPcm(); |
| 109 void PauseBeforeEos(); | 110 void PauseBeforeEos(); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 bool feed_continuous_pcm_; | 144 bool feed_continuous_pcm_; |
| 144 MediaPipelineBackend* backend_; | 145 MediaPipelineBackend* backend_; |
| 145 MediaPipelineBackend::Decoder* decoder_; | 146 MediaPipelineBackend::Decoder* decoder_; |
| 146 BufferList buffers_; | 147 BufferList buffers_; |
| 147 BufferList buffers_copy_; | 148 BufferList buffers_copy_; |
| 148 scoped_refptr<DecoderBufferBase> pending_buffer_; | 149 scoped_refptr<DecoderBufferBase> pending_buffer_; |
| 149 base::ThreadChecker thread_checker_; | 150 base::ThreadChecker thread_checker_; |
| 150 AudioConfig audio_config_; | 151 AudioConfig audio_config_; |
| 151 VideoConfig video_config_; | 152 VideoConfig video_config_; |
| 152 int64_t last_pushed_pts_; | 153 int64_t last_pushed_pts_; |
| 153 scoped_ptr<::media::AudioTimestampHelper> timestamp_helper_; | 154 std::unique_ptr<::media::AudioTimestampHelper> timestamp_helper_; |
| 154 | 155 |
| 155 DISALLOW_COPY_AND_ASSIGN(BufferFeeder); | 156 DISALLOW_COPY_AND_ASSIGN(BufferFeeder); |
| 156 }; | 157 }; |
| 157 | 158 |
| 158 } // namespace | 159 } // namespace |
| 159 | 160 |
| 160 class AudioVideoPipelineDeviceTest : public testing::Test { | 161 class AudioVideoPipelineDeviceTest : public testing::Test { |
| 161 public: | 162 public: |
| 162 struct PauseInfo { | 163 struct PauseInfo { |
| 163 PauseInfo() {} | 164 PauseInfo() {} |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 | 202 |
| 202 // Adds a pause to the end of pause pattern | 203 // Adds a pause to the end of pause pattern |
| 203 void AddPause(base::TimeDelta delay, base::TimeDelta length); | 204 void AddPause(base::TimeDelta delay, base::TimeDelta length); |
| 204 void PauseBeforeEos(); | 205 void PauseBeforeEos(); |
| 205 void AddEffectsStreams(); | 206 void AddEffectsStreams(); |
| 206 | 207 |
| 207 void Initialize(); | 208 void Initialize(); |
| 208 void Start(); | 209 void Start(); |
| 209 void OnEndOfStream(); | 210 void OnEndOfStream(); |
| 210 | 211 |
| 211 void SetAudioFeeder(scoped_ptr<BufferFeeder> audio_feeder) { | 212 void SetAudioFeeder(std::unique_ptr<BufferFeeder> audio_feeder) { |
| 212 audio_feeder_ = std::move(audio_feeder); | 213 audio_feeder_ = std::move(audio_feeder); |
| 213 } | 214 } |
| 214 void SetVideoFeeder(scoped_ptr<BufferFeeder> video_feeder) { | 215 void SetVideoFeeder(std::unique_ptr<BufferFeeder> video_feeder) { |
| 215 video_feeder_ = std::move(video_feeder); | 216 video_feeder_ = std::move(video_feeder); |
| 216 } | 217 } |
| 217 | 218 |
| 218 void RunStoppedChecks(); | 219 void RunStoppedChecks(); |
| 219 void RunPlaybackChecks(); | 220 void RunPlaybackChecks(); |
| 220 void TestBackendStates(); | 221 void TestBackendStates(); |
| 221 void StartImmediateEosTest(); | 222 void StartImmediateEosTest(); |
| 222 void EndImmediateEosTest(); | 223 void EndImmediateEosTest(); |
| 223 | 224 |
| 224 private: | 225 private: |
| 225 void MonitorLoop(); | 226 void MonitorLoop(); |
| 226 | 227 |
| 227 void OnPauseCompleted(); | 228 void OnPauseCompleted(); |
| 228 | 229 |
| 229 MediaPipelineDeviceParams::MediaSyncType sync_type_; | 230 MediaPipelineDeviceParams::MediaSyncType sync_type_; |
| 230 MediaPipelineDeviceParams::AudioStreamType audio_type_; | 231 MediaPipelineDeviceParams::AudioStreamType audio_type_; |
| 231 scoped_ptr<TaskRunnerImpl> task_runner_; | 232 std::unique_ptr<TaskRunnerImpl> task_runner_; |
| 232 scoped_ptr<MediaPipelineBackend> backend_; | 233 std::unique_ptr<MediaPipelineBackend> backend_; |
| 233 std::vector<scoped_ptr<MediaPipelineBackend>> effects_backends_; | 234 std::vector<std::unique_ptr<MediaPipelineBackend>> effects_backends_; |
| 234 std::vector<scoped_ptr<BufferFeeder>> effects_feeders_; | 235 std::vector<std::unique_ptr<BufferFeeder>> effects_feeders_; |
| 235 scoped_ptr<BufferFeeder> audio_feeder_; | 236 std::unique_ptr<BufferFeeder> audio_feeder_; |
| 236 scoped_ptr<BufferFeeder> video_feeder_; | 237 std::unique_ptr<BufferFeeder> video_feeder_; |
| 237 bool stopped_; | 238 bool stopped_; |
| 238 bool ran_playing_playback_checks_; | 239 bool ran_playing_playback_checks_; |
| 239 bool backwards_pts_change_; | 240 bool backwards_pts_change_; |
| 240 int64_t last_pts_; | 241 int64_t last_pts_; |
| 241 | 242 |
| 242 // Current media time. | 243 // Current media time. |
| 243 base::TimeDelta pause_time_; | 244 base::TimeDelta pause_time_; |
| 244 | 245 |
| 245 // Pause settings | 246 // Pause settings |
| 246 std::vector<PauseInfo> pause_pattern_; | 247 std::vector<PauseInfo> pause_pattern_; |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 519 static_cast<MediaPipelineBackend::VideoDecoder*>(decoder_); | 520 static_cast<MediaPipelineBackend::VideoDecoder*>(decoder_); |
| 520 VideoConfig config; | 521 VideoConfig config; |
| 521 config.codec = kVideoCodecUnknown; | 522 config.codec = kVideoCodecUnknown; |
| 522 // Set invalid config first, to test that the decoder still accepts valid | 523 // Set invalid config first, to test that the decoder still accepts valid |
| 523 // config after an invalid config. | 524 // config after an invalid config. |
| 524 video_decoder->SetConfig(config); | 525 video_decoder->SetConfig(config); |
| 525 EXPECT_TRUE(video_decoder->SetConfig(video_config_)); | 526 EXPECT_TRUE(video_decoder->SetConfig(video_config_)); |
| 526 } | 527 } |
| 527 | 528 |
| 528 // static | 529 // static |
| 529 scoped_ptr<BufferFeeder> BufferFeeder::LoadAudio(MediaPipelineBackend* backend, | 530 std::unique_ptr<BufferFeeder> BufferFeeder::LoadAudio( |
| 530 const std::string& filename, | 531 MediaPipelineBackend* backend, |
| 531 const base::Closure& eos_cb) { | 532 const std::string& filename, |
| 533 const base::Closure& eos_cb) { |
| 532 CHECK(backend); | 534 CHECK(backend); |
| 533 base::FilePath file_path = GetTestDataFilePath(filename); | 535 base::FilePath file_path = GetTestDataFilePath(filename); |
| 534 DemuxResult demux_result = FFmpegDemuxForTest(file_path, true /* audio */); | 536 DemuxResult demux_result = FFmpegDemuxForTest(file_path, true /* audio */); |
| 535 | 537 |
| 536 MediaPipelineBackend::AudioDecoder* decoder = backend->CreateAudioDecoder(); | 538 MediaPipelineBackend::AudioDecoder* decoder = backend->CreateAudioDecoder(); |
| 537 CHECK(decoder); | 539 CHECK(decoder); |
| 538 AudioConfig config = DecoderConfigAdapter::ToCastAudioConfig( | 540 AudioConfig config = DecoderConfigAdapter::ToCastAudioConfig( |
| 539 kPrimary, demux_result.audio_config); | 541 kPrimary, demux_result.audio_config); |
| 540 bool success = decoder->SetConfig(config); | 542 bool success = decoder->SetConfig(config); |
| 541 CHECK(success); | 543 CHECK(success); |
| 542 | 544 |
| 543 VLOG(2) << "Got " << demux_result.frames.size() << " audio input frames"; | 545 VLOG(2) << "Got " << demux_result.frames.size() << " audio input frames"; |
| 544 scoped_ptr<BufferFeeder> feeder(new BufferFeeder(eos_cb)); | 546 std::unique_ptr<BufferFeeder> feeder(new BufferFeeder(eos_cb)); |
| 545 feeder->audio_config_ = config; | 547 feeder->audio_config_ = config; |
| 546 feeder->Initialize(backend, decoder, demux_result.frames); | 548 feeder->Initialize(backend, decoder, demux_result.frames); |
| 547 return feeder; | 549 return feeder; |
| 548 } | 550 } |
| 549 | 551 |
| 550 // static | 552 // static |
| 551 scoped_ptr<BufferFeeder> BufferFeeder::LoadVideo(MediaPipelineBackend* backend, | 553 std::unique_ptr<BufferFeeder> BufferFeeder::LoadVideo( |
| 552 const std::string& filename, | 554 MediaPipelineBackend* backend, |
| 553 bool raw_h264, | 555 const std::string& filename, |
| 554 const base::Closure& eos_cb) { | 556 bool raw_h264, |
| 557 const base::Closure& eos_cb) { |
| 555 CHECK(backend); | 558 CHECK(backend); |
| 556 | 559 |
| 557 VideoConfig video_config; | 560 VideoConfig video_config; |
| 558 BufferList buffers; | 561 BufferList buffers; |
| 559 if (raw_h264) { | 562 if (raw_h264) { |
| 560 base::FilePath file_path = GetTestDataFilePath(filename); | 563 base::FilePath file_path = GetTestDataFilePath(filename); |
| 561 base::MemoryMappedFile video_stream; | 564 base::MemoryMappedFile video_stream; |
| 562 CHECK(video_stream.Initialize(file_path)) << "Couldn't open stream file: " | 565 CHECK(video_stream.Initialize(file_path)) << "Couldn't open stream file: " |
| 563 << file_path.MaybeAsASCII(); | 566 << file_path.MaybeAsASCII(); |
| 564 buffers = H264SegmenterForTest(video_stream.data(), video_stream.length()); | 567 buffers = H264SegmenterForTest(video_stream.data(), video_stream.length()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 576 kPrimary, demux_result.video_config); | 579 kPrimary, demux_result.video_config); |
| 577 } | 580 } |
| 578 | 581 |
| 579 MediaPipelineBackend::VideoDecoder* decoder = backend->CreateVideoDecoder(); | 582 MediaPipelineBackend::VideoDecoder* decoder = backend->CreateVideoDecoder(); |
| 580 CHECK(decoder); | 583 CHECK(decoder); |
| 581 | 584 |
| 582 bool success = decoder->SetConfig(video_config); | 585 bool success = decoder->SetConfig(video_config); |
| 583 CHECK(success); | 586 CHECK(success); |
| 584 | 587 |
| 585 VLOG(2) << "Got " << buffers.size() << " video input frames"; | 588 VLOG(2) << "Got " << buffers.size() << " video input frames"; |
| 586 scoped_ptr<BufferFeeder> feeder(new BufferFeeder(eos_cb)); | 589 std::unique_ptr<BufferFeeder> feeder(new BufferFeeder(eos_cb)); |
| 587 feeder->video_config_ = video_config; | 590 feeder->video_config_ = video_config; |
| 588 feeder->Initialize(backend, decoder, buffers); | 591 feeder->Initialize(backend, decoder, buffers); |
| 589 return feeder; | 592 return feeder; |
| 590 } | 593 } |
| 591 | 594 |
| 592 } // namespace | 595 } // namespace |
| 593 | 596 |
| 594 AudioVideoPipelineDeviceTest::AudioVideoPipelineDeviceTest() | 597 AudioVideoPipelineDeviceTest::AudioVideoPipelineDeviceTest() |
| 595 : sync_type_(MediaPipelineDeviceParams::kModeSyncPts), | 598 : sync_type_(MediaPipelineDeviceParams::kModeSyncPts), |
| 596 audio_type_(MediaPipelineDeviceParams::kAudioStreamNormal), | 599 audio_type_(MediaPipelineDeviceParams::kAudioStreamNormal), |
| (...skipping 28 matching lines...) Expand all Loading... |
| 625 void AudioVideoPipelineDeviceTest::AddEffectsStreams() { | 628 void AudioVideoPipelineDeviceTest::AddEffectsStreams() { |
| 626 const int kNumEffectsStreams = 3; | 629 const int kNumEffectsStreams = 3; |
| 627 for (int i = 0; i < kNumEffectsStreams; ++i) { | 630 for (int i = 0; i < kNumEffectsStreams; ++i) { |
| 628 MediaPipelineDeviceParams params( | 631 MediaPipelineDeviceParams params( |
| 629 MediaPipelineDeviceParams::kModeIgnorePts, | 632 MediaPipelineDeviceParams::kModeIgnorePts, |
| 630 MediaPipelineDeviceParams::kAudioStreamSoundEffects, | 633 MediaPipelineDeviceParams::kAudioStreamSoundEffects, |
| 631 task_runner_.get()); | 634 task_runner_.get()); |
| 632 MediaPipelineBackend* effects_backend = | 635 MediaPipelineBackend* effects_backend = |
| 633 CastMediaShlib::CreateMediaPipelineBackend(params); | 636 CastMediaShlib::CreateMediaPipelineBackend(params); |
| 634 CHECK(effects_backend); | 637 CHECK(effects_backend); |
| 635 effects_backends_.push_back(make_scoped_ptr(effects_backend)); | 638 effects_backends_.push_back(base::WrapUnique(effects_backend)); |
| 636 | 639 |
| 637 MediaPipelineBackend::AudioDecoder* audio_decoder = | 640 MediaPipelineBackend::AudioDecoder* audio_decoder = |
| 638 effects_backend->CreateAudioDecoder(); | 641 effects_backend->CreateAudioDecoder(); |
| 639 audio_decoder->SetConfig(DefaultAudioConfig()); | 642 audio_decoder->SetConfig(DefaultAudioConfig()); |
| 640 | 643 |
| 641 scoped_ptr<BufferFeeder> feeder(new BufferFeeder(base::Bind(&IgnoreEos))); | 644 std::unique_ptr<BufferFeeder> feeder( |
| 645 new BufferFeeder(base::Bind(&IgnoreEos))); |
| 642 feeder->FeedContinuousPcm(); | 646 feeder->FeedContinuousPcm(); |
| 643 feeder->Initialize(effects_backend, audio_decoder, BufferList()); | 647 feeder->Initialize(effects_backend, audio_decoder, BufferList()); |
| 644 feeder->SetAudioConfig(DefaultAudioConfig()); | 648 feeder->SetAudioConfig(DefaultAudioConfig()); |
| 645 effects_feeders_.push_back(std::move(feeder)); | 649 effects_feeders_.push_back(std::move(feeder)); |
| 646 ASSERT_TRUE(effects_backend->Initialize()); | 650 ASSERT_TRUE(effects_backend->Initialize()); |
| 647 } | 651 } |
| 648 } | 652 } |
| 649 | 653 |
| 650 void AudioVideoPipelineDeviceTest::SetPausePattern( | 654 void AudioVideoPipelineDeviceTest::SetPausePattern( |
| 651 const std::vector<PauseInfo> pattern) { | 655 const std::vector<PauseInfo> pattern) { |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 887 | 891 |
| 888 ASSERT_TRUE(backend_->Stop()); | 892 ASSERT_TRUE(backend_->Stop()); |
| 889 base::MessageLoop::current()->RunUntilIdle(); | 893 base::MessageLoop::current()->RunUntilIdle(); |
| 890 | 894 |
| 891 RunStoppedChecks(); | 895 RunStoppedChecks(); |
| 892 | 896 |
| 893 base::MessageLoop::current()->QuitWhenIdle(); | 897 base::MessageLoop::current()->QuitWhenIdle(); |
| 894 } | 898 } |
| 895 | 899 |
| 896 TEST_F(AudioVideoPipelineDeviceTest, Mp3Playback) { | 900 TEST_F(AudioVideoPipelineDeviceTest, Mp3Playback) { |
| 897 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 901 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 898 | 902 |
| 899 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); | 903 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); |
| 900 ConfigureForAudioOnly("sfx.mp3"); | 904 ConfigureForAudioOnly("sfx.mp3"); |
| 901 PauseBeforeEos(); | 905 PauseBeforeEos(); |
| 902 Start(); | 906 Start(); |
| 903 message_loop->Run(); | 907 message_loop->Run(); |
| 904 } | 908 } |
| 905 | 909 |
| 906 TEST_F(AudioVideoPipelineDeviceTest, AacPlayback) { | 910 TEST_F(AudioVideoPipelineDeviceTest, AacPlayback) { |
| 907 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 911 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 908 | 912 |
| 909 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); | 913 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); |
| 910 ConfigureForAudioOnly("sfx.m4a"); | 914 ConfigureForAudioOnly("sfx.m4a"); |
| 911 PauseBeforeEos(); | 915 PauseBeforeEos(); |
| 912 Start(); | 916 Start(); |
| 913 message_loop->Run(); | 917 message_loop->Run(); |
| 914 } | 918 } |
| 915 | 919 |
| 916 TEST_F(AudioVideoPipelineDeviceTest, VorbisPlayback) { | 920 TEST_F(AudioVideoPipelineDeviceTest, VorbisPlayback) { |
| 917 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 921 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 918 | 922 |
| 919 set_sync_type(MediaPipelineDeviceParams::kModeIgnorePts); | 923 set_sync_type(MediaPipelineDeviceParams::kModeIgnorePts); |
| 920 ConfigureForAudioOnly("sfx.ogg"); | 924 ConfigureForAudioOnly("sfx.ogg"); |
| 921 Start(); | 925 Start(); |
| 922 message_loop->Run(); | 926 message_loop->Run(); |
| 923 } | 927 } |
| 924 | 928 |
| 925 // TODO(kmackay) FFmpegDemuxForTest can't handle AC3 or EAC3. | 929 // TODO(kmackay) FFmpegDemuxForTest can't handle AC3 or EAC3. |
| 926 | 930 |
| 927 TEST_F(AudioVideoPipelineDeviceTest, OpusPlayback_Optional) { | 931 TEST_F(AudioVideoPipelineDeviceTest, OpusPlayback_Optional) { |
| 928 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 932 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 929 | 933 |
| 930 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); | 934 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); |
| 931 ConfigureForAudioOnly("bear-opus.ogg"); | 935 ConfigureForAudioOnly("bear-opus.ogg"); |
| 932 PauseBeforeEos(); | 936 PauseBeforeEos(); |
| 933 Start(); | 937 Start(); |
| 934 message_loop->Run(); | 938 message_loop->Run(); |
| 935 } | 939 } |
| 936 | 940 |
| 937 TEST_F(AudioVideoPipelineDeviceTest, FlacPlayback_Optional) { | 941 TEST_F(AudioVideoPipelineDeviceTest, FlacPlayback_Optional) { |
| 938 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 942 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 939 | 943 |
| 940 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); | 944 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); |
| 941 ConfigureForAudioOnly("bear.flac"); | 945 ConfigureForAudioOnly("bear.flac"); |
| 942 PauseBeforeEos(); | 946 PauseBeforeEos(); |
| 943 Start(); | 947 Start(); |
| 944 message_loop->Run(); | 948 message_loop->Run(); |
| 945 } | 949 } |
| 946 | 950 |
| 947 TEST_F(AudioVideoPipelineDeviceTest, H264Playback) { | 951 TEST_F(AudioVideoPipelineDeviceTest, H264Playback) { |
| 948 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 952 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 949 | 953 |
| 950 set_sync_type(MediaPipelineDeviceParams::kModeIgnorePtsAndVSync); | 954 set_sync_type(MediaPipelineDeviceParams::kModeIgnorePtsAndVSync); |
| 951 ConfigureForVideoOnly("bear.h264", true /* raw_h264 */); | 955 ConfigureForVideoOnly("bear.h264", true /* raw_h264 */); |
| 952 PauseBeforeEos(); | 956 PauseBeforeEos(); |
| 953 Start(); | 957 Start(); |
| 954 message_loop->Run(); | 958 message_loop->Run(); |
| 955 } | 959 } |
| 956 | 960 |
| 957 TEST_F(AudioVideoPipelineDeviceTest, WebmPlaybackWithPause) { | 961 TEST_F(AudioVideoPipelineDeviceTest, WebmPlaybackWithPause) { |
| 958 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 962 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 959 | 963 |
| 960 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); | 964 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); |
| 961 // Setup to pause for 100ms every 500ms | 965 // Setup to pause for 100ms every 500ms |
| 962 AddPause(base::TimeDelta::FromMilliseconds(500), | 966 AddPause(base::TimeDelta::FromMilliseconds(500), |
| 963 base::TimeDelta::FromMilliseconds(100)); | 967 base::TimeDelta::FromMilliseconds(100)); |
| 964 | 968 |
| 965 ConfigureForVideoOnly("bear-640x360.webm", false /* raw_h264 */); | 969 ConfigureForVideoOnly("bear-640x360.webm", false /* raw_h264 */); |
| 966 Start(); | 970 Start(); |
| 967 message_loop->Run(); | 971 message_loop->Run(); |
| 968 } | 972 } |
| 969 | 973 |
| 970 TEST_F(AudioVideoPipelineDeviceTest, Vp8Playback) { | 974 TEST_F(AudioVideoPipelineDeviceTest, Vp8Playback) { |
| 971 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 975 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 972 | 976 |
| 973 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); | 977 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); |
| 974 ConfigureForVideoOnly("bear-vp8a.webm", false /* raw_h264 */); | 978 ConfigureForVideoOnly("bear-vp8a.webm", false /* raw_h264 */); |
| 975 Start(); | 979 Start(); |
| 976 message_loop->Run(); | 980 message_loop->Run(); |
| 977 } | 981 } |
| 978 | 982 |
| 979 TEST_F(AudioVideoPipelineDeviceTest, WebmPlayback) { | 983 TEST_F(AudioVideoPipelineDeviceTest, WebmPlayback) { |
| 980 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 984 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 981 | 985 |
| 982 set_sync_type(MediaPipelineDeviceParams::kModeIgnorePtsAndVSync); | 986 set_sync_type(MediaPipelineDeviceParams::kModeIgnorePtsAndVSync); |
| 983 ConfigureForFile("bear-640x360.webm"); | 987 ConfigureForFile("bear-640x360.webm"); |
| 984 PauseBeforeEos(); | 988 PauseBeforeEos(); |
| 985 Start(); | 989 Start(); |
| 986 message_loop->Run(); | 990 message_loop->Run(); |
| 987 } | 991 } |
| 988 | 992 |
| 989 // TODO(kmackay) FFmpegDemuxForTest can't handle HEVC or VP9. | 993 // TODO(kmackay) FFmpegDemuxForTest can't handle HEVC or VP9. |
| 990 | 994 |
| 991 TEST_F(AudioVideoPipelineDeviceTest, AudioBackendStates) { | 995 TEST_F(AudioVideoPipelineDeviceTest, AudioBackendStates) { |
| 992 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 996 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 993 Initialize(); | 997 Initialize(); |
| 994 MediaPipelineBackend::AudioDecoder* audio_decoder = | 998 MediaPipelineBackend::AudioDecoder* audio_decoder = |
| 995 backend()->CreateAudioDecoder(); | 999 backend()->CreateAudioDecoder(); |
| 996 | 1000 |
| 997 // Test setting config before Initialize(). | 1001 // Test setting config before Initialize(). |
| 998 scoped_ptr<BufferFeeder> feeder(new BufferFeeder(base::Bind(&IgnoreEos))); | 1002 std::unique_ptr<BufferFeeder> feeder( |
| 1003 new BufferFeeder(base::Bind(&IgnoreEos))); |
| 999 feeder->Initialize(backend(), audio_decoder, BufferList()); | 1004 feeder->Initialize(backend(), audio_decoder, BufferList()); |
| 1000 feeder->SetAudioConfig(DefaultAudioConfig()); | 1005 feeder->SetAudioConfig(DefaultAudioConfig()); |
| 1001 feeder->TestAudioConfigs(); | 1006 feeder->TestAudioConfigs(); |
| 1002 | 1007 |
| 1003 SetAudioFeeder(std::move(feeder)); | 1008 SetAudioFeeder(std::move(feeder)); |
| 1004 TestBackendStates(); | 1009 TestBackendStates(); |
| 1005 } | 1010 } |
| 1006 | 1011 |
| 1007 TEST_F(AudioVideoPipelineDeviceTest, AudioEffectsBackendStates) { | 1012 TEST_F(AudioVideoPipelineDeviceTest, AudioEffectsBackendStates) { |
| 1008 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 1013 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 1009 set_audio_type(MediaPipelineDeviceParams::kAudioStreamSoundEffects); | 1014 set_audio_type(MediaPipelineDeviceParams::kAudioStreamSoundEffects); |
| 1010 set_sync_type(MediaPipelineDeviceParams::kModeIgnorePts); | 1015 set_sync_type(MediaPipelineDeviceParams::kModeIgnorePts); |
| 1011 Initialize(); | 1016 Initialize(); |
| 1012 MediaPipelineBackend::AudioDecoder* audio_decoder = | 1017 MediaPipelineBackend::AudioDecoder* audio_decoder = |
| 1013 backend()->CreateAudioDecoder(); | 1018 backend()->CreateAudioDecoder(); |
| 1014 | 1019 |
| 1015 scoped_ptr<BufferFeeder> feeder(new BufferFeeder(base::Bind(&IgnoreEos))); | 1020 std::unique_ptr<BufferFeeder> feeder( |
| 1021 new BufferFeeder(base::Bind(&IgnoreEos))); |
| 1016 feeder->Initialize(backend(), audio_decoder, BufferList()); | 1022 feeder->Initialize(backend(), audio_decoder, BufferList()); |
| 1017 feeder->SetAudioConfig(DefaultAudioConfig()); | 1023 feeder->SetAudioConfig(DefaultAudioConfig()); |
| 1018 ASSERT_TRUE(audio_decoder->SetConfig(DefaultAudioConfig())); | 1024 ASSERT_TRUE(audio_decoder->SetConfig(DefaultAudioConfig())); |
| 1019 | 1025 |
| 1020 SetAudioFeeder(std::move(feeder)); | 1026 SetAudioFeeder(std::move(feeder)); |
| 1021 TestBackendStates(); | 1027 TestBackendStates(); |
| 1022 } | 1028 } |
| 1023 | 1029 |
| 1024 TEST_F(AudioVideoPipelineDeviceTest, VideoBackendStates) { | 1030 TEST_F(AudioVideoPipelineDeviceTest, VideoBackendStates) { |
| 1025 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 1031 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 1026 Initialize(); | 1032 Initialize(); |
| 1027 MediaPipelineBackend::VideoDecoder* video_decoder = | 1033 MediaPipelineBackend::VideoDecoder* video_decoder = |
| 1028 backend()->CreateVideoDecoder(); | 1034 backend()->CreateVideoDecoder(); |
| 1029 | 1035 |
| 1030 // Test setting config before Initialize(). | 1036 // Test setting config before Initialize(). |
| 1031 scoped_ptr<BufferFeeder> feeder(new BufferFeeder(base::Bind(&IgnoreEos))); | 1037 std::unique_ptr<BufferFeeder> feeder( |
| 1038 new BufferFeeder(base::Bind(&IgnoreEos))); |
| 1032 feeder->Initialize(backend(), video_decoder, BufferList()); | 1039 feeder->Initialize(backend(), video_decoder, BufferList()); |
| 1033 feeder->SetVideoConfig(DefaultVideoConfig()); | 1040 feeder->SetVideoConfig(DefaultVideoConfig()); |
| 1034 feeder->TestVideoConfigs(); | 1041 feeder->TestVideoConfigs(); |
| 1035 | 1042 |
| 1036 SetVideoFeeder(std::move(feeder)); | 1043 SetVideoFeeder(std::move(feeder)); |
| 1037 TestBackendStates(); | 1044 TestBackendStates(); |
| 1038 } | 1045 } |
| 1039 | 1046 |
| 1040 TEST_F(AudioVideoPipelineDeviceTest, AudioImmediateEos) { | 1047 TEST_F(AudioVideoPipelineDeviceTest, AudioImmediateEos) { |
| 1041 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 1048 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 1042 Initialize(); | 1049 Initialize(); |
| 1043 MediaPipelineBackend::AudioDecoder* audio_decoder = | 1050 MediaPipelineBackend::AudioDecoder* audio_decoder = |
| 1044 backend()->CreateAudioDecoder(); | 1051 backend()->CreateAudioDecoder(); |
| 1045 | 1052 |
| 1046 scoped_ptr<BufferFeeder> feeder(new BufferFeeder( | 1053 std::unique_ptr<BufferFeeder> feeder(new BufferFeeder( |
| 1047 base::Bind(&AudioVideoPipelineDeviceTest::EndImmediateEosTest, | 1054 base::Bind(&AudioVideoPipelineDeviceTest::EndImmediateEosTest, |
| 1048 base::Unretained(this)))); | 1055 base::Unretained(this)))); |
| 1049 feeder->Initialize(backend(), audio_decoder, BufferList()); | 1056 feeder->Initialize(backend(), audio_decoder, BufferList()); |
| 1050 feeder->SetAudioConfig(DefaultAudioConfig()); | 1057 feeder->SetAudioConfig(DefaultAudioConfig()); |
| 1051 SetAudioFeeder(std::move(feeder)); | 1058 SetAudioFeeder(std::move(feeder)); |
| 1052 | 1059 |
| 1053 StartImmediateEosTest(); | 1060 StartImmediateEosTest(); |
| 1054 } | 1061 } |
| 1055 | 1062 |
| 1056 TEST_F(AudioVideoPipelineDeviceTest, VideoImmediateEos) { | 1063 TEST_F(AudioVideoPipelineDeviceTest, VideoImmediateEos) { |
| 1057 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 1064 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 1058 Initialize(); | 1065 Initialize(); |
| 1059 MediaPipelineBackend::VideoDecoder* video_decoder = | 1066 MediaPipelineBackend::VideoDecoder* video_decoder = |
| 1060 backend()->CreateVideoDecoder(); | 1067 backend()->CreateVideoDecoder(); |
| 1061 | 1068 |
| 1062 scoped_ptr<BufferFeeder> feeder(new BufferFeeder( | 1069 std::unique_ptr<BufferFeeder> feeder(new BufferFeeder( |
| 1063 base::Bind(&AudioVideoPipelineDeviceTest::EndImmediateEosTest, | 1070 base::Bind(&AudioVideoPipelineDeviceTest::EndImmediateEosTest, |
| 1064 base::Unretained(this)))); | 1071 base::Unretained(this)))); |
| 1065 feeder->Initialize(backend(), video_decoder, BufferList()); | 1072 feeder->Initialize(backend(), video_decoder, BufferList()); |
| 1066 feeder->SetVideoConfig(DefaultVideoConfig()); | 1073 feeder->SetVideoConfig(DefaultVideoConfig()); |
| 1067 SetVideoFeeder(std::move(feeder)); | 1074 SetVideoFeeder(std::move(feeder)); |
| 1068 | 1075 |
| 1069 StartImmediateEosTest(); | 1076 StartImmediateEosTest(); |
| 1070 } | 1077 } |
| 1071 | 1078 |
| 1072 TEST_F(AudioVideoPipelineDeviceTest, Mp3Playback_WithEffectsStreams) { | 1079 TEST_F(AudioVideoPipelineDeviceTest, Mp3Playback_WithEffectsStreams) { |
| 1073 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 1080 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 1074 | 1081 |
| 1075 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); | 1082 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); |
| 1076 ConfigureForAudioOnly("sfx.mp3"); | 1083 ConfigureForAudioOnly("sfx.mp3"); |
| 1077 PauseBeforeEos(); | 1084 PauseBeforeEos(); |
| 1078 AddEffectsStreams(); | 1085 AddEffectsStreams(); |
| 1079 Start(); | 1086 Start(); |
| 1080 message_loop->Run(); | 1087 message_loop->Run(); |
| 1081 } | 1088 } |
| 1082 | 1089 |
| 1083 TEST_F(AudioVideoPipelineDeviceTest, AacPlayback_WithEffectsStreams) { | 1090 TEST_F(AudioVideoPipelineDeviceTest, AacPlayback_WithEffectsStreams) { |
| 1084 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 1091 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 1085 | 1092 |
| 1086 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); | 1093 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); |
| 1087 ConfigureForAudioOnly("sfx.m4a"); | 1094 ConfigureForAudioOnly("sfx.m4a"); |
| 1088 PauseBeforeEos(); | 1095 PauseBeforeEos(); |
| 1089 AddEffectsStreams(); | 1096 AddEffectsStreams(); |
| 1090 Start(); | 1097 Start(); |
| 1091 message_loop->Run(); | 1098 message_loop->Run(); |
| 1092 } | 1099 } |
| 1093 | 1100 |
| 1094 TEST_F(AudioVideoPipelineDeviceTest, VorbisPlayback_WithEffectsStreams) { | 1101 TEST_F(AudioVideoPipelineDeviceTest, VorbisPlayback_WithEffectsStreams) { |
| 1095 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 1102 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 1096 | 1103 |
| 1097 set_sync_type(MediaPipelineDeviceParams::kModeIgnorePts); | 1104 set_sync_type(MediaPipelineDeviceParams::kModeIgnorePts); |
| 1098 ConfigureForAudioOnly("sfx.ogg"); | 1105 ConfigureForAudioOnly("sfx.ogg"); |
| 1099 AddEffectsStreams(); | 1106 AddEffectsStreams(); |
| 1100 Start(); | 1107 Start(); |
| 1101 message_loop->Run(); | 1108 message_loop->Run(); |
| 1102 } | 1109 } |
| 1103 | 1110 |
| 1104 // TODO(kmackay) FFmpegDemuxForTest can't handle AC3 or EAC3. | 1111 // TODO(kmackay) FFmpegDemuxForTest can't handle AC3 or EAC3. |
| 1105 | 1112 |
| 1106 TEST_F(AudioVideoPipelineDeviceTest, OpusPlayback_WithEffectsStreams_Optional) { | 1113 TEST_F(AudioVideoPipelineDeviceTest, OpusPlayback_WithEffectsStreams_Optional) { |
| 1107 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 1114 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 1108 | 1115 |
| 1109 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); | 1116 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); |
| 1110 ConfigureForAudioOnly("bear-opus.ogg"); | 1117 ConfigureForAudioOnly("bear-opus.ogg"); |
| 1111 PauseBeforeEos(); | 1118 PauseBeforeEos(); |
| 1112 AddEffectsStreams(); | 1119 AddEffectsStreams(); |
| 1113 Start(); | 1120 Start(); |
| 1114 message_loop->Run(); | 1121 message_loop->Run(); |
| 1115 } | 1122 } |
| 1116 | 1123 |
| 1117 TEST_F(AudioVideoPipelineDeviceTest, FlacPlayback_WithEffectsStreams_Optional) { | 1124 TEST_F(AudioVideoPipelineDeviceTest, FlacPlayback_WithEffectsStreams_Optional) { |
| 1118 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 1125 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 1119 | 1126 |
| 1120 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); | 1127 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); |
| 1121 ConfigureForAudioOnly("bear.flac"); | 1128 ConfigureForAudioOnly("bear.flac"); |
| 1122 PauseBeforeEos(); | 1129 PauseBeforeEos(); |
| 1123 AddEffectsStreams(); | 1130 AddEffectsStreams(); |
| 1124 Start(); | 1131 Start(); |
| 1125 message_loop->Run(); | 1132 message_loop->Run(); |
| 1126 } | 1133 } |
| 1127 | 1134 |
| 1128 TEST_F(AudioVideoPipelineDeviceTest, H264Playback_WithEffectsStreams) { | 1135 TEST_F(AudioVideoPipelineDeviceTest, H264Playback_WithEffectsStreams) { |
| 1129 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 1136 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 1130 | 1137 |
| 1131 set_sync_type(MediaPipelineDeviceParams::kModeIgnorePtsAndVSync); | 1138 set_sync_type(MediaPipelineDeviceParams::kModeIgnorePtsAndVSync); |
| 1132 ConfigureForVideoOnly("bear.h264", true /* raw_h264 */); | 1139 ConfigureForVideoOnly("bear.h264", true /* raw_h264 */); |
| 1133 PauseBeforeEos(); | 1140 PauseBeforeEos(); |
| 1134 AddEffectsStreams(); | 1141 AddEffectsStreams(); |
| 1135 Start(); | 1142 Start(); |
| 1136 message_loop->Run(); | 1143 message_loop->Run(); |
| 1137 } | 1144 } |
| 1138 | 1145 |
| 1139 TEST_F(AudioVideoPipelineDeviceTest, WebmPlaybackWithPause_WithEffectsStreams) { | 1146 TEST_F(AudioVideoPipelineDeviceTest, WebmPlaybackWithPause_WithEffectsStreams) { |
| 1140 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 1147 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 1141 | 1148 |
| 1142 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); | 1149 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); |
| 1143 // Setup to pause for 100ms every 500ms | 1150 // Setup to pause for 100ms every 500ms |
| 1144 AddPause(base::TimeDelta::FromMilliseconds(500), | 1151 AddPause(base::TimeDelta::FromMilliseconds(500), |
| 1145 base::TimeDelta::FromMilliseconds(100)); | 1152 base::TimeDelta::FromMilliseconds(100)); |
| 1146 | 1153 |
| 1147 ConfigureForVideoOnly("bear-640x360.webm", false /* raw_h264 */); | 1154 ConfigureForVideoOnly("bear-640x360.webm", false /* raw_h264 */); |
| 1148 AddEffectsStreams(); | 1155 AddEffectsStreams(); |
| 1149 Start(); | 1156 Start(); |
| 1150 message_loop->Run(); | 1157 message_loop->Run(); |
| 1151 } | 1158 } |
| 1152 | 1159 |
| 1153 TEST_F(AudioVideoPipelineDeviceTest, Vp8Playback_WithEffectsStreams) { | 1160 TEST_F(AudioVideoPipelineDeviceTest, Vp8Playback_WithEffectsStreams) { |
| 1154 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 1161 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 1155 | 1162 |
| 1156 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); | 1163 set_sync_type(MediaPipelineDeviceParams::kModeSyncPts); |
| 1157 ConfigureForVideoOnly("bear-vp8a.webm", false /* raw_h264 */); | 1164 ConfigureForVideoOnly("bear-vp8a.webm", false /* raw_h264 */); |
| 1158 AddEffectsStreams(); | 1165 AddEffectsStreams(); |
| 1159 Start(); | 1166 Start(); |
| 1160 message_loop->Run(); | 1167 message_loop->Run(); |
| 1161 } | 1168 } |
| 1162 | 1169 |
| 1163 TEST_F(AudioVideoPipelineDeviceTest, WebmPlayback_WithEffectsStreams) { | 1170 TEST_F(AudioVideoPipelineDeviceTest, WebmPlayback_WithEffectsStreams) { |
| 1164 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); | 1171 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); |
| 1165 | 1172 |
| 1166 set_sync_type(MediaPipelineDeviceParams::kModeIgnorePtsAndVSync); | 1173 set_sync_type(MediaPipelineDeviceParams::kModeIgnorePtsAndVSync); |
| 1167 ConfigureForFile("bear-640x360.webm"); | 1174 ConfigureForFile("bear-640x360.webm"); |
| 1168 PauseBeforeEos(); | 1175 PauseBeforeEos(); |
| 1169 AddEffectsStreams(); | 1176 AddEffectsStreams(); |
| 1170 Start(); | 1177 Start(); |
| 1171 message_loop->Run(); | 1178 message_loop->Run(); |
| 1172 } | 1179 } |
| 1173 | 1180 |
| 1174 } // namespace media | 1181 } // namespace media |
| 1175 } // namespace chromecast | 1182 } // namespace chromecast |
| OLD | NEW |