| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 <!DOCTYPE html> | 
|  | 2 <html> | 
|  | 3     <head> | 
|  | 4         <script src="/w3c/resources/testharness.js"></script> | 
|  | 5         <script src="/w3c/resources/testharnessreport.js"></script> | 
|  | 6         <script src="mediasource-util.js"></script> | 
|  | 7         <link rel='stylesheet' href='/w3c/resources/testharness.css'> | 
|  | 8     </head> | 
|  | 9     <body> | 
|  | 10         <div id="log"></div> | 
|  | 11         <script> | 
|  | 12           function mediasource_sequencemode_test(testFunction, description, opti
     ons) | 
|  | 13           { | 
|  | 14               return mediasource_testafterdataloaded(function(test, mediaElement
     , mediaSource, segmentInfo, sourceBuffer, mediaData) | 
|  | 15               { | 
|  | 16                   assert_greater_than(segmentInfo.media.length, 3, 'at least 3 m
     edia segments for supported type'); | 
|  | 17                   test.failOnEvent(mediaElement, 'error'); | 
|  | 18                   sourceBuffer.mode = 'sequence'; | 
|  | 19                   assert_equals(sourceBuffer.mode, 'sequence', 'mode after setti
     ng it to \'sequence\''); | 
|  | 20 | 
|  | 21                   var initSegment = MediaSourceUtil.extractSegmentData(mediaData
     , segmentInfo.init); | 
|  | 22                   test.expectEvent(sourceBuffer, 'updatestart', 'initSegment app
     end started.'); | 
|  | 23                   test.expectEvent(sourceBuffer, 'update', 'initSegment append s
     uccess.'); | 
|  | 24                   test.expectEvent(sourceBuffer, 'updateend', 'initSegment appen
     d ended.'); | 
|  | 25                   sourceBuffer.appendBuffer(initSegment); | 
|  | 26                   test.waitForExpectedEvents(function() | 
|  | 27                   { | 
|  | 28                       assert_equals(sourceBuffer.timestampOffset, 0, 'timestampO
     ffset initially 0'); | 
|  | 29                       testFunction(test, mediaElement, mediaSource, segmentInfo,
      sourceBuffer, mediaData); | 
|  | 30                   }); | 
|  | 31               }, description, options); | 
|  | 32           } | 
|  | 33 | 
|  | 34           function append_segment(test, sourceBuffer, mediaData, info, callback) | 
|  | 35           { | 
|  | 36               var mediaSegment = MediaSourceUtil.extractSegmentData(mediaData, i
     nfo); | 
|  | 37               test.expectEvent(sourceBuffer, 'updatestart', 'media segment appen
     d started.'); | 
|  | 38               test.expectEvent(sourceBuffer, 'update', 'media segment append suc
     cess.'); | 
|  | 39               test.expectEvent(sourceBuffer, 'updateend', 'media segment append 
     ended.'); | 
|  | 40               sourceBuffer.appendBuffer(mediaSegment); | 
|  | 41               test.waitForExpectedEvents(callback); | 
|  | 42           } | 
|  | 43 | 
|  | 44           function threeDecimalPlaces(number) | 
|  | 45           { | 
|  | 46               return Number(number.toFixed(3)); | 
|  | 47           } | 
|  | 48 | 
|  | 49           // Verifies expected times to 3 decimal places before and after mediaS
     ource.endOfStream(), | 
|  | 50           // and calls |callback| on success. | 
|  | 51           function verify_offset_and_buffered(test, mediaSource, sourceBuffer, | 
|  | 52                                               expectedTimestampOffset, expectedB
     ufferedRangeStartTime, | 
|  | 53                                               expectedBufferedRangeMaxEndTimeBef
     oreEOS, | 
|  | 54                                               expectedBufferedRangeEndTimeAfterE
     OS, | 
|  | 55                                               callback) { | 
|  | 56               assert_equals(threeDecimalPlaces(sourceBuffer.timestampOffset), | 
|  | 57                             threeDecimalPlaces(expectedTimestampOffset), | 
|  | 58                             'expectedTimestampOffset'); | 
|  | 59 | 
|  | 60               // Prior to EOS, the buffered range end time may not have fully re
     ached the next media | 
|  | 61               // segment's timecode (adjusted by any timestampOffset). It should
      not exceed it though. | 
|  | 62               // Therefore, an exact assertBufferedEquals() will not work here. | 
|  | 63               assert_equals(sourceBuffer.buffered.length, 1, 'sourceBuffer.buffe
     red has 1 range before EOS'); | 
|  | 64               assert_equals(threeDecimalPlaces(sourceBuffer.buffered.start(0)), | 
|  | 65                             threeDecimalPlaces(expectedBufferedRangeStartTime), | 
|  | 66                             'sourceBuffer.buffered range begins where expected b
     efore EOS'); | 
|  | 67               assert_less_than_equal(threeDecimalPlaces(sourceBuffer.buffered.en
     d(0)), | 
|  | 68                                      threeDecimalPlaces(expectedBufferedRangeMax
     EndTimeBeforeEOS), | 
|  | 69                                      'sourceBuffer.buffered range ends at or bef
     ore expected upper bound before EOS'); | 
|  | 70 | 
|  | 71               test.expectEvent(mediaSource, 'sourceended', 'mediaSource endOfStr
     eam'); | 
|  | 72               mediaSource.endOfStream(); | 
|  | 73               test.waitForExpectedEvents(function() | 
|  | 74               { | 
|  | 75                   assertBufferedEquals(sourceBuffer, | 
|  | 76                                        '{ [' + expectedBufferedRangeStartTime.to
     Fixed(3) + ', ' + expectedBufferedRangeEndTimeAfterEOS.toFixed(3) + ') }', | 
|  | 77                                        'sourceBuffer.buffered after EOS'); | 
|  | 78                   callback(); | 
|  | 79               }); | 
|  | 80           } | 
|  | 81 | 
|  | 82           mediasource_sequencemode_test(function(test, mediaElement, mediaSource
     , segmentInfo, sourceBuffer, mediaData) | 
|  | 83           { | 
|  | 84               assert_equals(segmentInfo.media[0].timecode, 0, 'segment starts at
      time 0'); | 
|  | 85               append_segment(test, sourceBuffer, mediaData, segmentInfo.media[0]
     , function() | 
|  | 86               { | 
|  | 87                   verify_offset_and_buffered(test, mediaSource, sourceBuffer, | 
|  | 88                                              0, 0, | 
|  | 89                                              segmentInfo.media[1].timecode + sou
     rceBuffer.timestampOffset, | 
|  | 90                                              segmentInfo.media[0].highest_end_ti
     me + sourceBuffer.timestampOffset, | 
|  | 91                                              test.done); | 
|  | 92               }); | 
|  | 93           }, 'Test sequence AppendMode appendBuffer(first media segment)'); | 
|  | 94 | 
|  | 95           mediasource_sequencemode_test(function(test, mediaElement, mediaSource
     , segmentInfo, sourceBuffer, mediaData) | 
|  | 96           { | 
|  | 97               assert_greater_than(segmentInfo.media[1].timecode, 0, 'segment sta
     rts after time 0'); | 
|  | 98               append_segment(test, sourceBuffer, mediaData, segmentInfo.media[1]
     , function() | 
|  | 99               { | 
|  | 100                   verify_offset_and_buffered(test, mediaSource, sourceBuffer, | 
|  | 101                                              -segmentInfo.media[1].timecode, 0, | 
|  | 102                                              segmentInfo.media[2].timecode + sou
     rceBuffer.timestampOffset, | 
|  | 103                                              segmentInfo.media[1].highest_end_ti
     me + sourceBuffer.timestampOffset, | 
|  | 104                                              test.done); | 
|  | 105               }); | 
|  | 106           }, 'Test sequence AppendMode appendBuffer(second media segment)'); | 
|  | 107 | 
|  | 108           mediasource_sequencemode_test(function(test, mediaElement, mediaSource
     , segmentInfo, sourceBuffer, mediaData) | 
|  | 109           { | 
|  | 110               assert_greater_than(segmentInfo.media[1].timecode, 0, 'segment sta
     rts after time 0'); | 
|  | 111               append_segment(test, sourceBuffer, mediaData, segmentInfo.media[1]
     , function() | 
|  | 112               { | 
|  | 113                   assert_equals(segmentInfo.media[0].timecode, 0, 'segment start
     s at time 0'); | 
|  | 114                   append_segment(test, sourceBuffer, mediaData, segmentInfo.medi
     a[0], function() | 
|  | 115                   { | 
|  | 116                       // Current timestampOffset should reflect offset required 
     to put media[0] | 
|  | 117                       // immediately after media[1]'s highest frame end timestam
     p (as was adjusted | 
|  | 118                       // by an earlier timestampOffset). | 
|  | 119                       verify_offset_and_buffered(test, mediaSource, sourceBuffer
     , | 
|  | 120                                                  segmentInfo.media[1].highest_en
     d_time - segmentInfo.media[1].timecode, 0, | 
|  | 121                                                  segmentInfo.media[1].timecode +
      sourceBuffer.timestampOffset, | 
|  | 122                                                  segmentInfo.media[0].highest_en
     d_time + sourceBuffer.timestampOffset, | 
|  | 123                                                  test.done); | 
|  | 124                   }) | 
|  | 125               }); | 
|  | 126           }, 'Test sequence AppendMode appendBuffer(second media segment, then f
     irst media segment)'); | 
|  | 127         </script> | 
|  | 128     </body> | 
|  | 129 </html> | 
| OLD | NEW | 
|---|