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

Side by Side Diff: media/filters/audio_clock_unittest.cc

Issue 518613002: Have AudioRendererImpl advance time until it's told to stop. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 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/filters/audio_clock.cc ('k') | media/filters/audio_renderer_impl.h » ('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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "media/base/audio_timestamp_helper.h" 5 #include "media/base/audio_timestamp_helper.h"
6 #include "media/base/buffers.h" 6 #include "media/base/buffers.h"
7 #include "media/filters/audio_clock.h" 7 #include "media/filters/audio_clock.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace media { 10 namespace media {
11 11
12 class AudioClockTest : public testing::Test { 12 class AudioClockTest : public testing::Test {
13 public: 13 public:
14 AudioClockTest() 14 AudioClockTest()
15 : sample_rate_(10), clock_(base::TimeDelta(), sample_rate_) {} 15 : sample_rate_(10), clock_(base::TimeDelta(), sample_rate_) {}
16 16
17 virtual ~AudioClockTest() {} 17 virtual ~AudioClockTest() {}
18 18
19 void WroteAudio(int frames_written, 19 void WroteAudio(int frames_written,
20 int frames_requested, 20 int frames_requested,
21 int delay_frames, 21 int delay_frames,
22 float playback_rate) { 22 float playback_rate) {
23 clock_.WroteAudio( 23 clock_.WroteAudio(
24 frames_written, frames_requested, delay_frames, playback_rate); 24 frames_written, frames_requested, delay_frames, playback_rate);
25 } 25 }
26 26
27 int CurrentMediaTimestampInDays() { 27 int FrontTimestampInDays() { return clock_.front_timestamp().InDays(); }
28 return clock_.current_media_timestamp().InDays(); 28
29 int FrontTimestampInMilliseconds() {
30 return clock_.front_timestamp().InMilliseconds();
29 } 31 }
30 32
31 int CurrentMediaTimestampInMilliseconds() { 33 int BackTimestampInMilliseconds() {
32 return clock_.current_media_timestamp().InMilliseconds(); 34 return clock_.back_timestamp().InMilliseconds();
33 } 35 }
34 36
35 int CurrentMediaTimestampSinceLastWritingInMilliseconds(int milliseconds) { 37 int TimestampSinceLastWritingInMilliseconds(int milliseconds) {
36 return clock_.CurrentMediaTimestampSinceWriting( 38 return clock_.TimestampSinceWriting(base::TimeDelta::FromMilliseconds(
37 base::TimeDelta::FromMilliseconds(milliseconds)) 39 milliseconds)).InMilliseconds();
38 .InMilliseconds();
39 } 40 }
40 41
41 int ContiguousAudioDataBufferedInDays() { 42 int ContiguousAudioDataBufferedInDays() {
42 return clock_.contiguous_audio_data_buffered().InDays(); 43 return clock_.contiguous_audio_data_buffered().InDays();
43 } 44 }
44 45
45 int ContiguousAudioDataBufferedInMilliseconds() { 46 int ContiguousAudioDataBufferedInMilliseconds() {
46 return clock_.contiguous_audio_data_buffered().InMilliseconds(); 47 return clock_.contiguous_audio_data_buffered().InMilliseconds();
47 } 48 }
48 49
49 int ContiguousAudioDataBufferedAtSameRateInMilliseconds() { 50 int ContiguousAudioDataBufferedAtSameRateInMilliseconds() {
50 return clock_.contiguous_audio_data_buffered_at_same_rate() 51 return clock_.contiguous_audio_data_buffered_at_same_rate()
51 .InMilliseconds(); 52 .InMilliseconds();
52 } 53 }
53 54
54 const int sample_rate_; 55 const int sample_rate_;
55 AudioClock clock_; 56 AudioClock clock_;
56 57
57 private: 58 private:
58 DISALLOW_COPY_AND_ASSIGN(AudioClockTest); 59 DISALLOW_COPY_AND_ASSIGN(AudioClockTest);
59 }; 60 };
60 61
61 TEST_F(AudioClockTest, CurrentMediaTimestampStartsAtStartTimestamp) { 62 TEST_F(AudioClockTest, FrontTimestampStartsAtStartTimestamp) {
62 base::TimeDelta expected = base::TimeDelta::FromSeconds(123); 63 base::TimeDelta expected = base::TimeDelta::FromSeconds(123);
63 AudioClock clock(expected, sample_rate_); 64 AudioClock clock(expected, sample_rate_);
64 65
65 EXPECT_EQ(expected, clock.current_media_timestamp()); 66 EXPECT_EQ(expected, clock.front_timestamp());
66 } 67 }
67 68
68 TEST_F(AudioClockTest, 69 TEST_F(AudioClockTest, BackTimestampStartsAtStartTimestamp) {
69 CurrentMediaTimestampSinceWritingStartsAtStartTimestamp) { 70 base::TimeDelta expected = base::TimeDelta::FromSeconds(123);
71 AudioClock clock(expected, sample_rate_);
72
73 EXPECT_EQ(expected, clock.back_timestamp());
74 }
75
76 TEST_F(AudioClockTest, TimestampSinceWritingStartsAtStartTimestamp) {
70 base::TimeDelta expected = base::TimeDelta::FromSeconds(123); 77 base::TimeDelta expected = base::TimeDelta::FromSeconds(123);
71 AudioClock clock(expected, sample_rate_); 78 AudioClock clock(expected, sample_rate_);
72 79
73 base::TimeDelta time_since_writing = base::TimeDelta::FromSeconds(456); 80 base::TimeDelta time_since_writing = base::TimeDelta::FromSeconds(456);
74 EXPECT_EQ(expected, 81 EXPECT_EQ(expected, clock.TimestampSinceWriting(time_since_writing));
75 clock.CurrentMediaTimestampSinceWriting(time_since_writing));
76 } 82 }
77 83
78 TEST_F(AudioClockTest, ContiguousAudioDataBufferedStartsAtZero) { 84 TEST_F(AudioClockTest, ContiguousAudioDataBufferedStartsAtZero) {
79 EXPECT_EQ(base::TimeDelta(), clock_.contiguous_audio_data_buffered()); 85 EXPECT_EQ(base::TimeDelta(), clock_.contiguous_audio_data_buffered());
80 } 86 }
81 87
82 TEST_F(AudioClockTest, ContiguousAudioDataBufferedAtSameRateStartsAtZero) { 88 TEST_F(AudioClockTest, ContiguousAudioDataBufferedAtSameRateStartsAtZero) {
83 EXPECT_EQ(base::TimeDelta(), 89 EXPECT_EQ(base::TimeDelta(),
84 clock_.contiguous_audio_data_buffered_at_same_rate()); 90 clock_.contiguous_audio_data_buffered_at_same_rate());
85 } 91 }
86 92
87 TEST_F(AudioClockTest, AudioDataBufferedStartsAtFalse) {
88 EXPECT_FALSE(clock_.audio_data_buffered());
89 }
90
91 TEST_F(AudioClockTest, Playback) { 93 TEST_F(AudioClockTest, Playback) {
92 // The first time we write data we should still expect our start timestamp 94 // The first time we write data we should still expect our start timestamp
93 // due to delay. 95 // due to delay.
94 WroteAudio(10, 10, 20, 1.0); 96 WroteAudio(10, 10, 20, 1.0);
95 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds()); 97 EXPECT_EQ(0, FrontTimestampInMilliseconds());
98 EXPECT_EQ(1000, BackTimestampInMilliseconds());
96 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds()); 99 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
97 EXPECT_EQ(0, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 100 EXPECT_EQ(0, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
98 EXPECT_TRUE(clock_.audio_data_buffered());
99 101
100 // The media time should remain at start timestamp as we write data. 102 // The media time should remain at start timestamp as we write data.
101 WroteAudio(10, 10, 20, 1.0); 103 WroteAudio(10, 10, 20, 1.0);
102 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds()); 104 EXPECT_EQ(0, FrontTimestampInMilliseconds());
105 EXPECT_EQ(2000, BackTimestampInMilliseconds());
103 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds()); 106 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
104 EXPECT_EQ(0, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 107 EXPECT_EQ(0, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
105 108
106 WroteAudio(10, 10, 20, 1.0); 109 WroteAudio(10, 10, 20, 1.0);
107 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds()); 110 EXPECT_EQ(0, FrontTimestampInMilliseconds());
111 EXPECT_EQ(3000, BackTimestampInMilliseconds());
108 EXPECT_EQ(3000, ContiguousAudioDataBufferedInMilliseconds()); 112 EXPECT_EQ(3000, ContiguousAudioDataBufferedInMilliseconds());
109 EXPECT_EQ(3000, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 113 EXPECT_EQ(3000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
110 114
111 // The media time should now start advanced now that delay has been covered. 115 // The media time should now start advanced now that delay has been covered.
112 WroteAudio(10, 10, 20, 1.0); 116 WroteAudio(10, 10, 20, 1.0);
113 EXPECT_EQ(1000, CurrentMediaTimestampInMilliseconds()); 117 EXPECT_EQ(1000, FrontTimestampInMilliseconds());
118 EXPECT_EQ(4000, BackTimestampInMilliseconds());
114 EXPECT_EQ(3000, ContiguousAudioDataBufferedInMilliseconds()); 119 EXPECT_EQ(3000, ContiguousAudioDataBufferedInMilliseconds());
115 EXPECT_EQ(3000, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 120 EXPECT_EQ(3000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
116 121
117 WroteAudio(10, 10, 20, 1.0); 122 WroteAudio(10, 10, 20, 1.0);
118 EXPECT_EQ(2000, CurrentMediaTimestampInMilliseconds()); 123 EXPECT_EQ(2000, FrontTimestampInMilliseconds());
124 EXPECT_EQ(5000, BackTimestampInMilliseconds());
119 EXPECT_EQ(3000, ContiguousAudioDataBufferedInMilliseconds()); 125 EXPECT_EQ(3000, ContiguousAudioDataBufferedInMilliseconds());
120 EXPECT_EQ(3000, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 126 EXPECT_EQ(3000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
121 127
122 // Introduce a rate change to slow down time: 128 // Introduce a rate change to slow down time:
123 // - Current time will advance by one second until it hits rate change 129 // - Current time will advance by one second until it hits rate change
124 // - Contiguous audio data will start shrinking immediately 130 // - Contiguous audio data will start shrinking immediately
125 WroteAudio(10, 10, 20, 0.5); 131 WroteAudio(10, 10, 20, 0.5);
126 EXPECT_EQ(3000, CurrentMediaTimestampInMilliseconds()); 132 EXPECT_EQ(3000, FrontTimestampInMilliseconds());
133 EXPECT_EQ(5500, BackTimestampInMilliseconds());
127 EXPECT_EQ(2500, ContiguousAudioDataBufferedInMilliseconds()); 134 EXPECT_EQ(2500, ContiguousAudioDataBufferedInMilliseconds());
128 EXPECT_EQ(2000, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 135 EXPECT_EQ(2000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
129 136
130 WroteAudio(10, 10, 20, 0.5); 137 WroteAudio(10, 10, 20, 0.5);
131 EXPECT_EQ(4000, CurrentMediaTimestampInMilliseconds()); 138 EXPECT_EQ(4000, FrontTimestampInMilliseconds());
139 EXPECT_EQ(6000, BackTimestampInMilliseconds());
132 EXPECT_EQ(2000, ContiguousAudioDataBufferedInMilliseconds()); 140 EXPECT_EQ(2000, ContiguousAudioDataBufferedInMilliseconds());
133 EXPECT_EQ(1000, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 141 EXPECT_EQ(1000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
134 142
135 WroteAudio(10, 10, 20, 0.5); 143 WroteAudio(10, 10, 20, 0.5);
136 EXPECT_EQ(5000, CurrentMediaTimestampInMilliseconds()); 144 EXPECT_EQ(5000, FrontTimestampInMilliseconds());
145 EXPECT_EQ(6500, BackTimestampInMilliseconds());
137 EXPECT_EQ(1500, ContiguousAudioDataBufferedInMilliseconds()); 146 EXPECT_EQ(1500, ContiguousAudioDataBufferedInMilliseconds());
138 EXPECT_EQ(1500, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 147 EXPECT_EQ(1500, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
139 148
140 WroteAudio(10, 10, 20, 0.5); 149 WroteAudio(10, 10, 20, 0.5);
141 EXPECT_EQ(5500, CurrentMediaTimestampInMilliseconds()); 150 EXPECT_EQ(5500, FrontTimestampInMilliseconds());
151 EXPECT_EQ(7000, BackTimestampInMilliseconds());
142 EXPECT_EQ(1500, ContiguousAudioDataBufferedInMilliseconds()); 152 EXPECT_EQ(1500, ContiguousAudioDataBufferedInMilliseconds());
143 EXPECT_EQ(1500, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 153 EXPECT_EQ(1500, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
144 154
145 // Introduce a rate change to speed up time: 155 // Introduce a rate change to speed up time:
146 // - Current time will advance by half a second until it hits rate change 156 // - Current time will advance by half a second until it hits rate change
147 // - Contiguous audio data will start growing immediately 157 // - Contiguous audio data will start growing immediately
148 WroteAudio(10, 10, 20, 2); 158 WroteAudio(10, 10, 20, 2);
149 EXPECT_EQ(6000, CurrentMediaTimestampInMilliseconds()); 159 EXPECT_EQ(6000, FrontTimestampInMilliseconds());
160 EXPECT_EQ(9000, BackTimestampInMilliseconds());
150 EXPECT_EQ(3000, ContiguousAudioDataBufferedInMilliseconds()); 161 EXPECT_EQ(3000, ContiguousAudioDataBufferedInMilliseconds());
151 EXPECT_EQ(1000, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 162 EXPECT_EQ(1000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
152 163
153 WroteAudio(10, 10, 20, 2); 164 WroteAudio(10, 10, 20, 2);
154 EXPECT_EQ(6500, CurrentMediaTimestampInMilliseconds()); 165 EXPECT_EQ(6500, FrontTimestampInMilliseconds());
166 EXPECT_EQ(11000, BackTimestampInMilliseconds());
155 EXPECT_EQ(4500, ContiguousAudioDataBufferedInMilliseconds()); 167 EXPECT_EQ(4500, ContiguousAudioDataBufferedInMilliseconds());
156 EXPECT_EQ(500, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 168 EXPECT_EQ(500, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
157 169
158 WroteAudio(10, 10, 20, 2); 170 WroteAudio(10, 10, 20, 2);
159 EXPECT_EQ(7000, CurrentMediaTimestampInMilliseconds()); 171 EXPECT_EQ(7000, FrontTimestampInMilliseconds());
172 EXPECT_EQ(13000, BackTimestampInMilliseconds());
160 EXPECT_EQ(6000, ContiguousAudioDataBufferedInMilliseconds()); 173 EXPECT_EQ(6000, ContiguousAudioDataBufferedInMilliseconds());
161 EXPECT_EQ(6000, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 174 EXPECT_EQ(6000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
162 175
163 WroteAudio(10, 10, 20, 2); 176 WroteAudio(10, 10, 20, 2);
164 EXPECT_EQ(9000, CurrentMediaTimestampInMilliseconds()); 177 EXPECT_EQ(9000, FrontTimestampInMilliseconds());
178 EXPECT_EQ(15000, BackTimestampInMilliseconds());
165 EXPECT_EQ(6000, ContiguousAudioDataBufferedInMilliseconds()); 179 EXPECT_EQ(6000, ContiguousAudioDataBufferedInMilliseconds());
166 EXPECT_EQ(6000, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 180 EXPECT_EQ(6000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
167 181
168 // Write silence to simulate reaching end of stream: 182 // Write silence to simulate reaching end of stream:
169 // - Current time will advance by half a second until it hits silence 183 // - Current time will advance by half a second until it hits silence
170 // - Contiguous audio data will start shrinking towards zero 184 // - Contiguous audio data will start shrinking towards zero
171 WroteAudio(0, 10, 20, 2); 185 WroteAudio(0, 10, 20, 2);
172 EXPECT_EQ(11000, CurrentMediaTimestampInMilliseconds()); 186 EXPECT_EQ(11000, FrontTimestampInMilliseconds());
187 EXPECT_EQ(15000, BackTimestampInMilliseconds());
173 EXPECT_EQ(4000, ContiguousAudioDataBufferedInMilliseconds()); 188 EXPECT_EQ(4000, ContiguousAudioDataBufferedInMilliseconds());
174 EXPECT_EQ(4000, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 189 EXPECT_EQ(4000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
175 190
176 WroteAudio(0, 10, 20, 2); 191 WroteAudio(0, 10, 20, 2);
177 EXPECT_EQ(13000, CurrentMediaTimestampInMilliseconds()); 192 EXPECT_EQ(13000, FrontTimestampInMilliseconds());
193 EXPECT_EQ(15000, BackTimestampInMilliseconds());
178 EXPECT_EQ(2000, ContiguousAudioDataBufferedInMilliseconds()); 194 EXPECT_EQ(2000, ContiguousAudioDataBufferedInMilliseconds());
179 EXPECT_EQ(2000, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 195 EXPECT_EQ(2000, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
180 EXPECT_TRUE(clock_.audio_data_buffered()); // Still audio data buffered.
181 196
182 WroteAudio(0, 10, 20, 2); 197 WroteAudio(0, 10, 20, 2);
183 EXPECT_EQ(15000, CurrentMediaTimestampInMilliseconds()); 198 EXPECT_EQ(15000, FrontTimestampInMilliseconds());
199 EXPECT_EQ(15000, BackTimestampInMilliseconds());
184 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds()); 200 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
185 EXPECT_EQ(0, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 201 EXPECT_EQ(0, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
186 EXPECT_FALSE(clock_.audio_data_buffered()); // No more audio data buffered.
187 202
188 // At this point media time should stop increasing. 203 // At this point media time should stop increasing.
189 WroteAudio(0, 10, 20, 2); 204 WroteAudio(0, 10, 20, 2);
190 EXPECT_EQ(15000, CurrentMediaTimestampInMilliseconds()); 205 EXPECT_EQ(15000, FrontTimestampInMilliseconds());
206 EXPECT_EQ(15000, BackTimestampInMilliseconds());
191 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds()); 207 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
192 EXPECT_EQ(0, ContiguousAudioDataBufferedAtSameRateInMilliseconds()); 208 EXPECT_EQ(0, ContiguousAudioDataBufferedAtSameRateInMilliseconds());
193 EXPECT_FALSE(clock_.audio_data_buffered());
194 } 209 }
195 210
196 TEST_F(AudioClockTest, AlternatingAudioAndSilence) { 211 TEST_F(AudioClockTest, AlternatingAudioAndSilence) {
197 // Buffer #1: [0, 1000) 212 // Buffer #1: [0, 1000)
198 WroteAudio(10, 10, 20, 1.0); 213 WroteAudio(10, 10, 20, 1.0);
199 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds()); 214 EXPECT_EQ(0, FrontTimestampInMilliseconds());
215 EXPECT_EQ(1000, BackTimestampInMilliseconds());
200 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds()); 216 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
201 217
202 // Buffer #2: 1000ms of silence 218 // Buffer #2: 1000ms of silence
203 WroteAudio(0, 10, 20, 1.0); 219 WroteAudio(0, 10, 20, 1.0);
204 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds()); 220 EXPECT_EQ(0, FrontTimestampInMilliseconds());
221 EXPECT_EQ(1000, BackTimestampInMilliseconds());
205 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds()); 222 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
206 223
207 // Buffer #3: [1000, 2000): 224 // Buffer #3: [1000, 2000):
208 // - Buffer #1 is at front with 1000ms of contiguous audio data 225 // - Buffer #1 is at front with 1000ms of contiguous audio data
209 WroteAudio(10, 10, 20, 1.0); 226 WroteAudio(10, 10, 20, 1.0);
210 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds()); 227 EXPECT_EQ(0, FrontTimestampInMilliseconds());
228 EXPECT_EQ(2000, BackTimestampInMilliseconds());
211 EXPECT_EQ(1000, ContiguousAudioDataBufferedInMilliseconds()); 229 EXPECT_EQ(1000, ContiguousAudioDataBufferedInMilliseconds());
212 230
213 // Buffer #4: 1000ms of silence 231 // Buffer #4: 1000ms of silence
214 // - Buffer #1 has been played out 232 // - Buffer #1 has been played out
215 // - Buffer #2 of silence leaves us with 0ms of contiguous audio data 233 // - Buffer #2 of silence leaves us with 0ms of contiguous audio data
216 WroteAudio(0, 10, 20, 1.0); 234 WroteAudio(0, 10, 20, 1.0);
217 EXPECT_EQ(1000, CurrentMediaTimestampInMilliseconds()); 235 EXPECT_EQ(1000, FrontTimestampInMilliseconds());
236 EXPECT_EQ(2000, BackTimestampInMilliseconds());
218 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds()); 237 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
219 238
220 // Buffer #5: [2000, 3000): 239 // Buffer #5: [2000, 3000):
221 // - Buffer #3 is at front with 1000ms of contiguous audio data 240 // - Buffer #3 is at front with 1000ms of contiguous audio data
222 WroteAudio(10, 10, 20, 1.0); 241 WroteAudio(10, 10, 20, 1.0);
223 EXPECT_EQ(1000, CurrentMediaTimestampInMilliseconds()); 242 EXPECT_EQ(1000, FrontTimestampInMilliseconds());
243 EXPECT_EQ(3000, BackTimestampInMilliseconds());
224 EXPECT_EQ(1000, ContiguousAudioDataBufferedInMilliseconds()); 244 EXPECT_EQ(1000, ContiguousAudioDataBufferedInMilliseconds());
225 } 245 }
226 246
227 TEST_F(AudioClockTest, ZeroDelay) { 247 TEST_F(AudioClockTest, ZeroDelay) {
228 // The first time we write data we should expect the first timestamp 248 // The first time we write data we should expect the first timestamp
229 // immediately. 249 // immediately.
230 WroteAudio(10, 10, 0, 1.0); 250 WroteAudio(10, 10, 0, 1.0);
231 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds()); 251 EXPECT_EQ(0, FrontTimestampInMilliseconds());
252 EXPECT_EQ(1000, BackTimestampInMilliseconds());
232 EXPECT_EQ(1000, ContiguousAudioDataBufferedInMilliseconds()); 253 EXPECT_EQ(1000, ContiguousAudioDataBufferedInMilliseconds());
233 254
234 // Ditto for all subsequent buffers. 255 // Ditto for all subsequent buffers.
235 WroteAudio(10, 10, 0, 1.0); 256 WroteAudio(10, 10, 0, 1.0);
236 EXPECT_EQ(1000, CurrentMediaTimestampInMilliseconds()); 257 EXPECT_EQ(1000, FrontTimestampInMilliseconds());
258 EXPECT_EQ(2000, BackTimestampInMilliseconds());
237 EXPECT_EQ(1000, ContiguousAudioDataBufferedInMilliseconds()); 259 EXPECT_EQ(1000, ContiguousAudioDataBufferedInMilliseconds());
238 260
239 WroteAudio(10, 10, 0, 1.0); 261 WroteAudio(10, 10, 0, 1.0);
240 EXPECT_EQ(2000, CurrentMediaTimestampInMilliseconds()); 262 EXPECT_EQ(2000, FrontTimestampInMilliseconds());
263 EXPECT_EQ(3000, BackTimestampInMilliseconds());
241 EXPECT_EQ(1000, ContiguousAudioDataBufferedInMilliseconds()); 264 EXPECT_EQ(1000, ContiguousAudioDataBufferedInMilliseconds());
242 265
243 // Ditto for silence. 266 // Ditto for silence.
244 WroteAudio(0, 10, 0, 1.0); 267 WroteAudio(0, 10, 0, 1.0);
245 EXPECT_EQ(3000, CurrentMediaTimestampInMilliseconds()); 268 EXPECT_EQ(3000, FrontTimestampInMilliseconds());
269 EXPECT_EQ(3000, BackTimestampInMilliseconds());
246 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds()); 270 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
247 271
248 WroteAudio(0, 10, 0, 1.0); 272 WroteAudio(0, 10, 0, 1.0);
249 EXPECT_EQ(3000, CurrentMediaTimestampInMilliseconds()); 273 EXPECT_EQ(3000, FrontTimestampInMilliseconds());
274 EXPECT_EQ(3000, BackTimestampInMilliseconds());
250 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds()); 275 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
251 } 276 }
252 277
253 TEST_F(AudioClockTest, CurrentMediaTimestampSinceLastWriting) { 278 TEST_F(AudioClockTest, TimestampSinceLastWriting) {
254 // Construct an audio clock with the following representation: 279 // Construct an audio clock with the following representation:
255 // 280 //
256 // +-------------------+----------------+------------------+----------------+ 281 // +-------------------+----------------+------------------+----------------+
257 // | 10 frames silence | 10 frames @ 1x | 10 frames @ 0.5x | 10 frames @ 2x | 282 // | 10 frames silence | 10 frames @ 1x | 10 frames @ 0.5x | 10 frames @ 2x |
258 // +-------------------+----------------+------------------+----------------+ 283 // +-------------------+----------------+------------------+----------------+
259 // Media timestamp: 0 1000 1500 3500 284 // Media timestamp: 0 1000 1500 3500
260 // Wall clock time: 2000 3000 4000 5000 285 // Wall clock time: 2000 3000 4000 5000
261 WroteAudio(10, 10, 40, 1.0); 286 WroteAudio(10, 10, 40, 1.0);
262 WroteAudio(10, 10, 40, 0.5); 287 WroteAudio(10, 10, 40, 0.5);
263 WroteAudio(10, 10, 40, 2.0); 288 WroteAudio(10, 10, 40, 2.0);
264 EXPECT_EQ(0, CurrentMediaTimestampInMilliseconds()); 289 EXPECT_EQ(0, FrontTimestampInMilliseconds());
265 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds()); 290 EXPECT_EQ(0, ContiguousAudioDataBufferedInMilliseconds());
266 291
267 // Simulate passing 2000ms of initial delay in the audio hardware. 292 // Simulate passing 2000ms of initial delay in the audio hardware.
268 EXPECT_EQ(0, CurrentMediaTimestampSinceLastWritingInMilliseconds(0)); 293 EXPECT_EQ(0, TimestampSinceLastWritingInMilliseconds(0));
269 EXPECT_EQ(0, CurrentMediaTimestampSinceLastWritingInMilliseconds(500)); 294 EXPECT_EQ(0, TimestampSinceLastWritingInMilliseconds(500));
270 EXPECT_EQ(0, CurrentMediaTimestampSinceLastWritingInMilliseconds(1000)); 295 EXPECT_EQ(0, TimestampSinceLastWritingInMilliseconds(1000));
271 EXPECT_EQ(0, CurrentMediaTimestampSinceLastWritingInMilliseconds(1500)); 296 EXPECT_EQ(0, TimestampSinceLastWritingInMilliseconds(1500));
272 EXPECT_EQ(0, CurrentMediaTimestampSinceLastWritingInMilliseconds(2000)); 297 EXPECT_EQ(0, TimestampSinceLastWritingInMilliseconds(2000));
273 298
274 // Now we should see the 1.0x buffer. 299 // Now we should see the 1.0x buffer.
275 EXPECT_EQ(500, CurrentMediaTimestampSinceLastWritingInMilliseconds(2500)); 300 EXPECT_EQ(500, TimestampSinceLastWritingInMilliseconds(2500));
276 EXPECT_EQ(1000, CurrentMediaTimestampSinceLastWritingInMilliseconds(3000)); 301 EXPECT_EQ(1000, TimestampSinceLastWritingInMilliseconds(3000));
277 302
278 // Now we should see the 0.5x buffer. 303 // Now we should see the 0.5x buffer.
279 EXPECT_EQ(1250, CurrentMediaTimestampSinceLastWritingInMilliseconds(3500)); 304 EXPECT_EQ(1250, TimestampSinceLastWritingInMilliseconds(3500));
280 EXPECT_EQ(1500, CurrentMediaTimestampSinceLastWritingInMilliseconds(4000)); 305 EXPECT_EQ(1500, TimestampSinceLastWritingInMilliseconds(4000));
281 306
282 // Now we should see the 2.0x buffer. 307 // Now we should see the 2.0x buffer.
283 EXPECT_EQ(2500, CurrentMediaTimestampSinceLastWritingInMilliseconds(4500)); 308 EXPECT_EQ(2500, TimestampSinceLastWritingInMilliseconds(4500));
284 EXPECT_EQ(3500, CurrentMediaTimestampSinceLastWritingInMilliseconds(5000)); 309 EXPECT_EQ(3500, TimestampSinceLastWritingInMilliseconds(5000));
285 310
286 // Times beyond the known length of the audio clock should return the last 311 // Times beyond the known length of the audio clock should return the last
287 // media timestamp we know of. 312 // media timestamp we know of.
288 EXPECT_EQ(3500, CurrentMediaTimestampSinceLastWritingInMilliseconds(5001)); 313 EXPECT_EQ(3500, TimestampSinceLastWritingInMilliseconds(5001));
289 EXPECT_EQ(3500, CurrentMediaTimestampSinceLastWritingInMilliseconds(6000)); 314 EXPECT_EQ(3500, TimestampSinceLastWritingInMilliseconds(6000));
290 } 315 }
291 316
292 TEST_F(AudioClockTest, SupportsYearsWorthOfAudioData) { 317 TEST_F(AudioClockTest, SupportsYearsWorthOfAudioData) {
293 // Use number of frames that would be likely to overflow 32-bit integer math. 318 // Use number of frames that would be likely to overflow 32-bit integer math.
294 const int huge_amount_of_frames = std::numeric_limits<int>::max(); 319 const int huge_amount_of_frames = std::numeric_limits<int>::max();
295 const base::TimeDelta huge = 320 const base::TimeDelta huge =
296 base::TimeDelta::FromSeconds(huge_amount_of_frames / sample_rate_); 321 base::TimeDelta::FromSeconds(huge_amount_of_frames / sample_rate_);
297 EXPECT_EQ(2485, huge.InDays()); // Just to give some context on how big... 322 EXPECT_EQ(2485, huge.InDays()); // Just to give some context on how big...
298 323
299 // Use zero delay to test calculation of current timestamp. 324 // Use zero delay to test calculation of current timestamp.
300 WroteAudio(huge_amount_of_frames, huge_amount_of_frames, 0, 1.0); 325 WroteAudio(huge_amount_of_frames, huge_amount_of_frames, 0, 1.0);
301 EXPECT_EQ(0, CurrentMediaTimestampInDays()); 326 EXPECT_EQ(0, FrontTimestampInDays());
302 EXPECT_EQ(2485, ContiguousAudioDataBufferedInDays()); 327 EXPECT_EQ(2485, ContiguousAudioDataBufferedInDays());
303 328
304 WroteAudio(huge_amount_of_frames, huge_amount_of_frames, 0, 1.0); 329 WroteAudio(huge_amount_of_frames, huge_amount_of_frames, 0, 1.0);
305 EXPECT_EQ(huge.InDays(), CurrentMediaTimestampInDays()); 330 EXPECT_EQ(huge.InDays(), FrontTimestampInDays());
306 EXPECT_EQ(huge.InDays(), ContiguousAudioDataBufferedInDays()); 331 EXPECT_EQ(huge.InDays(), ContiguousAudioDataBufferedInDays());
307 332
308 WroteAudio(huge_amount_of_frames, huge_amount_of_frames, 0, 1.0); 333 WroteAudio(huge_amount_of_frames, huge_amount_of_frames, 0, 1.0);
309 EXPECT_EQ((huge * 2).InDays(), CurrentMediaTimestampInDays()); 334 EXPECT_EQ((huge * 2).InDays(), FrontTimestampInDays());
310 EXPECT_EQ(huge.InDays(), ContiguousAudioDataBufferedInDays()); 335 EXPECT_EQ(huge.InDays(), ContiguousAudioDataBufferedInDays());
311 336
312 WroteAudio(huge_amount_of_frames, huge_amount_of_frames, 0, 1.0); 337 WroteAudio(huge_amount_of_frames, huge_amount_of_frames, 0, 1.0);
313 EXPECT_EQ((huge * 3).InDays(), CurrentMediaTimestampInDays()); 338 EXPECT_EQ((huge * 3).InDays(), FrontTimestampInDays());
314 EXPECT_EQ(huge.InDays(), ContiguousAudioDataBufferedInDays()); 339 EXPECT_EQ(huge.InDays(), ContiguousAudioDataBufferedInDays());
315 340
316 // Use huge delay to test calculation of buffered data. 341 // Use huge delay to test calculation of buffered data.
317 WroteAudio( 342 WroteAudio(
318 huge_amount_of_frames, huge_amount_of_frames, huge_amount_of_frames, 1.0); 343 huge_amount_of_frames, huge_amount_of_frames, huge_amount_of_frames, 1.0);
319 EXPECT_EQ((huge * 3).InDays(), CurrentMediaTimestampInDays()); 344 EXPECT_EQ((huge * 3).InDays(), FrontTimestampInDays());
320 EXPECT_EQ((huge * 2).InDays(), ContiguousAudioDataBufferedInDays()); 345 EXPECT_EQ((huge * 2).InDays(), ContiguousAudioDataBufferedInDays());
321 } 346 }
322 347
323 } // namespace media 348 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/audio_clock.cc ('k') | media/filters/audio_renderer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698