| 'use strict'; |
| |
| // This file introduces constants used to mock depth data for depth sensing API. |
| |
| const convertDepthBufferToArrayBuffer = function (data, desiredFormat) { |
| if(desiredFormat == "luminance-alpha") { |
| const result = new ArrayBuffer(data.length * 2); // each entry has 2 bytes |
| const view = new Uint16Array(result); |
| |
| for(let i = 0; i < data.length; ++i) { |
| view[i] = data[i]; |
| } |
| |
| return new Uint8Array(result); |
| } else if(desiredFormat == "float32") { |
| const result = new ArrayBuffer(data.length * 4); // each entry has 4 bytes |
| const view = new Float32Array(result); |
| |
| for(let i = 0; i < data.length; ++i) { |
| view[i] = data[i]; |
| } |
| |
| return new Uint8Array(result); |
| } else { |
| throw new Error("Unrecognized data format!"); |
| } |
| } |
| |
| // Let's assume that the depth values are in cm, Xcm = x * 1/100m |
| const RAW_VALUE_TO_METERS = 1/100; |
| |
| const createDepthSensingData = function() { |
| const depthSensingBufferHeight = 5; |
| const depthSensingBufferWidth = 7; |
| const depthSensingBuffer = [ |
| 1, 1, 1, 1, 1, 1, 1, // first row |
| 1, 2, 3, 4, 5, 6, 7, |
| 1, 4, 9, 16, 25, 36, 49, |
| 1, 8, 27, 64, 125, 216, 343, |
| 1, 16, 81, 256, 625, 1296, 2401, |
| ]; // depthSensingBuffer value at column c, row r is Math.pow(c+1, r). |
| |
| // Let's assume that the origin of the depth buffer is in the bottom right |
| // corner, with X's growing to the left and Y's growing upwards. |
| // This corresponds to the origin at 2401 in the above matrix, with X axis |
| // growing from 2401 towards 1296, and Y axis growing from 2401 towards 343. |
| // This corresponds to a rotation around Z axis by 180 degrees, with origin at [1,1]. |
| const depthSensingBufferFromViewerTransform = { |
| position: [1, 1, 0], |
| orientation: [0, 0, 1, 0], |
| }; |
| |
| return { |
| depthData: convertDepthBufferToArrayBuffer(depthSensingBuffer, "luminance-alpha"), |
| width: depthSensingBufferWidth, |
| height: depthSensingBufferHeight, |
| normDepthBufferFromNormView: depthSensingBufferFromViewerTransform, |
| rawValueToMeters: RAW_VALUE_TO_METERS, |
| }; |
| }; |
| |
| const DEPTH_SENSING_DATA = createDepthSensingData(); |
| |
| // Returns expected depth value at |column|, |row| coordinates, expressed |
| // in depth buffer's coordinate system. |
| const getExpectedValueAt = function(column, row) { |
| return Math.pow(column+1, row) * RAW_VALUE_TO_METERS; |
| }; |
| |
| const VALID_DEPTH_CONFIG_CPU_USAGE = { |
| usagePreference: ['cpu-optimized'], |
| dataFormatPreference: ['luminance-alpha', 'float32'], |
| }; |
| |
| const VALID_DEPTH_CONFIG_GPU_USAGE = { |
| usagePreference: ['gpu-optimized'], |
| dataFormatPreference: ['luminance-alpha', 'float32'], |
| }; |