@zappar/zappar-cv 3.0.1-alpha.3 → 3.0.1-alpha.5

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.
package/README.md CHANGED
@@ -18,8 +18,8 @@ npm i @zappar/zappar-cv
18
18
 
19
19
  You can use our CDN from within your HTML:
20
20
  ```
21
- <script src="https://libs.zappar.com/zappar-cv/3.0.1-alpha.3/zappar-cv.js"></script>
21
+ <script src="https://libs.zappar.com/zappar-cv/3.0.1-alpha.5/zappar-cv.js"></script>
22
22
  ```
23
23
 
24
24
  Or you can download and host our standalone JavaScript bundle:
25
- [https://libs.zappar.com/zappar-cv/3.0.1-alpha.3/zappar-cv.zip](https://libs.zappar.com/zappar-cv/3.0.1-alpha.3/zappar-cv.zip)
25
+ [https://libs.zappar.com/zappar-cv/3.0.1-alpha.5/zappar-cv.zip](https://libs.zappar.com/zappar-cv/3.0.1-alpha.5/zappar-cv.zip)
@@ -0,0 +1,8 @@
1
+ import type * as ZNM from "./zappar-cv";
2
+ export interface DataDownloadAPI {
3
+ data_download_clear: () => void;
4
+ data_download_size: () => number;
5
+ data_download: () => number;
6
+ data_should_record_set: (v: number) => void;
7
+ }
8
+ export declare function getDataDownloadAPI(mod: ZNM.Module): DataDownloadAPI;
@@ -0,0 +1,8 @@
1
+ export function getDataDownloadAPI(mod) {
2
+ return {
3
+ data_download_clear: mod.cwrap("data_download_clear", null, []),
4
+ data_download_size: mod.cwrap("data_download_size", "number", []),
5
+ data_download: mod.cwrap("data_download", "number", []),
6
+ data_should_record_set: mod.cwrap("data_should_record_set", null, ["number"]),
7
+ };
8
+ }
package/lib/direct.js CHANGED
@@ -25,6 +25,6 @@ export function launchWorker(wasm) {
25
25
  for (let msg of msgs)
26
26
  messageManager.postIncomingMessage(msg.msg);
27
27
  });
28
- launchWorkerServer(wasm, module);
28
+ launchWorkerServer(wasm, module, false);
29
29
  });
30
30
  }
@@ -607,9 +607,9 @@ export class zappar_client {
607
607
  enabled: true,
608
608
  plane_count: 0,
609
609
  plane_pose: [],
610
- world_anchor_valid: true,
610
+ world_anchor_valid: false,
611
611
  world_anchor_pose: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),
612
- ground_anchor_valid: true,
612
+ ground_anchor_valid: false,
613
613
  ground_anchor_pose: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),
614
614
  debug_enabled: false,
615
615
  debug_tracks_data: new Float32Array([]),
package/lib/native.js CHANGED
@@ -89,6 +89,15 @@ export function initialize(opts) {
89
89
  launchCeresWorker(msg.port);
90
90
  break;
91
91
  }
