OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/filters/source_buffer_stream.h" | 5 #include "media/filters/source_buffer_stream.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "media/base/data_buffer.h" | 8 #include "media/base/data_buffer.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 void AppendBuffers_ExpectFailure( | 48 void AppendBuffers_ExpectFailure( |
49 int starting_position, int number_of_buffers) { | 49 int starting_position, int number_of_buffers) { |
50 AppendBuffers(starting_position, number_of_buffers, | 50 AppendBuffers(starting_position, number_of_buffers, |
51 base::TimeDelta(), false, NULL, 0); | 51 base::TimeDelta(), false, NULL, 0); |
52 } | 52 } |
53 | 53 |
54 void Seek(int position) { | 54 void Seek(int position) { |
55 stream_.Seek(position * frame_duration_); | 55 stream_.Seek(position * frame_duration_); |
56 } | 56 } |
57 | 57 |
58 SourceBufferStream::Timespan CreateTimespan( | 58 void CheckExpectedRanges(const std::string& expected) { |
59 int start_position, int end_position) { | 59 Ranges<base::TimeDelta> r = stream_.GetBufferedTime(); |
60 return std::make_pair( | |
61 start_position * frame_duration_, (end_position + 1) * frame_duration_); | |
62 } | |
63 | 60 |
64 void CheckExpectedTimespan(int start_position, int end_position) { | 61 std::stringstream ss; |
65 SourceBufferStream::TimespanList expected; | 62 ss << "{ "; |
66 expected.push_back(CreateTimespan(start_position, end_position)); | 63 for (size_t i = 0; i < r.size(); ++i) { |
67 CheckExpectedTimespans(expected); | 64 int64 start = (r.start(i) / frame_duration_); |
68 } | 65 int64 end = (r.end(i) / frame_duration_) - 1; |
69 | 66 ss << "[" << start << "," << end << ") "; |
70 void CheckExpectedTimespans( | |
71 SourceBufferStream::TimespanList expected_times) { | |
72 SourceBufferStream::TimespanList actual_times = stream_.GetBufferedTime(); | |
73 EXPECT_EQ(expected_times.size(), actual_times.size()); | |
74 | |
75 for (SourceBufferStream::TimespanList::iterator actual_itr = | |
76 actual_times.begin(), expected_itr = expected_times.begin(); | |
77 actual_itr != actual_times.end() && | |
78 expected_itr != expected_times.end(); | |
79 actual_itr++, expected_itr++) { | |
80 EXPECT_EQ(expected_itr->first / frame_duration_, | |
81 actual_itr->first / frame_duration_); | |
82 EXPECT_EQ(expected_itr->second / frame_duration_, | |
83 actual_itr->second / frame_duration_); | |
84 } | 67 } |
| 68 ss << "}"; |
| 69 EXPECT_EQ(ss.str(), expected); |
85 } | 70 } |
86 | 71 |
87 void CheckExpectedBuffers( | 72 void CheckExpectedBuffers( |
88 int starting_position, int ending_position) { | 73 int starting_position, int ending_position) { |
89 CheckExpectedBuffers(starting_position, ending_position, false, NULL, 0); | 74 CheckExpectedBuffers(starting_position, ending_position, false, NULL, 0); |
90 } | 75 } |
91 | 76 |
92 void CheckExpectedBuffers( | 77 void CheckExpectedBuffers( |
93 int starting_position, int ending_position, bool expect_keyframe) { | 78 int starting_position, int ending_position, bool expect_keyframe) { |
94 CheckExpectedBuffers(starting_position, ending_position, expect_keyframe, | 79 CheckExpectedBuffers(starting_position, ending_position, expect_keyframe, |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 int keyframes_per_second_; | 165 int keyframes_per_second_; |
181 base::TimeDelta frame_duration_; | 166 base::TimeDelta frame_duration_; |
182 DISALLOW_COPY_AND_ASSIGN(SourceBufferStreamTest); | 167 DISALLOW_COPY_AND_ASSIGN(SourceBufferStreamTest); |
183 }; | 168 }; |
184 | 169 |
185 TEST_F(SourceBufferStreamTest, Append_SingleRange) { | 170 TEST_F(SourceBufferStreamTest, Append_SingleRange) { |
186 // Append 15 buffers at positions 0 through 14. | 171 // Append 15 buffers at positions 0 through 14. |
187 AppendBuffers(0, 15); | 172 AppendBuffers(0, 15); |
188 | 173 |
189 // Check expected range. | 174 // Check expected range. |
190 CheckExpectedTimespan(0, 14); | 175 CheckExpectedRanges("{ [0,14) }"); |
191 // Check buffers in range. | 176 // Check buffers in range. |
192 Seek(0); | 177 Seek(0); |
193 CheckExpectedBuffers(0, 14); | 178 CheckExpectedBuffers(0, 14); |
194 } | 179 } |
195 | 180 |
196 TEST_F(SourceBufferStreamTest, Append_SingleRange_OneBufferAtATime) { | 181 TEST_F(SourceBufferStreamTest, Append_SingleRange_OneBufferAtATime) { |
197 // Append 15 buffers starting at position 0, one buffer at a time. | 182 // Append 15 buffers starting at position 0, one buffer at a time. |
198 for (int i = 0; i < 15; i++) | 183 for (int i = 0; i < 15; i++) |
199 AppendBuffers(i, 1); | 184 AppendBuffers(i, 1); |
200 | 185 |
201 // Check expected range. | 186 // Check expected range. |
202 CheckExpectedTimespan(0, 14); | 187 CheckExpectedRanges("{ [0,14) }"); |
203 // Check buffers in range. | 188 // Check buffers in range. |
204 Seek(0); | 189 Seek(0); |
205 CheckExpectedBuffers(0, 14); | 190 CheckExpectedBuffers(0, 14); |
206 } | 191 } |
207 | 192 |
208 TEST_F(SourceBufferStreamTest, Append_DisjointRanges) { | 193 TEST_F(SourceBufferStreamTest, Append_DisjointRanges) { |
209 // Append 5 buffers at positions 0 through 4. | 194 // Append 5 buffers at positions 0 through 4. |
210 AppendBuffers(0, 5); | 195 AppendBuffers(0, 5); |
211 | 196 |
212 // Append 10 buffers at positions 15 through 24. | 197 // Append 10 buffers at positions 15 through 24. |
213 AppendBuffers(15, 10); | 198 AppendBuffers(15, 10); |
214 | 199 |
215 // Check expected ranges. | 200 // Check expected ranges. |
216 SourceBufferStream::TimespanList expected; | 201 CheckExpectedRanges("{ [0,4) [15,24) }"); |
217 expected.push_back(CreateTimespan(0, 4)); | |
218 expected.push_back(CreateTimespan(15, 24)); | |
219 CheckExpectedTimespans(expected); | |
220 // Check buffers in ranges. | 202 // Check buffers in ranges. |
221 Seek(0); | 203 Seek(0); |
222 CheckExpectedBuffers(0, 4); | 204 CheckExpectedBuffers(0, 4); |
223 Seek(15); | 205 Seek(15); |
224 CheckExpectedBuffers(15, 24); | 206 CheckExpectedBuffers(15, 24); |
225 } | 207 } |
226 | 208 |
227 TEST_F(SourceBufferStreamTest, Append_AdjacentRanges) { | 209 TEST_F(SourceBufferStreamTest, Append_AdjacentRanges) { |
228 // Append 12 buffers at positions 0 through 11. | 210 // Append 12 buffers at positions 0 through 11. |
229 AppendBuffers(0, 12); | 211 AppendBuffers(0, 12); |
230 | 212 |
231 // Append 11 buffers at positions 15 through 25. | 213 // Append 11 buffers at positions 15 through 25. |
232 AppendBuffers(15, 11); | 214 AppendBuffers(15, 11); |
233 | 215 |
234 // Append 3 buffers at positions 12 through 14 to bridge the gap. | 216 // Append 3 buffers at positions 12 through 14 to bridge the gap. |
235 AppendBuffers(12, 3); | 217 AppendBuffers(12, 3); |
236 | 218 |
237 // Check expected range. | 219 // Check expected range. |
238 CheckExpectedTimespan(0, 25); | 220 CheckExpectedRanges("{ [0,25) }"); |
239 // Check buffers in range. | 221 // Check buffers in range. |
240 Seek(0); | 222 Seek(0); |
241 CheckExpectedBuffers(0, 25); | 223 CheckExpectedBuffers(0, 25); |
242 } | 224 } |
243 | 225 |
244 TEST_F(SourceBufferStreamTest, Append_DoesNotBeginWithKeyframe) { | 226 TEST_F(SourceBufferStreamTest, Append_DoesNotBeginWithKeyframe) { |
245 // Append fails because the range doesn't begin with a keyframe. | 227 // Append fails because the range doesn't begin with a keyframe. |
246 AppendBuffers_ExpectFailure(3, 5); | 228 AppendBuffers_ExpectFailure(3, 5); |
247 | 229 |
248 // Append 10 buffers at positions 5 through 14. | 230 // Append 10 buffers at positions 5 through 14. |
249 AppendBuffers(5, 10); | 231 AppendBuffers(5, 10); |
250 | 232 |
251 // Check expected range. | 233 // Check expected range. |
252 CheckExpectedTimespan(5, 14); | 234 CheckExpectedRanges("{ [5,14) }"); |
253 // Check buffers in range. | 235 // Check buffers in range. |
254 Seek(5); | 236 Seek(5); |
255 CheckExpectedBuffers(5, 14); | 237 CheckExpectedBuffers(5, 14); |
256 | 238 |
257 // Append fails because the range doesn't begin with a keyframe. | 239 // Append fails because the range doesn't begin with a keyframe. |
258 AppendBuffers_ExpectFailure(17, 10); | 240 AppendBuffers_ExpectFailure(17, 10); |
259 CheckExpectedTimespan(5, 14); | 241 CheckExpectedRanges("{ [5,14) }"); |
260 Seek(5); | 242 Seek(5); |
261 CheckExpectedBuffers(5, 14); | 243 CheckExpectedBuffers(5, 14); |
262 } | 244 } |
263 | 245 |
264 TEST_F(SourceBufferStreamTest, Complete_Overlap) { | 246 TEST_F(SourceBufferStreamTest, Complete_Overlap) { |
265 // Append 5 buffers at positions 5 through 9. | 247 // Append 5 buffers at positions 5 through 9. |
266 AppendBuffers(5, 5); | 248 AppendBuffers(5, 5); |
267 | 249 |
268 // Append 15 buffers at positions 0 through 14. | 250 // Append 15 buffers at positions 0 through 14. |
269 AppendBuffers(0, 15); | 251 AppendBuffers(0, 15); |
270 | 252 |
271 // Check expected range. | 253 // Check expected range. |
272 CheckExpectedTimespan(0, 14); | 254 CheckExpectedRanges("{ [0,14) }"); |
273 // Check buffers in range. | 255 // Check buffers in range. |
274 Seek(0); | 256 Seek(0); |
275 CheckExpectedBuffers(0, 14); | 257 CheckExpectedBuffers(0, 14); |
276 } | 258 } |
277 | 259 |
278 TEST_F(SourceBufferStreamTest, Complete_Overlap_EdgeCase) { | 260 TEST_F(SourceBufferStreamTest, Complete_Overlap_EdgeCase) { |
279 // Make each frame a keyframe so that it's okay to overlap frames at any point | 261 // Make each frame a keyframe so that it's okay to overlap frames at any point |
280 // (instead of needing to respect keyframe boundaries). | 262 // (instead of needing to respect keyframe boundaries). |
281 SetStreamInfo(30, 30); | 263 SetStreamInfo(30, 30); |
282 | 264 |
283 // Append 6 buffers at positions 6 through 11. | 265 // Append 6 buffers at positions 6 through 11. |
284 AppendBuffers(6, 6); | 266 AppendBuffers(6, 6); |
285 | 267 |
286 // Append 8 buffers at positions 5 through 12. | 268 // Append 8 buffers at positions 5 through 12. |
287 AppendBuffers(5, 8); | 269 AppendBuffers(5, 8); |
288 | 270 |
289 // Check expected range. | 271 // Check expected range. |
290 CheckExpectedTimespan(5, 12); | 272 CheckExpectedRanges("{ [5,12) }"); |
291 // Check buffers in range. | 273 // Check buffers in range. |
292 Seek(5); | 274 Seek(5); |
293 CheckExpectedBuffers(5, 12); | 275 CheckExpectedBuffers(5, 12); |
294 } | 276 } |
295 | 277 |
296 TEST_F(SourceBufferStreamTest, Start_Overlap) { | 278 TEST_F(SourceBufferStreamTest, Start_Overlap) { |
297 // Append 5 buffers at positions 5 through 9. | 279 // Append 5 buffers at positions 5 through 9. |
298 AppendBuffers(5, 5); | 280 AppendBuffers(5, 5); |
299 | 281 |
300 // Append 6 buffers at positions 8 through 13. | 282 // Append 6 buffers at positions 8 through 13. |
301 AppendBuffers(8, 6); | 283 AppendBuffers(8, 6); |
302 | 284 |
303 // Check expected range. | 285 // Check expected range. |
304 CheckExpectedTimespan(5, 13); | 286 CheckExpectedRanges("{ [5,13) }"); |
305 // Check buffers in range. | 287 // Check buffers in range. |
306 Seek(5); | 288 Seek(5); |
307 CheckExpectedBuffers(5, 13); | 289 CheckExpectedBuffers(5, 13); |
308 } | 290 } |
309 | 291 |
310 TEST_F(SourceBufferStreamTest, End_Overlap) { | 292 TEST_F(SourceBufferStreamTest, End_Overlap) { |
311 // Append 10 buffers at positions 10 through 19. | 293 // Append 10 buffers at positions 10 through 19. |
312 AppendBuffers(10, 10); | 294 AppendBuffers(10, 10); |
313 | 295 |
314 // Append 10 buffers at positions 5 through 14. | 296 // Append 10 buffers at positions 5 through 14. |
315 AppendBuffers(5, 10); | 297 AppendBuffers(5, 10); |
316 | 298 |
317 // Check expected range. | 299 // Check expected range. |
318 CheckExpectedTimespan(5, 19); | 300 CheckExpectedRanges("{ [5,19) }"); |
319 // Check buffers in range. | 301 // Check buffers in range. |
320 Seek(5); | 302 Seek(5); |
321 CheckExpectedBuffers(5, 19); | 303 CheckExpectedBuffers(5, 19); |
322 } | 304 } |
323 | 305 |
324 TEST_F(SourceBufferStreamTest, End_Overlap_Several) { | 306 TEST_F(SourceBufferStreamTest, End_Overlap_Several) { |
325 // Append 10 buffers at positions 10 through 19. | 307 // Append 10 buffers at positions 10 through 19. |
326 AppendBuffers(10, 10); | 308 AppendBuffers(10, 10); |
327 | 309 |
328 // Append 8 buffers at positions 5 through 12. | 310 // Append 8 buffers at positions 5 through 12. |
329 AppendBuffers(5, 8); | 311 AppendBuffers(5, 8); |
330 | 312 |
331 // Check expected ranges: stream should not have kept buffers 13 and 14 | 313 // Check expected ranges: stream should not have kept buffers 13 and 14 |
332 // because the keyframe on which they depended was overwritten. | 314 // because the keyframe on which they depended was overwritten. |
333 SourceBufferStream::TimespanList expected; | 315 CheckExpectedRanges("{ [5,12) [15,19) }"); |
334 expected.push_back(CreateTimespan(5, 12)); | |
335 expected.push_back(CreateTimespan(15, 19)); | |
336 CheckExpectedTimespans(expected); | |
337 | 316 |
338 // Check buffers in range. | 317 // Check buffers in range. |
339 Seek(5); | 318 Seek(5); |
340 CheckExpectedBuffers(5, 12); | 319 CheckExpectedBuffers(5, 12); |
341 CheckNoNextBuffer(); | 320 CheckNoNextBuffer(); |
342 | 321 |
343 Seek(19); | 322 Seek(19); |
344 CheckExpectedBuffers(15, 19); | 323 CheckExpectedBuffers(15, 19); |
345 } | 324 } |
346 | 325 |
347 TEST_F(SourceBufferStreamTest, Complete_Overlap_Several) { | 326 TEST_F(SourceBufferStreamTest, Complete_Overlap_Several) { |
348 // Append 2 buffers at positions 5 through 6. | 327 // Append 2 buffers at positions 5 through 6. |
349 AppendBuffers(5, 2); | 328 AppendBuffers(5, 2); |
350 | 329 |
351 // Append 2 buffers at positions 10 through 11. | 330 // Append 2 buffers at positions 10 through 11. |
352 AppendBuffers(10, 2); | 331 AppendBuffers(10, 2); |
353 | 332 |
354 // Append 2 buffers at positions 15 through 16. | 333 // Append 2 buffers at positions 15 through 16. |
355 AppendBuffers(15, 2); | 334 AppendBuffers(15, 2); |
356 | 335 |
357 // Check expected ranges. | 336 // Check expected ranges. |
358 SourceBufferStream::TimespanList expected; | 337 CheckExpectedRanges("{ [5,6) [10,11) [15,16) }"); |
359 expected.push_back(CreateTimespan(5, 6)); | |
360 expected.push_back(CreateTimespan(10, 11)); | |
361 expected.push_back(CreateTimespan(15, 16)); | |
362 CheckExpectedTimespans(expected); | |
363 | 338 |
364 // Append buffers at positions 0 through 19. | 339 // Append buffers at positions 0 through 19. |
365 AppendBuffers(0, 20); | 340 AppendBuffers(0, 20); |
366 | 341 |
367 // Check expected range. | 342 // Check expected range. |
368 expected.clear(); | 343 CheckExpectedRanges("{ [0,19) }"); |
369 expected.push_back(CreateTimespan(0, 19)); | |
370 CheckExpectedTimespans(expected); | |
371 // Check buffers in range. | 344 // Check buffers in range. |
372 Seek(0); | 345 Seek(0); |
373 CheckExpectedBuffers(0, 19); | 346 CheckExpectedBuffers(0, 19); |
374 } | 347 } |
375 | 348 |
376 TEST_F(SourceBufferStreamTest, Complete_Overlap_Several_Then_Merge) { | 349 TEST_F(SourceBufferStreamTest, Complete_Overlap_Several_Then_Merge) { |
377 // Append 2 buffers at positions 5 through 6. | 350 // Append 2 buffers at positions 5 through 6. |
378 AppendBuffers(5, 2); | 351 AppendBuffers(5, 2); |
379 | 352 |
380 // Append 2 buffers at positions 10 through 11. | 353 // Append 2 buffers at positions 10 through 11. |
381 AppendBuffers(10, 2); | 354 AppendBuffers(10, 2); |
382 | 355 |
383 // Append 2 buffers at positions 15 through 16. | 356 // Append 2 buffers at positions 15 through 16. |
384 AppendBuffers(15, 2); | 357 AppendBuffers(15, 2); |
385 | 358 |
386 // Append 2 buffers at positions 20 through 21. | 359 // Append 2 buffers at positions 20 through 21. |
387 AppendBuffers(20, 2); | 360 AppendBuffers(20, 2); |
388 | 361 |
389 // Append buffers at positions 0 through 19. | 362 // Append buffers at positions 0 through 19. |
390 AppendBuffers(0, 20); | 363 AppendBuffers(0, 20); |
391 | 364 |
392 // Check expected ranges. | 365 // Check expected ranges. |
393 CheckExpectedTimespan(0, 21); | 366 CheckExpectedRanges("{ [0,21) }"); |
394 // Check buffers in range. | 367 // Check buffers in range. |
395 Seek(0); | 368 Seek(0); |
396 CheckExpectedBuffers(0, 21); | 369 CheckExpectedBuffers(0, 21); |
397 } | 370 } |
398 | 371 |
399 TEST_F(SourceBufferStreamTest, Complete_Overlap_Selected) { | 372 TEST_F(SourceBufferStreamTest, Complete_Overlap_Selected) { |
400 // Append 10 buffers at positions 5 through 14. | 373 // Append 10 buffers at positions 5 through 14. |
401 AppendBuffers(5, 10, &kDataA); | 374 AppendBuffers(5, 10, &kDataA); |
402 | 375 |
403 // Seek to buffer at position 5. | 376 // Seek to buffer at position 5. |
404 Seek(5); | 377 Seek(5); |
405 | 378 |
406 // Replace old data with new data. | 379 // Replace old data with new data. |
407 AppendBuffers(5, 10, &kDataB); | 380 AppendBuffers(5, 10, &kDataB); |
408 | 381 |
409 // Check timespans are correct. | 382 // Check ranges are correct. |
410 CheckExpectedTimespan(5, 14); | 383 CheckExpectedRanges("{ [5,14) }"); |
411 | 384 |
412 // Check that data has been replaced with new data. | 385 // Check that data has been replaced with new data. |
413 CheckExpectedBuffers(5, 14, &kDataB); | 386 CheckExpectedBuffers(5, 14, &kDataB); |
414 } | 387 } |
415 | 388 |
416 // This test is testing that a client can append data to SourceBufferStream that | 389 // This test is testing that a client can append data to SourceBufferStream that |
417 // overlaps the range from which the client is currently grabbing buffers. We | 390 // overlaps the range from which the client is currently grabbing buffers. We |
418 // would expect that the SourceBufferStream would return old data until it hits | 391 // would expect that the SourceBufferStream would return old data until it hits |
419 // the keyframe of the new data, after which it will return the new data. | 392 // the keyframe of the new data, after which it will return the new data. |
420 TEST_F(SourceBufferStreamTest, Complete_Overlap_Selected_TrackBuffer) { | 393 TEST_F(SourceBufferStreamTest, Complete_Overlap_Selected_TrackBuffer) { |
421 // Append 10 buffers at positions 5 through 14. | 394 // Append 10 buffers at positions 5 through 14. |
422 AppendBuffers(5, 10, &kDataA); | 395 AppendBuffers(5, 10, &kDataA); |
423 | 396 |
424 // Seek to buffer at position 5 and get next buffer. | 397 // Seek to buffer at position 5 and get next buffer. |
425 Seek(5); | 398 Seek(5); |
426 CheckExpectedBuffers(5, 5, &kDataA); | 399 CheckExpectedBuffers(5, 5, &kDataA); |
427 | 400 |
428 // Do a complete overlap by appending 20 buffers at positions 0 through 19. | 401 // Do a complete overlap by appending 20 buffers at positions 0 through 19. |
429 AppendBuffers(0, 20, &kDataB); | 402 AppendBuffers(0, 20, &kDataB); |
430 | 403 |
431 // Check timespan is correct. | 404 // Check range is correct. |
432 CheckExpectedTimespan(0, 19); | 405 CheckExpectedRanges("{ [0,19) }"); |
433 | 406 |
434 // Expect old data up until next keyframe in new data. | 407 // Expect old data up until next keyframe in new data. |
435 CheckExpectedBuffers(6, 9, &kDataA); | 408 CheckExpectedBuffers(6, 9, &kDataA); |
436 CheckExpectedBuffers(10, 10, &kDataB, true); | 409 CheckExpectedBuffers(10, 10, &kDataB, true); |
437 | 410 |
438 // Expect rest of data to be new. | 411 // Expect rest of data to be new. |
439 CheckExpectedBuffers(11, 19, &kDataB); | 412 CheckExpectedBuffers(11, 19, &kDataB); |
440 | 413 |
441 // Seek back to beginning; all data should be new. | 414 // Seek back to beginning; all data should be new. |
442 Seek(0); | 415 Seek(0); |
443 CheckExpectedBuffers(0, 19, &kDataB); | 416 CheckExpectedBuffers(0, 19, &kDataB); |
444 | 417 |
445 // Check timespan continues to be correct. | 418 // Check range continues to be correct. |
446 CheckExpectedTimespan(0, 19); | 419 CheckExpectedRanges("{ [0,19) }"); |
447 } | 420 } |
448 | 421 |
449 TEST_F(SourceBufferStreamTest, Complete_Overlap_Selected_EdgeCase) { | 422 TEST_F(SourceBufferStreamTest, Complete_Overlap_Selected_EdgeCase) { |
450 // Append 10 buffers at positions 5 through 14. | 423 // Append 10 buffers at positions 5 through 14. |
451 AppendBuffers(5, 10, &kDataA); | 424 AppendBuffers(5, 10, &kDataA); |
452 | 425 |
453 // Seek to buffer at position 5 and get next buffer. | 426 // Seek to buffer at position 5 and get next buffer. |
454 Seek(5); | 427 Seek(5); |
455 CheckExpectedBuffers(5, 5, &kDataA); | 428 CheckExpectedBuffers(5, 5, &kDataA); |
456 | 429 |
457 // Replace existing data with new data. | 430 // Replace existing data with new data. |
458 AppendBuffers(5, 10, &kDataB); | 431 AppendBuffers(5, 10, &kDataB); |
459 | 432 |
460 // Check timespans are correct. | 433 // Check ranges are correct. |
461 CheckExpectedTimespan(5, 14); | 434 CheckExpectedRanges("{ [5,14) }"); |
462 | 435 |
463 // Expect old data up until next keyframe in new data. | 436 // Expect old data up until next keyframe in new data. |
464 CheckExpectedBuffers(6, 9, &kDataA); | 437 CheckExpectedBuffers(6, 9, &kDataA); |
465 CheckExpectedBuffers(10, 10, &kDataB, true); | 438 CheckExpectedBuffers(10, 10, &kDataB, true); |
466 | 439 |
467 // Expect rest of data to be new. | 440 // Expect rest of data to be new. |
468 CheckExpectedBuffers(11, 14, &kDataB); | 441 CheckExpectedBuffers(11, 14, &kDataB); |
469 | 442 |
470 // Seek back to beginning; all data should be new. | 443 // Seek back to beginning; all data should be new. |
471 Seek(5); | 444 Seek(5); |
472 CheckExpectedBuffers(5, 14, &kDataB); | 445 CheckExpectedBuffers(5, 14, &kDataB); |
473 | 446 |
474 // Check timespan continues to be correct. | 447 // Check range continues to be correct. |
475 CheckExpectedTimespan(5, 14); | 448 CheckExpectedRanges("{ [5,14) }"); |
476 } | 449 } |
477 | 450 |
478 TEST_F(SourceBufferStreamTest, Complete_Overlap_Selected_Multiple) { | 451 TEST_F(SourceBufferStreamTest, Complete_Overlap_Selected_Multiple) { |
479 static const uint8 kDataC = 0x55; | 452 static const uint8 kDataC = 0x55; |
480 static const uint8 kDataD = 0x77; | 453 static const uint8 kDataD = 0x77; |
481 | 454 |
482 // Append 5 buffers at positions 5 through 9. | 455 // Append 5 buffers at positions 5 through 9. |
483 AppendBuffers(5, 5, &kDataA); | 456 AppendBuffers(5, 5, &kDataA); |
484 | 457 |
485 // Seek to buffer at position 5 and get next buffer. | 458 // Seek to buffer at position 5 and get next buffer. |
(...skipping 27 matching lines...) Expand all Loading... |
513 | 486 |
514 TEST_F(SourceBufferStreamTest, Start_Overlap_Selected) { | 487 TEST_F(SourceBufferStreamTest, Start_Overlap_Selected) { |
515 // Append 10 buffers at positions 0 through 9. | 488 // Append 10 buffers at positions 0 through 9. |
516 AppendBuffers(0, 10, &kDataA); | 489 AppendBuffers(0, 10, &kDataA); |
517 | 490 |
518 // Seek to position 5, then add buffers to overlap data at that position. | 491 // Seek to position 5, then add buffers to overlap data at that position. |
519 Seek(5); | 492 Seek(5); |
520 AppendBuffers(5, 10, &kDataB); | 493 AppendBuffers(5, 10, &kDataB); |
521 | 494 |
522 // Check expected range. | 495 // Check expected range. |
523 CheckExpectedTimespan(0, 14); | 496 CheckExpectedRanges("{ [0,14) }"); |
524 | 497 |
525 // Because we seeked to a keyframe, the next buffers should all be new data. | 498 // Because we seeked to a keyframe, the next buffers should all be new data. |
526 CheckExpectedBuffers(5, 14, &kDataB); | 499 CheckExpectedBuffers(5, 14, &kDataB); |
527 | 500 |
528 // Make sure all data is correct. | 501 // Make sure all data is correct. |
529 Seek(0); | 502 Seek(0); |
530 CheckExpectedBuffers(0, 4, &kDataA); | 503 CheckExpectedBuffers(0, 4, &kDataA); |
531 CheckExpectedBuffers(5, 14, &kDataB); | 504 CheckExpectedBuffers(5, 14, &kDataB); |
532 } | 505 } |
533 | 506 |
534 TEST_F(SourceBufferStreamTest, Start_Overlap_Selected_TrackBuffer) { | 507 TEST_F(SourceBufferStreamTest, Start_Overlap_Selected_TrackBuffer) { |
535 // Append 15 buffers at positions 0 through 14. | 508 // Append 15 buffers at positions 0 through 14. |
536 AppendBuffers(0, 15, &kDataA); | 509 AppendBuffers(0, 15, &kDataA); |
537 | 510 |
538 // Seek to 10 and get buffer. | 511 // Seek to 10 and get buffer. |
539 Seek(10); | 512 Seek(10); |
540 CheckExpectedBuffers(10, 10, &kDataA); | 513 CheckExpectedBuffers(10, 10, &kDataA); |
541 | 514 |
542 // Now append 10 buffers of new data at positions 10 through 19. | 515 // Now append 10 buffers of new data at positions 10 through 19. |
543 AppendBuffers(10, 10, &kDataB); | 516 AppendBuffers(10, 10, &kDataB); |
544 | 517 |
545 // Check expected range. | 518 // Check expected range. |
546 CheckExpectedTimespan(0, 19); | 519 CheckExpectedRanges("{ [0,19) }"); |
547 | 520 |
548 // The next 4 buffers should be a from the old buffer, followed by a keyframe | 521 // The next 4 buffers should be a from the old buffer, followed by a keyframe |
549 // from the new data. | 522 // from the new data. |
550 CheckExpectedBuffers(11, 14, &kDataA); | 523 CheckExpectedBuffers(11, 14, &kDataA); |
551 CheckExpectedBuffers(15, 15, &kDataB, true); | 524 CheckExpectedBuffers(15, 15, &kDataB, true); |
552 | 525 |
553 // The rest of the buffers should be new data. | 526 // The rest of the buffers should be new data. |
554 CheckExpectedBuffers(16, 19, &kDataB); | 527 CheckExpectedBuffers(16, 19, &kDataB); |
555 | 528 |
556 // Now seek to the beginning; positions 0 through 9 should be the original | 529 // Now seek to the beginning; positions 0 through 9 should be the original |
557 // data, positions 10 through 19 should be the new data. | 530 // data, positions 10 through 19 should be the new data. |
558 Seek(0); | 531 Seek(0); |
559 CheckExpectedBuffers(0, 9, &kDataA); | 532 CheckExpectedBuffers(0, 9, &kDataA); |
560 CheckExpectedBuffers(10, 19, &kDataB); | 533 CheckExpectedBuffers(10, 19, &kDataB); |
561 | 534 |
562 // Make sure timespan is still correct. | 535 // Make sure range is still correct. |
563 CheckExpectedTimespan(0, 19); | 536 CheckExpectedRanges("{ [0,19) }"); |
564 } | 537 } |
565 | 538 |
566 TEST_F(SourceBufferStreamTest, Start_Overlap_Selected_EdgeCase) { | 539 TEST_F(SourceBufferStreamTest, Start_Overlap_Selected_EdgeCase) { |
567 // Append 10 buffers at positions 5 through 14. | 540 // Append 10 buffers at positions 5 through 14. |
568 AppendBuffers(5, 10, &kDataA); | 541 AppendBuffers(5, 10, &kDataA); |
569 | 542 |
570 Seek(10); | 543 Seek(10); |
571 CheckExpectedBuffers(10, 10, &kDataA); | 544 CheckExpectedBuffers(10, 10, &kDataA); |
572 | 545 |
573 // Now replace the last 5 buffers with new data. | 546 // Now replace the last 5 buffers with new data. |
574 AppendBuffers(10, 5, &kDataB); | 547 AppendBuffers(10, 5, &kDataB); |
575 | 548 |
576 // The next 4 buffers should be the origial data, held in the track buffer. | 549 // The next 4 buffers should be the origial data, held in the track buffer. |
577 CheckExpectedBuffers(11, 14, &kDataA); | 550 CheckExpectedBuffers(11, 14, &kDataA); |
578 | 551 |
579 // The next buffer is at position 15, so we should fail to fulfill the | 552 // The next buffer is at position 15, so we should fail to fulfill the |
580 // request. | 553 // request. |
581 CheckNoNextBuffer(); | 554 CheckNoNextBuffer(); |
582 | 555 |
583 // Now append data at 15 through 19 and check to make sure it's correct. | 556 // Now append data at 15 through 19 and check to make sure it's correct. |
584 AppendBuffers(15, 5, &kDataB); | 557 AppendBuffers(15, 5, &kDataB); |
585 CheckExpectedBuffers(15, 19, &kDataB); | 558 CheckExpectedBuffers(15, 19, &kDataB); |
586 | 559 |
587 // Seek to beginning of buffered range and check buffers. | 560 // Seek to beginning of buffered range and check buffers. |
588 Seek(5); | 561 Seek(5); |
589 CheckExpectedBuffers(5, 9, &kDataA); | 562 CheckExpectedBuffers(5, 9, &kDataA); |
590 CheckExpectedBuffers(10, 19, &kDataB); | 563 CheckExpectedBuffers(10, 19, &kDataB); |
591 | 564 |
592 // Check expected range. | 565 // Check expected range. |
593 CheckExpectedTimespan(5, 19); | 566 CheckExpectedRanges("{ [5,19) }"); |
594 } | 567 } |
595 | 568 |
596 // This test covers the case where new buffers end-overlap an existing, selected | 569 // This test covers the case where new buffers end-overlap an existing, selected |
597 // range, and the next buffer is a keyframe that's being overlapped by new | 570 // range, and the next buffer is a keyframe that's being overlapped by new |
598 // buffers. | 571 // buffers. |
599 // index: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 | 572 // index: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
600 // old : *A*a a a a A a a a a | 573 // old : *A*a a a a A a a a a |
601 // new : B b b b b B b b b b | 574 // new : B b b b b B b b b b |
602 // after: B b b b b*B*b b b b A a a a a | 575 // after: B b b b b*B*b b b b A a a a a |
603 TEST_F(SourceBufferStreamTest, End_Overlap_Selected) { | 576 TEST_F(SourceBufferStreamTest, End_Overlap_Selected) { |
604 // Append 10 buffers at positions 5 through 14. | 577 // Append 10 buffers at positions 5 through 14. |
605 AppendBuffers(5, 10, &kDataA); | 578 AppendBuffers(5, 10, &kDataA); |
606 | 579 |
607 // Seek to position 5. | 580 // Seek to position 5. |
608 Seek(5); | 581 Seek(5); |
609 | 582 |
610 // Now append 10 buffers at positions 0 through 9. | 583 // Now append 10 buffers at positions 0 through 9. |
611 AppendBuffers(0, 10, &kDataB); | 584 AppendBuffers(0, 10, &kDataB); |
612 | 585 |
613 // Check expected range. | 586 // Check expected range. |
614 CheckExpectedTimespan(0, 14); | 587 CheckExpectedRanges("{ [0,14) }"); |
615 | 588 |
616 // Because we seeked to a keyframe, the next buffers should be new. | 589 // Because we seeked to a keyframe, the next buffers should be new. |
617 CheckExpectedBuffers(5, 9, &kDataB); | 590 CheckExpectedBuffers(5, 9, &kDataB); |
618 | 591 |
619 // Make sure all data is correct. | 592 // Make sure all data is correct. |
620 Seek(0); | 593 Seek(0); |
621 CheckExpectedBuffers(0, 9, &kDataB); | 594 CheckExpectedBuffers(0, 9, &kDataB); |
622 CheckExpectedBuffers(10, 14, &kDataA); | 595 CheckExpectedBuffers(10, 14, &kDataA); |
623 } | 596 } |
624 | 597 |
(...skipping 10 matching lines...) Expand all Loading... |
635 AppendBuffers(5, 10, &kDataA); | 608 AppendBuffers(5, 10, &kDataA); |
636 | 609 |
637 // Seek to position 10, then move to position 13. | 610 // Seek to position 10, then move to position 13. |
638 Seek(10); | 611 Seek(10); |
639 CheckExpectedBuffers(10, 12, &kDataA); | 612 CheckExpectedBuffers(10, 12, &kDataA); |
640 | 613 |
641 // Now append 10 buffers at positions 0 through 9. | 614 // Now append 10 buffers at positions 0 through 9. |
642 AppendBuffers(0, 10, &kDataB); | 615 AppendBuffers(0, 10, &kDataB); |
643 | 616 |
644 // Check expected range. | 617 // Check expected range. |
645 CheckExpectedTimespan(0, 14); | 618 CheckExpectedRanges("{ [0,14) }"); |
646 | 619 |
647 // Make sure rest of data is as expected. | 620 // Make sure rest of data is as expected. |
648 CheckExpectedBuffers(13, 14, &kDataA); | 621 CheckExpectedBuffers(13, 14, &kDataA); |
649 | 622 |
650 // Make sure all data is correct. | 623 // Make sure all data is correct. |
651 Seek(0); | 624 Seek(0); |
652 CheckExpectedBuffers(0, 9, &kDataB); | 625 CheckExpectedBuffers(0, 9, &kDataB); |
653 CheckExpectedBuffers(10, 14, &kDataA); | 626 CheckExpectedBuffers(10, 14, &kDataA); |
654 } | 627 } |
655 | 628 |
(...skipping 11 matching lines...) Expand all Loading... |
667 AppendBuffers(5, 10, &kDataA); | 640 AppendBuffers(5, 10, &kDataA); |
668 | 641 |
669 // Seek to position 10, then move to position 13. | 642 // Seek to position 10, then move to position 13. |
670 Seek(10); | 643 Seek(10); |
671 CheckExpectedBuffers(10, 12, &kDataA); | 644 CheckExpectedBuffers(10, 12, &kDataA); |
672 | 645 |
673 // Now append 8 buffers at positions 0 through 7. | 646 // Now append 8 buffers at positions 0 through 7. |
674 AppendBuffers(0, 8, &kDataB); | 647 AppendBuffers(0, 8, &kDataB); |
675 | 648 |
676 // Check expected ranges. | 649 // Check expected ranges. |
677 SourceBufferStream::TimespanList expected; | 650 CheckExpectedRanges("{ [0,7) [10,14) }"); |
678 expected.push_back(CreateTimespan(0, 7)); | |
679 expected.push_back(CreateTimespan(10, 14)); | |
680 CheckExpectedTimespans(expected); | |
681 | 651 |
682 // Make sure rest of data is as expected. | 652 // Make sure rest of data is as expected. |
683 CheckExpectedBuffers(13, 14, &kDataA); | 653 CheckExpectedBuffers(13, 14, &kDataA); |
684 | 654 |
685 // Make sure all data is correct. | 655 // Make sure all data is correct. |
686 Seek(0); | 656 Seek(0); |
687 CheckExpectedBuffers(0, 7, &kDataB); | 657 CheckExpectedBuffers(0, 7, &kDataB); |
688 CheckNoNextBuffer(); | 658 CheckNoNextBuffer(); |
689 | 659 |
690 Seek(10); | 660 Seek(10); |
(...skipping 15 matching lines...) Expand all Loading... |
706 AppendBuffers(5, 10, &kDataA); | 676 AppendBuffers(5, 10, &kDataA); |
707 | 677 |
708 // Seek to position 5, then move to position 8. | 678 // Seek to position 5, then move to position 8. |
709 Seek(5); | 679 Seek(5); |
710 CheckExpectedBuffers(5, 7, &kDataA); | 680 CheckExpectedBuffers(5, 7, &kDataA); |
711 | 681 |
712 // Now append 8 buffers at positions 0 through 7. | 682 // Now append 8 buffers at positions 0 through 7. |
713 AppendBuffers(0, 8, &kDataB); | 683 AppendBuffers(0, 8, &kDataB); |
714 | 684 |
715 // Check expected ranges. | 685 // Check expected ranges. |
716 SourceBufferStream::TimespanList expected; | 686 CheckExpectedRanges("{ [0,7) [10,14) }"); |
717 expected.push_back(CreateTimespan(0, 7)); | |
718 expected.push_back(CreateTimespan(10, 14)); | |
719 CheckExpectedTimespans(expected); | |
720 | 687 |
721 // Check for data in the track buffer. | 688 // Check for data in the track buffer. |
722 CheckExpectedBuffers(8, 9, &kDataA); | 689 CheckExpectedBuffers(8, 9, &kDataA); |
723 // The buffer immediately after the track buffer should be a keyframe. | 690 // The buffer immediately after the track buffer should be a keyframe. |
724 CheckExpectedBuffers(10, 10, &kDataA, true); | 691 CheckExpectedBuffers(10, 10, &kDataA, true); |
725 | 692 |
726 // Make sure all data is correct. | 693 // Make sure all data is correct. |
727 Seek(0); | 694 Seek(0); |
728 CheckExpectedBuffers(0, 7, &kDataB); | 695 CheckExpectedBuffers(0, 7, &kDataB); |
729 Seek(10); | 696 Seek(10); |
(...skipping 14 matching lines...) Expand all Loading... |
744 AppendBuffers(5, 10, &kDataA); | 711 AppendBuffers(5, 10, &kDataA); |
745 | 712 |
746 // Seek to position 5, then move to position 8. | 713 // Seek to position 5, then move to position 8. |
747 Seek(5); | 714 Seek(5); |
748 CheckExpectedBuffers(5, 7, &kDataA); | 715 CheckExpectedBuffers(5, 7, &kDataA); |
749 | 716 |
750 // Now append 10 buffers at positions 0 through 9. | 717 // Now append 10 buffers at positions 0 through 9. |
751 AppendBuffers(0, 10, &kDataB); | 718 AppendBuffers(0, 10, &kDataB); |
752 | 719 |
753 // Check expected range. | 720 // Check expected range. |
754 CheckExpectedTimespan(0, 14); | 721 CheckExpectedRanges("{ [0,14) }"); |
755 | 722 |
756 // Check for data in the track buffer. | 723 // Check for data in the track buffer. |
757 CheckExpectedBuffers(8, 9, &kDataA); | 724 CheckExpectedBuffers(8, 9, &kDataA); |
758 // The buffer immediately after the track buffer should be a keyframe. | 725 // The buffer immediately after the track buffer should be a keyframe. |
759 CheckExpectedBuffers(10, 10, &kDataA, true); | 726 CheckExpectedBuffers(10, 10, &kDataA, true); |
760 | 727 |
761 // Make sure all data is correct. | 728 // Make sure all data is correct. |
762 Seek(0); | 729 Seek(0); |
763 CheckExpectedBuffers(0, 9, &kDataB); | 730 CheckExpectedBuffers(0, 9, &kDataB); |
764 CheckExpectedBuffers(10, 14, &kDataA); | 731 CheckExpectedBuffers(10, 14, &kDataA); |
(...skipping 14 matching lines...) Expand all Loading... |
779 AppendBuffers(5, 10, &kDataA); | 746 AppendBuffers(5, 10, &kDataA); |
780 | 747 |
781 // Seek to position 5, then move to position 6. | 748 // Seek to position 5, then move to position 6. |
782 Seek(5); | 749 Seek(5); |
783 CheckExpectedBuffers(5, 5, &kDataA); | 750 CheckExpectedBuffers(5, 5, &kDataA); |
784 | 751 |
785 // Now append 7 buffers at positions 0 through 6. | 752 // Now append 7 buffers at positions 0 through 6. |
786 AppendBuffers(0, 7, &kDataB); | 753 AppendBuffers(0, 7, &kDataB); |
787 | 754 |
788 // Check expected ranges. | 755 // Check expected ranges. |
789 SourceBufferStream::TimespanList expected; | 756 CheckExpectedRanges("{ [0,6) [10,14) }"); |
790 expected.push_back(CreateTimespan(0, 6)); | |
791 expected.push_back(CreateTimespan(10, 14)); | |
792 CheckExpectedTimespans(expected); | |
793 | 757 |
794 // Check for data in the track buffer. | 758 // Check for data in the track buffer. |
795 CheckExpectedBuffers(6, 9, &kDataA); | 759 CheckExpectedBuffers(6, 9, &kDataA); |
796 // The buffer immediately after the track buffer should be a keyframe. | 760 // The buffer immediately after the track buffer should be a keyframe. |
797 CheckExpectedBuffers(10, 10, &kDataA, true); | 761 CheckExpectedBuffers(10, 10, &kDataA, true); |
798 | 762 |
799 // Make sure all data is correct. | 763 // Make sure all data is correct. |
800 Seek(0); | 764 Seek(0); |
801 CheckExpectedBuffers(0, 6, &kDataB); | 765 CheckExpectedBuffers(0, 6, &kDataB); |
802 CheckNoNextBuffer(); | 766 CheckNoNextBuffer(); |
(...skipping 17 matching lines...) Expand all Loading... |
820 AppendBuffers(5, 15, &kDataA); | 784 AppendBuffers(5, 15, &kDataA); |
821 | 785 |
822 // Seek to position 5, then move to position 6. | 786 // Seek to position 5, then move to position 6. |
823 Seek(5); | 787 Seek(5); |
824 CheckExpectedBuffers(5, 5, &kDataA); | 788 CheckExpectedBuffers(5, 5, &kDataA); |
825 | 789 |
826 // Now append 13 buffers at positions 0 through 12. | 790 // Now append 13 buffers at positions 0 through 12. |
827 AppendBuffers(0, 13, &kDataB); | 791 AppendBuffers(0, 13, &kDataB); |
828 | 792 |
829 // Check expected ranges. | 793 // Check expected ranges. |
830 SourceBufferStream::TimespanList expected; | 794 CheckExpectedRanges("{ [0,12) [15,19) }"); |
831 expected.push_back(CreateTimespan(0, 12)); | |
832 expected.push_back(CreateTimespan(15, 19)); | |
833 CheckExpectedTimespans(expected); | |
834 | 795 |
835 // Check for data in the track buffer. | 796 // Check for data in the track buffer. |
836 CheckExpectedBuffers(6, 9, &kDataA); | 797 CheckExpectedBuffers(6, 9, &kDataA); |
837 // The buffer immediately after the track buffer should be a keyframe | 798 // The buffer immediately after the track buffer should be a keyframe |
838 // from the new data. | 799 // from the new data. |
839 CheckExpectedBuffers(10, 10, &kDataB, true); | 800 CheckExpectedBuffers(10, 10, &kDataB, true); |
840 | 801 |
841 // Make sure all data is correct. | 802 // Make sure all data is correct. |
842 Seek(0); | 803 Seek(0); |
843 CheckExpectedBuffers(0, 12, &kDataB); | 804 CheckExpectedBuffers(0, 12, &kDataB); |
(...skipping 15 matching lines...) Expand all Loading... |
859 AppendBuffers(5, 5, &kDataA); | 820 AppendBuffers(5, 5, &kDataA); |
860 | 821 |
861 // Seek to position 5, then move to position 6. | 822 // Seek to position 5, then move to position 6. |
862 Seek(5); | 823 Seek(5); |
863 CheckExpectedBuffers(5, 5, &kDataA); | 824 CheckExpectedBuffers(5, 5, &kDataA); |
864 | 825 |
865 // Now append 6 buffers at positions 0 through 5. | 826 // Now append 6 buffers at positions 0 through 5. |
866 AppendBuffers(0, 6, &kDataB); | 827 AppendBuffers(0, 6, &kDataB); |
867 | 828 |
868 // Check expected range. | 829 // Check expected range. |
869 CheckExpectedTimespan(0, 5); | 830 CheckExpectedRanges("{ [0,5) }"); |
870 | 831 |
871 // Check for data in the track buffer. | 832 // Check for data in the track buffer. |
872 CheckExpectedBuffers(6, 9, &kDataA); | 833 CheckExpectedBuffers(6, 9, &kDataA); |
873 | 834 |
874 // Now there's no data to fulfill the request. | 835 // Now there's no data to fulfill the request. |
875 CheckNoNextBuffer(); | 836 CheckNoNextBuffer(); |
876 | 837 |
877 // Let's fill in the gap, buffers 6 through 10. | 838 // Let's fill in the gap, buffers 6 through 10. |
878 AppendBuffers(6, 5, &kDataB); | 839 AppendBuffers(6, 5, &kDataB); |
879 | 840 |
(...skipping 12 matching lines...) Expand all Loading... |
892 // Append 15 buffers at positions 0 through 14. | 853 // Append 15 buffers at positions 0 through 14. |
893 AppendBuffers(0, 15, &kDataA); | 854 AppendBuffers(0, 15, &kDataA); |
894 | 855 |
895 // Seek to position 5. | 856 // Seek to position 5. |
896 Seek(5); | 857 Seek(5); |
897 | 858 |
898 // Now append 5 buffers at positions 5 through 9. | 859 // Now append 5 buffers at positions 5 through 9. |
899 AppendBuffers(5, 5, &kDataB); | 860 AppendBuffers(5, 5, &kDataB); |
900 | 861 |
901 // Check expected range. | 862 // Check expected range. |
902 CheckExpectedTimespan(0, 14); | 863 CheckExpectedRanges("{ [0,14) }"); |
903 | 864 |
904 // Check for next data; should be new data. | 865 // Check for next data; should be new data. |
905 CheckExpectedBuffers(5, 9, &kDataB); | 866 CheckExpectedBuffers(5, 9, &kDataB); |
906 | 867 |
907 // Make sure all data is correct. | 868 // Make sure all data is correct. |
908 Seek(0); | 869 Seek(0); |
909 CheckExpectedBuffers(0, 4, &kDataA); | 870 CheckExpectedBuffers(0, 4, &kDataA); |
910 CheckExpectedBuffers(5, 9, &kDataB); | 871 CheckExpectedBuffers(5, 9, &kDataB); |
911 CheckExpectedBuffers(10, 14, &kDataA); | 872 CheckExpectedBuffers(10, 14, &kDataA); |
912 } | 873 } |
(...skipping 10 matching lines...) Expand all Loading... |
923 AppendBuffers(0, 15, &kDataA); | 884 AppendBuffers(0, 15, &kDataA); |
924 | 885 |
925 // Seek to 10 then move to position 11. | 886 // Seek to 10 then move to position 11. |
926 Seek(10); | 887 Seek(10); |
927 CheckExpectedBuffers(10, 10, &kDataA); | 888 CheckExpectedBuffers(10, 10, &kDataA); |
928 | 889 |
929 // Now append 5 buffers at positions 5 through 9. | 890 // Now append 5 buffers at positions 5 through 9. |
930 AppendBuffers(5, 5, &kDataB); | 891 AppendBuffers(5, 5, &kDataB); |
931 | 892 |
932 // Check expected range. | 893 // Check expected range. |
933 CheckExpectedTimespan(0, 14); | 894 CheckExpectedRanges("{ [0,14) }"); |
934 | 895 |
935 // Make sure data is correct. | 896 // Make sure data is correct. |
936 CheckExpectedBuffers(11, 14, &kDataA); | 897 CheckExpectedBuffers(11, 14, &kDataA); |
937 Seek(0); | 898 Seek(0); |
938 CheckExpectedBuffers(0, 4, &kDataA); | 899 CheckExpectedBuffers(0, 4, &kDataA); |
939 CheckExpectedBuffers(5, 9, &kDataB); | 900 CheckExpectedBuffers(5, 9, &kDataB); |
940 CheckExpectedBuffers(10, 14, &kDataA); | 901 CheckExpectedBuffers(10, 14, &kDataA); |
941 } | 902 } |
942 | 903 |
943 // This test covers the case when new buffers overlap the middle of a selected | 904 // This test covers the case when new buffers overlap the middle of a selected |
944 // range. This tests the case when there is a split and the next buffer is | 905 // range. This tests the case when there is a split and the next buffer is |
945 // before the new buffers. | 906 // before the new buffers. |
946 // index: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 | 907 // index: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
947 // old : A a*a*a a A a a a a A a a a a | 908 // old : A a*a*a a A a a a a A a a a a |
948 // new : B b b | 909 // new : B b b |
949 // after: A a*a*a a B b b| |A a a a a | 910 // after: A a*a*a a B b b| |A a a a a |
950 TEST_F(SourceBufferStreamTest, Middle_Overlap_Selected_3) { | 911 TEST_F(SourceBufferStreamTest, Middle_Overlap_Selected_3) { |
951 // Append 15 buffers at positions 0 through 14. | 912 // Append 15 buffers at positions 0 through 14. |
952 AppendBuffers(0, 15, &kDataA); | 913 AppendBuffers(0, 15, &kDataA); |
953 | 914 |
954 // Seek to beginning then move to position 2. | 915 // Seek to beginning then move to position 2. |
955 Seek(0); | 916 Seek(0); |
956 CheckExpectedBuffers(0, 1, &kDataA); | 917 CheckExpectedBuffers(0, 1, &kDataA); |
957 | 918 |
958 // Now append 3 buffers at positions 5 through 7. | 919 // Now append 3 buffers at positions 5 through 7. |
959 AppendBuffers(5, 3, &kDataB); | 920 AppendBuffers(5, 3, &kDataB); |
960 | 921 |
961 // Check expected range. | 922 // Check expected range. |
962 SourceBufferStream::TimespanList expected; | 923 CheckExpectedRanges("{ [0,7) [10,14) }"); |
963 expected.push_back(CreateTimespan(0, 7)); | |
964 expected.push_back(CreateTimespan(10, 14)); | |
965 CheckExpectedTimespans(expected); | |
966 | 924 |
967 // Make sure data is correct. | 925 // Make sure data is correct. |
968 CheckExpectedBuffers(2, 4, &kDataA); | 926 CheckExpectedBuffers(2, 4, &kDataA); |
969 CheckExpectedBuffers(5, 7, &kDataB); | 927 CheckExpectedBuffers(5, 7, &kDataB); |
970 Seek(10); | 928 Seek(10); |
971 CheckExpectedBuffers(10, 14, &kDataA); | 929 CheckExpectedBuffers(10, 14, &kDataA); |
972 } | 930 } |
973 | 931 |
974 // This test covers the case when new buffers overlap the middle of a selected | 932 // This test covers the case when new buffers overlap the middle of a selected |
975 // range. This tests the case when there is a split and the next buffer is after | 933 // range. This tests the case when there is a split and the next buffer is after |
976 // the new buffers but before the split range. | 934 // the new buffers but before the split range. |
977 // index: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 | 935 // index: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
978 // old : A a a a a A a a*a*a A a a a a | 936 // old : A a a a a A a a*a*a A a a a a |
979 // new : B b b | 937 // new : B b b |
980 // after: |A a a a a B b b| |A a a a a| | 938 // after: |A a a a a B b b| |A a a a a| |
981 // track: |a a| | 939 // track: |a a| |
982 TEST_F(SourceBufferStreamTest, Middle_Overlap_Selected_4) { | 940 TEST_F(SourceBufferStreamTest, Middle_Overlap_Selected_4) { |
983 // Append 15 buffers at positions 0 through 14. | 941 // Append 15 buffers at positions 0 through 14. |
984 AppendBuffers(0, 15, &kDataA); | 942 AppendBuffers(0, 15, &kDataA); |
985 | 943 |
986 // Seek to 5 then move to position 8. | 944 // Seek to 5 then move to position 8. |
987 Seek(5); | 945 Seek(5); |
988 CheckExpectedBuffers(5, 7, &kDataA); | 946 CheckExpectedBuffers(5, 7, &kDataA); |
989 | 947 |
990 // Now append 3 buffers at positions 5 through 7. | 948 // Now append 3 buffers at positions 5 through 7. |
991 AppendBuffers(5, 3, &kDataB); | 949 AppendBuffers(5, 3, &kDataB); |
992 | 950 |
993 // Check expected range. | 951 // Check expected range. |
994 SourceBufferStream::TimespanList expected; | 952 CheckExpectedRanges("{ [0,7) [10,14) }"); |
995 expected.push_back(CreateTimespan(0, 7)); | |
996 expected.push_back(CreateTimespan(10, 14)); | |
997 CheckExpectedTimespans(expected); | |
998 | 953 |
999 // Buffers 8 and 9 should be in the track buffer. | 954 // Buffers 8 and 9 should be in the track buffer. |
1000 CheckExpectedBuffers(8, 9, &kDataA); | 955 CheckExpectedBuffers(8, 9, &kDataA); |
1001 // The buffer immediately after the track buffer should be a keyframe. | 956 // The buffer immediately after the track buffer should be a keyframe. |
1002 CheckExpectedBuffers(10, 10, &kDataA, true); | 957 CheckExpectedBuffers(10, 10, &kDataA, true); |
1003 | 958 |
1004 // Make sure all data is correct. | 959 // Make sure all data is correct. |
1005 Seek(0); | 960 Seek(0); |
1006 CheckExpectedBuffers(0, 4, &kDataA); | 961 CheckExpectedBuffers(0, 4, &kDataA); |
1007 CheckExpectedBuffers(5, 7, &kDataB); | 962 CheckExpectedBuffers(5, 7, &kDataB); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1076 // Append 10 buffers at positions 5 through 14. | 1031 // Append 10 buffers at positions 5 through 14. |
1077 AppendBuffers(5, 10, &kDataA); | 1032 AppendBuffers(5, 10, &kDataA); |
1078 | 1033 |
1079 // Seek to buffer at position 5 and get next buffer. | 1034 // Seek to buffer at position 5 and get next buffer. |
1080 Seek(5); | 1035 Seek(5); |
1081 CheckExpectedBuffers(5, 5, &kDataA); | 1036 CheckExpectedBuffers(5, 5, &kDataA); |
1082 | 1037 |
1083 // Do a complete overlap by appending 20 buffers at positions 0 through 19. | 1038 // Do a complete overlap by appending 20 buffers at positions 0 through 19. |
1084 AppendBuffers(0, 20, &kDataB); | 1039 AppendBuffers(0, 20, &kDataB); |
1085 | 1040 |
1086 // Check timespan is correct. | 1041 // Check range is correct. |
1087 CheckExpectedTimespan(0, 19); | 1042 CheckExpectedRanges("{ [0,19) }"); |
1088 | 1043 |
1089 // Seek to beginning; all data should be new. | 1044 // Seek to beginning; all data should be new. |
1090 Seek(0); | 1045 Seek(0); |
1091 CheckExpectedBuffers(0, 19, &kDataB); | 1046 CheckExpectedBuffers(0, 19, &kDataB); |
1092 | 1047 |
1093 // Check timespan continues to be correct. | 1048 // Check range continues to be correct. |
1094 CheckExpectedTimespan(0, 19); | 1049 CheckExpectedRanges("{ [0,19) }"); |
1095 } | 1050 } |
1096 | 1051 |
1097 TEST_F(SourceBufferStreamTest, Seek_StartOfSegment) { | 1052 TEST_F(SourceBufferStreamTest, Seek_StartOfSegment) { |
1098 base::TimeDelta bump = frame_duration() / 4; | 1053 base::TimeDelta bump = frame_duration() / 4; |
1099 CHECK(bump > base::TimeDelta()); | 1054 CHECK(bump > base::TimeDelta()); |
1100 | 1055 |
1101 // Append 5 buffers at position (5 + |bump|) through 9, where the media | 1056 // Append 5 buffers at position (5 + |bump|) through 9, where the media |
1102 // segment begins at position 5. | 1057 // segment begins at position 5. |
1103 AppendBuffers(5, 5, bump); | 1058 AppendBuffers(5, 5, bump); |
1104 scoped_refptr<StreamParserBuffer> buffer; | 1059 scoped_refptr<StreamParserBuffer> buffer; |
(...skipping 24 matching lines...) Expand all Loading... |
1129 // Append 5 buffers at positions 10 through 14. | 1084 // Append 5 buffers at positions 10 through 14. |
1130 AppendBuffers(10, 5); | 1085 AppendBuffers(10, 5); |
1131 | 1086 |
1132 // Seek to buffer at position 12. | 1087 // Seek to buffer at position 12. |
1133 Seek(12); | 1088 Seek(12); |
1134 | 1089 |
1135 // Append 5 buffers at positions 5 through 9. | 1090 // Append 5 buffers at positions 5 through 9. |
1136 AppendBuffers(5, 5); | 1091 AppendBuffers(5, 5); |
1137 | 1092 |
1138 // Make sure ranges are merged. | 1093 // Make sure ranges are merged. |
1139 CheckExpectedTimespan(5, 14); | 1094 CheckExpectedRanges("{ [5,14) }"); |
1140 | 1095 |
1141 // Make sure the next buffer is correct. | 1096 // Make sure the next buffer is correct. |
1142 CheckExpectedBuffers(10, 10); | 1097 CheckExpectedBuffers(10, 10); |
1143 | 1098 |
1144 // Append 5 buffers at positions 15 through 19. | 1099 // Append 5 buffers at positions 15 through 19. |
1145 AppendBuffers(15, 5); | 1100 AppendBuffers(15, 5); |
1146 CheckExpectedTimespan(5, 19); | 1101 CheckExpectedRanges("{ [5,19) }"); |
1147 | 1102 |
1148 // Make sure the remaining next buffers are correct. | 1103 // Make sure the remaining next buffers are correct. |
1149 CheckExpectedBuffers(11, 14); | 1104 CheckExpectedBuffers(11, 14); |
1150 } | 1105 } |
1151 | 1106 |
1152 TEST_F(SourceBufferStreamTest, GetNextBuffer_ExhaustThenAppend) { | 1107 TEST_F(SourceBufferStreamTest, GetNextBuffer_ExhaustThenAppend) { |
1153 // Append 4 buffers at positions 0 through 3. | 1108 // Append 4 buffers at positions 0 through 3. |
1154 AppendBuffers(0, 4); | 1109 AppendBuffers(0, 4); |
1155 | 1110 |
1156 // Seek to buffer at position 0 and get all buffers. | 1111 // Seek to buffer at position 0 and get all buffers. |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1195 | 1150 |
1196 TEST_F(SourceBufferStreamTest, GetNextBuffer_NoSeek) { | 1151 TEST_F(SourceBufferStreamTest, GetNextBuffer_NoSeek) { |
1197 // Append 5 buffers at position 5. | 1152 // Append 5 buffers at position 5. |
1198 AppendBuffers(5, 5); | 1153 AppendBuffers(5, 5); |
1199 | 1154 |
1200 // Should receive buffers from the start without needing to seek. | 1155 // Should receive buffers from the start without needing to seek. |
1201 CheckExpectedBuffers(5, 5); | 1156 CheckExpectedBuffers(5, 5); |
1202 } | 1157 } |
1203 | 1158 |
1204 } // namespace media | 1159 } // namespace media |
OLD | NEW |