From f661621545188aabbc9ca32bcaaaa676e2298b1e Mon Sep 17 00:00:00 2001 From: l1npengtul Date: Thu, 26 Aug 2021 01:24:59 +0900 Subject: [PATCH] example jscam: get constraints added, request permission fixed; jscamera rs: fixed getconstraints, shortened; make npm sh: removed cargo clean; add .vscode to gitignore --- .gitignore | 2 + Cargo.toml | 1 + examples/jscam/package.json | 2 +- examples/jscam/src/index.html | 4 +- examples/jscam/src/index.js | 30 +++++- make-npm.sh | 1 - nokhwajs/nokhwa.d.ts | 4 +- nokhwajs/nokhwa.js | 179 ++++++++++++++++++---------------- nokhwajs/nokhwa_bg.wasm | Bin 116843 -> 117547 bytes nokhwajs/nokhwa_bg.wasm.d.ts | 4 +- nokhwajs/package.json | 2 +- src/js_camera.rs | 92 ++++++----------- 12 files changed, 162 insertions(+), 159 deletions(-) diff --git a/.gitignore b/.gitignore index e778893..b0dd1ce 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,6 @@ Cargo.lock nokhwa.iml .vs +.vscode + /pkg \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index 1a8b5fc..409f94d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -104,6 +104,7 @@ optional = true version = "0.3.51" # why features = [ + "console", "CanvasRenderingContext2d", "CssStyleDeclaration", "Document", diff --git a/examples/jscam/package.json b/examples/jscam/package.json index 21f153b..4392103 100644 --- a/examples/jscam/package.json +++ b/examples/jscam/package.json @@ -11,7 +11,7 @@ "author": "l1npengtul", "license": "MPL-2.0", "dependencies": { - "nokhwa": "^0.4.2", + "nokhwa": "file:../../nokhwajs", "wasm-loader": "^1.3.0" }, "devDependencies": { diff --git a/examples/jscam/src/index.html b/examples/jscam/src/index.html index 3aedc3a..6089279 100644 --- a/examples/jscam/src/index.html +++ b/examples/jscam/src/index.html @@ -17,9 +17,9 @@
-
    +
    - +
