| <!DOCTYPE html> |
| <!-- Copyright © 2019 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). --> |
| <html> |
| <head> |
| <title>Exercise implicit changeType for supported test types, using mime types WITH and WITHOUT codecs for addSourceBuffer.</title> |
| <meta name="timeout" content="long"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="mediasource-util.js"></script> |
| <script src="mediasource-changetype-util.js"></script> |
| </head> |
| <body> |
| <div id="log"></div> |
| <script> |
| |
| // Helper that generates implicit codec switching tests for a pair of media |
| // types, with full codecs in the original addSourceBuffer calls, and |
| // separately without full codecs parameters in the original addSourceBuffer |
| // calls. |
| function generateTestsForMediaPair(type1, type2) { |
| // Implicit changeType across bytestream formats is not expected to be |
| // supported, so skip those tests' generation. |
| if (type1.mime_subtype != type2.mime_subtype) |
| return; |
| |
| assert_equals(type1.is_video, type2.is_video, |
| "Types must both be audio or both be video"); |
| test_description_prefix = "Test " + (type1.is_video ? "video" : "audio") + |
| "-only implicit changeType for " + type1.type + " <-> " + type2.type; |
| |
| mediaSourceChangeTypeTest( |
| type1, type2, |
| test_description_prefix, |
| { implicit_changetype: true } ); |
| |
| // Skip test generation if the relaxed types are already fully specified and |
| // tested, above. |
| if (type1.type == type1.relaxed_type && |
| type2.type == type2.relaxed_type) { |
| return; |
| } |
| |
| mediaSourceChangeTypeTest( |
| type1, type2, |
| test_description_prefix + |
| " (using types without codecs parameters for addSourceBuffer)", |
| { use_relaxed_mime_types: true, implicit_changetype: true } ); |
| } |
| |
| function generateImplicitChangeTypeTests(audio_types, video_types) { |
| async_test((test) => { |
| // Require at least 1 pair of different audio-only or video-only test media |
| // files sharing same bytestream format. |
| assert_true(audio_types.length > 1 || video_types.length > 1, |
| "Browser doesn't support enough test media"); |
| |
| // Count the number of unique bytestream formats used in each of audio_types |
| // and video_types. |
| let audio_formats = new Set(Array.from(audio_types, t => t.mime_subtype)); |
| let video_formats = new Set(Array.from(video_types, t => t.mime_subtype)); |
| assert_true(audio_types.length > audio_formats.size || |
| video_types.length > video_formats.size, |
| "Browser doesn't support at least 2 audio-only or 2 video-only test " + |
| "media with same bytestream format"); |
| |
| test.done(); |
| }, "Check if browser supports enough test media types and pairs of " + |
| "audio-only or video-only media with same bytestream format"); |
| |
| // Generate audio-only tests |
| for (let audio1 of audio_types) { |
| for (let audio2 of audio_types) { |
| generateTestsForMediaPair(audio1, audio2); |
| } |
| } |
| |
| // Generate video-only tests |
| for (let video1 of video_types) { |
| for (let video2 of video_types) { |
| generateTestsForMediaPair(video1, video2); |
| } |
| } |
| } |
| |
| findSupportedChangeTypeTestTypes(generateImplicitChangeTypeTests); |
| |
| </script> |
| </body> |
| </html> |