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

Unified Diff: media/base/audio_buffer_unittest.cc

Issue 251893002: Support start trimming post-decoding. Use it with FFmpegDemuxer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comments. Created 6 years, 8 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_buffer_unittest.cc
diff --git a/media/base/audio_buffer_unittest.cc b/media/base/audio_buffer_unittest.cc
index 55ff4edcfe7dcdf6fb7bba84b5993ab848734fcd..c0fbf6b85befa1c79a3ed401363e44ced0d341bf 100644
--- a/media/base/audio_buffer_unittest.cc
+++ b/media/base/audio_buffer_unittest.cc
@@ -11,16 +11,123 @@ namespace media {
static const int kSampleRate = 48000;
-static void VerifyBus(AudioBus* bus, int frames, float start, float increment) {
+
+static void VerifyBusWithOffset(AudioBus* bus,
+ int offset,
+ int frames,
+ float start,
+ float increment) {
for (int ch = 0; ch < bus->channels(); ++ch) {
const float v = start + ch * bus->frames() * increment;
- for (int i = 0; i < frames; ++i) {
+ for (int i = offset; i < frames; ++i) {
ASSERT_FLOAT_EQ(v + i * increment, bus->channel(ch)[i]) << "i=" << i
<< ", ch=" << ch;
}
}
}
+static void VerifyBus(AudioBus* bus, int frames, float start, float increment) {
+ VerifyBusWithOffset(bus, 0, frames, start, increment);
+}
+
+static void TrimRangeTest(SampleFormat sample_format) {
+ const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0;
+ const int channels = ChannelLayoutToChannelCount(channel_layout);
+ const int frames = kSampleRate / 10;
+ const base::TimeDelta timestamp = base::TimeDelta();
+ const base::TimeDelta duration = base::TimeDelta::FromMilliseconds(100);
+ scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<float>(sample_format,
+ channel_layout,
+ channels,
+ kSampleRate,
+ 0,
+ 1,
+ frames,
+ timestamp);
+ EXPECT_EQ(frames, buffer->frame_count());
+ EXPECT_EQ(timestamp, buffer->timestamp());
+ EXPECT_EQ(duration, buffer->duration());
+
+ scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames);
+
+ // Verify all frames before trimming.
+ buffer->ReadFrames(frames, 0, 0, bus.get());
+ VerifyBus(bus.get(), frames, 0, 1);
+
+ // Trim 10ms of frames from the middle of the buffer.
+ int trim_start = frames / 2;
+ const int trim_length = kSampleRate / 100;
+ const base::TimeDelta trim_duration = base::TimeDelta::FromMilliseconds(10);
+ buffer->TrimRange(trim_start, trim_start + trim_length);
+ EXPECT_EQ(frames - trim_length, buffer->frame_count());
+ EXPECT_EQ(timestamp, buffer->timestamp());
+ EXPECT_EQ(duration - trim_duration, buffer->duration());
+ bus->Zero();
+ buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get());
+ VerifyBus(bus.get(), trim_start, 0, 1);
+ VerifyBusWithOffset(
+ bus.get(), trim_start, buffer->frame_count() - trim_start, 0, 1);
wolenetz 2014/05/05 19:01:23 I'm not sure this is correct and how this is not f
+
+ // Trim 10ms of frames from the start, which just adjusts the buffer's
+ // internal start offset.
+ buffer->TrimStart(trim_length);
+ trim_start -= trim_length;
+ EXPECT_EQ(frames - 2 * trim_length, buffer->frame_count());
+ EXPECT_EQ(timestamp + trim_duration, buffer->timestamp());
+ EXPECT_EQ(duration - 2 * trim_duration, buffer->duration());
+ bus->Zero();
+ buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get());
+ VerifyBus(bus.get(), trim_start, trim_length, 1);
+ VerifyBusWithOffset(
+ bus.get(), trim_start, buffer->frame_count() - trim_start, 0, 1);
+
+ // Trim 10ms of frames from the end, which just adjusts the buffer's frame
+ // count.
+ buffer->TrimEnd(trim_length);
+ EXPECT_EQ(frames - 3 * trim_length, buffer->frame_count());
+ EXPECT_EQ(timestamp + trim_duration, buffer->timestamp());
+ EXPECT_EQ(duration - 3 * trim_duration, buffer->duration());
+ bus->Zero();
+ buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get());
+ VerifyBus(bus.get(), trim_start, trim_length, 1);
+ VerifyBusWithOffset(
+ bus.get(), trim_start, buffer->frame_count() - trim_start, 0, 1);
+
+ // Trim another 10ms from the inner portion of the buffer.
+ buffer->TrimRange(trim_start, trim_start + trim_length);
+ EXPECT_EQ(frames - 4 * trim_length, buffer->frame_count());
+ EXPECT_EQ(timestamp + trim_duration, buffer->timestamp());
+ EXPECT_EQ(duration - 4 * trim_duration, buffer->duration());
+ bus->Zero();
+ buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get());
+ VerifyBus(bus.get(), trim_start, trim_length, 1);
+ VerifyBusWithOffset(
+ bus.get(), trim_start, buffer->frame_count() - trim_start, 0, 1);
+
+ // Trim off the end using TrimRange() to ensure end index is exclusive.
+ buffer->TrimRange(buffer->frame_count() - trim_length, buffer->frame_count());
+ EXPECT_EQ(frames - 5 * trim_length, buffer->frame_count());
+ EXPECT_EQ(timestamp + trim_duration, buffer->timestamp());
+ EXPECT_EQ(duration - 5 * trim_duration, buffer->duration());
+ bus->Zero();
+ buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get());
+ VerifyBus(bus.get(), trim_start, trim_length, 1);
+ VerifyBusWithOffset(
+ bus.get(), trim_start, buffer->frame_count() - trim_start, 0, 1);
+
+ // Trim off the start using TrimRange() to ensure start index is inclusive.
+ buffer->TrimRange(0, trim_length);
+ trim_start -= trim_length;
+ EXPECT_EQ(frames - 6 * trim_length, buffer->frame_count());
+ EXPECT_EQ(timestamp + trim_duration, buffer->timestamp());
+ EXPECT_EQ(duration - 6 * trim_duration, buffer->duration());
+ bus->Zero();
+ buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get());
+ VerifyBus(bus.get(), trim_start, 2 * trim_length, 1);
+ VerifyBusWithOffset(
+ bus.get(), trim_start, buffer->frame_count() - trim_start, 0, 1);
+}
+
TEST(AudioBufferTest, CopyFrom) {
const ChannelLayout kChannelLayout = CHANNEL_LAYOUT_MONO;
scoped_refptr<AudioBuffer> original_buffer =
@@ -312,4 +419,12 @@ TEST(AudioBufferTest, Trim) {
EXPECT_EQ(base::TimeDelta(), buffer->duration());
}
+TEST(AudioBufferTest, TrimRangePlanar) {
+ TrimRangeTest(kSampleFormatPlanarF32);
+}
+
+TEST(AudioBufferTest, TrimRangeInterleaved) {
+ TrimRangeTest(kSampleFormatF32);
+}
+
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698