tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

audio-decoder.crossOriginIsolated.https.any.js (2251B)


      1 // META: global=window,dedicatedworker
      2 // META: script=/webcodecs/utils.js
      3 
      4 const testData = {
      5  src: 'sfx-aac.mp4',
      6  config: {
      7    codec: 'mp4a.40.2',
      8    sampleRate: 48000,
      9    numberOfChannels: 1,
     10    description: {offset: 2552, size: 5},
     11  }
     12 };
     13 
     14 // Create a view of an ArrayBuffer.
     15 function view(buffer, {offset, size}) {
     16  return new Uint8Array(buffer, offset, size);
     17 }
     18 
     19 function testSharedArrayBufferDescription(t, useView) {
     20  const data = testData;
     21 
     22  // Don't run test if the codec is not supported.
     23  assert_equals("function", typeof AudioDecoder.isConfigSupported);
     24  let supported = false;
     25  return AudioDecoder
     26      .isConfigSupported({
     27        codec: data.config.codec,
     28        sampleRate: data.config.sampleRate,
     29        numberOfChannels: data.config.numberOfChannels
     30      })
     31      .catch(_ => {
     32        assert_implements_optional(false, data.config.codec + ' unsupported');
     33      })
     34      .then(support => {
     35        supported = support.supported;
     36        assert_implements_optional(
     37            supported, data.config.codec + ' unsupported');
     38        return fetch(data.src);
     39      })
     40      .then(response => {
     41        return response.arrayBuffer();
     42      })
     43      .then(buf => {
     44        config = {...data.config};
     45        if (data.config.description) {
     46          let desc = new SharedArrayBuffer(data.config.description.size);
     47          let descView = new Uint8Array(desc);
     48          descView.set(view(buf, data.config.description));
     49          config.description = useView ? descView : desc;
     50        }
     51 
     52        // Support was verified above, so the description shouldn't change
     53        // that.
     54        return AudioDecoder.isConfigSupported(config);
     55      })
     56      .then(support => {
     57        assert_true(support.supported);
     58 
     59        const decoder = new AudioDecoder(getDefaultCodecInit(t));
     60        decoder.configure(config);
     61        assert_equals(decoder.state, 'configured', 'state');
     62      });
     63 }
     64 
     65 promise_test(t => {
     66  return testSharedArrayBufferDescription(t, /*useView=*/ false);
     67 }, 'Test isConfigSupported() and configure() using a SharedArrayBuffer');
     68 
     69 promise_test(t => {
     70  return testSharedArrayBufferDescription(t, /*useView=*/ true);
     71 }, 'Test isConfigSupported() and configure() using a Uint8Array(SharedArrayBuffer)');