| // META: global=window,dedicatedworker |
| // META: script=/webcodecs/videoFrame-utils.js |
| |
| test(t => { |
| let fmt = 'I420'; |
| let vfInit = { |
| format: fmt, |
| timestamp: 1234, |
| codedWidth: 3, |
| codedHeight: 3, |
| visibleRect: {x: 0, y: 0, width: 3, height: 3}, |
| }; |
| let data = new Uint8Array([ |
| 1, 2, 3, 4, 5, 6, 7, 8, 9, // y |
| 1, 2, 3, 4, // u |
| 1, 2, 3, 4, // v |
| ]); |
| let frame = new VideoFrame(data, vfInit); |
| assert_equals(frame.format, fmt, 'format'); |
| assert_equals(frame.visibleRect.x, 0, 'visibleRect.x'); |
| assert_equals(frame.visibleRect.y, 0, 'visibleRect.y'); |
| assert_equals(frame.visibleRect.width, 3, 'visibleRect.width'); |
| assert_equals(frame.visibleRect.height, 3, 'visibleRect.height'); |
| frame.close(); |
| }, 'Test I420 VideoFrame construction with odd coded size'); |
| |
| promise_test(async t => { |
| const init = { |
| format: 'I420', |
| timestamp: 0, |
| codedWidth: 3, |
| codedHeight: 3, |
| }; |
| const buf = new Uint8Array([ |
| 1, 2, 3, 4, 5, 6, 7, 8, 9, // y |
| 10, 11, 12, 13, // u |
| 14, 15, 16, 17, // v |
| ]); |
| const expectedLayout = [ |
| {offset: 0, stride: 3}, |
| {offset: 9, stride: 2}, |
| {offset: 13, stride: 2}, |
| ]; |
| const frame = new VideoFrame(buf, init); |
| assert_equals(frame.allocationSize(), buf.length, 'allocationSize()'); |
| const data = new Uint8Array(buf.length); |
| const layout = await frame.copyTo(data); |
| assert_layout_equals(layout, expectedLayout); |
| assert_buffer_equals(data, buf); |
| }, 'Test I420 copyTo with odd coded size.'); |