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 f41a44a..b258f4f 100644
Binary files a/nokhwajs/nokhwa_bg.wasm and b/nokhwajs/nokhwa_bg.wasm differ
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).