diff --git a/examples/jscam/src/index.js b/examples/jscam/src/index.js index a254020..81ac02f 100644 --- a/examples/jscam/src/index.js +++ b/examples/jscam/src/index.js @@ -1,10 +1,32 @@ -import init, {requestPermissions} from 'nokhwa'; +import init, {requestPermissions, queryConstraints} from 'nokhwa'; async function start() { await init(); } start(); -document.getElementById('requestButton').addEventListener('click', function(e) { - requestPermissions() -} ); +const requestStatus = document.getElementById("requestStatus"); +const requestButton = document.getElementById("requestButton"); + +requestButton.addEventListener("click", function(event) { + requestPermissions().then( + ok => { + requestStatus.innerHTML = "Granted :D"; + }, + err => { + requestStatus.innerHTML = "Denied :( due to " + err.toString(); + } + ) +}); + +const constraintList = document.getElementById("constraintList"); +const constraintButton = document.getElementById("constraintButton"); + +constraintButton.addEventListener("click", function(event) { + constraintList.innerHTML = ""; + queryConstraints().forEach((element) => { + var new_list_element = document.createElement("li"); + new_list_element.innerHTML = element.toString(); + constraintList.appendChild(new_list_element); + }) +}); \ No newline at end of file diff --git a/make-npm.sh b/make-npm.sh index 4ba10a4..c864f28 100755 --- a/make-npm.sh +++ b/make-npm.sh @@ -6,6 +6,5 @@ # file, You can obtain one at https://mozilla.org/MPL/2.0/. # -cargo clean wasm-pack build --release --target web -- --features "input-jscam, output-wasm, small-wasm, test-fail-warning" --no-default-features mv pkg/nokhwa* nokhwajs/ diff --git a/nokhwajs/nokhwa.d.ts b/nokhwajs/nokhwa.d.ts index fad6309..f3feab5 100644 --- a/nokhwajs/nokhwa.d.ts +++ b/nokhwajs/nokhwa.d.ts @@ -816,11 +816,11 @@ export interface InitOutput { readonly __wbindgen_malloc: (a: number) => number; readonly __wbindgen_realloc: (a: number, b: number, c: number) => number; readonly __wbindgen_export_2: WebAssembly.Table; - readonly _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hcf34bb914ec8dc3e: (a: number, b: number, c: number) => void; + readonly _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__ha79fab5af65c7d0b: (a: number, b: number, c: number) => void; readonly __wbindgen_add_to_stack_pointer: (a: number) => number; readonly __wbindgen_free: (a: number, b: number) => void; readonly __wbindgen_exn_store: (a: number) => void; - readonly wasm_bindgen__convert__closures__invoke2_mut__h2c139c16959e39a8: (a: number, b: number, c: number, d: number) => void; + readonly wasm_bindgen__convert__closures__invoke2_mut__hf03b20e2f7b10743: (a: number, b: number, c: number, d: number) => void; } /** diff --git a/nokhwajs/nokhwa.js b/nokhwajs/nokhwa.js index 0195903..f12cbc6 100644 --- a/nokhwajs/nokhwa.js +++ b/nokhwajs/nokhwa.js @@ -202,8 +202,8 @@ function makeMutClosure(arg0, arg1, dtor, f) { return real; } -function __wbg_adapter_24(arg0, arg1, arg2) { - wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hcf34bb914ec8dc3e(arg0, arg1, addHeapObject(arg2)); +function __wbg_adapter_22(arg0, arg1, arg2) { + wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__ha79fab5af65c7d0b(arg0, arg1, addHeapObject(arg2)); } /** @@ -278,8 +278,8 @@ function passArray8ToWasm0(arg, malloc) { WASM_VECTOR_LEN = arg.length; return ptr; } -function __wbg_adapter_204(arg0, arg1, arg2, arg3) { - wasm.wasm_bindgen__convert__closures__invoke2_mut__h2c139c16959e39a8(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3)); +function __wbg_adapter_206(arg0, arg1, arg2, arg3) { + wasm.wasm_bindgen__convert__closures__invoke2_mut__hf03b20e2f7b10743(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3)); } /** @@ -569,7 +569,7 @@ export class JSCamera { return CameraConstraints.__wrap(ret); } /** - * Sets the JSCameraConstraints. This calls [`apply_constraints`](crate::js_camera::JSCamera::apply_constraints) internally. + * Sets the [`JSCameraConstraints`]. This calls [`apply_constraints`](crate::js_camera::JSCamera::apply_constraints) internally. * * # Errors * See [`apply_constraints`](crate::js_camera::JSCamera::apply_constraints). @@ -1762,183 +1762,190 @@ async function init(input) { var ret = false; return ret; }; - imports.wbg.__wbg_camerainfo_new = function(arg0) { - var ret = CameraInfo.__wrap(arg0); - return addHeapObject(ret); - }; - imports.wbg.__wbg_instanceof_Window_9c4fd26090e1d029 = function(arg0) { + imports.wbg.__wbg_instanceof_Window_11e25482011fc506 = function(arg0) { var ret = getObject(arg0) instanceof Window; return ret; }; - imports.wbg.__wbg_document_249e9cf340780f93 = function(arg0) { + imports.wbg.__wbg_document_5aff8cd83ef968f5 = function(arg0) { var ret = getObject(arg0).document; return isLikeNone(ret) ? 0 : addHeapObject(ret); }; - imports.wbg.__wbg_navigator_fdf3521d0e190a9b = function(arg0) { + imports.wbg.__wbg_navigator_5c90643c2a2b6cda = function(arg0) { var ret = getObject(arg0).navigator; return addHeapObject(ret); }; - imports.wbg.__wbg_createElement_ba61aad8af6be7f4 = function() { return handleError(function (arg0, arg1, arg2) { + imports.wbg.__wbg_createElement_ac65a6ce60c4812c = function() { return handleError(function (arg0, arg1, arg2) { var ret = getObject(arg0).createElement(getStringFromWasm0(arg1, arg2)); return addHeapObject(ret); }, arguments) }; - imports.wbg.__wbg_getElementById_2ee254bbb67b6ae1 = function(arg0, arg1, arg2) { + imports.wbg.__wbg_getElementById_b180ea4ada06a837 = function(arg0, arg1, arg2) { var ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2)); return isLikeNone(ret) ? 0 : addHeapObject(ret); }; - imports.wbg.__wbg_clone_145f41ee37450a09 = function(arg0) { + imports.wbg.__wbg_clone_907d18181dd9fdec = function(arg0) { var ret = getObject(arg0).clone(); return addHeapObject(ret); }; - imports.wbg.__wbg_instanceof_MediaDeviceInfo_c114f21ce814c0c1 = function(arg0) { + imports.wbg.__wbg_instanceof_MediaDeviceInfo_cdf31c28bb9459ae = function(arg0) { var ret = getObject(arg0) instanceof MediaDeviceInfo; return ret; }; - imports.wbg.__wbg_deviceId_43087f5284cd4616 = function(arg0, arg1) { + imports.wbg.__wbg_deviceId_52909f91167fa503 = function(arg0, arg1) { var ret = getObject(arg1).deviceId; var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); var len0 = WASM_VECTOR_LEN; getInt32Memory0()[arg0 / 4 + 1] = len0; getInt32Memory0()[arg0 / 4 + 0] = ptr0; }; - imports.wbg.__wbg_kind_edfc7c230c6229d4 = function(arg0) { + imports.wbg.__wbg_kind_7f46301e232da76a = function(arg0) { var ret = getObject(arg0).kind; return addHeapObject(ret); }; - imports.wbg.__wbg_label_c9e2693761406b45 = function(arg0, arg1) { + imports.wbg.__wbg_label_a44600832ec14867 = function(arg0, arg1) { var ret = getObject(arg1).label; var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); var len0 = WASM_VECTOR_LEN; getInt32Memory0()[arg0 / 4 + 1] = len0; getInt32Memory0()[arg0 / 4 + 0] = ptr0; }; - imports.wbg.__wbg_groupId_bcd2aac231ef907e = function(arg0, arg1) { + imports.wbg.__wbg_groupId_f6b7aa74f6b78e09 = function(arg0, arg1) { var ret = getObject(arg1).groupId; var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); var len0 = WASM_VECTOR_LEN; getInt32Memory0()[arg0 / 4 + 1] = len0; getInt32Memory0()[arg0 / 4 + 0] = ptr0; }; - imports.wbg.__wbg_data_7db9e348ce1855fa = function(arg0, arg1) { + imports.wbg.__wbg_enumerateDevices_fe5818b3c5c78822 = function() { return handleError(function (arg0) { + var ret = getObject(arg0).enumerateDevices(); + return addHeapObject(ret); + }, arguments) }; + imports.wbg.__wbg_getSupportedConstraints_fa3e91cb9dd6da4c = function(arg0) { + var ret = getObject(arg0).getSupportedConstraints(); + return addHeapObject(ret); + }; + imports.wbg.__wbg_getUserMedia_c7f57dc542dcd8c6 = function() { return handleError(function (arg0, arg1) { + var ret = getObject(arg0).getUserMedia(getObject(arg1)); + return addHeapObject(ret); + }, arguments) }; + imports.wbg.__wbg_data_315524ada7b563f4 = function(arg0, arg1) { var ret = getObject(arg1).data; var ptr0 = passArray8ToWasm0(ret, wasm.__wbindgen_malloc); var len0 = WASM_VECTOR_LEN; getInt32Memory0()[arg0 / 4 + 1] = len0; getInt32Memory0()[arg0 / 4 + 0] = ptr0; }; - imports.wbg.__wbg_enumerateDevices_d31f8ad01062db66 = function() { return handleError(function (arg0) { - var ret = getObject(arg0).enumerateDevices(); - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_getUserMedia_307474a524d5b8f0 = function() { return handleError(function (arg0) { - var ret = getObject(arg0).getUserMedia(); - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_getUserMedia_43dccb6c4bc010a6 = function() { return handleError(function (arg0, arg1) { - var ret = getObject(arg0).getUserMedia(getObject(arg1)); - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_setAttribute_0b50656f1ccc45bf = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) { - getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4)); - }, arguments) }; - imports.wbg.__wbg_instanceof_CanvasRenderingContext2d_eea9cd931eb496b7 = function(arg0) { - var ret = getObject(arg0) instanceof CanvasRenderingContext2D; - return ret; - }; - imports.wbg.__wbg_drawImage_932bd490db48b1d4 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) { - getObject(arg0).drawImage(getObject(arg1), arg2, arg3, arg4, arg5); - }, arguments) }; - imports.wbg.__wbg_getImageData_6e56dc172cd2ed36 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) { - var ret = getObject(arg0).getImageData(arg1, arg2, arg3, arg4); - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_setsrcObject_cf10011aa69a6341 = function(arg0, arg1) { - getObject(arg0).srcObject = getObject(arg1); - }; - imports.wbg.__wbg_instanceof_HtmlCanvasElement_e0e251da2aa0b541 = function(arg0) { + imports.wbg.__wbg_instanceof_HtmlCanvasElement_fd3cbbe3906d7792 = function(arg0) { var ret = getObject(arg0) instanceof HTMLCanvasElement; return ret; }; - imports.wbg.__wbg_setwidth_fd251e9da5abcced = function(arg0, arg1) { + imports.wbg.__wbg_setwidth_f3c88eb520ba8d47 = function(arg0, arg1) { getObject(arg0).width = arg1 >>> 0; }; - imports.wbg.__wbg_setheight_5b882973e84fa13c = function(arg0, arg1) { + imports.wbg.__wbg_setheight_5a1abba41e35c42a = function(arg0, arg1) { getObject(arg0).height = arg1 >>> 0; }; - imports.wbg.__wbg_getContext_d778ffc8203f64ae = function() { return handleError(function (arg0, arg1, arg2) { + imports.wbg.__wbg_getContext_813df131fcbd6e91 = function() { return handleError(function (arg0, arg1, arg2) { var ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2)); return isLikeNone(ret) ? 0 : addHeapObject(ret); }, arguments) }; - imports.wbg.__wbg_toDataURL_b102ad8b69bcfda4 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) { + imports.wbg.__wbg_toDataURL_fa0138af5cf03aa2 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) { var ret = getObject(arg1).toDataURL(getStringFromWasm0(arg2, arg3), getObject(arg4)); var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); var len0 = WASM_VECTOR_LEN; getInt32Memory0()[arg0 / 4 + 1] = len0; getInt32Memory0()[arg0 / 4 + 0] = ptr0; }, arguments) }; - imports.wbg.__wbg_mediaDevices_73cffc9c73b5584a = function() { return handleError(function (arg0) { - var ret = getObject(arg0).mediaDevices; - return addHeapObject(ret); - }, arguments) }; - imports.wbg.__wbg_instanceof_HtmlVideoElement_16b7e72c92542fa4 = function(arg0) { + imports.wbg.__wbg_instanceof_HtmlVideoElement_acfaf2202e3e0d29 = function(arg0) { var ret = getObject(arg0) instanceof HTMLVideoElement; return ret; }; - imports.wbg.__wbg_setwidth_f98394ec7accd8f5 = function(arg0, arg1) { + imports.wbg.__wbg_setwidth_4006f4b33b15224b = function(arg0, arg1) { getObject(arg0).width = arg1 >>> 0; }; - imports.wbg.__wbg_videoWidth_0651aae47a30560a = function(arg0) { + imports.wbg.__wbg_videoWidth_6bb879ceeecadf27 = function(arg0) { var ret = getObject(arg0).videoWidth; return ret; }; - imports.wbg.__wbg_videoHeight_0cce9c78bfe90582 = function(arg0) { + imports.wbg.__wbg_videoHeight_384ef46e0b174f86 = function(arg0) { var ret = getObject(arg0).videoHeight; return ret; }; - imports.wbg.__wbg_appendChild_6ae001e6d3556190 = function() { return handleError(function (arg0, arg1) { + imports.wbg.__wbg_setAttribute_27ca65e30a1c3c4a = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4)); + }, arguments) }; + imports.wbg.__wbg_log_9a99fb1af846153b = function(arg0) { + console.log(getObject(arg0)); + }; + imports.wbg.__wbg_instanceof_CanvasRenderingContext2d_779e79c4121aa91b = function(arg0) { + var ret = getObject(arg0) instanceof CanvasRenderingContext2D; + return ret; + }; + imports.wbg.__wbg_drawImage_13e48c4e7b9bcf28 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) { + getObject(arg0).drawImage(getObject(arg1), arg2, arg3, arg4, arg5); + }, arguments) }; + imports.wbg.__wbg_getImageData_b5842f1d6ce40388 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) { + var ret = getObject(arg0).getImageData(arg1, arg2, arg3, arg4); + return addHeapObject(ret); + }, arguments) }; + imports.wbg.__wbg_setsrcObject_340bcd93145a797b = function(arg0, arg1) { + getObject(arg0).srcObject = getObject(arg1); + }; + imports.wbg.__wbg_mediaDevices_b3973ebf40387065 = function() { return handleError(function (arg0) { + var ret = getObject(arg0).mediaDevices; + return addHeapObject(ret); + }, arguments) }; + imports.wbg.__wbg_appendChild_6ed236bb79c198df = function() { return handleError(function (arg0, arg1) { var ret = getObject(arg0).appendChild(getObject(arg1)); return addHeapObject(ret); }, arguments) }; - imports.wbg.__wbg_get_a4f61a2fb16987bc = function(arg0, arg1) { + imports.wbg.__wbg_get_73c087db0a496c21 = function(arg0, arg1) { var ret = getObject(arg0)[arg1 >>> 0]; return addHeapObject(ret); }; - imports.wbg.__wbg_length_f86925e8c69110ea = function(arg0) { + imports.wbg.__wbg_length_c5fa152b8c3f311f = function(arg0) { var ret = getObject(arg0).length; return ret; }; - imports.wbg.__wbg_new_fc8ee963685ada41 = function() { + imports.wbg.__wbg_new_ec75d0d5815be736 = function() { var ret = new Array(); return addHeapObject(ret); }; - imports.wbg.__wbg_newnoargs_68424965d85fcb08 = function(arg0, arg1) { + imports.wbg.__wbg_newnoargs_1a11e7e8c906996c = function(arg0, arg1) { var ret = new Function(getStringFromWasm0(arg0, arg1)); return addHeapObject(ret); }; - imports.wbg.__wbg_call_9698e9b9c4668ae0 = function() { return handleError(function (arg0, arg1) { + imports.wbg.__wbg_call_e91f71ddf1f45cff = function() { return handleError(function (arg0, arg1) { var ret = getObject(arg0).call(getObject(arg1)); return addHeapObject(ret); }, arguments) }; - imports.wbg.__wbg_from_cfe9a017acc727a1 = function(arg0) { + imports.wbg.__wbg_new_4b48f9f8159fea77 = function() { + var ret = new Object(); + return addHeapObject(ret); + }; + imports.wbg.__wbg_from_28631399e1e647cb = function(arg0) { var ret = Array.from(getObject(arg0)); return addHeapObject(ret); }; - imports.wbg.__wbg_push_ef0a52724cfe2a05 = function(arg0, arg1) { + imports.wbg.__wbg_push_0daae9343162dbe7 = function(arg0, arg1) { var ret = getObject(arg0).push(getObject(arg1)); return ret; }; - imports.wbg.__wbg_call_4438b4bab9ab5268 = function() { return handleError(function (arg0, arg1, arg2) { + imports.wbg.__wbg_call_e3c72355d091d5d4 = function() { return handleError(function (arg0, arg1, arg2) { var ret = getObject(arg0).call(getObject(arg1), getObject(arg2)); return addHeapObject(ret); }, arguments) }; - imports.wbg.__wbg_new_ae366b99da42660b = function(arg0, arg1) { + imports.wbg.__wbg_keys_9f3a5511f779059c = function(arg0) { + var ret = Object.keys(getObject(arg0)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_new_119f8177d8717c43 = function(arg0, arg1) { try { var state0 = {a: arg0, b: arg1}; var cb0 = (arg0, arg1) => { const a = state0.a; state0.a = 0; try { - return __wbg_adapter_204(a, state0.b, arg0, arg1); + return __wbg_adapter_206(a, state0.b, arg0, arg1); } finally { state0.a = a; } @@ -1949,31 +1956,31 @@ async function init(input) { state0.a = state0.b = 0; } }; - imports.wbg.__wbg_resolve_84f06d050082a771 = function(arg0) { + imports.wbg.__wbg_resolve_7161ec6fd5b1cd29 = function(arg0) { var ret = Promise.resolve(getObject(arg0)); return addHeapObject(ret); }; - imports.wbg.__wbg_then_fd35af33296a58d7 = function(arg0, arg1) { + imports.wbg.__wbg_then_6d5072fec3fdb237 = function(arg0, arg1) { var ret = getObject(arg0).then(getObject(arg1)); return addHeapObject(ret); }; - imports.wbg.__wbg_then_c919ca41618a24c2 = function(arg0, arg1, arg2) { + imports.wbg.__wbg_then_4f3c7f6f3d36634a = function(arg0, arg1, arg2) { var ret = getObject(arg0).then(getObject(arg1), getObject(arg2)); return addHeapObject(ret); }; - imports.wbg.__wbg_self_3df7c33e222cd53b = function() { return handleError(function () { + imports.wbg.__wbg_self_b4546ea7b590539e = function() { return handleError(function () { var ret = self.self; return addHeapObject(ret); }, arguments) }; - imports.wbg.__wbg_window_0f90182e6c405ff2 = function() { return handleError(function () { + imports.wbg.__wbg_window_c279fea81f426a68 = function() { return handleError(function () { var ret = window.window; return addHeapObject(ret); }, arguments) }; - imports.wbg.__wbg_globalThis_787cfd4f25a35141 = function() { return handleError(function () { + imports.wbg.__wbg_globalThis_038a6ea0ff17789f = function() { return handleError(function () { var ret = globalThis.globalThis; return addHeapObject(ret); }, arguments) }; - imports.wbg.__wbg_global_af2eb7b1369372ed = function() { return handleError(function () { + imports.wbg.__wbg_global_4f93ce884bcee597 = function() { return handleError(function () { var ret = global.global; return addHeapObject(ret); }, arguments) }; @@ -1981,10 +1988,10 @@ async function init(input) { var ret = getObject(arg0) === undefined; return ret; }; - imports.wbg.__wbindgen_is_string = function(arg0) { - var ret = typeof(getObject(arg0)) === 'string'; + imports.wbg.__wbg_set_d29a397c9cc5d746 = function() { return handleError(function (arg0, arg1, arg2) { + var ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2)); return ret; - }; + }, arguments) }; imports.wbg.__wbindgen_string_get = function(arg0, arg1) { const obj = getObject(arg1); var ret = typeof(obj) === 'string' ? obj : undefined; @@ -2006,8 +2013,8 @@ async function init(input) { imports.wbg.__wbindgen_rethrow = function(arg0) { throw takeObject(arg0); }; - imports.wbg.__wbindgen_closure_wrapper712 = function(arg0, arg1, arg2) { - var ret = makeMutClosure(arg0, arg1, 65, __wbg_adapter_24); + imports.wbg.__wbindgen_closure_wrapper726 = function(arg0, arg1, arg2) { + var ret = makeMutClosure(arg0, arg1, 65, __wbg_adapter_22); return addHeapObject(ret); }; diff --git a/nokhwajs/nokhwa_bg.wasm b/nokhwajs/nokhwa_bg.wasm index f41a44aed73fc87302b20f1a299590ba709f7db0..b258f4fa5083d1f4e47a4b750cbbddc38f9ab49f 100644 GIT binary patch delta 33065 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 diff --git a/nokhwajs/nokhwa_bg.wasm.d.ts b/nokhwajs/nokhwa_bg.wasm.d.ts index 6e0e8d7..c333462 100644 --- a/nokhwajs/nokhwa_bg.wasm.d.ts +++ b/nokhwajs/nokhwa_bg.wasm.d.ts @@ -106,8 +106,8 @@ export function resolution_y(a: number): number; export function __wbindgen_malloc(a: number): number; export function __wbindgen_realloc(a: number, b: number, c: number): number; export const __wbindgen_export_2: WebAssembly.Table; -export function _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hcf34bb914ec8dc3e(a: number, b: number, c: number): void; +export function _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__ha79fab5af65c7d0b(a: number, b: number, c: number): void; export function __wbindgen_add_to_stack_pointer(a: number): number; export function __wbindgen_free(a: number, b: number): void; export function __wbindgen_exn_store(a: number): void; -export function wasm_bindgen__convert__closures__invoke2_mut__h2c139c16959e39a8(a: number, b: number, c: number, d: number): void; +export function wasm_bindgen__convert__closures__invoke2_mut__hf03b20e2f7b10743(a: number, b: number, c: number, d: number): void; diff --git a/nokhwajs/package.json b/nokhwajs/package.json index 46ac3f3..294b447 100644 --- a/nokhwajs/package.json +++ b/nokhwajs/package.json @@ -4,7 +4,7 @@ "l1npengtul " ], "description": "A Simple-to-use, cross-platform Rust Webcam Capture Library", - "version": "0.4.2", + "version": "0.4.3", "license": "MPL-2.0", "repository": { "type": "git", diff --git a/src/js_camera.rs b/src/js_camera.rs index f743636..2f030b3 100644 --- a/src/js_camera.rs +++ b/src/js_camera.rs @@ -24,9 +24,9 @@ use wasm_bindgen::prelude::wasm_bindgen; use wasm_bindgen::{JsCast, JsValue}; use wasm_bindgen_futures::JsFuture; use web_sys::{ - CanvasRenderingContext2d, Document, Element, HtmlCanvasElement, HtmlVideoElement, ImageData, - MediaDeviceInfo, MediaDeviceKind, MediaDevices, MediaStream, MediaStreamConstraints, Navigator, - Node, Window, + console::log_1, CanvasRenderingContext2d, Document, Element, HtmlCanvasElement, + HtmlVideoElement, ImageData, MediaDeviceInfo, MediaDeviceKind, MediaDevices, MediaStream, + MediaStreamConstraints, Navigator, Node, Window, }; #[cfg(feature = "output-wgpu")] use wgpu::{ @@ -39,19 +39,6 @@ use wgpu::{ // intellij 2021.2 review: i like structure window, 4 pengs / 5 pengs -const GET_CONSTRAINT_LIST_JS_CODE_STR: &str = r#" -let constraints_list = navigator.mediaDevices.getSupportedConstraints(); -let constraint_string_arr = []; - -for (let constraint in supportedConstraints) { - if (constraints_list.hasOwnProperty(constraint)) { - constraint_string_arr.push(constraint.to_string()); - } -} - -return constraint_string_arr; -"#; - fn window() -> Result { match web_sys::window() { Some(win) => Ok(win), @@ -173,7 +160,11 @@ pub fn request_permission() -> Result { let navigator = window.navigator(); let media_devices = media_devices(&navigator)?; - match media_devices.get_user_media() { + match media_devices.get_user_media_with_constraints( + MediaStreamConstraints::new() + .video(&JsValue::from_bool(true)) + .audio(&JsValue::from_bool(false)), + ) { Ok(promise) => Ok(promise), Err(why) => { return Err(NokhwaError::StructureError { @@ -254,7 +245,10 @@ pub async fn query_js_cameras() -> Result, NokhwaError> { #[cfg_attr(feature = "output-wasm", wasm_bindgen(js_name = queryCameras))] pub async fn js_query_js_cameras() -> Result { match query_js_cameras().await { - Ok(cameras) => Ok(cameras.into_iter().map(JsValue::from).collect()), + Ok(cameras) => Ok(cameras + .into_iter() + .map(|e| JsValue::from(e.to_string())) + .collect()), Err(why) => Err(JsValue::from(why.to_string())), } } @@ -263,49 +257,26 @@ pub async fn js_query_js_cameras() -> Result { /// # Errors /// This will error if there is no valid web context or the web API is not supported pub fn query_supported_constraints() -> Result, NokhwaError> { - let js_supported_fn = Function::new_no_args(GET_CONSTRAINT_LIST_JS_CODE_STR); - match js_supported_fn.call0(&JsValue::NULL) { - Ok(value) => { - let value: JsValue = value; - let supported_cap_array: Array = Array::from(&value); + let window: Window = window()?; + let navigator = window.navigator(); + let media_devices = media_devices(&navigator)?; - let mut capability_list = vec![]; - for idx_supported in 0_u32..supported_cap_array.length() { - let supported = match supported_cap_array.get(idx_supported).dyn_ref::() { - Some(v) => { - let v: &JsValue = v.as_ref(); - let s: String = match v.as_string() { - Some(str) => str, - None => { - return Err(NokhwaError::StructureError { - structure: "Query Supported Constraints String None" - .to_string(), - error: "None".to_string(), - }) - } - }; - s - } - None => { - continue; - } - }; + let supported_constraints = JsValue::from(media_devices.get_supported_constraints()); + let dict_supported_constraints = Object::from(supported_constraints); - let capability = match JSCameraSupportedCapabilities::try_from(supported) { - Ok(cap) => cap, - Err(_) => { - continue; - } - }; - capability_list.push(capability); - } - Ok(capability_list) + let mut capabilities_vec = vec![]; + for constraint in Object::keys(&dict_supported_constraints).iter() { + let constraint_str = JsValue::from(JsString::from(constraint)) + .as_string() + .unwrap_or_default(); + + log_1(&JsValue::from(&constraint_str)); + // swallow errors + if let Ok(cap) = JSCameraSupportedCapabilities::try_from(constraint_str) { + capabilities_vec.push(cap); } - Err(why) => Err(NokhwaError::StructureError { - structure: "JSCameraSupportedCapabilities List Dict Function".to_string(), - error: why.as_string().unwrap_or_else(|| "".to_string()), - }), } + Ok(capabilities_vec) } /// Queries the browser's supported constraints using [`navigator.mediaDevices.getSupportedConstraints()`](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getSupportedConstraints) @@ -378,7 +349,7 @@ impl TryFrom for JSCameraSupportedCapabilities { fn try_from(value: String) -> Result { let value = value.as_str(); - Ok(match value { + let result = match value { "deviceId" => JSCameraSupportedCapabilities::DeviceID, "groupId" => JSCameraSupportedCapabilities::GroupID, "aspectRatio" => JSCameraSupportedCapabilities::AspectRatio, @@ -393,7 +364,8 @@ impl TryFrom for JSCameraSupportedCapabilities { error: "No Match Str".to_string(), }) } - }) + }; + Ok(result) } } @@ -1744,7 +1716,7 @@ impl JSCamera { self.constraints.clone() } - /// Sets the JSCameraConstraints. This calls [`apply_constraints`](crate::js_camera::JSCamera::apply_constraints) internally. + /// Sets the [`JSCameraConstraints`]. This calls [`apply_constraints`](crate::js_camera::JSCamera::apply_constraints) internally. /// /// # Errors /// See [`apply_constraints`](crate::js_camera::JSCamera::apply_constraints).