Skip to content

Commit a54c6bc

Browse files
Djuffinchromium-wpt-export-bot
authored andcommitted
webcodecs: Transfer array buffer into VideoFrame ctor
Implementation for w3c/webcodecs#104 Change-Id: Ifbc1fb1739a0bc19dc6db27943fff0cecae0156d
1 parent 9321945 commit a54c6bc

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

webcodecs/videoFrame-construction.any.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -755,3 +755,41 @@ test(t => {
755755
frame.close();
756756
}, 'Test a VideoFrame constructed from canvas can drop the alpha channel.');
757757

758+
promise_test(async t => {
759+
let fmt = 'RGBA';
760+
const rgb_plane = [
761+
0xBA, 0xDF, 0x00, 0xD0, 0xBA, 0xDF, 0x01, 0xD0, 0xBA, 0xDF, 0x02, 0xD0,
762+
0xBA, 0xDF, 0x03, 0xD0
763+
];
764+
let data = new Uint8Array(rgb_plane);
765+
let unused_buffer = new ArrayBuffer(123);
766+
let init = {
767+
format: fmt,
768+
timestamp: 1234,
769+
codedWidth: 2,
770+
codedHeight: 2,
771+
visibleRect: {x: 0, y: 0, width: 2, height: 2},
772+
transfer: [data.buffer, unused_buffer]
773+
};
774+
assert_equals(data.length, 16, 'data.length');
775+
assert_equals(unused_buffer.byteLength, 123, 'unused_buffer.byteLength');
776+
777+
let frame = new VideoFrame(data, init);
778+
assert_equals(frame.format, fmt, 'format');
779+
assert_equals(data.length, 0, 'data.length after detach');
780+
assert_equals(unused_buffer.byteLength, 0, 'unused_buffer after detach');
781+
782+
const options = {
783+
rect: {x: 0, y: 0, width: init.codedWidth, height: init.codedHeight}
784+
};
785+
let size = frame.allocationSize(options);
786+
let output_data = new Uint8Array(size);
787+
let layout = await frame.copyTo(output_data, options);
788+
let expected_data = new Uint8Array(rgb_plane);
789+
assert_equals(expected_data.length, size, 'expected_data size');
790+
for (let i = 0; i < size; i++) {
791+
assert_equals(expected_data[i], output_data[i], `expected_data[${i}]`);
792+
}
793+
794+
frame.close();
795+
}, 'Test transfering ArrayBuffer to VideoFrame');

0 commit comments

Comments
 (0)