Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(392)

Unified Diff: media/base/audio_discard_helper_unittest.cc

Issue 293053005: Add support for complete buffer discards. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..d7c42d720c14a63a17d5771c602bbbc868a8d206 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, CompleteDiscardWithDecoderDelay) {
wolenetz 2014/05/21 01:43:02 nit: s/With/WithInitialDiscardAnd/
DaleCurtis 2014/05/21 02:23:25 Done.
+ // 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());
+
+ // Plus 5ms off the front of the second buffer.
wolenetz 2014/05/21 01:43:02 nit: s/Plus/Verify/ && s/./ is discarded./
DaleCurtis 2014/05/21 02:23:25 Done.
+ 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

Powered by Google App Engine
This is Rietveld 408576698