92
+ case "_z_datadownload": {
93
+ let blob = new Blob([msg.data], { type: "application/octet-stream" });
94
+ let url = URL.createObjectURL(blob);
95
+ let a = document.createElement("a");
96
+ a.download = "sequencedata.bin";
97
+ a.href = url;
98
+ a.click();
99
+ break;
100
+ }
92
101
  case "licerr": {
93
102
  let div = document.createElement("div");
94
103
  div.innerHTML = "Visit <a href='https://docs.zap.works/universal-ar/licensing/' style='color: white;'>our licensing page</a> to find out about hosting on your own domain.";
package/lib/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "3.0.1-alpha.3";
1
+ export declare const VERSION = "3.0.1-alpha.5";
package/lib/version.js CHANGED
@@ -1 +1 @@
1
- export const VERSION = "3.0.1-alpha.3";
1
+ export const VERSION = "3.0.1-alpha.5";
@@ -21,7 +21,8 @@ export function launchWorker(worker) {
21
21
  worker.postMessage({
22
22
  t: "wasm",
23
23
  url: new URL("./zappar-cv.wasm", import.meta.url).toString(),
24
- module: yield wasmModule
24
+ module: yield wasmModule,
25
+ shouldRecordData: window.location.href.indexOf("_zrecorddata") >= 0
25
26
  });
26
27
  yield waitForLoad(worker);
27
28
  function sendOutgoing() {
@@ -1,3 +1,3 @@
1
1
  import { MsgManager } from "./messages";
2
2
  export declare let messageManager: MsgManager;
3
- export declare function launchWorkerServer(wasmUrl: string, module: WebAssembly.Module): Promise<void>;
3
+ export declare function launchWorkerServer(wasmUrl: string, module: WebAssembly.Module, shouldRecordData: boolean): Promise<void>;
@@ -16,12 +16,13 @@ import { frame_pixel_format_t } from "./gen/zappar-native";
16
16
  import { handleImageBitmap } from "./worker-imagebitmap";
17
17
  import { profile } from "./profile";
18
18
  import { getWorkerMessageAPI } from "./worker-messages";
19
+ import { getDataDownloadAPI } from "./data-download";
19
20
  export let messageManager = new MsgManager();
20
21
  let workerMessageChannel;
21
22
  let latestCameraToScreenRotation = 0;
22
23
  let rawDataAccessEnabled = false;
23
24
  const rawCameraFrameBuffersByPipeline = new Map();
24
- export function launchWorkerServer(wasmUrl, module) {
25
+ export function launchWorkerServer(wasmUrl, module, shouldRecordData) {
25
26
  return __awaiter(this, void 0, void 0, function* () {
26
27
  let mod = ZNM.default({
27
28
  locateFile: (path, prefix) => {
@@ -38,6 +39,8 @@ export function launchWorkerServer(wasmUrl, module) {
38
39
  onRuntimeInitialized: () => {
39
40
  let r = getRuntimeObject(mod);
40
41
  const workerMessageAPI = getWorkerMessageAPI(mod);
42
+ const dataDownloadAPI = shouldRecordData ? getDataDownloadAPI(mod) : undefined;
43
+ dataDownloadAPI === null || dataDownloadAPI === void 0 ? void 0 : dataDownloadAPI.data_should_record_set(1); // Only happens if dataDownloadAPI is defined
41
44
  let server = new zappar_server(r, (pipelineId, ab) => {
42
45
  messageManager.postOutgoingMessage({
43
46
  p: pipelineId,
@@ -66,6 +69,8 @@ export function launchWorkerServer(wasmUrl, module) {
66
69
  att = r.pipeline_camera_frame_device_attitude(pipeline);
67
70
  server.exploreState();
68
71
  handleMessages(mod, workerMessageAPI);
72
+ if (dataDownloadAPI)
73
+ handleDataDownload(mod, dataDownloadAPI);
69
74
  }
70
75
  let ret = {
71
76
  token: msgt.token,
@@ -96,7 +101,7 @@ export function launchWorkerServer(wasmUrl, module) {
96
101
  }
97
102
  case "streamC2S": {
98
103
  let msgt = msg;
99
- consumeStream(mod, r, msgt.s, msgt.p, msgt.userFacing, server, msgt.source, workerMessageAPI).then(() => {
104
+ consumeStream(mod, r, msgt.s, msgt.p, msgt.userFacing, server, msgt.source, workerMessageAPI, dataDownloadAPI).then(() => {
100
105
  let m = { t: "streamEndedS2C", p: msgt.p, source: msgt.source };
101
106
  // console.log('Stream ended, requesting new stream');
102
107
  messageManager.postOutgoingMessage(m, []);
@@ -160,7 +165,7 @@ export function launchWorkerServer(wasmUrl, module) {
160
165
  });
161
166
  }
162
167
  ;
163
- function consumeStream(mod, r, stream, p, userFacing, server, source, workerMessageAPI) {
168
+ function consumeStream(mod, r, stream, p, userFacing, server, source, workerMessageAPI, dataDownloadAPI) {
164
169
  return __awaiter(this, void 0, void 0, function* () {
165
170
  while (true) {
166
171
  let reader;
@@ -173,7 +178,7 @@ function consumeStream(mod, r, stream, p, userFacing, server, source, workerMess
173
178
  continue;
174
179
  }
175
180
  try {
176
- yield consumeReader(mod, r, reader, p, userFacing, server, source, workerMessageAPI);
181
+ yield consumeReader(mod, r, reader, p, userFacing, server, source, workerMessageAPI, dataDownloadAPI);
177
182
  return;
178
183
  }
179
184
  catch (err) {
@@ -201,7 +206,7 @@ function getFrameOrTimeout(reader) {
201
206
  }
202
207
  const cameraToDeviceTransform = mat4.create();
203
208
  const cameraModel = new Float32Array([300, 300, 160, 120, 0, 0]);
204
- function consumeReader(mod, r, reader, p, userFacing, server, source, workerMessageAPI) {
209
+ function consumeReader(mod, r, reader, p, userFacing, server, source, workerMessageAPI, dataDownloadAPI) {
205
210
  var _a, _b;
206
211
  return __awaiter(this, void 0, void 0, function* () {
207
212
  while (true) {
@@ -274,6 +279,8 @@ function consumeReader(mod, r, reader, p, userFacing, server, source, workerMess
274
279
  try {
275
280
  r.pipeline_camera_frame_submit_raw_pointer(pipeline, streamDataBufferPointer, size, framePixelFormatFromFormat(frame.format), width, height, token, cameraToDeviceTransform, latestCameraToScreenRotation, cameraModel, userFacing, (_b = frame.timestamp) !== null && _b !== void 0 ? _b : -1);
276
281
  handleMessages(mod, workerMessageAPI);
282
+ if (dataDownloadAPI)
283
+ handleDataDownload(mod, dataDownloadAPI);
277
284
  }
278
285
  catch (err) {
279
286
  console.log('Exception during camera processing', err);
@@ -367,3 +374,12 @@ function handleMessages(mod, m) {
367
374
  }
368
375
  m.worker_message_send_clear();
369
376
  }
377
+ function handleDataDownload(mod, d) {
378
+ const size = d.data_download_size();
379
+ if (size === 0)
380
+ return;
381
+ const dataPtr = d.data_download();
382
+ const data = mod.HEAPU8.slice(dataPtr, dataPtr + size);
383
+ messageManager.postOutgoingMessage({ t: '_z_datadownload', data }, [data.buffer]);
384
+ d.data_download_clear();
385
+ }
package/lib/worker.js CHANGED
@@ -7,9 +7,10 @@ messageManager.onOutgoingMessage.bind(() => {
7
7
  }
8
8
  });
9
9
  let launchHandler = (evt) => {
10
+ var _a;
10
11
  if (evt && evt.data && evt.data.t === "wasm") {
11
12
  let url = location.href.startsWith("blob") ? evt.data.url : new URL("./zappar-cv.wasm", import.meta.url).toString();
12
- launchWorkerServer(url, evt.data.module);
13
+ launchWorkerServer(url, evt.data.module, (_a = evt.data.shouldRecordData) !== null && _a !== void 0 ? _a : false);
13
14
  ctx.removeEventListener("message", launchHandler);
14
15
  }
15
16
  };