Index: media/renderers/audio_renderer_impl_unittest.cc |
diff --git a/media/renderers/audio_renderer_impl_unittest.cc b/media/renderers/audio_renderer_impl_unittest.cc |
index 9bf367d7b6e5ce4b7c8c7aa941958cd68d2767cc..db031e967de60a35243b2b03ecdfe505cf11bf62 100644 |
--- a/media/renderers/audio_renderer_impl_unittest.cc |
+++ b/media/renderers/audio_renderer_impl_unittest.cc |
@@ -83,18 +83,9 @@ class AudioRendererImplTest : public ::testing::Test, public RendererClient { |
Unencrypted()); |
demuxer_stream_.set_audio_decoder_config(audio_config); |
- // Used to save callbacks and run them at a later time. |
- EXPECT_CALL(*decoder_, Decode(_, _)) |
- .WillRepeatedly(Invoke(this, &AudioRendererImplTest::DecodeDecoder)); |
- EXPECT_CALL(*decoder_, Reset(_)) |
- .WillRepeatedly(Invoke(this, &AudioRendererImplTest::ResetDecoder)); |
+ ConfigureDecoder(); |
+ ConfigureDemuxerStream(true); |
- // Mock out demuxer reads. |
- EXPECT_CALL(demuxer_stream_, Read(_)).WillRepeatedly( |
- RunCallback<0>(DemuxerStream::kOk, |
- scoped_refptr<DecoderBuffer>(new DecoderBuffer(0)))); |
- EXPECT_CALL(demuxer_stream_, SupportsConfigChanges()) |
- .WillRepeatedly(Return(true)); |
AudioParameters out_params(AudioParameters::AUDIO_PCM_LOW_LATENCY, |
kChannelLayout, |
kOutputSamplesPerSecond, |
@@ -113,19 +104,37 @@ class AudioRendererImplTest : public ::testing::Test, public RendererClient { |
SCOPED_TRACE("~AudioRendererImplTest()"); |
} |
+ // Used to save callbacks and run them at a later time. |
+ void ConfigureDecoder() { |
+ EXPECT_CALL(*decoder_, Decode(_, _)) |
+ .WillRepeatedly(Invoke(this, &AudioRendererImplTest::DecodeDecoder)); |
+ EXPECT_CALL(*decoder_, Reset(_)) |
+ .WillRepeatedly(Invoke(this, &AudioRendererImplTest::ResetDecoder)); |
+ } |
+ |
+ // Mock out demuxer reads. |
+ void ConfigureDemuxerStream(bool supports_config_changes) { |
+ EXPECT_CALL(demuxer_stream_, Read(_)) |
+ .WillRepeatedly( |
+ RunCallback<0>(DemuxerStream::kOk, |
+ scoped_refptr<DecoderBuffer>(new DecoderBuffer(0)))); |
+ EXPECT_CALL(demuxer_stream_, SupportsConfigChanges()) |
+ .WillRepeatedly(Return(supports_config_changes)); |
+ } |
+ |
// Reconfigures a renderer without config change support using given params. |
void ConfigureBasicRenderer(const AudioParameters& params) { |
hardware_params_ = params; |
sink_ = new FakeAudioRendererSink(hardware_params_); |
decoder_ = new MockAudioDecoder(); |
+ ConfigureDecoder(); |
ScopedVector<AudioDecoder> decoders; |
decoders.push_back(decoder_); |
renderer_.reset(new AudioRendererImpl(message_loop_.task_runner(), |
sink_.get(), std::move(decoders), |
new MediaLog())); |
testing::Mock::VerifyAndClearExpectations(&demuxer_stream_); |
- EXPECT_CALL(demuxer_stream_, SupportsConfigChanges()) |
- .WillRepeatedly(Return(false)); |
+ ConfigureDemuxerStream(false); |
} |
// Reconfigures a renderer with config change support using given params. |
@@ -134,14 +143,14 @@ class AudioRendererImplTest : public ::testing::Test, public RendererClient { |
hardware_params_ = hardware_params; |
sink_ = new FakeAudioRendererSink(hardware_params_); |
decoder_ = new MockAudioDecoder(); |
+ ConfigureDecoder(); |
ScopedVector<AudioDecoder> decoders; |
decoders.push_back(decoder_); |
renderer_.reset(new AudioRendererImpl(message_loop_.task_runner(), |
sink_.get(), std::move(decoders), |
new MediaLog())); |
testing::Mock::VerifyAndClearExpectations(&demuxer_stream_); |
- EXPECT_CALL(demuxer_stream_, SupportsConfigChanges()) |
- .WillRepeatedly(Return(true)); |
+ ConfigureDemuxerStream(true); |
} |
void ExpectUnsupportedAudioDecoder() { |
@@ -389,19 +398,13 @@ class AudioRendererImplTest : public ::testing::Test, public RendererClient { |
return renderer_->CurrentMediaTime(); |
} |
- std::vector<bool> channel_mask() const { return renderer_->channel_mask_; } |
+ std::vector<bool> channel_mask() const { |
+ CHECK(renderer_->algorithm_); |
+ return renderer_->algorithm_->channel_mask_for_testing(); |
+ } |
bool ended() const { return ended_; } |
- // Fixture members. |
- AudioParameters hardware_params_; |
- base::MessageLoop message_loop_; |
- std::unique_ptr<AudioRendererImpl> renderer_; |
- scoped_refptr<FakeAudioRendererSink> sink_; |
- base::SimpleTestTickClock* tick_clock_; |
- PipelineStatistics last_statistics_; |
- |
- private: |
void DecodeDecoder(const scoped_refptr<DecoderBuffer>& buffer, |
const AudioDecoder::DecodeCB& decode_cb) { |
// TODO(scherkus): Make this a DCHECK after threading semantics are fixed. |
@@ -445,6 +448,14 @@ class AudioRendererImplTest : public ::testing::Test, public RendererClient { |
base::RunLoop().RunUntilIdle(); |
} |
+ // Fixture members. |
+ AudioParameters hardware_params_; |
+ base::MessageLoop message_loop_; |
+ std::unique_ptr<AudioRendererImpl> renderer_; |
+ scoped_refptr<FakeAudioRendererSink> sink_; |
+ base::SimpleTestTickClock* tick_clock_; |
+ PipelineStatistics last_statistics_; |
+ |
MockDemuxerStream demuxer_stream_; |
MockAudioDecoder* decoder_; |
@@ -599,7 +610,6 @@ TEST_F(AudioRendererImplTest, CapacityAppropriateForHardware) { |
// Verify that the proper reduced search space is configured for playback rate |
// changes when upmixing is applied to the input. |
TEST_F(AudioRendererImplTest, ChannelMask) { |
- Initialize(); |
AudioParameters hw_params(AudioParameters::AUDIO_PCM_LOW_LATENCY, |
CHANNEL_LAYOUT_7_1, kOutputSamplesPerSecond, |
SampleFormatToBytesPerChannel(kSampleFormat) * 8, |
@@ -609,17 +619,33 @@ TEST_F(AudioRendererImplTest, ChannelMask) { |
CHANNEL_LAYOUT_STEREO, kOutputSamplesPerSecond, |
SampleFormatToBytesPerChannel(kSampleFormat) * 8, 1024), |
hw_params); |
- std::vector<bool> mask = channel_mask(); |
- EXPECT_TRUE(mask.empty()); |
Initialize(); |
- mask = channel_mask(); |
+ std::vector<bool> mask = channel_mask(); |
EXPECT_FALSE(mask.empty()); |
+ ASSERT_EQ(mask.size(), static_cast<size_t>(hw_params.channels())); |
for (int ch = 0; ch < hw_params.channels(); ++ch) { |
if (ch > 1) |
ASSERT_FALSE(mask[ch]); |
else |
ASSERT_TRUE(mask[ch]); |
} |
+ |
+ renderer_->SetMediaTime(base::TimeDelta()); |
+ renderer_->StartPlaying(); |
+ WaitForPendingRead(); |
+ |
+ // Force a channel configuration change. |
+ scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<float>( |
+ kSampleFormat, hw_params.channel_layout(), hw_params.channels(), |
+ kInputSamplesPerSecond, 1.0f, 0.0f, 256, base::TimeDelta()); |
+ DeliverBuffer(DecodeStatus::OK, buffer); |
+ |
+ // All channels should now be enabled. |
+ mask = channel_mask(); |
+ EXPECT_FALSE(mask.empty()); |
+ ASSERT_EQ(mask.size(), static_cast<size_t>(hw_params.channels())); |
+ for (int ch = 0; ch < hw_params.channels(); ++ch) |
+ ASSERT_TRUE(mask[ch]); |
} |
TEST_F(AudioRendererImplTest, Underflow_Flush) { |