@camera.ui/camera-ui-wasm-motion 0.0.11 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
1
  export declare const DEFAULT_MOTION_AREA = 500;
2
- export declare const DEFAULT_THRESHOLD = 20;
2
+ export declare const DEFAULT_THRESHOLD = 50;
3
3
  export declare const DEFAULT_BLUR_RADIUS = 3;
4
- export declare const DEFAULT_DILATION_SIZE = 15;
4
+ export declare const DEFAULT_DILATION_SIZE = 31;
package/dist/defaults.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export const DEFAULT_MOTION_AREA = 500;
2
- export const DEFAULT_THRESHOLD = 20;
2
+ export const DEFAULT_THRESHOLD = 50;
3
3
  export const DEFAULT_BLUR_RADIUS = 3;
4
- export const DEFAULT_DILATION_SIZE = 15;
4
+ export const DEFAULT_DILATION_SIZE = 31;
5
5
  //# sourceMappingURL=defaults.js.map
@@ -8,24 +8,14 @@ export declare class CameraDetector {
8
8
  private started;
9
9
  private closed;
10
10
  private restarting;
11
- private wasmModule?;
12
- private previousFramePtr;
13
- private framePtr;
14
- private boxesPtr;
15
- private tempPtr;
16
- private visitedPtr;
17
- private queuePtr;
18
- private memoryBuffer;
11
+ private initiated;
12
+ private wasmExports?;
19
13
  constructor(cameraDevice: CameraDevice, api: PluginAPI, logger: LoggerService);
20
14
  start(): Promise<void>;
15
+ private initiateWASM;
21
16
  private setupMemory;
17
+ private startDetection;
22
18
  close(): void;
23
19
  restart(): Promise<void>;
24
- private reset;
25
- private startDetection;
26
- private setupPreviousFrame;
27
- private getMotionData;
28
20
  private createCameraStorage;
29
- private unpinSafe;
30
- private collectSafe;
31
21
  }
package/dist/detector.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { instantiate } from '@assemblyscript/loader';
2
- import fs from 'node:fs';
2
+ import { readFileSync } from 'node:fs';
3
3
  import { dirname, resolve } from 'node:path';
4
4
  import { fileURLToPath } from 'node:url';
5
5
  import { DEFAULT_BLUR_RADIUS, DEFAULT_DILATION_SIZE, DEFAULT_MOTION_AREA, DEFAULT_THRESHOLD } from './defaults.js';
