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

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

Issue 10558011: Fix ChunkDemuxer so it properly outputs buffered ranges. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address more CR comments and added an end of stream test case. Created 8 years, 6 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/filters/source_buffer_stream.cc ('k') | webkit/media/webmediaplayer_impl.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 (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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « media/filters/source_buffer_stream.cc ('k') | webkit/media/webmediaplayer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698