| Index: media/base/audio_discard_helper_unittest.cc
|
| diff --git a/media/base/audio_discard_helper_unittest.cc b/media/base/audio_discard_helper_unittest.cc
|
| index 55d2b6175ccb04ff8ed57b9a39d122f9da3f124a..1ea0cc6f81657f2d63fcd0f59396448e86c35c65 100644
|
| --- a/media/base/audio_discard_helper_unittest.cc
|
| +++ b/media/base/audio_discard_helper_unittest.cc
|
| @@ -306,12 +306,12 @@ TEST(AudioDiscardHelperTest, InitialDiscardAndDiscardPadding) {
|
| decoded_buffer->frame_count());
|
| }
|
|
|
| -TEST(AudioDiscardHelperTest, InitialDiscardAndDiscardPaddingAndCodecDelay) {
|
| - // Use a codec delay of 5ms.
|
| - const int kCodecDelay = kSampleRate / 100 / 2;
|
| - AudioDiscardHelper discard_helper(kSampleRate, kCodecDelay);
|
| +TEST(AudioDiscardHelperTest, InitialDiscardAndDiscardPaddingAndDecoderDelay) {
|
| + // Use a decoder delay of 5ms.
|
| + const int kDecoderDelay = kSampleRate / 100 / 2;
|
| + AudioDiscardHelper discard_helper(kSampleRate, kDecoderDelay);
|
| ASSERT_FALSE(discard_helper.initialized());
|
| - discard_helper.Reset(kCodecDelay);
|
| + discard_helper.Reset(kDecoderDelay);
|
|
|
| const base::TimeDelta kTimestamp = base::TimeDelta();
|
| const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
|
| @@ -330,12 +330,12 @@ TEST(AudioDiscardHelperTest, InitialDiscardAndDiscardPaddingAndCodecDelay) {
|
| ASSERT_TRUE(discard_helper.initialized());
|
|
|
| // Processing another buffer (with the same discard padding) should discard
|
| - // the back half of the buffer since kCodecDelay is half a buffer.
|
| + // the back half of the buffer since kDecoderDelay is half a buffer.
|
| encoded_buffer->set_timestamp(kTimestamp + kDuration);
|
| decoded_buffer = CreateDecodedBuffer(kTestFrames);
|
| ASSERT_FLOAT_EQ(0.0f, ExtractDecodedData(decoded_buffer, 0));
|
| - ASSERT_NEAR(kCodecDelay * kDataStep,
|
| - ExtractDecodedData(decoded_buffer, kCodecDelay),
|
| + ASSERT_NEAR(kDecoderDelay * kDataStep,
|
| + ExtractDecodedData(decoded_buffer, kDecoderDelay),
|
| kDataStep * 1000);
|
| ASSERT_TRUE(discard_helper.ProcessBuffers(encoded_buffer, decoded_buffer));
|
| EXPECT_EQ(kTimestamp, decoded_buffer->timestamp());
|
| @@ -381,4 +381,101 @@ TEST(AudioDiscardHelperTest, DelayedDiscardInitialDiscardAndDiscardPadding) {
|
| decoded_buffer->frame_count());
|
| }
|
|
|
| +TEST(AudioDiscardHelperTest, CompleteDiscard) {
|
| + AudioDiscardHelper discard_helper(kSampleRate, 0);
|
| + ASSERT_FALSE(discard_helper.initialized());
|
| +
|
| + const base::TimeDelta kTimestamp = base::TimeDelta();
|
| + const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
|
| + const int kTestFrames = discard_helper.TimeDeltaToFrames(kDuration);
|
| + discard_helper.Reset(0);
|
| +
|
| + scoped_refptr<DecoderBuffer> encoded_buffer =
|
| + CreateEncodedBuffer(kTimestamp, kDuration);
|
| + encoded_buffer->set_discard_padding(
|
| + std::make_pair(kInfiniteDuration(), base::TimeDelta()));
|
| + scoped_refptr<AudioBuffer> decoded_buffer = CreateDecodedBuffer(kTestFrames);
|
| +
|
| + // Verify all of the first buffer is discarded.
|
| + ASSERT_FALSE(discard_helper.ProcessBuffers(encoded_buffer, decoded_buffer));
|
| + ASSERT_TRUE(discard_helper.initialized());
|
| + encoded_buffer->set_timestamp(kTimestamp + kDuration);
|
| + encoded_buffer->set_discard_padding(DecoderBuffer::DiscardPadding());
|
| +
|
| + // Verify a second buffer goes through untouched.
|
| + decoded_buffer = CreateDecodedBuffer(kTestFrames / 2);
|
| + ASSERT_TRUE(discard_helper.ProcessBuffers(encoded_buffer, decoded_buffer));
|
| + EXPECT_EQ(kTimestamp, decoded_buffer->timestamp());
|
| + EXPECT_EQ(kDuration / 2, decoded_buffer->duration());
|
| + EXPECT_EQ(kTestFrames / 2, decoded_buffer->frame_count());
|
| + ASSERT_FLOAT_EQ(0.0f, ExtractDecodedData(decoded_buffer, 0));
|
| +}
|
| +
|
| +TEST(AudioDiscardHelperTest, CompleteDiscardWithDelayedDiscard) {
|
| + AudioDiscardHelper discard_helper(kSampleRate, 0);
|
| + ASSERT_FALSE(discard_helper.initialized());
|
| +
|
| + const base::TimeDelta kTimestamp = base::TimeDelta();
|
| + const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
|
| + const int kTestFrames = discard_helper.TimeDeltaToFrames(kDuration);
|
| + discard_helper.Reset(0);
|
| +
|
| + scoped_refptr<DecoderBuffer> encoded_buffer =
|
| + CreateEncodedBuffer(kTimestamp, kDuration);
|
| + encoded_buffer->set_discard_padding(
|
| + std::make_pair(kInfiniteDuration(), base::TimeDelta()));
|
| + scoped_refptr<AudioBuffer> decoded_buffer = CreateDecodedBuffer(kTestFrames);
|
| +
|
| + // Setup a delayed discard.
|
| + ASSERT_FALSE(discard_helper.ProcessBuffers(encoded_buffer, NULL));
|
| + ASSERT_TRUE(discard_helper.initialized());
|
| +
|
| + // Verify the first output buffer is dropped.
|
| + encoded_buffer->set_timestamp(kTimestamp + kDuration);
|
| + encoded_buffer->set_discard_padding(DecoderBuffer::DiscardPadding());
|
| + ASSERT_FALSE(discard_helper.ProcessBuffers(encoded_buffer, decoded_buffer));
|
| +
|
| + // Verify the second buffer goes through untouched.
|
| + encoded_buffer->set_timestamp(kTimestamp + 2 * kDuration);
|
| + decoded_buffer = CreateDecodedBuffer(kTestFrames / 2);
|
| + ASSERT_TRUE(discard_helper.ProcessBuffers(encoded_buffer, decoded_buffer));
|
| + EXPECT_EQ(kTimestamp, decoded_buffer->timestamp());
|
| + EXPECT_EQ(kDuration / 2, decoded_buffer->duration());
|
| + EXPECT_EQ(kTestFrames / 2, decoded_buffer->frame_count());
|
| + ASSERT_FLOAT_EQ(0.0f, ExtractDecodedData(decoded_buffer, 0));
|
| +}
|
| +
|
| +TEST(AudioDiscardHelperTest, CompleteDiscardWithInitialDiscardDecoderDelay) {
|
| + // Use a decoder delay of 5ms.
|
| + const int kDecoderDelay = kSampleRate / 100 / 2;
|
| + AudioDiscardHelper discard_helper(kSampleRate, kDecoderDelay);
|
| + ASSERT_FALSE(discard_helper.initialized());
|
| + discard_helper.Reset(kDecoderDelay);
|
| +
|
| + const base::TimeDelta kTimestamp = base::TimeDelta();
|
| + const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
|
| + const int kTestFrames = discard_helper.TimeDeltaToFrames(kDuration);
|
| +
|
| + scoped_refptr<DecoderBuffer> encoded_buffer =
|
| + CreateEncodedBuffer(kTimestamp, kDuration);
|
| + encoded_buffer->set_discard_padding(
|
| + std::make_pair(kInfiniteDuration(), base::TimeDelta()));
|
| + scoped_refptr<AudioBuffer> decoded_buffer = CreateDecodedBuffer(kTestFrames);
|
| +
|
| + // Verify all of the first buffer is discarded.
|
| + ASSERT_FALSE(discard_helper.ProcessBuffers(encoded_buffer, decoded_buffer));
|
| + ASSERT_TRUE(discard_helper.initialized());
|
| + encoded_buffer->set_timestamp(kTimestamp + kDuration);
|
| + encoded_buffer->set_discard_padding(DecoderBuffer::DiscardPadding());
|
| +
|
| + // Verify 5ms off the front of the second buffer is discarded.
|
| + decoded_buffer = CreateDecodedBuffer(kTestFrames * 2);
|
| + ASSERT_TRUE(discard_helper.ProcessBuffers(encoded_buffer, decoded_buffer));
|
| + EXPECT_EQ(kTimestamp, decoded_buffer->timestamp());
|
| + EXPECT_EQ(kDuration * 2 - kDuration / 2, decoded_buffer->duration());
|
| + EXPECT_EQ(kTestFrames * 2 - kDecoderDelay, decoded_buffer->frame_count());
|
| + ASSERT_FLOAT_EQ(kDecoderDelay * kDataStep,
|
| + ExtractDecodedData(decoded_buffer, 0));
|
| +}
|
| +
|
| } // namespace media
|
|
|