From 3a8fc432769b2ac0a156b8245616ed3d69d3fefa Mon Sep 17 00:00:00 2001 From: Peter Kasting Date: Mon, 22 Feb 2021 21:46:54 +0000 Subject: [PATCH] Bug 1693423 [wpt PR 27667] - Revert "Add drawImage() and createImageBitmap() support for blink::VideoFrame.", a=testonly Automatic update from web-platform-tests Revert "Add drawImage() and createImageBitmap() support for blink::VideoFrame." This reverts commit 27830868be3b06b19761c7ca4507a8e77ab1f535. Reason for revert: New tests SEGVing on several linux bots Original change's description: > Add drawImage() and createImageBitmap() support for blink::VideoFrame. > > This makes blink::VideoFrame a CanvasImageSource for drawImage() and > wires up the existing ImageBitmapSource implementation to > createImageBitmap() to deprecate VideoFrame.createImageBitmap(). > > A deprecation notice is added for VideoFrame.createImageBitmap(); the > method will be removed prior to shipping WebCodecs. > > Bug: 1175907 > Test: New (moved from internal) WPT tests. > > Change-Id: I549d996c9b16a8d0a1dd5293b5bee29f61cac8f3 > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2680955 > Commit-Queue: Dale Curtis > Reviewed-by: Dan Sanders > Reviewed-by: Fernando Serboncini > Reviewed-by: Jeremy Roman > Cr-Commit-Position: refs/heads/master@{#854938} Bug: 1175907 Change-Id: I41b3cc7e6d76e4c80131d8cad2299774e4ebec95 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2702757 Auto-Submit: Peter Kasting Commit-Queue: Rubber Stamper Bot-Commit: Rubber Stamper Cr-Commit-Position: refs/heads/master@{#855005} -- wpt-commits: d614b23de08adf12271dcdca27fe752bc4c6a952 wpt-pr: 27667 --- testing/web-platform/tests/webcodecs/utils.js | 43 ------ .../tests/webcodecs/video-frame.any.js | 4 +- .../webcodecs/videoFrame-createImageBitmap.any.js | 146 --------------------- .../tests/webcodecs/videoFrame-drawImage.any.js | 54 -------- 4 files changed, 2 insertions(+), 245 deletions(-) delete mode 100644 testing/web-platform/tests/webcodecs/videoFrame-createImageBitmap.any.js delete mode 100644 testing/web-platform/tests/webcodecs/videoFrame-drawImage.any.js diff --git a/testing/web-platform/tests/webcodecs/utils.js b/testing/web-platform/tests/webcodecs/utils.js index 168d3722048c..9b0a022af8ec 100644 --- a/testing/web-platform/tests/webcodecs/utils.js +++ b/testing/web-platform/tests/webcodecs/utils.js @@ -140,46 +140,3 @@ function verifyPlane(expected, actual) { testBuffer.slice(h * actual.stride, expected.stride), 'plane data'); } } - -// Reference values generated by: -// https://fiddle.skia.org/c/f100d4d5f085a9e09896aabcbc463868 - -const kSRGBPixel = [50, 100, 150, 255]; -const kP3Pixel = [62, 99, 146, 255]; -const kRec2020Pixel = [87, 106, 151, 255]; - -const kCanvasOptionsP3Uint8 = { - colorSpace: 'display-p3', - pixelFormat: 'uint8' -}; - -const kImageSettingOptionsP3Uint8 = { - colorSpace: 'display-p3', - storageFormat: 'uint8' -}; - -const kCanvasOptionsRec2020Uint8 = { - colorSpace: 'rec2020', - pixelFormat: 'uint8' -}; - -const kImageSettingOptionsRec2020Uint8 = { - colorSpace: 'rec2020', - storageFormat: 'uint8' -}; - -function testCanvas(ctx, width, height, expected_pixel, imageSetting, assert_compares) { - // The dup getImageData is to workaournd crbug.com/1100233 - let imageData = ctx.getImageData(0, 0, width, height, imageSetting); - let colorData = ctx.getImageData(0, 0, width, height, imageSetting).data; - const kMaxPixelToCheck = 128 * 96; - let step = width * height / kMaxPixelToCheck; - step = Math.round(step); - step = (step < 1) ? 1 : step; - for (let i = 0; i < 4 * width * height; i += (4 * step)) { - assert_compares(colorData[i], expected_pixel[0]); - assert_compares(colorData[i + 1], expected_pixel[1]); - assert_compares(colorData[i + 2], expected_pixel[2]); - assert_compares(colorData[i + 3], expected_pixel[3]); - } -} diff --git a/testing/web-platform/tests/webcodecs/video-frame.any.js b/testing/web-platform/tests/webcodecs/video-frame.any.js index 3ae10f829a0a..b02badc082f3 100644 --- a/testing/web-platform/tests/webcodecs/video-frame.any.js +++ b/testing/web-platform/tests/webcodecs/video-frame.any.js @@ -311,7 +311,7 @@ test(t => { let yPlane = {src: yPlaneData, stride: 4, rows: 2}; let uvPlaneData = new Uint8Array([1, 2, 3, 4]); let uvPlane = {src: uvPlaneData, stride: 4, rows: 1}; - let frame = new VideoFrame(fmt, [yPlane, uvPlane], vfInit); + frame = new VideoFrame(fmt, [yPlane, uvPlane], vfInit); assert_equals(frame.planes.length, 2, 'plane count'); assert_equals(frame.format, fmt, 'plane format'); verifyPlane(yPlane, frame.planes[0]); @@ -368,7 +368,7 @@ test(t => { let argbPlaneData = new Uint8Array(new Uint32Array([1, 2, 3, 4, 5, 6, 7, 8]).buffer); let argbPlane = {src: argbPlaneData, stride: 4 * 4, rows: 2}; - let frame = new VideoFrame('ABGR', [argbPlane], vfInit); + frame = new VideoFrame('ABGR', [argbPlane], vfInit); assert_equals(frame.planes.length, 1, 'plane count'); assert_equals(frame.format, 'ABGR', 'plane format'); verifyPlane(argbPlane, frame.planes[0]); diff --git a/testing/web-platform/tests/webcodecs/videoFrame-createImageBitmap.any.js b/testing/web-platform/tests/webcodecs/videoFrame-createImageBitmap.any.js deleted file mode 100644 index 7b08d292084b..000000000000 --- a/testing/web-platform/tests/webcodecs/videoFrame-createImageBitmap.any.js +++ /dev/null @@ -1,146 +0,0 @@ -// META: global=window,dedicatedworker -// META: script=/webcodecs/utils.js - -function testImageBitmapToAndFromVideoFrame(width, height, expectedPixel, - canvasOptions, imageBitmapOptions, imageSetting) { - let canvas = new OffscreenCanvas(width, height); - let ctx = canvas.getContext('2d', canvasOptions); - ctx.fillStyle = 'rgb(50, 100, 150)'; - ctx.fillRect(0, 0, width, height); - testCanvas(ctx, width, height, expectedPixel, imageSetting, assert_equals); - - return createImageBitmap(canvas, imageBitmapOptions) - .then((fromImageBitmap) => { - let videoFrame = new VideoFrame(fromImageBitmap, { - timestamp: 0 - }); - return createImageBitmap(videoFrame, imageBitmapOptions); - }) - .then((toImageBitmap) => { - let myCanvas = new OffscreenCanvas(width, height); - let myCtx = myCanvas.getContext('2d', canvasOptions); - myCtx.drawImage(toImageBitmap, 0, 0); - let tolerance = 2; - testCanvas(myCtx, width, height, expectedPixel, imageSetting, (actual, expected) => { - assert_approx_equals(actual, expected, tolerance); - }); - }); -} - -promise_test(() => { - return testImageBitmapToAndFromVideoFrame(48, 36, kSRGBPixel); -}, 'ImageBitmap<->VideoFrame with canvas(48x36 srgb uint8).'); - -promise_test(() => { - return testImageBitmapToAndFromVideoFrame(480, 360, kSRGBPixel); -}, 'ImageBitmap<->VideoFrame with canvas(480x360 srgb uint8).'); - -promise_test(() => { - return testImageBitmapToAndFromVideoFrame(48, 36, kP3Pixel, - kCanvasOptionsP3Uint8, { - colorSpaceConversion: "none" - }, kImageSettingOptionsP3Uint8); -}, 'ImageBitmap<->VideoFrame with canvas(48x36 display-p3 uint8).'); - -promise_test(() => { - return testImageBitmapToAndFromVideoFrame(480, 360, kP3Pixel, - kCanvasOptionsP3Uint8, { - colorSpaceConversion: "none" - }, kImageSettingOptionsP3Uint8); -}, 'ImageBitmap<->VideoFrame with canvas(480x360 display-p3 uint8).'); - -promise_test(() => { - return testImageBitmapToAndFromVideoFrame(48, 36, kRec2020Pixel, - kCanvasOptionsRec2020Uint8, { - colorSpaceConversion: "none" - }, kImageSettingOptionsRec2020Uint8); -}, 'ImageBitmap<->VideoFrame with canvas(48x36 rec2020 uint8).'); - -promise_test(() => { - return testImageBitmapToAndFromVideoFrame(480, 360, kRec2020Pixel, - kCanvasOptionsRec2020Uint8, { - colorSpaceConversion: "none" - }, kImageSettingOptionsRec2020Uint8); -}, 'ImageBitmap<->VideoFrame with canvas(480x360 rec2020 uint8).'); - -function testCreateImageBitmapFromVideoFrameVP9Decoder() { - // Prefers hardware decoders by setting video size as large as 720p. - const width = 1280; - const height = 720; - - let canvas = new OffscreenCanvas(width, height); - let ctx = canvas.getContext('2d'); - ctx.fillStyle = 'rgb(50, 100, 150)'; - ctx.fillRect(0, 0, width, height); - - return createImageBitmap(canvas).then((fromImageBitmap) => { - let videoFrame = new VideoFrame(fromImageBitmap, { - timestamp: 0 - }); - return new Promise((resolve, reject) => { - let processVideoFrame = (frame) => { - createImageBitmap(frame).then((toImageBitmap) => { - let myCanvas = new OffscreenCanvas(width, height); - let myCtx = myCanvas.getContext('2d'); - myCtx.drawImage(toImageBitmap, 0, 0); - let tolerance = 6; - try { - testCanvas(myCtx, width, height, kSRGBPixel, null, - (actual, expected) => { - assert_approx_equals(actual, expected, tolerance); - } - ); - } catch (error) { - reject(error); - } - resolve('Done.'); - }); - }; - - const decoderInit = { - output: processVideoFrame, - error: (e) => { - reject(e); - } - }; - - const encodedVideoConfig = { - codec: "vp09.00.10.08", - }; - - let decoder = new VideoDecoder(decoderInit); - decoder.configure(encodedVideoConfig); - - let processVideoChunk = (chunk) => { - decoder.decode(chunk); - decoder.flush(); - }; - - const encoderInit = { - output: processVideoChunk, - error: (e) => { - reject(e); - } - }; - - const videoEncoderConfig = { - codec: "vp09.00.10.08", - width: width, - height: height, - bitrate: 10e6, - framerate: 30, - }; - - let encoder = new VideoEncoder(encoderInit); - encoder.configure(videoEncoderConfig); - encoder.encode(videoFrame, { - keyFrame: true - }); - encoder.flush(); - }); - }); -} - -promise_test(() => { - return testCreateImageBitmapFromVideoFrameVP9Decoder(); -}, 'Create ImageBitmap for a VideoFrame from VP9 decoder.'); diff --git a/testing/web-platform/tests/webcodecs/videoFrame-drawImage.any.js b/testing/web-platform/tests/webcodecs/videoFrame-drawImage.any.js deleted file mode 100644 index bac4c8901907..000000000000 --- a/testing/web-platform/tests/webcodecs/videoFrame-drawImage.any.js +++ /dev/null @@ -1,54 +0,0 @@ -// META: global=window,dedicatedworker -// META: script=/webcodecs/utils.js - -function testDrawImageFromVideoFrame( - width, height, expectedPixel, canvasOptions, imageBitmapOptions, - imageSetting) { - let vfInit = {timestamp: 0, codedWidth: width, codedHeight: height}; - let u32_data = new Uint32Array(vfInit.codedWidth * vfInit.codedHeight); - u32_data.fill(0xFF966432); // 'rgb(50, 100, 150)'; - let argbPlaneData = new Uint8Array(u32_data.buffer); - let argbPlane = { - src: argbPlaneData, - stride: width * 4, - rows: height - }; - let frame = new VideoFrame('ABGR', [argbPlane], vfInit); - let canvas = new OffscreenCanvas(width, height); - let ctx = canvas.getContext('2d', canvasOptions); - ctx.drawImage(frame, 0, 0); - testCanvas(ctx, width, height, expectedPixel, imageSetting, assert_equals); - frame.close(); -} - -test(() => { - return testDrawImageFromVideoFrame(48, 36, kSRGBPixel); -}, 'drawImage(VideoFrame) with canvas(48x36 srgb uint8).'); - -test(() => { - return testDrawImageFromVideoFrame(480, 360, kSRGBPixel); -}, 'drawImage(VideoFrame) with canvas(480x360 srgb uint8).'); - -test(() => { - return testDrawImageFromVideoFrame( - 48, 36, kP3Pixel, kCanvasOptionsP3Uint8, {colorSpaceConversion: 'none'}, - kImageSettingOptionsP3Uint8); -}, 'drawImage(VideoFrame) with canvas(48x36 display-p3 uint8).'); - -test(() => { - return testDrawImageFromVideoFrame( - 480, 360, kP3Pixel, kCanvasOptionsP3Uint8, {colorSpaceConversion: 'none'}, - kImageSettingOptionsP3Uint8); -}, 'drawImage(VideoFrame) with canvas(480x360 display-p3 uint8).'); - -test(() => { - return testDrawImageFromVideoFrame( - 48, 36, kRec2020Pixel, kCanvasOptionsRec2020Uint8, - {colorSpaceConversion: 'none'}, kImageSettingOptionsRec2020Uint8); -}, 'drawImage(VideoFrame) with canvas(48x36 rec2020 uint8).'); - -test(() => { - return testDrawImageFromVideoFrame( - 480, 360, kRec2020Pixel, kCanvasOptionsRec2020Uint8, - {colorSpaceConversion: 'none'}, kImageSettingOptionsRec2020Uint8); -}, 'drawImage(VideoFrame) with canvas(480x360 rec2020 uint8).'); -- 2.11.4.GIT