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

Side by Side Diff: LayoutTests/http/tests/media/media-source/mediasource-buffered.html

Issue 552943002: MSE: Start letting SourceBuffer begin to do initialization segment received algorithm (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebased. Addressed philipj@'s PS5 comments. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html> 2 <html>
3 <head> 3 <head>
4 <script src="/w3c/resources/testharness.js"></script> 4 <script src="/w3c/resources/testharness.js"></script>
5 <script src="/w3c/resources/testharnessreport.js"></script> 5 <script src="/w3c/resources/testharnessreport.js"></script>
6 <script src="mediasource-util.js"></script> 6 <script src="mediasource-util.js"></script>
7 <link rel="stylesheet" href="/w3c/resources/testharness.css"> 7 <link rel="stylesheet" href="/w3c/resources/testharness.css">
8 </head> 8 </head>
9 <body> 9 <body>
10 <div id="log"></div> 10 <div id="log"></div>
(...skipping 20 matching lines...) Expand all
31 mediaElement.pause(); 31 mediaElement.pause();
32 test.failOnEvent(mediaElement, 'error'); 32 test.failOnEvent(mediaElement, 'error');
33 test.endOnEvent(mediaElement, 'ended'); 33 test.endOnEvent(mediaElement, 'ended');
34 34
35 MediaSourceUtil.fetchManifestAndData(test, manifestFilenameA , function(typeA, dataA) 35 MediaSourceUtil.fetchManifestAndData(test, manifestFilenameA , function(typeA, dataA)
36 { 36 {
37 MediaSourceUtil.fetchManifestAndData(test, manifestFilen ameB, function(typeB, dataB) 37 MediaSourceUtil.fetchManifestAndData(test, manifestFilen ameB, function(typeB, dataB)
38 { 38 {
39 mediaSource.addSourceBuffer(typeA); 39 mediaSource.addSourceBuffer(typeA);
40 mediaSource.addSourceBuffer(typeB); 40 mediaSource.addSourceBuffer(typeB);
41 assert_equals(mediaSource.activeSourceBuffers.length , 2); 41 assert_equals(mediaSource.sourceBuffers.length, 2);
42 42
43 callback(test, mediaElement, mediaSource, dataA, dat aB); 43 callback(test, mediaElement, mediaSource, dataA, dat aB);
44 }); 44 });
45 }); 45 });
46 }, description); 46 }, description);
47 }; 47 };
48 48
49 function appendData(test, mediaSource, dataA, dataB, callback) 49 function appendDataAndVerifyAddedToActiveSourceBuffers(test, mediaSo urce, dataA, dataB, swapAppendBufferOrder, forceParsingOrder, callback)
50 { 50 {
51 var sourceBufferA = mediaSource.activeSourceBuffers[0]; 51 // Verification here assumes no prior initialization segment rec eived for any of mediaSource's sourceBuffers.
52 var sourceBufferB = mediaSource.activeSourceBuffers[1]; 52 assert_equals(mediaSource.sourceBuffers.length, 2, 'mediaSource sourceBuffers length before appends');
53 assert_equals(mediaSource.activeSourceBuffers.length, 0, 'mediaS ource activeSourceBuffers length before appends');
54 var sourceBufferA = mediaSource.sourceBuffers[0];
55 var sourceBufferB = mediaSource.sourceBuffers[1];
53 56
54 test.expectEvent(sourceBufferA, 'update'); 57 var firstBuffer = swapAppendBufferOrder ? sourceBufferB : source BufferA;
55 test.expectEvent(sourceBufferA, 'updateend'); 58 var firstData = swapAppendBufferOrder ? dataB : dataA;
56 sourceBufferA.appendBuffer(dataA); 59 var secondBuffer = swapAppendBufferOrder ? sourceBufferA : sourc eBufferB;
60 var secondData = swapAppendBufferOrder ? dataA : dataB;
57 61
58 test.expectEvent(sourceBufferB, 'update'); 62 test.expectEvent(firstBuffer, 'update');
59 test.expectEvent(sourceBufferB, 'updateend'); 63 test.expectEvent(firstBuffer, 'updateend');
60 sourceBufferB.appendBuffer(dataB); 64 firstBuffer.appendBuffer(firstData);
65
66 var doSecondAppend = function()
67 {
68 test.expectEvent(secondBuffer, 'update');
69 test.expectEvent(secondBuffer, 'updateend');
70 secondBuffer.appendBuffer(secondData);
71 };
72
73 if (forceParsingOrder) {
74 test.waitForExpectedEvents(function()
75 {
76 assert_equals(mediaSource.sourceBuffers.length, 2, 'medi aSource sourceBuffers length between completed appends');
77 assert_equals(mediaSource.activeSourceBuffers.length, 1, 'mediaSource activeSourceBuffers length between completed appends');
78 assert_equals(mediaSource.activeSourceBuffers[0], firstB uffer);
79 doSecondAppend();
80 });
81 } else {
82 doSecondAppend();
83 }
61 84
62 test.waitForExpectedEvents(function() 85 test.waitForExpectedEvents(function()
63 { 86 {
64 callback(); 87 assert_equals(mediaSource.sourceBuffers.length, 2, 'mediaSou rce sourceBuffers length after appends completed');
88 assert_equals(mediaSource.activeSourceBuffers.length, 2, 'me diaSource activeSourceBuffers length after appends completed');
89 assert_equals(mediaSource.activeSourceBuffers[0], sourceBuff erA);
90 assert_equals(mediaSource.activeSourceBuffers[1], sourceBuff erB);
91 callback();
65 }); 92 });
66 } 93 }
67 94
68 mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dat aA, dataB) { 95 mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dat aA, dataB) {
69 appendData(test, mediaSource, dataA, dataB, function() 96 appendDataAndVerifyAddedToActiveSourceBuffers(test, mediaSource, dataA, dataB, false, false, function()
70 { 97 {
71 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], 'mediaSource.activeSourceBuffers[0]'); 98 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], 'mediaSource.activeSourceBuffers[0]');
72 assertBufferedEquals(mediaSource.activeSourceBuffers[1], exp ectationsB[subType], 'mediaSource.activeSourceBuffers[1]'); 99 assertBufferedEquals(mediaSource.activeSourceBuffers[1], exp ectationsB[subType], 'mediaSource.activeSourceBuffers[1]');
73 assertBufferedEquals(mediaElement, expectationsB[subType], ' mediaElement.buffered'); 100 assertBufferedEquals(mediaElement, expectationsB[subType], ' mediaElement.buffered');
74 101
75 mediaSource.endOfStream(); 102 mediaSource.endOfStream();
76 103
77 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], 'mediaSource.activeSourceBuffers[0]'); 104 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], 'mediaSource.activeSourceBuffers[0]');
78 assertBufferedEquals(mediaSource.activeSourceBuffers[1], exp ectationsB[subType], 'mediaSource.activeSourceBuffers[1]'); 105 assertBufferedEquals(mediaSource.activeSourceBuffers[1], exp ectationsB[subType], 'mediaSource.activeSourceBuffers[1]');
79 assertBufferedEquals(mediaElement, expectationsA[subType], ' mediaElement.buffered'); 106 assertBufferedEquals(mediaElement, expectationsA[subType], ' mediaElement.buffered');
80 107
81 test.done(); 108 test.done();
82 }); 109 });
83 }, 'Demuxed content with different lengths'); 110 }, 'Demuxed content with different lengths');
84 111
112 mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dat aA, dataB) {
113 appendDataAndVerifyAddedToActiveSourceBuffers(test, mediaSource, dataA, dataB, false, true, function()
114 {
115 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], 'mediaSource.activeSourceBuffers[0]');
116 assertBufferedEquals(mediaSource.activeSourceBuffers[1], exp ectationsB[subType], 'mediaSource.activeSourceBuffers[1]');
117 assertBufferedEquals(mediaElement, expectationsB[subType], ' mediaElement.buffered');
118 test.done();
119 });
120 }, 'Process first init segment for sourceBuffer[0] first');
121
122 mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dat aA, dataB) {
123 appendDataAndVerifyAddedToActiveSourceBuffers(test, mediaSource, dataA, dataB, true, true, function()
124 {
125 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], 'mediaSource.activeSourceBuffers[0]');
126 assertBufferedEquals(mediaSource.activeSourceBuffers[1], exp ectationsB[subType], 'mediaSource.activeSourceBuffers[1]');
127 assertBufferedEquals(mediaElement, expectationsB[subType], ' mediaElement.buffered');
128 test.done();
129 });
130 }, 'Process first init segment for sourceBuffer[1] first');
131
85 mediasource_test(function(test, mediaElement, mediaSource) 132 mediasource_test(function(test, mediaElement, mediaSource)
86 { 133 {
87 mediaElement.pause(); 134 mediaElement.pause();
88 test.failOnEvent(mediaElement, 'error'); 135 test.failOnEvent(mediaElement, 'error');
89 test.endOnEvent(mediaElement, 'ended'); 136 test.endOnEvent(mediaElement, 'ended');
90 137
91 MediaSourceUtil.fetchManifestAndData(test, subType + '/test-av-3 84k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json', function(type, data) 138 MediaSourceUtil.fetchManifestAndData(test, subType + '/test-av-3 84k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json', function(type, data)
92 { 139 {
93 var sourceBuffer = mediaSource.addSourceBuffer(type); 140 var sourceBuffer = mediaSource.addSourceBuffer(type);
94 test.expectEvent(sourceBuffer, 'update'); 141 test.expectEvent(sourceBuffer, 'update');
(...skipping 16 matching lines...) Expand all
111 mediaSource.endOfStream(); 158 mediaSource.endOfStream();
112 159
113 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectedAfterEndOfStream, 'mediaSource.activeSourceBuffers[0]'); 160 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectedAfterEndOfStream, 'mediaSource.activeSourceBuffers[0]');
114 assertBufferedEquals(mediaElement, expectedAfterEndOfStr eam, 'mediaElement.buffered'); 161 assertBufferedEquals(mediaElement, expectedAfterEndOfStr eam, 'mediaElement.buffered');
115 162
116 test.done(); 163 test.done();
117 }); 164 });
118 }); 165 });
119 }, 'Muxed tracks with different lengths'); 166 }, 'Muxed tracks with different lengths');
120 167
121
122 mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dat aA, dataB) { 168 mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dat aA, dataB) {
123 appendData(test, mediaSource, dataA, dataB.subarray(0, 318), fun ction() 169 appendDataAndVerifyAddedToActiveSourceBuffers(test, mediaSource, dataA, dataB.subarray(0, 318), false, false, function()
124 { 170 {
125 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], 'mediaSource.activeSourceBuffers[0]'); 171 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], 'mediaSource.activeSourceBuffers[0]');
126 assertBufferedEquals(mediaSource.activeSourceBuffers[1], '{ }', 'mediaSource.activeSourceBuffers[1]'); 172 assertBufferedEquals(mediaSource.activeSourceBuffers[1], '{ }', 'mediaSource.activeSourceBuffers[1]');
127 assertBufferedEquals(mediaElement, '{ }', 'mediaElement.buff ered'); 173 assertBufferedEquals(mediaElement, '{ }', 'mediaElement.buff ered');
128 174
129 mediaSource.endOfStream(); 175 mediaSource.endOfStream();
130 176
131 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], 'mediaSource.activeSourceBuffers[0]'); 177 assertBufferedEquals(mediaSource.activeSourceBuffers[0], exp ectationsA[subType], 'mediaSource.activeSourceBuffers[0]');
132 assertBufferedEquals(mediaSource.activeSourceBuffers[1], '{ }', 'mediaSource.activeSourceBuffers[1]'); 178 assertBufferedEquals(mediaSource.activeSourceBuffers[1], '{ }', 'mediaSource.activeSourceBuffers[1]');
133 assertBufferedEquals(mediaElement, '{ }', 'mediaElement.buff ered'); 179 assertBufferedEquals(mediaElement, '{ }', 'mediaElement.buff ered');
(...skipping 30 matching lines...) Expand all
164 }); 210 });
165 }, 'Muxed content empty buffered ranges.'); 211 }, 'Muxed content empty buffered ranges.');
166 212
167 mediasource_test(function(test, mediaElement, mediaSource) 213 mediasource_test(function(test, mediaElement, mediaSource)
168 { 214 {
169 mediaElement.pause(); 215 mediaElement.pause();
170 test.failOnEvent(mediaElement, 'error'); 216 test.failOnEvent(mediaElement, 'error');
171 test.endOnEvent(mediaElement, 'ended'); 217 test.endOnEvent(mediaElement, 'ended');
172 218
173 var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.A UDIO_ONLY_TYPE); 219 var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.A UDIO_ONLY_TYPE);
174 220
175 // FIXME: verify activeSourceBuffers is empty until init segment with at least
176 // one active track is appended.
177 assertBufferedEquals(mediaSource.sourceBuffers[0], '{ }', 'media Source.sourceBuffers[0]'); 221 assertBufferedEquals(mediaSource.sourceBuffers[0], '{ }', 'media Source.sourceBuffers[0]');
178 assertBufferedEquals(mediaElement, '{ }', 'mediaElement.buffered '); 222 assertBufferedEquals(mediaElement, '{ }', 'mediaElement.buffered ');
179 test.done(); 223 test.done();
180 224
181 }, 'Get buffered range when sourcebuffer is empty.'); 225 }, 'Get buffered range when sourcebuffer is empty.');
182 226
183 mediasource_testafterdataloaded(function(test, mediaElement, mediaSo urce, segmentInfo, sourceBuffer, mediaData) 227 mediasource_testafterdataloaded(function(test, mediaElement, mediaSo urce, segmentInfo, sourceBuffer, mediaData)
184 { 228 {
185 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init); 229 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
186 230
187 test.expectEvent(sourceBuffer, 'updateend', 'initSegment append ended.'); 231 test.expectEvent(sourceBuffer, 'updateend', 'initSegment append ended.');
188 sourceBuffer.appendBuffer(initSegment); 232 sourceBuffer.appendBuffer(initSegment);
189 test.waitForExpectedEvents(function() 233 test.waitForExpectedEvents(function()
190 { 234 {
191 assertBufferedEquals(mediaSource.sourceBuffers[0], '{ }', 'm ediaSource.sourceBuffers[0]'); 235 assertBufferedEquals(mediaSource.sourceBuffers[0], '{ }', 'm ediaSource.sourceBuffers[0]');
192 assertBufferedEquals(mediaSource.activeSourceBuffers[0], '{ }', 'mediaSource.activeSourceBuffers[0]'); 236 assertBufferedEquals(mediaSource.activeSourceBuffers[0], '{ }', 'mediaSource.activeSourceBuffers[0]');
193 assertBufferedEquals(mediaElement, '{ }', 'mediaElement.buff ered'); 237 assertBufferedEquals(mediaElement, '{ }', 'mediaElement.buff ered');
194 test.done(); 238 test.done();
195 }); 239 });
196 240
197 }, 'Get buffered range when only initsegment is appended.'); 241 }, 'Get buffered range when only initsegment is appended.');
198 242
199 mediasource_testafterdataloaded(function(test, mediaElement, mediaSo urce, segmentInfo, sourceBuffer, mediaData) 243 mediasource_testafterdataloaded(function(test, mediaElement, mediaSo urce, segmentInfo, sourceBuffer, mediaData)
200 { 244 {
201 test.expectEvent(mediaSource.sourceBuffers, 'removesourcebuffer' , 'SourceBuffer removed.'); 245 test.expectEvent(mediaSource.sourceBuffers, 'removesourcebuffer' , 'SourceBuffer removed.');
202 mediaSource.removeSourceBuffer(sourceBuffer); 246 mediaSource.removeSourceBuffer(sourceBuffer);
203 247
204 test.waitForExpectedEvents(function() 248 test.waitForExpectedEvents(function()
205 { 249 {
206 assert_throws('InvalidStateError', 250 assert_throws('InvalidStateError',
207 function() { sourceBuffer.buffered; }, 251 function() { sourceBuffer.buffered; },
208 'get sourceBuffer.buffered throws an exception for Inval idStateError.'); 252 'get sourceBuffer.buffered throws an exception for Inval idStateError.');
209 test.done(); 253 test.done();
210 }); 254 });
211 }, 'Get buffered range after removing sourcebuffer.'); 255 }, 'Get buffered range after removing sourcebuffer.');
212 </script> 256 </script>
213 </body> 257 </body>
214 </html> 258 </html>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698