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

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

Issue 265943002: Revert of Remove AudioBuffer::set_duration(), instead base on frames. (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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « media/base/audio_buffer_queue_unittest.cc ('k') | media/base/audio_discard_helper.cc » ('j') | 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 "base/strings/string_util.h"
6 #include "base/strings/stringprintf.h"
5 #include "media/base/audio_buffer.h" 7 #include "media/base/audio_buffer.h"
6 #include "media/base/audio_bus.h" 8 #include "media/base/audio_bus.h"
7 #include "media/base/test_helpers.h" 9 #include "media/base/test_helpers.h"
8 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
9 11
10 namespace media { 12 namespace media {
11 13
12 static const int kSampleRate = 48000; 14 const static int kSampleRate = 44100;
13 15
14 static void VerifyBus(AudioBus* bus, int frames, float start, float increment) { 16 static void VerifyResult(float* channel_data,
15 for (int ch = 0; ch < bus->channels(); ++ch) { 17 int frames,
16 const float v = start + ch * bus->frames() * increment; 18 float start,
17 for (int i = 0; i < frames; ++i) { 19 float increment) {
18 ASSERT_FLOAT_EQ(v + i * increment, bus->channel(ch)[i]) << "i=" << i 20 for (int i = 0; i < frames; ++i) {
19 << ", ch=" << ch; 21 SCOPED_TRACE(base::StringPrintf(
20 } 22 "i=%d/%d start=%f, increment=%f", i, frames, start, increment));
23 ASSERT_EQ(channel_data[i], start);
24 start += increment;
21 } 25 }
22 } 26 }
23 27
24 TEST(AudioBufferTest, CopyFrom) { 28 TEST(AudioBufferTest, CopyFrom) {
25 const ChannelLayout kChannelLayout = CHANNEL_LAYOUT_MONO; 29 const ChannelLayout channel_layout = CHANNEL_LAYOUT_MONO;
26 scoped_refptr<AudioBuffer> original_buffer = 30 const int frames = 8;
31 const base::TimeDelta start_time;
32 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
33 scoped_refptr<AudioBuffer> buffer =
27 MakeAudioBuffer<uint8>(kSampleFormatU8, 34 MakeAudioBuffer<uint8>(kSampleFormatU8,
28 kChannelLayout, 35 channel_layout,
29 ChannelLayoutToChannelCount(kChannelLayout), 36 ChannelLayoutToChannelCount(channel_layout),
30 kSampleRate, 37 kSampleRate,
31 1, 38 1,
32 1, 39 1,
33 kSampleRate / 100, 40 frames,
34 base::TimeDelta()); 41 start_time,
35 scoped_refptr<AudioBuffer> new_buffer = 42 duration);
36 AudioBuffer::CopyFrom(kSampleFormatU8, 43 EXPECT_EQ(frames, buffer->frame_count());
37 original_buffer->channel_layout(), 44 EXPECT_EQ(buffer->timestamp(), start_time);
38 original_buffer->channel_count(), 45 EXPECT_EQ(buffer->duration().InSeconds(), frames);
39 original_buffer->sample_rate(), 46 EXPECT_FALSE(buffer->end_of_stream());
40 original_buffer->frame_count(),
41 &original_buffer->channel_data()[0],
42 original_buffer->timestamp());
43 EXPECT_EQ(original_buffer->frame_count(), new_buffer->frame_count());
44 EXPECT_EQ(original_buffer->timestamp(), new_buffer->timestamp());
45 EXPECT_EQ(original_buffer->duration(), new_buffer->duration());
46 EXPECT_EQ(original_buffer->sample_rate(), new_buffer->sample_rate());
47 EXPECT_EQ(original_buffer->channel_count(), new_buffer->channel_count());
48 EXPECT_EQ(original_buffer->channel_layout(), new_buffer->channel_layout());
49 EXPECT_FALSE(original_buffer->end_of_stream());
50 } 47 }
51 48
52 TEST(AudioBufferTest, CreateEOSBuffer) { 49 TEST(AudioBufferTest, CreateEOSBuffer) {
53 scoped_refptr<AudioBuffer> buffer = AudioBuffer::CreateEOSBuffer(); 50 scoped_refptr<AudioBuffer> buffer = AudioBuffer::CreateEOSBuffer();
54 EXPECT_TRUE(buffer->end_of_stream()); 51 EXPECT_TRUE(buffer->end_of_stream());
55 } 52 }
56 53
57 TEST(AudioBufferTest, FrameSize) { 54 TEST(AudioBufferTest, FrameSize) {
58 const uint8 kTestData[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 55 const uint8 kTestData[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
59 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 56 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
60 27, 28, 29, 30, 31 }; 57 27, 28, 29, 30, 31 };
61 const base::TimeDelta kTimestamp = base::TimeDelta::FromMicroseconds(1337); 58 const base::TimeDelta kTimestampA = base::TimeDelta::FromMicroseconds(1337);
59 const base::TimeDelta kTimestampB = base::TimeDelta::FromMicroseconds(1234);
62 60
63 const uint8* const data[] = { kTestData }; 61 const uint8* const data[] = { kTestData };
64 scoped_refptr<AudioBuffer> buffer = 62 scoped_refptr<AudioBuffer> buffer =
65 AudioBuffer::CopyFrom(kSampleFormatU8, 63 AudioBuffer::CopyFrom(kSampleFormatU8,
66 CHANNEL_LAYOUT_STEREO, 64 CHANNEL_LAYOUT_STEREO,
67 2, 65 2,
68 kSampleRate, 66 kSampleRate,
69 16, 67 16,
70 data, 68 data,
71 kTimestamp); 69 kTimestampA,
70 kTimestampB);
72 EXPECT_EQ(16, buffer->frame_count()); // 2 channels of 8-bit data 71 EXPECT_EQ(16, buffer->frame_count()); // 2 channels of 8-bit data
73 72
74 buffer = AudioBuffer::CopyFrom(kSampleFormatF32, 73 buffer = AudioBuffer::CopyFrom(kSampleFormatF32,
75 CHANNEL_LAYOUT_4_0, 74 CHANNEL_LAYOUT_4_0,
76 4, 75 4,
77 kSampleRate, 76 kSampleRate,
78 2, 77 2,
79 data, 78 data,
80 kTimestamp); 79 kTimestampA,
80 kTimestampB);
81 EXPECT_EQ(2, buffer->frame_count()); // now 4 channels of 32-bit data 81 EXPECT_EQ(2, buffer->frame_count()); // now 4 channels of 32-bit data
82 } 82 }
83 83
84 TEST(AudioBufferTest, ReadU8) { 84 TEST(AudioBufferTest, ReadU8) {
85 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0; 85 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0;
86 const int channels = ChannelLayoutToChannelCount(channel_layout); 86 const int channels = ChannelLayoutToChannelCount(channel_layout);
87 const int frames = 10; 87 const int frames = 4;
88 const base::TimeDelta start_time; 88 const base::TimeDelta start_time;
89 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
89 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<uint8>(kSampleFormatU8, 90 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<uint8>(kSampleFormatU8,
90 channel_layout, 91 channel_layout,
91 channels, 92 channels,
92 kSampleRate, 93 kSampleRate,
93 128, 94 128,
94 1, 95 1,
95 frames, 96 frames,
96 start_time); 97 start_time,
97 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames); 98 duration);
99
100 // Read all 4 frames from the buffer. Data is interleaved, so ch[0] should be
101 // 128, 132, 136, 140, other channels similar. However, values are converted
102 // from [0, 255] to [-1.0, 1.0] with a bias of 128. Thus the first buffer
103 // value should be 0.0, then 1/127, 2/127, etc.
104 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
98 buffer->ReadFrames(frames, 0, 0, bus.get()); 105 buffer->ReadFrames(frames, 0, 0, bus.get());
99 VerifyBus(bus.get(), frames, 0, 1.0f / 127.0f); 106 VerifyResult(bus->channel(0), frames, 0.0f, 4.0f / 127.0f);
100 107 VerifyResult(bus->channel(1), frames, 1.0f / 127.0f, 4.0f / 127.0f);
101 // Now read the same data one frame at a time. 108 VerifyResult(bus->channel(2), frames, 2.0f / 127.0f, 4.0f / 127.0f);
102 bus->Zero(); 109 VerifyResult(bus->channel(3), frames, 3.0f / 127.0f, 4.0f / 127.0f);
103 for (int i = 0; i < frames; ++i)
104 buffer->ReadFrames(1, i, i, bus.get());
105 VerifyBus(bus.get(), frames, 0, 1.0f / 127.0f);
106 } 110 }
107 111
108 TEST(AudioBufferTest, ReadS16) { 112 TEST(AudioBufferTest, ReadS16) {
109 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 113 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
110 const int channels = ChannelLayoutToChannelCount(channel_layout); 114 const int channels = ChannelLayoutToChannelCount(channel_layout);
111 const int frames = 10; 115 const int frames = 10;
112 const base::TimeDelta start_time; 116 const base::TimeDelta start_time;
117 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
113 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<int16>(kSampleFormatS16, 118 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<int16>(kSampleFormatS16,
114 channel_layout, 119 channel_layout,
115 channels, 120 channels,
116 kSampleRate, 121 kSampleRate,
117 1, 122 1,
118 1, 123 1,
119 frames, 124 frames,
120 start_time); 125 start_time,
121 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames); 126 duration);
122 buffer->ReadFrames(frames, 0, 0, bus.get()); 127
123 VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max); 128 // Read 6 frames from the buffer. Data is interleaved, so ch[0] should be 1,
129 // 3, 5, 7, 9, 11, and ch[1] should be 2, 4, 6, 8, 10, 12. Data is converted
130 // to float from -1.0 to 1.0 based on int16 range.
131 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
132 buffer->ReadFrames(6, 0, 0, bus.get());
133 VerifyResult(bus->channel(0), 6, 1.0f / kint16max, 2.0f / kint16max);
134 VerifyResult(bus->channel(1), 6, 2.0f / kint16max, 2.0f / kint16max);
124 135
125 // Now read the same data one frame at a time. 136 // Now read the same data one frame at a time.
126 bus->Zero(); 137 bus = AudioBus::Create(channels, 100);
127 for (int i = 0; i < frames; ++i) 138 for (int i = 0; i < frames; ++i) {
128 buffer->ReadFrames(1, i, i, bus.get()); 139 buffer->ReadFrames(1, i, i, bus.get());
129 VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max); 140 }
141 VerifyResult(bus->channel(0), frames, 1.0f / kint16max, 2.0f / kint16max);
142 VerifyResult(bus->channel(1), frames, 2.0f / kint16max, 2.0f / kint16max);
130 } 143 }
131 144
132 TEST(AudioBufferTest, ReadS32) { 145 TEST(AudioBufferTest, ReadS32) {
133 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 146 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
134 const int channels = ChannelLayoutToChannelCount(channel_layout); 147 const int channels = ChannelLayoutToChannelCount(channel_layout);
135 const int frames = 20; 148 const int frames = 6;
136 const base::TimeDelta start_time; 149 const base::TimeDelta start_time;
150 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
137 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<int32>(kSampleFormatS32, 151 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<int32>(kSampleFormatS32,
138 channel_layout, 152 channel_layout,
139 channels, 153 channels,
140 kSampleRate, 154 kSampleRate,
141 1, 155 1,
142 1, 156 1,
143 frames, 157 frames,
144 start_time); 158 start_time,
145 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames); 159 duration);
160
161 // Read 6 frames from the buffer. Data is interleaved, so ch[0] should be 1,
162 // 3, 5, 7, 9, 11, and ch[1] should be 2, 4, 6, 8, 10, 12. Data is converted
163 // to float from -1.0 to 1.0 based on int32 range.
164 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
146 buffer->ReadFrames(frames, 0, 0, bus.get()); 165 buffer->ReadFrames(frames, 0, 0, bus.get());
147 VerifyBus(bus.get(), frames, 1.0f / kint32max, 1.0f / kint32max); 166 VerifyResult(bus->channel(0), frames, 1.0f / kint32max, 2.0f / kint32max);
167 VerifyResult(bus->channel(1), frames, 2.0f / kint32max, 2.0f / kint32max);
148 168
149 // Read second 10 frames. 169 // Now read 2 frames starting at frame offset 3. ch[0] should be 7, 9, and
150 bus->Zero(); 170 // ch[1] should be 8, 10.
151 buffer->ReadFrames(10, 10, 0, bus.get()); 171 buffer->ReadFrames(2, 3, 0, bus.get());
152 VerifyBus(bus.get(), 10, 11.0f / kint32max, 1.0f / kint32max); 172 VerifyResult(bus->channel(0), 2, 7.0f / kint32max, 2.0f / kint32max);
173 VerifyResult(bus->channel(1), 2, 8.0f / kint32max, 2.0f / kint32max);
153 } 174 }
154 175
155 TEST(AudioBufferTest, ReadF32) { 176 TEST(AudioBufferTest, ReadF32) {
156 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 177 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
157 const int channels = ChannelLayoutToChannelCount(channel_layout); 178 const int channels = ChannelLayoutToChannelCount(channel_layout);
158 const int frames = 20; 179 const int frames = 20;
159 const base::TimeDelta start_time; 180 const base::TimeDelta start_time;
181 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
160 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<float>(kSampleFormatF32, 182 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<float>(kSampleFormatF32,
161 channel_layout, 183 channel_layout,
162 channels, 184 channels,
163 kSampleRate, 185 kSampleRate,
164 1.0f, 186 1.0f,
165 1.0f, 187 1.0f,
166 frames, 188 frames,
167 start_time); 189 start_time,
168 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames); 190 duration);
191
192 // Read first 10 frames from the buffer. F32 is interleaved, so ch[0] should
193 // be 1, 3, 5, ... and ch[1] should be 2, 4, 6, ...
194 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
169 buffer->ReadFrames(10, 0, 0, bus.get()); 195 buffer->ReadFrames(10, 0, 0, bus.get());
170 VerifyBus(bus.get(), 10, 1, 1); 196 VerifyResult(bus->channel(0), 10, 1.0f, 2.0f);
197 VerifyResult(bus->channel(1), 10, 2.0f, 2.0f);
171 198
172 // Read second 10 frames. 199 // Read second 10 frames.
173 bus->Zero(); 200 bus = AudioBus::Create(channels, 100);
174 buffer->ReadFrames(10, 10, 0, bus.get()); 201 buffer->ReadFrames(10, 10, 0, bus.get());
175 VerifyBus(bus.get(), 10, 11, 1); 202 VerifyResult(bus->channel(0), 10, 21.0f, 2.0f);
203 VerifyResult(bus->channel(1), 10, 22.0f, 2.0f);
176 } 204 }
177 205
178 TEST(AudioBufferTest, ReadS16Planar) { 206 TEST(AudioBufferTest, ReadS16Planar) {
179 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 207 const ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
180 const int channels = ChannelLayoutToChannelCount(channel_layout); 208 const int channels = ChannelLayoutToChannelCount(channel_layout);
181 const int frames = 20; 209 const int frames = 20;
182 const base::TimeDelta start_time; 210 const base::TimeDelta start_time;
211 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
183 scoped_refptr<AudioBuffer> buffer = 212 scoped_refptr<AudioBuffer> buffer =
184 MakeAudioBuffer<int16>(kSampleFormatPlanarS16, 213 MakeAudioBuffer<int16>(kSampleFormatPlanarS16,
185 channel_layout, 214 channel_layout,
186 channels, 215 channels,
187 kSampleRate, 216 kSampleRate,
188 1, 217 1,
189 1, 218 1,
190 frames, 219 frames,
191 start_time); 220 start_time,
192 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames); 221 duration);
193 buffer->ReadFrames(10, 0, 0, bus.get()); 222
194 VerifyBus(bus.get(), 10, 1.0f / kint16max, 1.0f / kint16max); 223 // Read 6 frames from the buffer. Data is planar, so ch[0] should be 1, 2, 3,
224 // 4, 5, 6, and ch[1] should be 21, 22, 23, 24, 25, 26. Data is converted to
225 // float from -1.0 to 1.0 based on int16 range.
226 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
227 buffer->ReadFrames(6, 0, 0, bus.get());
228 VerifyResult(bus->channel(0), 6, 1.0f / kint16max, 1.0f / kint16max);
229 VerifyResult(bus->channel(1), 6, 21.0f / kint16max, 1.0f / kint16max);
195 230
196 // Read all the frames backwards, one by one. ch[0] should be 20, 19, ... 231 // Read all the frames backwards, one by one. ch[0] should be 20, 19, ...
197 bus->Zero(); 232 bus = AudioBus::Create(channels, 100);
198 for (int i = frames - 1; i >= 0; --i) 233 for (int i = 0; i < frames; ++i) {
199 buffer->ReadFrames(1, i, i, bus.get()); 234 buffer->ReadFrames(1, frames - i - 1, i, bus.get());
200 VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max); 235 }
236 VerifyResult(bus->channel(0), frames, 20.0f / kint16max, -1.0f / kint16max);
237 VerifyResult(bus->channel(1), frames, 40.0f / kint16max, -1.0f / kint16max);
201 238
202 // Read 0 frames with different offsets. Existing data in AudioBus should be 239 // Read 0 frames with different offsets. Existing data in AudioBus should be
203 // unchanged. 240 // unchanged.
204 buffer->ReadFrames(0, 0, 0, bus.get()); 241 buffer->ReadFrames(0, 0, 0, bus.get());
205 VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max);
206 buffer->ReadFrames(0, 0, 10, bus.get()); 242 buffer->ReadFrames(0, 0, 10, bus.get());
207 VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max);
208 buffer->ReadFrames(0, 10, 0, bus.get()); 243 buffer->ReadFrames(0, 10, 0, bus.get());
209 VerifyBus(bus.get(), frames, 1.0f / kint16max, 1.0f / kint16max); 244 VerifyResult(bus->channel(0), frames, 20.0f / kint16max, -1.0f / kint16max);
245 VerifyResult(bus->channel(1), frames, 40.0f / kint16max, -1.0f / kint16max);
210 } 246 }
211 247
212 TEST(AudioBufferTest, ReadF32Planar) { 248 TEST(AudioBufferTest, ReadF32Planar) {
213 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0; 249 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0;
214 const int channels = ChannelLayoutToChannelCount(channel_layout); 250 const int channels = ChannelLayoutToChannelCount(channel_layout);
215 const int frames = 100; 251 const int frames = 100;
216 const base::TimeDelta start_time; 252 const base::TimeDelta start_time;
253 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
217 scoped_refptr<AudioBuffer> buffer = 254 scoped_refptr<AudioBuffer> buffer =
218 MakeAudioBuffer<float>(kSampleFormatPlanarF32, 255 MakeAudioBuffer<float>(kSampleFormatPlanarF32,
219 channel_layout, 256 channel_layout,
220 channels, 257 channels,
221 kSampleRate, 258 kSampleRate,
222 1.0f, 259 1.0f,
223 1.0f, 260 1.0f,
224 frames, 261 frames,
225 start_time); 262 start_time,
263 duration);
226 264
227 // Read all 100 frames from the buffer. F32 is planar, so ch[0] should be 1, 265 // Read all 100 frames from the buffer. F32 is planar, so ch[0] should be 1,
228 // 2, 3, 4, ..., ch[1] should be 101, 102, 103, ..., and so on for all 4 266 // 2, 3, 4, ..., ch[1] should be 101, 102, 103, ..., and so on for all 4
229 // channels. 267 // channels.
230 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100); 268 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
231 buffer->ReadFrames(frames, 0, 0, bus.get()); 269 buffer->ReadFrames(frames, 0, 0, bus.get());
232 VerifyBus(bus.get(), frames, 1, 1); 270 VerifyResult(bus->channel(0), frames, 1.0f, 1.0f);
271 VerifyResult(bus->channel(1), frames, 101.0f, 1.0f);
272 VerifyResult(bus->channel(2), frames, 201.0f, 1.0f);
273 VerifyResult(bus->channel(3), frames, 301.0f, 1.0f);
233 274
234 // Now read 20 frames from the middle of the buffer. 275 // Now read 20 frames from the middle of the buffer.
235 bus->Zero(); 276 bus = AudioBus::Create(channels, 100);
236 buffer->ReadFrames(20, 50, 0, bus.get()); 277 buffer->ReadFrames(20, 50, 0, bus.get());
237 VerifyBus(bus.get(), 20, 51, 1); 278 VerifyResult(bus->channel(0), 20, 51.0f, 1.0f);
279 VerifyResult(bus->channel(1), 20, 151.0f, 1.0f);
280 VerifyResult(bus->channel(2), 20, 251.0f, 1.0f);
281 VerifyResult(bus->channel(3), 20, 351.0f, 1.0f);
238 } 282 }
239 283
240 TEST(AudioBufferTest, EmptyBuffer) { 284 TEST(AudioBufferTest, EmptyBuffer) {
241 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0; 285 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0;
242 const int channels = ChannelLayoutToChannelCount(channel_layout); 286 const int channels = ChannelLayoutToChannelCount(channel_layout);
243 const int frames = kSampleRate / 100; 287 const int frames = 100;
244 const base::TimeDelta start_time; 288 const base::TimeDelta start_time;
289 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
245 scoped_refptr<AudioBuffer> buffer = AudioBuffer::CreateEmptyBuffer( 290 scoped_refptr<AudioBuffer> buffer = AudioBuffer::CreateEmptyBuffer(
246 channel_layout, channels, kSampleRate, frames, start_time); 291 channel_layout, channels, kSampleRate, frames, start_time, duration);
247 EXPECT_EQ(frames, buffer->frame_count()); 292 EXPECT_EQ(frames, buffer->frame_count());
248 EXPECT_EQ(start_time, buffer->timestamp()); 293 EXPECT_EQ(start_time, buffer->timestamp());
249 EXPECT_EQ(base::TimeDelta::FromMilliseconds(10), buffer->duration()); 294 EXPECT_EQ(frames, buffer->duration().InSeconds());
250 EXPECT_FALSE(buffer->end_of_stream()); 295 EXPECT_FALSE(buffer->end_of_stream());
251 296
252 // Read all 100 frames from the buffer. All data should be 0. 297 // Read all 100 frames from the buffer. All data should be 0.
253 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames); 298 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
254 buffer->ReadFrames(frames, 0, 0, bus.get()); 299 buffer->ReadFrames(frames, 0, 0, bus.get());
255 VerifyBus(bus.get(), frames, 0, 0); 300 VerifyResult(bus->channel(0), frames, 0.0f, 0.0f);
301 VerifyResult(bus->channel(1), frames, 0.0f, 0.0f);
302 VerifyResult(bus->channel(2), frames, 0.0f, 0.0f);
303 VerifyResult(bus->channel(3), frames, 0.0f, 0.0f);
256 } 304 }
257 305
258 TEST(AudioBufferTest, Trim) { 306 TEST(AudioBufferTest, Trim) {
259 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0; 307 const ChannelLayout channel_layout = CHANNEL_LAYOUT_4_0;
260 const int channels = ChannelLayoutToChannelCount(channel_layout); 308 const int channels = ChannelLayoutToChannelCount(channel_layout);
261 const int frames = kSampleRate / 10; 309 const int frames = 100;
262 const base::TimeDelta start_time; 310 const base::TimeDelta start_time;
263 const base::TimeDelta duration = base::TimeDelta::FromMilliseconds(100); 311 const base::TimeDelta duration = base::TimeDelta::FromSeconds(frames);
264 scoped_refptr<AudioBuffer> buffer = 312 scoped_refptr<AudioBuffer> buffer =
265 MakeAudioBuffer<float>(kSampleFormatPlanarF32, 313 MakeAudioBuffer<float>(kSampleFormatPlanarF32,
266 channel_layout, 314 channel_layout,
267 channels, 315 channels,
268 kSampleRate, 316 kSampleRate,
269 0.0f, 317 1.0f,
270 1.0f, 318 1.0f,
271 frames, 319 frames,
272 start_time); 320 start_time,
321 duration);
273 EXPECT_EQ(frames, buffer->frame_count()); 322 EXPECT_EQ(frames, buffer->frame_count());
274 EXPECT_EQ(start_time, buffer->timestamp()); 323 EXPECT_EQ(start_time, buffer->timestamp());
275 EXPECT_EQ(duration, buffer->duration()); 324 EXPECT_EQ(frames, buffer->duration().InSeconds());
276 325
277 const int ten_ms_of_frames = kSampleRate / 100; 326 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, 100);
278 const base::TimeDelta ten_ms = base::TimeDelta::FromMilliseconds(10); 327 buffer->ReadFrames(20, 0, 0, bus.get());
328 VerifyResult(bus->channel(0), 20, 1.0f, 1.0f);
279 329
280 scoped_ptr<AudioBus> bus = AudioBus::Create(channels, frames); 330 // Trim off 10 frames from the start.
281 buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get()); 331 buffer->TrimStart(10);
282 VerifyBus(bus.get(), buffer->frame_count(), 0.0f, 1.0f); 332 EXPECT_EQ(buffer->frame_count(), frames - 10);
333 EXPECT_EQ(buffer->timestamp(), start_time + base::TimeDelta::FromSeconds(10));
334 EXPECT_EQ(buffer->duration(), base::TimeDelta::FromSeconds(90));
335 buffer->ReadFrames(20, 0, 0, bus.get());
336 VerifyResult(bus->channel(0), 20, 11.0f, 1.0f);
283 337
284 // Trim off 10ms of frames from the start. 338 // Trim off 10 frames from the end.
285 buffer->TrimStart(ten_ms_of_frames); 339 buffer->TrimEnd(10);
286 EXPECT_EQ(start_time + ten_ms, buffer->timestamp()); 340 EXPECT_EQ(buffer->frame_count(), frames - 20);
287 EXPECT_EQ(frames - ten_ms_of_frames, buffer->frame_count()); 341 EXPECT_EQ(buffer->timestamp(), start_time + base::TimeDelta::FromSeconds(10));
288 EXPECT_EQ(duration - ten_ms, buffer->duration()); 342 EXPECT_EQ(buffer->duration(), base::TimeDelta::FromSeconds(80));
289 buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get()); 343 buffer->ReadFrames(20, 0, 0, bus.get());
290 VerifyBus(bus.get(), buffer->frame_count(), ten_ms_of_frames, 1.0f); 344 VerifyResult(bus->channel(0), 20, 11.0f, 1.0f);
291 345
292 // Trim off 10ms of frames from the end. 346 // Trim off 50 more from the start.
293 buffer->TrimEnd(ten_ms_of_frames); 347 buffer->TrimStart(50);
294 EXPECT_EQ(start_time + ten_ms, buffer->timestamp()); 348 EXPECT_EQ(buffer->frame_count(), frames - 70);
295 EXPECT_EQ(frames - 2 * ten_ms_of_frames, buffer->frame_count()); 349 EXPECT_EQ(buffer->timestamp(), start_time + base::TimeDelta::FromSeconds(60));
296 EXPECT_EQ(duration - 2 * ten_ms, buffer->duration()); 350 EXPECT_EQ(buffer->duration(), base::TimeDelta::FromSeconds(30));
297 buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get()); 351 buffer->ReadFrames(10, 0, 0, bus.get());
298 VerifyBus(bus.get(), buffer->frame_count(), ten_ms_of_frames, 1.0f); 352 VerifyResult(bus->channel(0), 10, 61.0f, 1.0f);
299 353
300 // Trim off 40ms more from the start. 354 // Trim off the last 30 frames.
301 buffer->TrimStart(4 * ten_ms_of_frames); 355 buffer->TrimEnd(30);
302 EXPECT_EQ(start_time + 5 * ten_ms, buffer->timestamp()); 356 EXPECT_EQ(buffer->frame_count(), 0);
303 EXPECT_EQ(frames - 6 * ten_ms_of_frames, buffer->frame_count()); 357 EXPECT_EQ(buffer->timestamp(), start_time + base::TimeDelta::FromSeconds(60));
304 EXPECT_EQ(duration - 6 * ten_ms, buffer->duration()); 358 EXPECT_EQ(buffer->duration(), base::TimeDelta::FromSeconds(0));
305 buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get());
306 VerifyBus(bus.get(), buffer->frame_count(), 5 * ten_ms_of_frames, 1.0f);
307
308 // Trim off the final 40ms from the end.
309 buffer->TrimEnd(4 * ten_ms_of_frames);
310 EXPECT_EQ(0, buffer->frame_count());
311 EXPECT_EQ(start_time + 5 * ten_ms, buffer->timestamp());
312 EXPECT_EQ(base::TimeDelta(), buffer->duration());
313 } 359 }
314 360
315 } // namespace media 361 } // namespace media
OLDNEW
« no previous file with comments | « media/base/audio_buffer_queue_unittest.cc ('k') | media/base/audio_discard_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698