mirror of
https://github.com/servo/servo.git
synced 2025-06-25 09:34:32 +01:00
71 lines
2.2 KiB
JavaScript
71 lines
2.2 KiB
JavaScript
// META: global=window,dedicatedworker
|
|
// META: script=/webcodecs/utils.js
|
|
|
|
const testData = {
|
|
src: 'sfx-aac.mp4',
|
|
config: {
|
|
codec: 'mp4a.40.2',
|
|
sampleRate: 48000,
|
|
numberOfChannels: 1,
|
|
description: {offset: 2552, size: 5},
|
|
}
|
|
};
|
|
|
|
// Create a view of an ArrayBuffer.
|
|
function view(buffer, {offset, size}) {
|
|
return new Uint8Array(buffer, offset, size);
|
|
}
|
|
|
|
function testSharedArrayBufferDescription(t, useView) {
|
|
const data = testData;
|
|
|
|
// Don't run test if the codec is not supported.
|
|
assert_equals("function", typeof AudioDecoder.isConfigSupported);
|
|
let supported = false;
|
|
return AudioDecoder
|
|
.isConfigSupported({
|
|
codec: data.config.codec,
|
|
sampleRate: data.config.sampleRate,
|
|
numberOfChannels: data.config.numberOfChannels
|
|
})
|
|
.catch(_ => {
|
|
assert_implements_optional(false, data.config.codec + ' unsupported');
|
|
})
|
|
.then(support => {
|
|
supported = support.supported;
|
|
assert_implements_optional(
|
|
supported, data.config.codec + ' unsupported');
|
|
return fetch(data.src);
|
|
})
|
|
.then(response => {
|
|
return response.arrayBuffer();
|
|
})
|
|
.then(buf => {
|
|
config = {...data.config};
|
|
if (data.config.description) {
|
|
let desc = new SharedArrayBuffer(data.config.description.size);
|
|
let descView = new Uint8Array(desc);
|
|
descView.set(view(buf, data.config.description));
|
|
config.description = useView ? descView : desc;
|
|
}
|
|
|
|
// Support was verified above, so the description shouldn't change
|
|
// that.
|
|
return AudioDecoder.isConfigSupported(config);
|
|
})
|
|
.then(support => {
|
|
assert_true(support.supported);
|
|
|
|
const decoder = new AudioDecoder(getDefaultCodecInit(t));
|
|
decoder.configure(config);
|
|
assert_equals(decoder.state, 'configured', 'state');
|
|
});
|
|
}
|
|
|
|
promise_test(t => {
|
|
return testSharedArrayBufferDescription(t, /*useView=*/ false);
|
|
}, 'Test isConfigSupported() and configure() using a SharedArrayBuffer');
|
|
|
|
promise_test(t => {
|
|
return testSharedArrayBufferDescription(t, /*useView=*/ true);
|
|
}, 'Test isConfigSupported() and configure() using a Uint8Array(SharedArrayBuffer)');
|