@@ -13,14 +13,8 @@ export class CameraDetector {
13
13
  started = false;
14
14
  closed = false;
15
15
  restarting = false;
16
- wasmModule;
17
- previousFramePtr = null;
18
- framePtr = 0;
19
- boxesPtr = 0;
20
- tempPtr = 0;
21
- visitedPtr = 0;
22
- queuePtr = 0;
23
- memoryBuffer;
16
+ initiated = false;
17
+ wasmExports;
24
18
  constructor(cameraDevice, api, logger) {
25
19
  this.api = api;
26
20
  this.cameraDevice = cameraDevice;
@@ -40,83 +34,47 @@ export class CameraDetector {
40
34
  this.started = true;
41
35
  this.closed = false;
42
36
  this.logger.log(`Starting motion detection for camera ${this.cameraDevice.name}`);
43
- if (!this.wasmModule) {
44
- const wasmPath = resolve(__dirname, './wasm/build/detector.wasm');
45
- this.wasmModule = await instantiate(fs.readFileSync(wasmPath), {
46
- console: {
47
- log: (messagePtr) => {
48
- this.logger.log(this.wasmModule.exports.__getString(messagePtr));
49
- },
50
- },
51
- env: {
52
- abort: (msg, file, line, column) => {
53
- this.logger.warn(`WASM abort message: ${this.wasmModule.exports.__getString(msg)} at ${this.wasmModule.exports.__getString(file)}:${line}:${column}`);
54
- },
55
- },
56
- });
57
- this.setupMemory();
58
- }
37
+ await this.initiateWASM();
59
38
  this.startDetection().catch((error) => {
60
39
  this.logger.error(this.cameraDevice.name, 'Error generating frames', error);
61
40
  this.restart();
62
41
  });
63
42
  }
64
43
  }
65
- setupMemory() {
66
- if (!this.wasmModule) {
67
- throw new Error('Wasm not initiated');
68
- }
69
- this.memoryBuffer = new Uint8Array(this.wasmModule.exports.memory.buffer);
70
- const width = this.cameraDevice.frameWorkerSettings.resolution;
71
- const maxFrameLength = width * width;
72
- this.tempPtr = this.wasmModule.exports.__pin(this.wasmModule.exports.__new(maxFrameLength, this.wasmModule.exports.Uint8Array_ID.value));
73
- this.visitedPtr = this.wasmModule.exports.__pin(this.wasmModule.exports.__new(maxFrameLength, this.wasmModule.exports.Uint8Array_ID.value));
74
- this.queuePtr = this.wasmModule.exports.__pin(this.wasmModule.exports.__new(maxFrameLength * 4, this.wasmModule.exports.Uint8Array_ID.value));
75
- // this.boxesPtr = this.wasmModule.exports.__pin(this.wasmModule.exports.__new(maxFrameLength * 4, this.wasmModule.exports.Uint8Array_ID.value));
76
- }
77
- close() {
78
- if (this.started && !this.closed) {
79
- this.started = false;
80
- this.closed = true;
81
- this.logger.log(`Stopping motion detection for camera ${this.cameraDevice.name}`);
82
- this.cameraDevice.updateState('motion', { state: false, detections: [] });
83
- }
84
- }
85
- async restart() {
86
- if (this.restarting) {
44
+ async initiateWASM() {
45
+ if (this.initiated) {
87
46
  return;
88
47
  }
89
- this.restarting = true;
90
- this.logger.log(`Restarting motion detection for camera ${this.cameraDevice.name}`);
91
- this.close();
92
- this.reset();
93
- await new Promise((resolve) => setTimeout(resolve, 1500));
94
- this.wasmModule = undefined;
95
- if (this.cameraDevice.connected) {
96
- await this.start();
97
- }
98
- this.restarting = false;
48
+ this.initiated = true;
49
+ const wasmModule = await instantiate(readFileSync(resolve(__dirname, './wasm/build/detector.wasm')), {
50
+ console: {
51
+ log: (messagePtr) => {
52
+ console.log(this.wasmExports.__getString(messagePtr));
53
+ },
54
+ },
55
+ env: {
56
+ abort: (msgPtr, filePtr, line, column) => {
57
+ const msg = this.wasmExports.__getString(msgPtr);
58
+ const file = this.wasmExports.__getString(filePtr);
59
+ console.error(`Abort called at ${file}:${line}:${column}`, msg);
60
+ },
61
+ },
62
+ });
63
+ this.wasmExports = wasmModule.exports;
64
+ this.setupMemory();
99
65
  }
100
- reset() {
101
- // Stellen Sie sicher, dass alle Pointer freigegeben werden
102
- this.unpinSafe(this.previousFramePtr);
103
- this.unpinSafe(this.tempPtr);
104
- this.unpinSafe(this.visitedPtr);
105
- this.unpinSafe(this.queuePtr);
106
- this.unpinSafe(this.boxesPtr);
107
- this.unpinSafe(this.framePtr);
108
- // Setzen Sie alle Pointer auf null zurück
109
- this.previousFramePtr = null;
110
- this.framePtr = 0;
111
- this.boxesPtr = 0;
112
- this.tempPtr = 0;
113
- this.visitedPtr = 0;
114
- this.queuePtr = 0;
115
- this.collectSafe();
116
- // Setzen Sie den memoryBuffer zurück
117
- this.memoryBuffer = new Uint8Array();
66
+ setupMemory() {
67
+ if (!this.wasmExports) {
68
+ throw new Error('Wasm not initiated');
69
+ }
70
+ const [width, height] = this.cameraDevice.frameWorkerSettings.resolution.split('x').map((v) => parseInt(v, 10));
71
+ this.wasmExports.initialize(width, height);
118
72
  }
119
73
  async startDetection() {
74
+ if (!this.wasmExports) {
75
+ throw new Error('Wasm not initiated');
76
+ }
77
+ const { detectMotion, getNumBoxes, __newArray, __getInt32Array, __pin, __unpin, __collect, Uint8Array_ID } = this.wasmExports;
120
78
  for await (const frame of this.cameraDevice.getFrames()) {
121
79
  if (this.closed || this.restarting) {
122
80
  break;
@@ -133,69 +91,55 @@ export class CameraDetector {
133
91
  if (this.closed || this.restarting) {
134
92
  break;
135
93
  }
94
+ const inputPtr = __pin(__newArray(Uint8Array_ID.value, frameImage.image));
95
+ const resultPtr = detectMotion(inputPtr, threshold, blurRadius, dilationSize, motionArea);
96
+ const numBoxes = getNumBoxes();
97
+ const boxesArray = __getInt32Array(resultPtr);
136
98
  const detections = [];
137
- const dets = this.getMotionData(frameImage.image, frameImage.info.width, frameImage.info.height, motionArea, threshold, blurRadius, dilationSize);
138
- for (const det of dets) {
99
+ for (let i = 0; i < numBoxes; i++) {
100
+ const x = boxesArray[i * 4];
101
+ const y = boxesArray[i * 4 + 1];
102
+ const w = boxesArray[i * 4 + 2];
103
+ const h = boxesArray[i * 4 + 3];
139
104
  detections.push({
140
105
  label: 'motion',
141
106
  confidence: 1,
142
- boundingBox: [det[0], det[1], det[2], det[3]],
107
+ boundingBox: [x, y, x + w, y + h],
143
108
  inputWidth: frameImage.info.width,
144
109
  inputHeight: frameImage.info.height,
145
110
  origWidth: frame.metadata.origWidth,
146
111
  origHeight: frame.metadata.origHeight,
147
112
  });
148
113
  }
114
+ __unpin(inputPtr);
115
+ __collect();
149
116
  await this.cameraDevice.updateState('motion', { detections: detections }, frame);
150
117
  }
151
118
  }
152
- setupPreviousFrame(frame, width, height, blurRadius) {
153
- if (this.previousFramePtr !== null) {
154
- this.unpinSafe(this.previousFramePtr);
155
- this.collectSafe();
156
- this.previousFramePtr = null;
119
+ close() {
120
+ if (this.started && !this.closed) {
121
+ this.started = false;
122
+ this.closed = true;
123
+ this.logger.log(`Stopping motion detection for camera ${this.cameraDevice.name}`);
124
+ this.cameraDevice.updateState('motion', {
125
+ state: false,
126
+ detections: [],
127
+ });
157
128
  }
158
- const frameLength = width * height;
159
- const framePtr = this.wasmModule.exports.__pin(this.wasmModule.exports.__newArrayBuffer(frame));
160
- this.wasmModule.exports.stackBlur(framePtr, this.tempPtr, width, height, blurRadius);
161
- this.previousFramePtr = this.wasmModule.exports.__pin(this.wasmModule.exports.__newArrayBuffer(new Uint8Array(this.memoryBuffer.buffer, framePtr, frameLength)));
162
- this.unpinSafe(framePtr);
163
129
  }
164
- getMotionData(frame, width, height, motionArea, threshold, blurRadius, dilationSize) {
165
- if (!this.wasmModule) {
166
- throw new Error('Wasm not initiated');
167
- }
168
- try {
169
- if (this.previousFramePtr === null) {
170
- this.setupPreviousFrame(frame, width, height, blurRadius);
171
- return [];
172
- }
173
- const frameLength = width * height;
174
- this.framePtr = this.wasmModule.exports.__pin(this.wasmModule.exports.__newArrayBuffer(frame));
175
- this.boxesPtr = this.wasmModule.exports.__pin(this.wasmModule.exports.__new(frameLength, this.wasmModule.exports.Uint8Array_ID.value));
176
- this.wasmModule.exports.stackBlur(this.framePtr, this.tempPtr, width, height, blurRadius);
177
- this.wasmModule.exports.createMotionMask(this.previousFramePtr, this.framePtr, width, height, threshold);
178
- this.wasmModule.exports.dilate(this.framePtr, this.tempPtr, width, height, dilationSize);
179
- const numBoxes = this.wasmModule.exports.findBoundingBoxes(this.framePtr, this.visitedPtr, this.queuePtr, this.boxesPtr, width, height, motionArea);
180
- const boxes = [];
181
- const boxesArray = new Int32Array(this.wasmModule.exports.memory.buffer, this.boxesPtr, numBoxes * 4);
182
- for (let i = 0; i < numBoxes; i++) {
183
- const x = boxesArray[i * 4];
184
- const y = boxesArray[i * 4 + 1];
185
- const w = boxesArray[i * 4 + 2];
186
- const h = boxesArray[i * 4 + 3];
187
- boxes.push([x, y, x + w, y + h]);
188
- }
189
- this.unpinSafe(this.framePtr);
190
- this.unpinSafe(this.boxesPtr);
191
- this.collectSafe();
192
- this.setupPreviousFrame(frame, width, height, blurRadius);
193
- return boxes;
130
+ async restart() {
131
+ if (this.restarting) {
132
+ return;
194
133
  }
195
- catch (error) {
196
- this.logger.error(this.cameraDevice.name, 'Error generating frames', error);
197
- return [];
134
+ this.restarting = true;
135
+ this.logger.log(`Restarting motion detection for camera ${this.cameraDevice.name}`);
136
+ this.close();
137
+ await new Promise((resolve) => setTimeout(resolve, 1500));
138
+ this.initiated = false;
139
+ if (this.cameraDevice.connected) {
140
+ await this.start();
198
141
  }
142
+ this.restarting = false;
199
143
  }
200
144
  createCameraStorage() {
201
145
  const cameraStorage = this.api.storageController.createCameraStorage(this, this.cameraDevice.id, {
@@ -266,23 +210,5 @@ export class CameraDetector {
266
210
  });
267
211
  return cameraStorage;
268
212
  }
269
- unpinSafe(ptr) {
270
- if (ptr !== null) {
271
- try {
272
- this.wasmModule.exports.__unpin(ptr);
273
- }
274
- catch {
275
- //
276
- }
277
- }
278
- }
279
- collectSafe() {
280
- try {
281
- this.wasmModule.exports.__collect();
282
- }
283
- catch {
284
- //
285
- }
286
- }
287
213
  }
288
214
  //# sourceMappingURL=detector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detector.js","sourceRoot":"","sources":["../src/detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../src/detector.ts"],"names":[],"mappings":"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"}
@@ -13,54 +13,120 @@ declare namespace __AdaptedExports {
13
13
  */
14
14
  export function log(s: string): void;
15
15
  /**
16
- * assembly/index/resetStackPool
16
+ * assembly/index/initialize
17
+ * @param w `i32`
18
+ * @param h `i32`
19
+ */
20
+ export function initialize(w: number, h: number): void;
21
+ /**
22
+ * assembly/index/detectMotion
23
+ * @param inputFrame `~lib/typedarray/Uint8Array`
24
+ * @param threshold `i32`
17
25
  * @param radius `i32`
26
+ * @param dilationSize `i32`
27
+ * @param minArea `i32`
28
+ * @returns `~lib/typedarray/Int32Array`
29
+ */
30
+ export function detectMotion(inputFrame: Uint8Array, threshold: number, radius: number, dilationSize: number, minArea: number): Int32Array;
31
+ /**
32
+ * assembly/index/getNumBoxes
33
+ * @returns `i32`
18
34
  */
19
- export function resetStackPool(radius: number): void;
35
+ export function getNumBoxes(): number;
36
+ /** assembly/index/Uint8Array_ID */
37
+ export const Uint8Array_ID: {
38
+ /** @type `u32` */
39
+ get value(): number
40
+ };
20
41
  /**
21
- * assembly/index/stackBlur
42
+ * assembly/test/blurFrameSIMD
22
43
  * @param framePtr `usize`
23
- * @param tempPtr `usize`
44
+ * @param tempFramePtr `usize`
24
45
  * @param width `i32`
25
46
  * @param height `i32`
26
47
  * @param radius `i32`
27
48
  */
28
- export function stackBlur(framePtr: number, tempPtr: number, width: number, height: number, radius: number): void;
49
+ export function blurFrameSIMD(framePtr: number, tempFramePtr: number, width: number, height: number, radius: number): void;
29
50
  /**
30
- * assembly/index/createMotionMask
31
- * @param frame1Ptr `usize`
32
- * @param frame2Ptr `usize`
51
+ * assembly/test/detectMotionSIMD
52
+ * @param prevFramePtr `usize`
53
+ * @param currentFramePtr `usize`
33
54
  * @param width `i32`
34
55
  * @param height `i32`
35
56
  * @param threshold `i32`
57
+ * @param motionMaskPtr `usize`
36
58
  */
37
- export function createMotionMask(frame1Ptr: number, frame2Ptr: number, width: number, height: number, threshold: number): void;
59
+ export function detectMotionSIMD(prevFramePtr: number, currentFramePtr: number, width: number, height: number, threshold: number, motionMaskPtr: number): void;
38
60
  /**
39
- * assembly/index/dilate
40
- * @param framePtr `usize`
41
- * @param tempPtr `usize`
61
+ * assembly/test/dilateMotionMask
62
+ * @param motionMaskPtr `usize`
63
+ * @param tempMaskPtr `usize`
42
64
  * @param width `i32`
43
65
  * @param height `i32`
44
- * @param size `i32`
66
+ * @param dilationSize `i32`
45
67
  */
46
- export function dilate(framePtr: number, tempPtr: number, width: number, height: number, size: number): void;
68
+ export function dilateMotionMask(motionMaskPtr: number, tempMaskPtr: number, width: number, height: number, dilationSize: number): void;
47
69
  /**
48
- * assembly/index/findBoundingBoxes
49
- * @param framePtr `usize`
70
+ * assembly/test/calculateBoundingBoxes
71
+ * @param motionMaskPtr `usize`
50
72
  * @param visitedPtr `usize`
51
- * @param queuePtr `usize`
52
- * @param boxesPtr `usize`
53
73
  * @param width `i32`
54
74
  * @param height `i32`
55
- * @param minArea `i32`
75
+ * @param motionArea `i32`
76
+ * @param boundingBoxesPtr `usize`
77
+ * @param stackXPtr `usize`
78
+ * @param stackYPtr `usize`
56
79
  * @returns `i32`
57
80
  */
58
- export function findBoundingBoxes(framePtr: number, visitedPtr: number, queuePtr: number, boxesPtr: number, width: number, height: number, minArea: number): number;
81
+ export function calculateBoundingBoxes(motionMaskPtr: number, visitedPtr: number, width: number, height: number, motionArea: number, boundingBoxesPtr: number, stackXPtr: number, stackYPtr: number): number;
59
82
  /**
60
- * assembly/index/detectMotion
83
+ * assembly/test/calculateBoundingBoxesSIMD
84
+ * @param motionMaskPtr `usize`
85
+ * @param visitedPtr `usize`
86
+ * @param width `i32`
87
+ * @param height `i32`
88
+ * @param motionArea `i32`
89
+ * @param boundingBoxesPtr `usize`
90
+ * @param stackXPtr `usize`
91
+ * @param stackYPtr `usize`
92
+ * @returns `i32`
93
+ */
94
+ export function calculateBoundingBoxesSIMD(motionMaskPtr: number, visitedPtr: number, width: number, height: number, motionArea: number, boundingBoxesPtr: number, stackXPtr: number, stackYPtr: number): number;
95
+ /**
96
+ * assembly/test2/detectMotion
97
+ * @param prevFramePtr `usize`
98
+ * @param curFramePtr `usize`
99
+ * @param blurFrame1Ptr `usize`
100
+ * @param blurFrame2Ptr `usize`
101
+ * @param motionMaskPtr `usize`
102
+ * @param dilateMaskPtr `usize`
103
+ * @param boundingBoxesPtr `usize`
104
+ * @param width `i32`
105
+ * @param height `i32`
106
+ * @param blurRadius `i32`
107
+ * @param threshold `i32`
108
+ * @param dilationSize `i32`
109
+ * @param motionArea `i32`
110
+ * @returns `i32`
111
+ */
112
+ export function detectMotion(prevFramePtr: number, curFramePtr: number, blurFrame1Ptr: number, blurFrame2Ptr: number, motionMaskPtr: number, dilateMaskPtr: number, boundingBoxesPtr: number, width: number, height: number, blurRadius: number, threshold: number, dilationSize: number, motionArea: number): number;
113
+ /**
114
+ * assembly/test3/blurFrame
115
+ * @param framePtr `usize`
116
+ * @param blurPtr `usize`
117
+ * @param width `i32`
118
+ * @param height `i32`
119
+ * @param radius `i32`
120
+ */
121
+ export function blurFrame(framePtr: number, blurPtr: number, width: number, height: number, radius: number): void;
122
+ /**
123
+ * assembly/test3/detectMotion
61
124
  * @param frame1Ptr `usize`
62
125
  * @param frame2Ptr `usize`
63
- * @param tempPtr `usize`
126
+ * @param blurredFrame1Ptr `usize`
127
+ * @param blurredFrame2Ptr `usize`
128
+ * @param maskPtr `usize`
129
+ * @param dilatePtr `usize`
64
130
  * @param visitedPtr `usize`
65
131
  * @param queuePtr `usize`
66
132
  * @param boxesPtr `usize`
@@ -72,17 +138,7 @@ declare namespace __AdaptedExports {
72
138
  * @param motionArea `i32`
73
139
  * @returns `i32`
74
140
  */
75
- export function detectMotion(frame1Ptr: number, frame2Ptr: number, tempPtr: number, visitedPtr: number, queuePtr: number, boxesPtr: number, width: number, height: number, blurRadius: number, dilationSize: number, motionThreshold: number, motionArea: number): number;
76
- /** assembly/index/Uint8Array_ID */
77
- export const Uint8Array_ID: {
78
- /** @type `u32` */
79
- get value(): number
80
- };
81
- /** assembly/index/Int32Array_ID */
82
- export const Int32Array_ID: {
83
- /** @type `u32` */
84
- get value(): number
85
- };
141
+ export function detectMotion(frame1Ptr: number, frame2Ptr: number, blurredFrame1Ptr: number, blurredFrame2Ptr: number, maskPtr: number, dilatePtr: number, visitedPtr: number, queuePtr: number, boxesPtr: number, width: number, height: number, blurRadius: number, dilationSize: number, motionThreshold: number, motionArea: number): number;
86
142
  }
87
143
  /** Instantiates the compiled WebAssembly module with the given imports. */
88
144
  export declare function instantiate(module: WebAssembly.Module, imports: {
@@ -30,6 +30,11 @@ export async function instantiate(module, imports = {}) {
30
30
  s = __lowerString(s) || __notnull();
31
31
  exports.log(s);
32
32
  },
33
+ detectMotion(inputFrame, threshold, radius, dilationSize, minArea) {
34
+ // assembly/index/detectMotion(~lib/typedarray/Uint8Array, i32, i32, i32, i32) => ~lib/typedarray/Int32Array
35
+ inputFrame = __lowerTypedArray(Uint8Array, 4, 0, inputFrame) || __notnull();
36
+ return __liftTypedArray(Int32Array, exports.detectMotion(inputFrame, threshold, radius, dilationSize, minArea) >>> 0);
37
+ },
33
38
  Uint8Array_ID: {
34
39
  // assembly/index/Uint8Array_ID: u32
35
40
  valueOf() { return this.value; },
@@ -37,13 +42,6 @@ export async function instantiate(module, imports = {}) {
37
42
  return exports.Uint8Array_ID.value >>> 0;
38
43
  }
39
44
  },
40
- Int32Array_ID: {
41
- // assembly/index/Int32Array_ID: u32
42
- valueOf() { return this.value; },
43
- get value() {
44
- return exports.Int32Array_ID.value >>> 0;
45
- }
46
- },
47
45
  }, exports);
48
46
  function __liftString(pointer) {
49
47
  if (!pointer) return null;
@@ -65,8 +63,46 @@ export async function instantiate(module, imports = {}) {
65
63
  for (let i = 0; i < length; ++i) memoryU16[(pointer >>> 1) + i] = value.charCodeAt(i);
66
64
  return pointer;
67
65
  }
66
+ function __liftTypedArray(constructor, pointer) {
67
+ if (!pointer) return null;
68
+ return new constructor(
69
+ memory.buffer,
70
+ __getU32(pointer + 4),
71
+ __dataview.getUint32(pointer + 8, true) / constructor.BYTES_PER_ELEMENT
72
+ ).slice();
73
+ }
74
+ function __lowerTypedArray(constructor, id, align, values) {
75
+ if (values == null) return 0;
76
+ const
77
+ length = values.length,
78
+ buffer = exports.__pin(exports.__new(length << align, 1)) >>> 0,
79
+ header = exports.__new(12, id) >>> 0;
80
+ __setU32(header + 0, buffer);
81
+ __dataview.setUint32(header + 4, buffer, true);
82
+ __dataview.setUint32(header + 8, length << align, true);
83
+ new constructor(memory.buffer, buffer, length).set(values);
84
+ exports.__unpin(buffer);
85
+ return header;
86
+ }
68
87
  function __notnull() {
69
88
  throw TypeError("value must not be null");
70
89
  }
90
+ let __dataview = new DataView(memory.buffer);
91
+ function __setU32(pointer, value) {
92
+ try {
93
+ __dataview.setUint32(pointer, value, true);
94
+ } catch {
95
+ __dataview = new DataView(memory.buffer);
96
+ __dataview.setUint32(pointer, value, true);
97
+ }
98
+ }
99
+ function __getU32(pointer) {
100
+ try {
101
+ return __dataview.getUint32(pointer, true);
102
+ } catch {
103
+ __dataview = new DataView(memory.buffer);
104
+ return __dataview.getUint32(pointer, true);
105
+ }
106
+ }
71
107
  return adaptedExports;
72
108
  }
Binary file
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "WASM Motion",
3
3
  "name": "@camera.ui/camera-ui-wasm-motion",
4
- "version": "0.0.11",
4
+ "version": "0.0.12",
5
5
  "description": "camera.ui wasm motion detection plugin",
6
6
  "author": "seydx (https://github.com/seydx/camera.ui)",
7
7
  "main": "./dist/index.js",
@@ -16,16 +16,16 @@
16
16
  "prepublishOnly": "npm i --package-lock-only && npm run lint && npm run format && npm run build"
17
17
  },
18
18
  "devDependencies": {
19
- "@camera.ui/types": "^0.0.71",
19
+ "@camera.ui/types": "^0.0.76",
20
20
  "@rushstack/eslint-patch": "^1.10.4",
21
21
  "@types/fs-extra": "^11.0.4",
22
- "@types/node": "^22.5.4",
22
+ "@types/node": "^22.7.5",
23
23
  "@types/ws": "^8.5.12",
24
- "@typescript-eslint/eslint-plugin": "^8.5.0",
25
- "@typescript-eslint/parser": "^8.5.0",
26
- "assemblyscript": "^0.27.29",
24
+ "@typescript-eslint/eslint-plugin": "^8.8.1",
25
+ "@typescript-eslint/parser": "^8.8.1",
26
+ "assemblyscript": "^0.27.30",
27
27
  "assemblyscript-prettier": "^3.0.1",
28
- "concurrently": "^9.0.0",
28
+ "concurrently": "^9.0.1",
29
29
  "copyfiles": "^2.4.1",
30
30
  "eslint": "8.57.0",
31
31
  "eslint-config-prettier": "^9.1.0",
@@ -35,14 +35,14 @@
35
35
  "rimraf": "^6.0.1",
36
36
  "set-interval-async": "^3.0.3",
37
37
  "sharp": "^0.33.5",
38
- "typescript": "^5.6.2",
38
+ "typescript": "^5.6.3",
39
39
  "updates": "^16.4.0"
40
40
  },
41
41
  "bugs": {
42
42
  "url": "https://github.com/seydx/camera.ui/issues"
43
43
  },
44
44
  "engines": {
45
- "camera.ui": ">=0.0.31-alpha.1",
45
+ "camera.ui": ">=0.0.34-alpha.1",
46
46
  "node": ">=20.17.0"
47
47
  },
48
48
  "homepage": "https://github.com/seydx/camera.ui#readme",
@@ -62,7 +62,7 @@
62
62
  "dependencies": []
63
63
  },
64
64
  "dependencies": {
65
- "@assemblyscript/loader": "^0.27.29",
65
+ "@assemblyscript/loader": "^0.27.30",
66
66
  "as-wasi": "^0.6.0"
67
67
  }
68
68
  }