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

Side by Side Diff: media/base/audio_buffer_unittest.cc

Issue 2349873002: AudioBuffer: remove PadSilence() (Closed)
Patch Set: feedback: extra headers Created 4 years, 3 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 unified diff | Download patch
« no previous file with comments | « media/base/audio_buffer.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <stdint.h> 5 #include <stdint.h>
6 6
7 #include <limits> 7 #include <limits>
8 #include <memory> 8 #include <memory>
9 9
10 #include "media/base/audio_buffer.h" 10 #include "media/base/audio_buffer.h"
11 #include "media/base/audio_bus.h" 11 #include "media/base/audio_bus.h"
12 #include "media/base/test_helpers.h" 12 #include "media/base/test_helpers.h"
13 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
14 14
15 namespace media { 15 namespace media {
16 16
17 static const int kSampleRate = 4800; 17 static const int kSampleRate = 4800;
18 18
19 static void VerifyBusWithOffset(AudioBus* bus, 19 static void VerifyBusWithOffset(AudioBus* bus,
20 int offset, 20 int offset,
21 int frames, 21 int frames,
22 float start, 22 float start,
23 float start_offset, 23 float start_offset,
24 float increment) { 24 float increment) {
25 for (int ch = 0; ch < bus->channels(); ++ch) { 25 for (int ch = 0; ch < bus->channels(); ++ch) {
26 const float v = start_offset + start + ch * bus->frames() * increment; 26 const float v = start_offset + start + ch * bus->frames() * increment;
27
28 for (int i = offset; i < offset + frames; ++i) { 27 for (int i = offset; i < offset + frames; ++i) {
29 ASSERT_FLOAT_EQ(v + i * increment, bus->channel(ch)[i]) << "i=" << i 28 ASSERT_FLOAT_EQ(v + i * increment, bus->channel(ch)[i]) << "i=" << i
30 << ", ch=" << ch; 29 << ", ch=" << ch;
31 } 30 }
32 } 31 }
33 } 32 }
34 33
35 static void VerifyBus(AudioBus* bus, int frames, float start, float increment) { 34 static void VerifyBus(AudioBus* bus, int frames, float start, float increment) {
36 VerifyBusWithOffset(bus, 0, frames, start, 0, increment); 35 VerifyBusWithOffset(bus, 0, frames, start, 0, increment);
37 } 36 }
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get()); 150 buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get());
152 VerifyBus(bus.get(), trim_start, 2 * trim_length, 1); 151 VerifyBus(bus.get(), trim_start, 2 * trim_length, 1);
153 VerifyBusWithOffset(bus.get(), 152 VerifyBusWithOffset(bus.get(),
154 trim_start, 153 trim_start,
155 buffer->frame_count() - trim_start, 154 buffer->frame_count() - trim_start,
156 trim_length * 2, 155 trim_length * 2,
157 trim_length * 2, 156 trim_length * 2,
158 1); 157 1);
159 } 158 }
160 159
161 void PadStartTest(SampleFormat sample_format) {
162 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0;
163 const int channels = ChannelLayoutToChannelCount(channel_layout);
164 const int frames = 100;
165 const int silence_frames = frames / 5;
166 const base::TimeDelta start_time;
167 scoped_refptr<AudioBuffer> buffer =
168 MakeAudioBuffer<float>(sample_format, channel_layout, channels,
169 kSampleRate, 0.0f, 1.0f, frames, start_time);
170
171 // Read all 100 frames from the buffer.
172 std::unique_ptr<AudioBus> bus = AudioBus::Create(channels, frames);
173 buffer->ReadFrames(frames, 0, 0, bus.get());
174 VerifyBus(bus.get(), frames, 0, 1);
175
176 // Now trim off some frames and add in leading silence.
177 buffer->TrimStart(silence_frames);
178 buffer->PadStart(silence_frames);
179
180 // Re-read. Verify first 20 frames of silence, next 80 frames same as before.
181 bus->Zero();
182 buffer->ReadFrames(frames, 0, 0, bus.get());
183 VerifyBus(bus.get(), silence_frames, 0, 0);
184 VerifyBusWithOffset(bus.get(), silence_frames, frames - silence_frames, 0, 0,
185 1);
186
187 // Now trim off the silence. Verify silence is gone.
188 buffer->TrimStart(silence_frames);
189 bus->Zero();
190 buffer->ReadFrames(frames - silence_frames, 0, 0, bus.get());
191 VerifyBusWithOffset(bus.get(), 0, frames - silence_frames, silence_frames, 0,
192 1);
193 }
194
195 TEST(AudioBufferTest, CopyFrom) { 160 TEST(AudioBufferTest, CopyFrom) {
196 const ChannelLayout kChannelLayout = CHANNEL_LAYOUT_MONO; 161 const ChannelLayout kChannelLayout = CHANNEL_LAYOUT_MONO;
197 scoped_refptr<AudioBuffer> original_buffer = MakeAudioBuffer<uint8_t>( 162 scoped_refptr<AudioBuffer> original_buffer = MakeAudioBuffer<uint8_t>(
198 kSampleFormatU8, kChannelLayout, 163 kSampleFormatU8, kChannelLayout,
199 ChannelLayoutToChannelCount(kChannelLayout), kSampleRate, 1, 1, 164 ChannelLayoutToChannelCount(kChannelLayout), kSampleRate, 1, 1,
200 kSampleRate / 100, base::TimeDelta()); 165 kSampleRate / 100, base::TimeDelta());
201 scoped_refptr<AudioBuffer> new_buffer = 166 scoped_refptr<AudioBuffer> new_buffer =
202 AudioBuffer::CopyFrom(kSampleFormatU8, 167 AudioBuffer::CopyFrom(kSampleFormatU8,
203 original_buffer->channel_layout(), 168 original_buffer->channel_layout(),
204 original_buffer->channel_count(), 169 original_buffer->channel_count(),
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 } 427 }
463 428
464 TEST(AudioBufferTest, TrimRangePlanar) { 429 TEST(AudioBufferTest, TrimRangePlanar) {
465 TrimRangeTest(kSampleFormatPlanarF32); 430 TrimRangeTest(kSampleFormatPlanarF32);
466 } 431 }
467 432
468 TEST(AudioBufferTest, TrimRangeInterleaved) { 433 TEST(AudioBufferTest, TrimRangeInterleaved) {
469 TrimRangeTest(kSampleFormatF32); 434 TrimRangeTest(kSampleFormatF32);
470 } 435 }
471 436
472 TEST(AudioBufferTest, PadStartPlanar) {
473 PadStartTest(kSampleFormatPlanarF32);
474 }
475
476 TEST(AudioBufferTest, PadStartInterleaved) {
477 PadStartTest(kSampleFormatF32);
478 }
479
480 TEST(AudioBufferTest, PadStartEmptyBuffer) {
481 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0;
482 const int channels = ChannelLayoutToChannelCount(channel_layout);
483 const int frames = kSampleRate / 10;
484 const base::TimeDelta duration = base::TimeDelta::FromMilliseconds(100);
485 const base::TimeDelta start_time;
486 scoped_refptr<AudioBuffer> buffer = AudioBuffer::CreateEmptyBuffer(
487 channel_layout, channels, kSampleRate, frames, start_time);
488
489 // Empty buffer should zero data size with non-zero frame count and duration.
490 EXPECT_EQ(std::size_t{0}, buffer->data_size());
491 EXPECT_EQ(frames, buffer->frame_count());
492 EXPECT_EQ(duration, buffer->duration());
493
494 // Read all frames from the buffer. All data should be 0.
495 std::unique_ptr<AudioBus> bus = AudioBus::Create(channels, frames);
496 buffer->ReadFrames(frames, 0, 0, bus.get());
497 VerifyBus(bus.get(), frames, 0, 0);
498
499 // Double the number of frames by padding the start of the buffer with
500 // |frames| of silence.
501 buffer->PadStart(frames);
502 const int new_frame_count = frames * 2;
503 const base::TimeDelta new_duration = base::TimeDelta::FromMilliseconds(200);
504
505 // Adding silence should not trigger an allocation, but the frame count and
506 // duration should be increased.
507 EXPECT_EQ(std::size_t{0}, buffer->data_size());
508 EXPECT_EQ(new_frame_count, buffer->frame_count());
509 EXPECT_EQ(new_duration, buffer->duration());
510
511 // Read all frames from the buffer. All data should be 0.
512 bus = AudioBus::Create(channels, new_frame_count);
513 buffer->ReadFrames(new_frame_count, 0, 0, bus.get());
514 VerifyBus(bus.get(), new_frame_count, 0, 0);
515 }
516
517 } // namespace media 437 } // namespace media
OLDNEW
« no previous file with comments | « media/base/audio_buffer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698