Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(194)

Side by Side Diff: content/test/data/media/depth_stream_test_utilities.js

Issue 2476693002: WebGL & 16-bit video stream: upload to FLOAT texture. (Closed)
Patch Set: Nits. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 function getConstraintsForDevice(deviceLabel) { 5 function getConstraintsForDevice(deviceLabel) {
6 return new Promise(function(resolve, reject) { 6 return new Promise(function(resolve, reject) {
7 navigator.mediaDevices.enumerateDevices() 7 navigator.mediaDevices.enumerateDevices()
8 .then(function(devices) { 8 .then(function(devices) {
9 for (var i = 0; i < devices.length; ++i) { 9 for (var i = 0; i < devices.length; ++i) {
10 if (deviceLabel == devices[i].label) { 10 if (deviceLabel == devices[i].label) {
(...skipping 14 matching lines...) Expand all
25 .then(function(constraints) { 25 .then(function(constraints) {
26 if (!constraints) 26 if (!constraints)
27 return reject("No fake device found"); 27 return reject("No fake device found");
28 return navigator.mediaDevices.getUserMedia(constraints); 28 return navigator.mediaDevices.getUserMedia(constraints);
29 }).then(function(stream) { 29 }).then(function(stream) {
30 return resolve(stream); 30 return resolve(stream);
31 }); 31 });
32 }); 32 });
33 } 33 }
34 34
35 function testVideoToImageBitmap(videoElementName, success, error) 35 // Data is RGBA array data and could be used with different formats:
36 { 36 // e.g. Uint8Array, Uint8ClampedArray, Float32Array...
37 var bitmaps = {}; 37 // Value at point (row, column) is calculated as
38 var video = $(videoElementName); 38 // (top_left_value + (row + column) * step) % wrap_around. wrap_around is 255
39 var canvas = document.createElement('canvas'); 39 // (for Uint8) or 1.0 for float. See FakeVideoCaptureDevice for details.
40 canvas.width = 96; 40 function verifyPixels(
41 canvas.height = 96; 41 data, width, height, flip_y, step, wrap_around, tolerance, test_name) {
42 document.body.appendChild(canvas);
43 var p1 = createImageBitmap(video).then(function(imageBitmap) {
44 return runImageBitmapTest(imageBitmap, canvas, false); });
45 var p2 = createImageBitmap(video,
46 {imageOrientation: "none", premultiplyAlpha: "premultiply"}).then(
47 function(imageBitmap) {
48 return runImageBitmapTest(imageBitmap, canvas, false); });
49 var p3 = createImageBitmap(video,
50 {imageOrientation: "none", premultiplyAlpha: "default"}).then(
51 function(imageBitmap) {
52 return runImageBitmapTest(imageBitmap, canvas, false); });
53 var p4 = createImageBitmap(video,
54 {imageOrientation: "none", premultiplyAlpha: "none"}).then(
55 function(imageBitmap) {
56 return runImageBitmapTest(imageBitmap, canvas, false); });
57 var p5 = createImageBitmap(video,
58 {imageOrientation: "flipY", premultiplyAlpha: "premultiply"}).then(
59 function(imageBitmap) {
60 return runImageBitmapTest(imageBitmap, canvas, true); });
61 var p6 = createImageBitmap(video,
62 {imageOrientation: "flipY", premultiplyAlpha: "default"}).then(
63 function(imageBitmap) {
64 return runImageBitmapTest(imageBitmap, canvas, true); });
65 var p7 = createImageBitmap(video,
66 {imageOrientation: "flipY", premultiplyAlpha: "none"}).then(
67 function(imageBitmap) {
68 return runImageBitmapTest(imageBitmap, canvas, true); });
69 return Promise.all([p1, p2, p3, p4, p5, p6, p7]).then(success(), reason => {
70 return error({name: reason});
71 });
72 }
73
74 function runImageBitmapTest(bitmap, canvas, flipped) {
75 var context = canvas.getContext('2d');
76 context.drawImage(bitmap,0,0);
77 var imageData = context.getImageData(0, 0, canvas.width, canvas.height);
78 // Fake capture device 96x96 depth image is gradient. See also
79 // Draw16BitGradient in fake_video_capture_device.cc.
80 var color_step = 255.0 / (canvas.width + canvas.height);
81 var rowsColumnsToCheck = [[1, 1], 42 var rowsColumnsToCheck = [[1, 1],
82 [0, canvas.width - 1], 43 [0, width - 1],
83 [canvas.height - 1, 0], 44 [height - 1, 0],
84 [canvas.height - 1, canvas.width - 1], 45 [height - 1, width - 1],
85 [canvas.height - 3, canvas.width - 4]]; 46 [height - 3, width - 3]];
86 47
87 // Same value is expected for all color components. 48 // Same value is expected for all color components.
88 if (imageData.data[0] != imageData.data[1] || 49 if (data[0] != data[1] || data[0] != data[2]) {
89 imageData.data[0] != imageData.data[2]) 50 return Promise.reject(test_name + ": values " + data[0] + ", " + data[1] +
90 return Promise.reject("Values " + imageData.data[0] + ", " + 51 ", " + data[2] + " differ at top left.");
91 imageData.data[1] + ", " + imageData.data[2] + " differ at top left"); 52 }
92 53
93 // Calculate all reference points based on top left and compare. 54 // Calculate all reference points based on top left and compare.
94 for (var j = 0; j < rowsColumnsToCheck.length; ++j) { 55 for (var j = 0; j < rowsColumnsToCheck.length; ++j) {
95 var row = rowsColumnsToCheck[j][0]; 56 var row = rowsColumnsToCheck[j][0];
96 var column = rowsColumnsToCheck[j][1]; 57 var column = rowsColumnsToCheck[j][1];
97 var i = (canvas.width * row + column) * 4; 58 var i = (width * row + column) * 4;
98 if (imageData.data[i] != imageData.data[i + 1] || 59 if (data[i] != data[i + 1] || data[i] != data[i + 2]) {
99 imageData.data[i] != imageData.data[i + 2]) 60 return Promise.reject(test_name + ": values " + data[i] + ", " +
100 return Promise.reject("Values " + imageData.data[i] + ", " + 61 data[i + 1] + ", " + data[i + 2] +
101 imageData.data[i + 1] + ", " + imageData.data[i + 2] + 62 " differ at index " + i);
102 " differ at index " + i); 63 }
103 var calculated = (imageData.data[0] + 64 var calculated = (data[0] +
104 color_step * ((flipped ? -row : row) + column)) % 255; 65 step * ((flip_y ? -row : row) + column)) % wrap_around;
105 if (Math.abs(calculated - imageData.data[i]) > 2) 66 if (Math.abs(calculated - data[i]) > tolerance) {
106 return Promise.reject("Reference value " + imageData.data[i] + 67 return Promise.reject(test_name + ": reference value " + data[i] +
107 " differs from calculated: " + calculated + " at index " + i + 68 " differs from calculated: " + calculated +
108 ". TopLeft value:" + imageData.data[0]); 69 " at index (row, column) " + i + " (" + row + ", " + column +
70 "). TopLeft value:" + data[0] + ", step:" + step + ", flip_y:" +
71 flip_y);
72 }
109 } 73 }
110 return true; 74 return true;
111 } 75 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698