@gueshbzh-perso/scanner 0.10.0 → 0.11.1

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
@@ -51,7 +51,7 @@ await reader.destroy(); // removes the preview, frees the engine
51
51
  | `camera` | `{ facingMode: 'environment', resolution: 'hd' }` | Also `deviceId`, `rememberDevice` (default `true`), `releaseWhenHidden` (default `true`: the camera is released while the page is hidden and reopened when it is visible again). |
52
52
  | `overlay` | all on | `showRegion`, `showDetections`, `showTorchButton`, `showCameraSwitch`, `color`, or `false`. |
53
53
  | `feedback` | beep + vibrate | `{ beep, vibrate }` or `false`. |
54
- | `processing` | `{ maxDimension: 1024, backend: 'auto', nativeDetector: 'auto' }` | Decoder image size; `'webgl'`, `'canvas'` or `'auto'`; `nativeDetector: 'auto'` uses the browser's `BarcodeDetector` as the fast pass where it exists, `'off'` always uses the engine alone (see [How it works](#how-it-works)). |
54
+ | `processing` | `{ maxDimension: 1024, backend: 'auto', nativeDetector: 'auto' }` | Decoder image size; `'webgl'`, `'canvas'` or `'auto'`; `nativeDetector: 'auto'` uses the browser's `BarcodeDetector` where it exists, `'off'` always uses the engine alone; `engineFallback: true` (default `false`) adds the engine's fallbacks as a safety net behind it (see [How it works](#how-it-works)). |
55
55
  | `worker` | `true` | Decode in Web Workers; falls back to the main thread if unavailable. |
56
56
  | `workers` | cores − 1 (1–3) | Number of decoding workers: frames are decoded in parallel. |
57
57
  | `wasmUrl`, `workerUrl` | auto | Override asset URLs (CDN, custom bundler setup). |
@@ -64,7 +64,7 @@ await reader.destroy(); // removes the preview, frees the engine
64
64
  - `setRegionOfInterest(region)`
65
65
  - `setTorch(on)`, `torchAvailable`, `setZoom(zoom)`, `switchCamera(deviceId?)`, `BarcodeReader.listCameras()`
66
66
  - `clearCooldown(text)` — allow a code to be reported again immediately
67
- - `stats` — `{ fps, decodeMs, grabMs, frameWidth, frameHeight, backend, worker, workers, native, nativeMs }`
67
+ - `stats` — `{ fps, decodeMs, grabMs, frameWidth, frameHeight, backend, worker, workers, native, nativeMs, engineFps }`
68
68
  - `video` — the underlying `<video>` element
69
69
 
70
70
  Detection points are in video pixels (`video.videoWidth` space).
@@ -141,13 +141,18 @@ overlay (ROI mask, highlights, torch / camera buttons) · beep · vibration
141
141
  - The engine is downloaded and compiled once, then shared by every worker.
142
142
  - By default (`processing.nativeDetector: 'auto'`), browsers that ship a native
143
143
  `BarcodeDetector` (Chrome on Android, macOS and ChromeOS) search each video
144
- frame with it, straight from the `<video>`: no grab, no worker. While it
145
- finds nothing, the workers still decode a frame from time to time (~3 per
146
- second) with the fallback strategies, which read the hard codes (laser
147
- engraving, shadows…) the native decoder has no preprocessing for. Its codes get the
144
+ frame with it, straight from the `<video>`: no grab, no worker. With
145
+ `processing.engineFallback: true`, while it finds nothing, the workers
146
+ also decode a frame from time to time (~3 per second) with the fallback
147
+ strategies (laser engraving, shadows, light-on-dark codes…), a safety net
148
+ that costs a little CPU and battery. Off by default. Its codes get the
148
149
  same multi-frame confirmation and de-duplication. It is used only when it
149
- supports every requested format (`micro_qr`, which it lacks, is then read
150
- by the fallbacks), and dropped for the engine alone if it ever fails.
150
+ reads the formats it has; the ones it lacks (`micro_qr` always, others
151
+ depending on the browser) are read only with `engineFallback`. With the
152
+ default `formats` list they are accepted as unread; with an explicit list,
153
+ one of them keeps the engine (a requested format is never dropped
154
+ silently). UPC-A is covered through EAN-13 where the native decoder has no
155
+ `upc_a` (Safari). It is dropped for the engine alone if it ever fails.
151
156
  Detection is by feature, not by browser: any browser that ships the API
152
157
  gets it, but a JavaScript polyfill of `BarcodeDetector` is ignored (it
153
158
  would only be a slower engine on the main thread). Safari, Firefox and
package/dist/native.d.ts CHANGED
@@ -20,16 +20,33 @@ export interface BarcodeDetectorClass {
20
20
  /** Native decoder serving one reader configuration. */
21
21
  export declare class NativeDetector {
22
22
  private detector;
23
- /** Formats the detector looks for. */
23
+ /** Requested formats the detector reads. */
24
24
  readonly formats: readonly BarcodeFormat[];
25
+ /**
26
+ * Requested formats the native decoder cannot read. They are read only
27
+ * with `processing.engineFallback`.
28
+ */
29
+ readonly missing: readonly BarcodeFormat[];
30
+ /** UPC-A codes come back as EAN-13 and are converted (see `create`). */
31
+ private upcFromEan;
25
32
  private constructor();
26
33
  /**
27
- * A detector for `formats` (default: all), or `undefined` when the native
28
- * decoder cannot replace the engine's fast path: API absent, or one of the
29
- * requested formats not supported natively (codes of that format would
30
- * then only be read by the slower fallbacks).
34
+ * A detector for `formats` (default: all), or `undefined` when the engine
35
+ * must keep the job: API absent, no requested format readable natively, or
36
+ * an **explicit** list naming a format the native decoder lacks while
37
+ * `engineFallback` is off (a format the application asked for must not be
38
+ * dropped silently). With the default list, missing formats (always
39
+ * `micro_qr`, sometimes others) are accepted: the native decoder reads the
40
+ * rest, and the missing ones are read only with `engineFallback`. The
41
+ * engine fallback never turns itself on: it costs CPU and battery, that is
42
+ * the application's call.
43
+ *
44
+ * UPC-A is EAN-13 with a leading `0` (GTIN-12 inside GTIN-13), so a native
45
+ * decoder without `upc_a` but with `ean_13` covers it: it is asked for
46
+ * EAN-13 and those codes are reported as UPC-A, as this SDK's engine (and
47
+ * ZXing) do when UPC-A is requested.
31
48
  */
32
- static create(formats: readonly BarcodeFormat[] | undefined, api?: BarcodeDetectorClass | undefined): Promise<NativeDetector | undefined>;
49
+ static create(formats: readonly BarcodeFormat[] | undefined, api?: BarcodeDetectorClass | undefined, engineFallback?: boolean): Promise<NativeDetector | undefined>;
33
50
  /**
34
51
  * Codes in `source` whose center lies in `rect` (the region of interest, in
35
52
  * source pixels), as detections in source pixels. Throws when the native
@@ -1 +1 @@
1
- {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAIlE,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,YAAY,EAAE,SAAS,KAAK,EAAE,CAAC;CAChC;AAED,UAAU,uBAAuB;IAC/B,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CAC7D;AAED,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC,KAAK,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,uBAAuB,CAAC;IAChE,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC1C;AAwBD,uDAAuD;AACvD,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ;IAChB,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE;IAH5C,OAAO;IAMP;;;;;OAKG;WACU,MAAM,CACjB,OAAO,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,EAC7C,GAAG,GAAE,oBAAoB,GAAG,SAAuB,GAClD,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAoBtC;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAW1E;AAiBD,2EAA2E;AAC3E,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE7C"}
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAIlE,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,YAAY,EAAE,SAAS,KAAK,EAAE,CAAC;CAChC;AAED,UAAU,uBAAuB;IAC/B,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CAC7D;AAED,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC,KAAK,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,uBAAuB,CAAC;IAChE,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC1C;AAwBD,uDAAuD;AACvD,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ;IAChB,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE;IAC1C;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE;IAC1C,wEAAwE;IACxE,OAAO,CAAC,UAAU;IAVpB,OAAO;IAaP;;;;;;;;;;;;;;;OAeG;WACU,MAAM,CACjB,OAAO,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,EAC7C,GAAG,GAAE,oBAAoB,GAAG,SAAuB,EACnD,cAAc,UAAQ,GACrB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IA2BtC;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAgB1E;AAiBD,2EAA2E;AAC3E,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE7C"}
package/dist/native.js CHANGED
@@ -1,11 +1,11 @@
1
1
  /**
2
- * Formats of this SDK, all spelled like the native ones (`qr_code`, `ean_13`…)
3
- * except `micro_qr`, which the native API does not have: when it is asked
4
- * for, it is still read by the engine's fallback strategies (`Hard` decodes
5
- * the raw frame with every format), only less often than by a fast path.
2
+ * Every format of this SDK. The native API spells them the same way
3
+ * (`qr_code`, `ean_13`…) but has no `micro_qr`, and a given browser may lack
4
+ * others (Safari, built on Apple's Vision framework, has no `upc_a`).
6
5
  */
7
- const NATIVE_FORMATS = [
6
+ const ALL_FORMATS = [
8
7
  'qr_code',
8
+ 'micro_qr',
9
9
  'data_matrix',
10
10
  'aztec',
11
11
  'pdf417',
@@ -22,18 +22,37 @@ const NATIVE_FORMATS = [
22
22
  /** Native decoder serving one reader configuration. */
23
23
  export class NativeDetector {
24
24
  constructor(detector,
25
- /** Formats the detector looks for. */
26
- formats) {
25
+ /** Requested formats the detector reads. */
26
+ formats,
27
+ /**
28
+ * Requested formats the native decoder cannot read. They are read only
29
+ * with `processing.engineFallback`.
30
+ */
31
+ missing,
32
+ /** UPC-A codes come back as EAN-13 and are converted (see `create`). */
33
+ upcFromEan) {
27
34
  this.detector = detector;
28
35
  this.formats = formats;
36
+ this.missing = missing;
37
+ this.upcFromEan = upcFromEan;
29
38
  }
30
39
  /**
31
- * A detector for `formats` (default: all), or `undefined` when the native
32
- * decoder cannot replace the engine's fast path: API absent, or one of the
33
- * requested formats not supported natively (codes of that format would
34
- * then only be read by the slower fallbacks).
40
+ * A detector for `formats` (default: all), or `undefined` when the engine
41
+ * must keep the job: API absent, no requested format readable natively, or
42
+ * an **explicit** list naming a format the native decoder lacks while
43
+ * `engineFallback` is off (a format the application asked for must not be
44
+ * dropped silently). With the default list, missing formats (always
45
+ * `micro_qr`, sometimes others) are accepted: the native decoder reads the
46
+ * rest, and the missing ones are read only with `engineFallback`. The
47
+ * engine fallback never turns itself on: it costs CPU and battery, that is
48
+ * the application's call.
49
+ *
50
+ * UPC-A is EAN-13 with a leading `0` (GTIN-12 inside GTIN-13), so a native
51
+ * decoder without `upc_a` but with `ean_13` covers it: it is asked for
52
+ * EAN-13 and those codes are reported as UPC-A, as this SDK's engine (and
53
+ * ZXing) do when UPC-A is requested.
35
54
  */
36
- static async create(formats, api = nativeApi()) {
55
+ static async create(formats, api = nativeApi(), engineFallback = false) {
37
56
  if (!api)
38
57
  return undefined;
39
58
  let supported;
@@ -43,14 +62,20 @@ export class NativeDetector {
43
62
  catch {
44
63
  return undefined;
45
64
  }
65
+ const explicit = formats !== undefined && formats.length > 0;
66
+ const requested = explicit ? formats : ALL_FORMATS;
67
+ const upcFromEan = requested.includes('upc_a') && !supported.includes('upc_a') && supported.includes('ean_13');
68
+ const covered = (f) => supported.includes(f) || (f === 'upc_a' && upcFromEan);
69
+ const readable = requested.filter(covered);
70
+ const missing = requested.filter((f) => !covered(f));
46
71
  // On Android the list is empty until Google Play Services has downloaded
47
72
  // its barcode module (first use on the device, in the background): the
48
73
  // detector is unavailable *for now*, the engine does the whole job.
49
- const wanted = (formats?.length ? formats : NATIVE_FORMATS).filter((f) => f !== 'micro_qr');
50
- if (wanted.length === 0 || !wanted.every((f) => supported.includes(f)))
74
+ if (readable.length === 0 || (explicit && missing.length > 0 && !engineFallback))
51
75
  return undefined;
76
+ const native = readable.map((f) => (f === 'upc_a' && upcFromEan ? 'ean_13' : f));
52
77
  try {
53
- return new NativeDetector(new api({ formats: [...wanted] }), wanted);
78
+ return new NativeDetector(new api({ formats: [...new Set(native)] }), readable, missing, upcFromEan);
54
79
  }
55
80
  catch {
56
81
  return undefined;
@@ -65,13 +90,18 @@ export class NativeDetector {
65
90
  const found = await this.detector.detect(source);
66
91
  const timestamp = Date.now();
67
92
  return found.flatMap((code) => {
68
- const format = code.format;
93
+ let format = code.format;
94
+ let text = code.rawValue;
95
+ if (this.upcFromEan && format === 'ean_13' && /^0\d{12}$/.test(text)) {
96
+ format = 'upc_a';
97
+ text = text.slice(1);
98
+ }
69
99
  if (!this.formats.includes(format) || code.cornerPoints.length === 0)
70
100
  return [];
71
101
  if (!contains(rect, center(code.cornerPoints)))
72
102
  return [];
73
103
  const points = code.cornerPoints.map((p) => ({ x: p.x, y: p.y }));
74
- return [{ text: code.rawValue, format, points, timestamp }];
104
+ return [{ text, format, points, timestamp }];
75
105
  });
76
106
  }
77
107
  }
@@ -1 +1 @@
1
- {"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAgCA;;;;;GAKG;AACH,MAAM,cAAc,GAA6B;IAC/C,SAAS;IACT,aAAa;IACb,OAAO;IACP,QAAQ;IACR,UAAU;IACV,SAAS;IACT,SAAS;IACT,QAAQ;IACR,OAAO;IACP,OAAO;IACP,OAAO;IACP,KAAK;IACL,SAAS;CACV,CAAC;AAEF,uDAAuD;AACvD,MAAM,OAAO,cAAc;IACzB,YACU,QAAiC;IACzC,sCAAsC;IAC7B,OAAiC;QAFlC,aAAQ,GAAR,QAAQ,CAAyB;QAEhC,YAAO,GAAP,OAAO,CAA0B;IACzC,CAAC;IAEJ;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,OAA6C,EAC7C,MAAwC,SAAS,EAAE;QAEnD,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,IAAI,SAAmB,CAAC;QACxB,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,GAAG,CAAC,mBAAmB,EAAE,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,yEAAyE;QACzE,uEAAuE;QACvE,oEAAoE;QACpE,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC;QAC5F,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzF,IAAI,CAAC;YACH,OAAO,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,MAAyB,EAAE,IAAU;QAChD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAuB,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAChF,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,SAAS,SAAS;IAChB,MAAM,GAAG,GAAY,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAChE,IAAI,OAAO,GAAG,KAAK,UAAU,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACnE,OAAO,GAA2B,CAAC;AACrC,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,SAAS,CAAC,EAAU;IAClC,OAAO,+BAA+B,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,MAAM,CAAC,MAAwB;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,OAAO;QACL,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;QAC1C,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,CAAO,EAAE,CAAQ;IACjC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AACnF,CAAC"}
1
+ {"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"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"}
package/dist/reader.d.ts CHANGED
@@ -122,10 +122,13 @@ export declare class BarcodeReader {
122
122
  * Grab stage. With the native `BarcodeDetector`, the frame is searched
123
123
  * natively first, straight from the `<video>` (Chrome reads it outside the
124
124
  * page's threads): no grab of our own. Codes it finds are committed right
125
- * away. When it finds nothing, the engine gets a frame **from time to
126
- * time** (`FALLBACK_INTERVAL_MS`), without its fast path, for one fallback
127
- * strategy: the safety net for what the native decoder has no
128
- * preprocessing for (laser engraving, light-on-dark codes, `micro_qr`…).
125
+ * away. When it finds nothing and `processing.engineFallback` is on, the
126
+ * engine gets a frame **from time to time** (`FALLBACK_INTERVAL_MS`),
127
+ * without its fast path, for one fallback strategy: a safety net for what
128
+ * the native decoder has no preprocessing for (laser engraving,
129
+ * light-on-dark codes, `micro_qr`…). Off by default (choice of the project
130
+ * after testing on a Galaxy A14, where the native decoder read codes very
131
+ * well): the net mostly costs CPU and battery.
129
132
  * Grabbing and decoding every frame as well would double the reads of the
130
133
  * frame and keep the workers busy on frames the native decoder handles,
131
134
  * costing battery and CPU it also needs.
@@ -1 +1 @@
1
- {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../src/reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../src/reader.ts"],"names":[],"mappings":"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"}
package/dist/reader.js CHANGED
@@ -9,7 +9,7 @@ import { NativeDetector } from './native.js';
9
9
  import { Preview } from './overlay.js';
10
10
  const DEFAULT_REGION = { x: 0.1, y: 0.2, width: 0.8, height: 0.6 };
11
11
  /**
12
- * With the native detector, delay between two engine frames while the
12
+ * With the native detector and `processing.engineFallback`, delay between two engine frames while the
13
13
  * native decoder finds nothing (~3 fallbacks per second). A code that only
14
14
  * the fallbacks read is still found within a couple of seconds (the
15
15
  * strategies share CPU time, the cheap Linear one runs most often), while
@@ -71,7 +71,18 @@ export class BarcodeReader {
71
71
  this.torchOn = false;
72
72
  this.buffers = [];
73
73
  this.frameHandle = 0;
74
- this.perf = { frames: 0, since: 0, fps: 0, decodeMs: 0, grabMs: 0, nativeMs: 0, w: 0, h: 0 };
74
+ this.perf = {
75
+ frames: 0,
76
+ engineFrames: 0,
77
+ since: 0,
78
+ fps: 0,
79
+ engineFps: 0,
80
+ decodeMs: 0,
81
+ grabMs: 0,
82
+ nativeMs: 0,
83
+ w: 0,
84
+ h: 0,
85
+ };
75
86
  this.native = native;
76
87
  this.region = clampRegion(options.regionOfInterest ?? DEFAULT_REGION);
77
88
  this.engineOptions = pickEngineOptions(options);
@@ -121,6 +132,7 @@ export class BarcodeReader {
121
132
  workers: this.engine.concurrency,
122
133
  native: this.native !== undefined,
123
134
  nativeMs: this.perf.nativeMs,
135
+ engineFps: this.perf.engineFps,
124
136
  };
125
137
  }
126
138
  get engineVersion() {
@@ -356,10 +368,13 @@ export class BarcodeReader {
356
368
  * Grab stage. With the native `BarcodeDetector`, the frame is searched
357
369
  * natively first, straight from the `<video>` (Chrome reads it outside the
358
370
  * page's threads): no grab of our own. Codes it finds are committed right
359
- * away. When it finds nothing, the engine gets a frame **from time to
360
- * time** (`FALLBACK_INTERVAL_MS`), without its fast path, for one fallback
361
- * strategy: the safety net for what the native decoder has no
362
- * preprocessing for (laser engraving, light-on-dark codes, `micro_qr`…).
371
+ * away. When it finds nothing and `processing.engineFallback` is on, the
372
+ * engine gets a frame **from time to time** (`FALLBACK_INTERVAL_MS`),
373
+ * without its fast path, for one fallback strategy: a safety net for what
374
+ * the native decoder has no preprocessing for (laser engraving,
375
+ * light-on-dark codes, `micro_qr`…). Off by default (choice of the project
376
+ * after testing on a Galaxy A14, where the native decoder read codes very
377
+ * well): the net mostly costs CPU and battery.
363
378
  * Grabbing and decoding every frame as well would double the reads of the
364
379
  * frame and keep the workers busy on frames the native decoder handles,
365
380
  * costing battery and CPU it also needs.
@@ -386,7 +401,7 @@ export class BarcodeReader {
386
401
  // Replaced by `configure()` meanwhile: results made for the old formats.
387
402
  if (generation !== this.nativeGeneration || !this.running || this.paused)
388
403
  return;
389
- if (codes.length === 0 && this.fallbackDue()) {
404
+ if (codes.length === 0 && this.options.processing?.engineFallback === true && this.fallbackDue()) {
390
405
  this.fallbackInFlight = true;
391
406
  this.updatePerf({ nativeMs, counted: false });
392
407
  try {
@@ -564,14 +579,24 @@ export class BarcodeReader {
564
579
  p.w = s.grab.width;
565
580
  p.h = s.grab.height;
566
581
  }
567
- if (s.decodeMs !== undefined)
582
+ if (s.decodeMs !== undefined) {
568
583
  p.decodeMs = ema(p.decodeMs, s.decodeMs);
584
+ p.engineFrames++;
585
+ }
569
586
  if (s.nativeMs !== undefined)
570
587
  p.nativeMs = ema(p.nativeMs, s.nativeMs);
571
588
  const now = performance.now();
572
589
  if (now - p.since >= 1000) {
573
590
  p.fps = (p.frames * 1000) / (now - p.since);
591
+ p.engineFps = (p.engineFrames * 1000) / (now - p.since);
592
+ // With the native detector the engine may decode nothing for long
593
+ // stretches: its averages would show stale values, as if it were busy.
594
+ if (p.engineFrames === 0) {
595
+ p.decodeMs = 0;
596
+ p.grabMs = 0;
597
+ }
574
598
  p.frames = 0;
599
+ p.engineFrames = 0;
575
600
  p.since = now;
576
601
  }
577
602
  }
@@ -621,7 +646,7 @@ function createNative(options, engineOptions) {
621
646
  // only reads 1D codes roughly aligned with the image rows.
622
647
  if (options.processing?.nativeDetector === 'off')
623
648
  return Promise.resolve(undefined);
624
- return NativeDetector.create(engineOptions.formats);
649
+ return NativeDetector.create(engineOptions.formats, undefined, options.processing?.engineFallback === true);
625
650
  }
626
651
  function waitForVideo(video) {
627
652
  if (video.readyState >= 2 && video.videoWidth > 0)
@@ -1 +1 @@
1
- {"version":3,"file":"reader.js","sourceRoot":"","sources":["../src/reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reader.js","sourceRoot":"","sources":["../src/reader.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -109,15 +109,27 @@ export interface ProcessingOptions {
109
109
  backend?: 'auto' | 'webgl' | 'canvas';
110
110
  /**
111
111
  * Use the browser's native `BarcodeDetector` (Chrome on Android, macOS and
112
- * ChromeOS) as the fast pass, when it supports every requested format
113
- * (`micro_qr` excepted). The engine's fallback strategies keep running on
114
- * the frames it finds nothing in: hard codes (laser engraving, shadows…)
115
- * are still read. Codes get the same confirmation and de-duplication.
116
- * It reads codes whatever their orientation. Elsewhere (Safari, Firefox,
117
- * Chrome on Windows / Linux), or if it fails, the engine does everything.
118
- * `'off'`: always the engine alone. Default: `'auto'`.
112
+ * ChromeOS; Safari when its Shape Detection API is enabled): it reads codes
113
+ * whatever their orientation, and the engine's workers stay idle. Codes get
114
+ * the same confirmation and de-duplication.
115
+ *
116
+ * Formats it lacks (`micro_qr` always, others depending on the browser)
117
+ * are read only with `engineFallback`. With the default `formats` list
118
+ * they are accepted as unread; with an explicit list, one of them keeps
119
+ * the engine instead (a requested format is never dropped silently).
120
+ * Elsewhere (Safari without the API, Firefox, Chrome on Windows / Linux),
121
+ * or if it fails, the engine does everything. `'off'`: always the engine
122
+ * alone. Default: `'auto'`.
119
123
  */
120
124
  nativeDetector?: 'auto' | 'off';
125
+ /**
126
+ * With the native detector: while it finds nothing, also hand a frame to
127
+ * the engine's fallback strategies from time to time (~3 per second), a
128
+ * safety net for codes it misses (laser engraving, shadows, light-on-dark
129
+ * codes) and for the formats it lacks. Costs a little CPU and battery, so
130
+ * it is never turned on implicitly. Default: `false`.
131
+ */
132
+ engineFallback?: boolean;
121
133
  }
122
134
  export interface ReaderOptions extends EngineOptions, AssetOptions {
123
135
  /** Element (or CSS selector) that will host the camera preview. It should have a size. */
@@ -137,9 +149,9 @@ export interface ReaderOptions extends EngineOptions, AssetOptions {
137
149
  export interface ReaderStats {
138
150
  /** Frames decoded per second. */
139
151
  fps: number;
140
- /** Average decode time in the engine, in ms. */
152
+ /** Average decode time in the engine, in ms (`0` when it decoded nothing in the last second). */
141
153
  decodeMs: number;
142
- /** Average GPU/canvas frame preparation time, in ms. */
154
+ /** Average GPU/canvas frame preparation time, in ms (`0` when nothing was grabbed in the last second). */
143
155
  grabMs: number;
144
156
  /** Size of the image handed to the decoder. */
145
157
  frameWidth: number;
@@ -154,6 +166,11 @@ export interface ReaderStats {
154
166
  native: boolean;
155
167
  /** Average native detection time, in ms (`0` when not used). */
156
168
  nativeMs: number;
169
+ /**
170
+ * Frames decoded by the engine per second. With the native detector: `0`
171
+ * while it reads everything, a few per second with `engineFallback`.
172
+ */
173
+ engineFps: number;
157
174
  }
158
175
  export interface ReaderEvents {
159
176
  /** New codes (already de-duplicated). */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gueshbzh-perso/scanner",
3
- "version": "0.10.0",
3
+ "version": "0.11.1",
4
4
  "description": "Fast QR code & barcode scanning for the web: camera, WebGL frame pipeline, Web Worker and Rust/WebAssembly decoder.",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/src/native.ts CHANGED
@@ -31,13 +31,13 @@ export interface BarcodeDetectorClass {
31
31
  }
32
32
 
33
33
  /**
34
- * Formats of this SDK, all spelled like the native ones (`qr_code`, `ean_13`…)
35
- * except `micro_qr`, which the native API does not have: when it is asked
36
- * for, it is still read by the engine's fallback strategies (`Hard` decodes
37
- * the raw frame with every format), only less often than by a fast path.
34
+ * Every format of this SDK. The native API spells them the same way
35
+ * (`qr_code`, `ean_13`…) but has no `micro_qr`, and a given browser may lack
36
+ * others (Safari, built on Apple's Vision framework, has no `upc_a`).
38
37
  */
39
- const NATIVE_FORMATS: readonly BarcodeFormat[] = [
38
+ const ALL_FORMATS: readonly BarcodeFormat[] = [
40
39
  'qr_code',
40
+ 'micro_qr',
41
41
  'data_matrix',
42
42
  'aztec',
43
43
  'pdf417',
@@ -56,19 +56,37 @@ const NATIVE_FORMATS: readonly BarcodeFormat[] = [
56
56
  export class NativeDetector {
57
57
  private constructor(
58
58
  private detector: BarcodeDetectorInstance,
59
- /** Formats the detector looks for. */
59
+ /** Requested formats the detector reads. */
60
60
  readonly formats: readonly BarcodeFormat[],
61
+ /**
62
+ * Requested formats the native decoder cannot read. They are read only
63
+ * with `processing.engineFallback`.
64
+ */
65
+ readonly missing: readonly BarcodeFormat[],
66
+ /** UPC-A codes come back as EAN-13 and are converted (see `create`). */
67
+ private upcFromEan: boolean,
61
68
  ) {}
62
69
 
63
70
  /**
64
- * A detector for `formats` (default: all), or `undefined` when the native
65
- * decoder cannot replace the engine's fast path: API absent, or one of the
66
- * requested formats not supported natively (codes of that format would
67
- * then only be read by the slower fallbacks).
71
+ * A detector for `formats` (default: all), or `undefined` when the engine
72
+ * must keep the job: API absent, no requested format readable natively, or
73
+ * an **explicit** list naming a format the native decoder lacks while
74
+ * `engineFallback` is off (a format the application asked for must not be
75
+ * dropped silently). With the default list, missing formats (always
76
+ * `micro_qr`, sometimes others) are accepted: the native decoder reads the
77
+ * rest, and the missing ones are read only with `engineFallback`. The
78
+ * engine fallback never turns itself on: it costs CPU and battery, that is
79
+ * the application's call.
80
+ *
81
+ * UPC-A is EAN-13 with a leading `0` (GTIN-12 inside GTIN-13), so a native
82
+ * decoder without `upc_a` but with `ean_13` covers it: it is asked for
83
+ * EAN-13 and those codes are reported as UPC-A, as this SDK's engine (and
84
+ * ZXing) do when UPC-A is requested.
68
85
  */
69
86
  static async create(
70
87
  formats: readonly BarcodeFormat[] | undefined,
71
88
  api: BarcodeDetectorClass | undefined = nativeApi(),
89
+ engineFallback = false,
72
90
  ): Promise<NativeDetector | undefined> {
73
91
  if (!api) return undefined;
74
92
  let supported: string[];
@@ -77,13 +95,20 @@ export class NativeDetector {
77
95
  } catch {
78
96
  return undefined;
79
97
  }
98
+ const explicit = formats !== undefined && formats.length > 0;
99
+ const requested = explicit ? formats : ALL_FORMATS;
100
+ const upcFromEan =
101
+ requested.includes('upc_a') && !supported.includes('upc_a') && supported.includes('ean_13');
102
+ const covered = (f: BarcodeFormat) => supported.includes(f) || (f === 'upc_a' && upcFromEan);
103
+ const readable = requested.filter(covered);
104
+ const missing = requested.filter((f) => !covered(f));
80
105
  // On Android the list is empty until Google Play Services has downloaded
81
106
  // its barcode module (first use on the device, in the background): the
82
107
  // detector is unavailable *for now*, the engine does the whole job.
83
- const wanted = (formats?.length ? formats : NATIVE_FORMATS).filter((f) => f !== 'micro_qr');
84
- if (wanted.length === 0 || !wanted.every((f) => supported.includes(f))) return undefined;
108
+ if (readable.length === 0 || (explicit && missing.length > 0 && !engineFallback)) return undefined;
109
+ const native = readable.map((f) => (f === 'upc_a' && upcFromEan ? 'ean_13' : f));
85
110
  try {
86
- return new NativeDetector(new api({ formats: [...wanted] }), wanted);
111
+ return new NativeDetector(new api({ formats: [...new Set(native)] }), readable, missing, upcFromEan);
87
112
  } catch {
88
113
  return undefined;
89
114
  }
@@ -98,11 +123,16 @@ export class NativeDetector {
98
123
  const found = await this.detector.detect(source);
99
124
  const timestamp = Date.now();
100
125
  return found.flatMap((code) => {
101
- const format = code.format as BarcodeFormat;
126
+ let format = code.format as BarcodeFormat;
127
+ let text = code.rawValue;
128
+ if (this.upcFromEan && format === 'ean_13' && /^0\d{12}$/.test(text)) {
129
+ format = 'upc_a';
130
+ text = text.slice(1);
131
+ }
102
132
  if (!this.formats.includes(format) || code.cornerPoints.length === 0) return [];
103
133
  if (!contains(rect, center(code.cornerPoints))) return [];
104
134
  const points = code.cornerPoints.map((p) => ({ x: p.x, y: p.y }));
105
- return [{ text: code.rawValue, format, points, timestamp }];
135
+ return [{ text, format, points, timestamp }];
106
136
  });
107
137
  }
108
138
  }
package/src/reader.ts CHANGED
@@ -20,7 +20,7 @@ import type { Detection, EngineOptions, ReaderEvents, ReaderOptions, ReaderStats
20
20
  const DEFAULT_REGION: Region = { x: 0.1, y: 0.2, width: 0.8, height: 0.6 };
21
21
 
22
22
  /**
23
- * With the native detector, delay between two engine frames while the
23
+ * With the native detector and `processing.engineFallback`, delay between two engine frames while the
24
24
  * native decoder finds nothing (~3 fallbacks per second). A code that only
25
25
  * the fallbacks read is still found within a couple of seconds (the
26
26
  * strategies share CPU time, the cheap Linear one runs most often), while
@@ -103,7 +103,18 @@ export class BarcodeReader {
103
103
  private torchOn = false;
104
104
  private buffers: ArrayBuffer[] = [];
105
105
  private frameHandle = 0;
106
- private perf = { frames: 0, since: 0, fps: 0, decodeMs: 0, grabMs: 0, nativeMs: 0, w: 0, h: 0 };
106
+ private perf = {
107
+ frames: 0,
108
+ engineFrames: 0,
109
+ since: 0,
110
+ fps: 0,
111
+ engineFps: 0,
112
+ decodeMs: 0,
113
+ grabMs: 0,
114
+ nativeMs: 0,
115
+ w: 0,
116
+ h: 0,
117
+ };
107
118
 
108
119
  private constructor(
109
120
  private engine: Engine,
@@ -166,6 +177,7 @@ export class BarcodeReader {
166
177
  workers: this.engine.concurrency,
167
178
  native: this.native !== undefined,
168
179
  nativeMs: this.perf.nativeMs,
180
+ engineFps: this.perf.engineFps,
169
181
  };
170
182
  }
171
183
 
@@ -407,10 +419,13 @@ export class BarcodeReader {
407
419
  * Grab stage. With the native `BarcodeDetector`, the frame is searched
408
420
  * natively first, straight from the `<video>` (Chrome reads it outside the
409
421
  * page's threads): no grab of our own. Codes it finds are committed right
410
- * away. When it finds nothing, the engine gets a frame **from time to
411
- * time** (`FALLBACK_INTERVAL_MS`), without its fast path, for one fallback
412
- * strategy: the safety net for what the native decoder has no
413
- * preprocessing for (laser engraving, light-on-dark codes, `micro_qr`…).
422
+ * away. When it finds nothing and `processing.engineFallback` is on, the
423
+ * engine gets a frame **from time to time** (`FALLBACK_INTERVAL_MS`),
424
+ * without its fast path, for one fallback strategy: a safety net for what
425
+ * the native decoder has no preprocessing for (laser engraving,
426
+ * light-on-dark codes, `micro_qr`…). Off by default (choice of the project
427
+ * after testing on a Galaxy A14, where the native decoder read codes very
428
+ * well): the net mostly costs CPU and battery.
414
429
  * Grabbing and decoding every frame as well would double the reads of the
415
430
  * frame and keep the workers busy on frames the native decoder handles,
416
431
  * costing battery and CPU it also needs.
@@ -436,7 +451,7 @@ export class BarcodeReader {
436
451
  // Replaced by `configure()` meanwhile: results made for the old formats.
437
452
  if (generation !== this.nativeGeneration || !this.running || this.paused) return;
438
453
 
439
- if (codes.length === 0 && this.fallbackDue()) {
454
+ if (codes.length === 0 && this.options.processing?.engineFallback === true && this.fallbackDue()) {
440
455
  this.fallbackInFlight = true;
441
456
  this.updatePerf({ nativeMs, counted: false });
442
457
  try {
@@ -625,12 +640,23 @@ export class BarcodeReader {
625
640
  p.w = s.grab.width;
626
641
  p.h = s.grab.height;
627
642
  }
628
- if (s.decodeMs !== undefined) p.decodeMs = ema(p.decodeMs, s.decodeMs);
643
+ if (s.decodeMs !== undefined) {
644
+ p.decodeMs = ema(p.decodeMs, s.decodeMs);
645
+ p.engineFrames++;
646
+ }
629
647
  if (s.nativeMs !== undefined) p.nativeMs = ema(p.nativeMs, s.nativeMs);
630
648
  const now = performance.now();
631
649
  if (now - p.since >= 1000) {
632
650
  p.fps = (p.frames * 1000) / (now - p.since);
651
+ p.engineFps = (p.engineFrames * 1000) / (now - p.since);
652
+ // With the native detector the engine may decode nothing for long
653
+ // stretches: its averages would show stale values, as if it were busy.
654
+ if (p.engineFrames === 0) {
655
+ p.decodeMs = 0;
656
+ p.grabMs = 0;
657
+ }
633
658
  p.frames = 0;
659
+ p.engineFrames = 0;
634
660
  p.since = now;
635
661
  }
636
662
  }
@@ -686,7 +712,7 @@ function createNative(
686
712
  // well whatever the orientation of the phone, where the engine's fast pass
687
713
  // only reads 1D codes roughly aligned with the image rows.
688
714
  if (options.processing?.nativeDetector === 'off') return Promise.resolve(undefined);
689
- return NativeDetector.create(engineOptions.formats);
715
+ return NativeDetector.create(engineOptions.formats, undefined, options.processing?.engineFallback === true);
690
716
  }
691
717
 
692
718
  function waitForVideo(video: HTMLVideoElement): Promise<void> {
package/src/types.ts CHANGED
@@ -120,15 +120,27 @@ export interface ProcessingOptions {
120
120
  backend?: 'auto' | 'webgl' | 'canvas';
121
121
  /**
122
122
  * Use the browser's native `BarcodeDetector` (Chrome on Android, macOS and
123
- * ChromeOS) as the fast pass, when it supports every requested format
124
- * (`micro_qr` excepted). The engine's fallback strategies keep running on
125
- * the frames it finds nothing in: hard codes (laser engraving, shadows…)
126
- * are still read. Codes get the same confirmation and de-duplication.
127
- * It reads codes whatever their orientation. Elsewhere (Safari, Firefox,
128
- * Chrome on Windows / Linux), or if it fails, the engine does everything.
129
- * `'off'`: always the engine alone. Default: `'auto'`.
123
+ * ChromeOS; Safari when its Shape Detection API is enabled): it reads codes
124
+ * whatever their orientation, and the engine's workers stay idle. Codes get
125
+ * the same confirmation and de-duplication.
126
+ *
127
+ * Formats it lacks (`micro_qr` always, others depending on the browser)
128
+ * are read only with `engineFallback`. With the default `formats` list
129
+ * they are accepted as unread; with an explicit list, one of them keeps
130
+ * the engine instead (a requested format is never dropped silently).
131
+ * Elsewhere (Safari without the API, Firefox, Chrome on Windows / Linux),
132
+ * or if it fails, the engine does everything. `'off'`: always the engine
133
+ * alone. Default: `'auto'`.
130
134
  */
131
135
  nativeDetector?: 'auto' | 'off';
136
+ /**
137
+ * With the native detector: while it finds nothing, also hand a frame to
138
+ * the engine's fallback strategies from time to time (~3 per second), a
139
+ * safety net for codes it misses (laser engraving, shadows, light-on-dark
140
+ * codes) and for the formats it lacks. Costs a little CPU and battery, so
141
+ * it is never turned on implicitly. Default: `false`.
142
+ */
143
+ engineFallback?: boolean;
132
144
  }
133
145
 
134
146
  export interface ReaderOptions extends EngineOptions, AssetOptions {
@@ -150,9 +162,9 @@ export interface ReaderOptions extends EngineOptions, AssetOptions {
150
162
  export interface ReaderStats {
151
163
  /** Frames decoded per second. */
152
164
  fps: number;
153
- /** Average decode time in the engine, in ms. */
165
+ /** Average decode time in the engine, in ms (`0` when it decoded nothing in the last second). */
154
166
  decodeMs: number;
155
- /** Average GPU/canvas frame preparation time, in ms. */
167
+ /** Average GPU/canvas frame preparation time, in ms (`0` when nothing was grabbed in the last second). */
156
168
  grabMs: number;
157
169
  /** Size of the image handed to the decoder. */
158
170
  frameWidth: number;
@@ -167,6 +179,11 @@ export interface ReaderStats {
167
179
  native: boolean;
168
180
  /** Average native detection time, in ms (`0` when not used). */
169
181
  nativeMs: number;
182
+ /**
183
+ * Frames decoded by the engine per second. With the native detector: `0`
184
+ * while it reads everything, a few per second with `engineFallback`.
185
+ */
186
+ engineFps: number;
170
187
  }
171
188
 
172
189
  export interface ReaderEvents {