| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "media/renderers/audio_renderer_impl.h" | 5 #include "media/renderers/audio_renderer_impl.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 | 107 |
| 108 AudioParameters out_params(AudioParameters::AUDIO_PCM_LOW_LATENCY, | 108 AudioParameters out_params(AudioParameters::AUDIO_PCM_LOW_LATENCY, |
| 109 kChannelLayout, | 109 kChannelLayout, |
| 110 kOutputSamplesPerSecond, | 110 kOutputSamplesPerSecond, |
| 111 SampleFormatToBytesPerChannel(kSampleFormat) * 8, | 111 SampleFormatToBytesPerChannel(kSampleFormat) * 8, |
| 112 512); | 112 512); |
| 113 renderer_.reset(new AudioRendererImpl( | 113 renderer_.reset(new AudioRendererImpl( |
| 114 message_loop_.task_runner(), sink_.get(), | 114 message_loop_.task_runner(), sink_.get(), |
| 115 base::Bind(&AudioRendererImplTest::CreateAudioDecoderForTest, | 115 base::Bind(&AudioRendererImplTest::CreateAudioDecoderForTest, |
| 116 base::Unretained(this)), | 116 base::Unretained(this)), |
| 117 new MediaLog())); | 117 &media_log_)); |
| 118 renderer_->tick_clock_.reset(tick_clock_); | 118 renderer_->tick_clock_.reset(tick_clock_); |
| 119 tick_clock_->Advance(base::TimeDelta::FromSeconds(1)); | 119 tick_clock_->Advance(base::TimeDelta::FromSeconds(1)); |
| 120 } | 120 } |
| 121 | 121 |
| 122 virtual ~AudioRendererImplTest() { | 122 virtual ~AudioRendererImplTest() { |
| 123 SCOPED_TRACE("~AudioRendererImplTest()"); | 123 SCOPED_TRACE("~AudioRendererImplTest()"); |
| 124 } | 124 } |
| 125 | 125 |
| 126 // Mock out demuxer reads. | 126 // Mock out demuxer reads. |
| 127 void ConfigureDemuxerStream(bool supports_config_changes) { | 127 void ConfigureDemuxerStream(bool supports_config_changes) { |
| 128 EXPECT_CALL(demuxer_stream_, Read(_)) | 128 EXPECT_CALL(demuxer_stream_, Read(_)) |
| 129 .WillRepeatedly( | 129 .WillRepeatedly( |
| 130 RunCallback<0>(DemuxerStream::kOk, | 130 RunCallback<0>(DemuxerStream::kOk, |
| 131 scoped_refptr<DecoderBuffer>(new DecoderBuffer(0)))); | 131 scoped_refptr<DecoderBuffer>(new DecoderBuffer(0)))); |
| 132 EXPECT_CALL(demuxer_stream_, SupportsConfigChanges()) | 132 EXPECT_CALL(demuxer_stream_, SupportsConfigChanges()) |
| 133 .WillRepeatedly(Return(supports_config_changes)); | 133 .WillRepeatedly(Return(supports_config_changes)); |
| 134 } | 134 } |
| 135 | 135 |
| 136 // Reconfigures a renderer without config change support using given params. | 136 // Reconfigures a renderer without config change support using given params. |
| 137 void ConfigureBasicRenderer(const AudioParameters& params) { | 137 void ConfigureBasicRenderer(const AudioParameters& params) { |
| 138 hardware_params_ = params; | 138 hardware_params_ = params; |
| 139 sink_ = new FakeAudioRendererSink(hardware_params_); | 139 sink_ = new FakeAudioRendererSink(hardware_params_); |
| 140 renderer_.reset(new AudioRendererImpl( | 140 renderer_.reset(new AudioRendererImpl( |
| 141 message_loop_.task_runner(), sink_.get(), | 141 message_loop_.task_runner(), sink_.get(), |
| 142 base::Bind(&AudioRendererImplTest::CreateAudioDecoderForTest, | 142 base::Bind(&AudioRendererImplTest::CreateAudioDecoderForTest, |
| 143 base::Unretained(this)), | 143 base::Unretained(this)), |
| 144 new MediaLog())); | 144 &media_log_)); |
| 145 testing::Mock::VerifyAndClearExpectations(&demuxer_stream_); | 145 testing::Mock::VerifyAndClearExpectations(&demuxer_stream_); |
| 146 ConfigureDemuxerStream(false); | 146 ConfigureDemuxerStream(false); |
| 147 } | 147 } |
| 148 | 148 |
| 149 // Reconfigures a renderer with config change support using given params. | 149 // Reconfigures a renderer with config change support using given params. |
| 150 void ConfigureConfigChangeRenderer(const AudioParameters& params, | 150 void ConfigureConfigChangeRenderer(const AudioParameters& params, |
| 151 const AudioParameters& hardware_params) { | 151 const AudioParameters& hardware_params) { |
| 152 hardware_params_ = hardware_params; | 152 hardware_params_ = hardware_params; |
| 153 sink_ = new FakeAudioRendererSink(hardware_params_); | 153 sink_ = new FakeAudioRendererSink(hardware_params_); |
| 154 renderer_.reset(new AudioRendererImpl( | 154 renderer_.reset(new AudioRendererImpl( |
| 155 message_loop_.task_runner(), sink_.get(), | 155 message_loop_.task_runner(), sink_.get(), |
| 156 base::Bind(&AudioRendererImplTest::CreateAudioDecoderForTest, | 156 base::Bind(&AudioRendererImplTest::CreateAudioDecoderForTest, |
| 157 base::Unretained(this)), | 157 base::Unretained(this)), |
| 158 new MediaLog())); | 158 &media_log_)); |
| 159 testing::Mock::VerifyAndClearExpectations(&demuxer_stream_); | 159 testing::Mock::VerifyAndClearExpectations(&demuxer_stream_); |
| 160 ConfigureDemuxerStream(true); | 160 ConfigureDemuxerStream(true); |
| 161 } | 161 } |
| 162 | 162 |
| 163 // RendererClient implementation. | 163 // RendererClient implementation. |
| 164 MOCK_METHOD1(OnError, void(PipelineStatus)); | 164 MOCK_METHOD1(OnError, void(PipelineStatus)); |
| 165 void OnEnded() override { | 165 void OnEnded() override { |
| 166 CHECK(!ended_); | 166 CHECK(!ended_); |
| 167 ended_ = true; | 167 ended_ = true; |
| 168 } | 168 } |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 441 | 441 |
| 442 if (!reset_cb_.is_null()) | 442 if (!reset_cb_.is_null()) |
| 443 base::ResetAndReturn(&reset_cb_).Run(); | 443 base::ResetAndReturn(&reset_cb_).Run(); |
| 444 | 444 |
| 445 base::RunLoop().RunUntilIdle(); | 445 base::RunLoop().RunUntilIdle(); |
| 446 } | 446 } |
| 447 | 447 |
| 448 // Fixture members. | 448 // Fixture members. |
| 449 AudioParameters hardware_params_; | 449 AudioParameters hardware_params_; |
| 450 base::MessageLoop message_loop_; | 450 base::MessageLoop message_loop_; |
| 451 MediaLog media_log_; |
| 451 std::unique_ptr<AudioRendererImpl> renderer_; | 452 std::unique_ptr<AudioRendererImpl> renderer_; |
| 452 scoped_refptr<FakeAudioRendererSink> sink_; | 453 scoped_refptr<FakeAudioRendererSink> sink_; |
| 453 base::SimpleTestTickClock* tick_clock_; | 454 base::SimpleTestTickClock* tick_clock_; |
| 454 PipelineStatistics last_statistics_; | 455 PipelineStatistics last_statistics_; |
| 455 | 456 |
| 456 MockDemuxerStream demuxer_stream_; | 457 MockDemuxerStream demuxer_stream_; |
| 457 | 458 |
| 458 // Used for satisfying reads. | 459 // Used for satisfying reads. |
| 459 AudioDecoder::OutputCB output_cb_; | 460 AudioDecoder::OutputCB output_cb_; |
| 460 AudioDecoder::DecodeCB decode_cb_; | 461 AudioDecoder::DecodeCB decode_cb_; |
| (...skipping 629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1090 // Advance far enough that we shouldn't be clamped to current time (tested | 1091 // Advance far enough that we shouldn't be clamped to current time (tested |
| 1091 // already above). | 1092 // already above). |
| 1092 tick_clock_->Advance(kOneSecond); | 1093 tick_clock_->Advance(kOneSecond); |
| 1093 EXPECT_EQ( | 1094 EXPECT_EQ( |
| 1094 current_time + timestamp_helper.GetFrameDuration(frames_to_consume.value), | 1095 current_time + timestamp_helper.GetFrameDuration(frames_to_consume.value), |
| 1095 CurrentMediaWallClockTime(&is_time_moving)); | 1096 CurrentMediaWallClockTime(&is_time_moving)); |
| 1096 EXPECT_TRUE(is_time_moving); | 1097 EXPECT_TRUE(is_time_moving); |
| 1097 } | 1098 } |
| 1098 | 1099 |
| 1099 } // namespace media | 1100 } // namespace media |
| OLD | NEW |