diff --git a/.eslintrc b/.eslintrc index dc8f3413..6a70b633 100644 --- a/.eslintrc +++ b/.eslintrc @@ -42,6 +42,7 @@ "wrap-iife": [ "error", "outside" ], "import/no-named-as-default": "off", "@typescript-eslint/restrict-template-expressions": "off", + "@typescript-eslint/prefer-namespace-keyword": "off", // STYLE "brace-style": ["error", "1tbs"], "comma-spacing": ["error", { "before": false, "after": true }], diff --git a/package.json b/package.json index af7bd502..96cb03de 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ericblade/quagga2", - "version": "1.7.7", + "version": "1.8.0", "description": "An advanced barcode-scanner written in JavaScript", "main": "lib/quagga.js", "types": "type-definitions/quagga.d.ts", diff --git a/src/input/frame_grabber_browser.js b/src/input/frame_grabber_browser.js index 52cbd62a..1ee3f737 100644 --- a/src/input/frame_grabber_browser.js +++ b/src/input/frame_grabber_browser.js @@ -39,11 +39,12 @@ FrameGrabber.create = function (inputStream, canvas) { let _canvas; let _ctx = null; let _data = null; + const { willReadFrequently } = _streamConfig; _canvas = canvas || document.createElement('canvas'); _canvas.width = _canvasSize.x; _canvas.height = _canvasSize.y; - _ctx = _canvas.getContext('2d'); + _ctx = _canvas.getContext('2d', { willReadFrequently: !!willReadFrequently }); // double not because we have an optional bool that needs to pass as a bool _data = new Uint8Array(_size.x * _size.y); if (ENV.development) { console.log('FrameGrabber', JSON.stringify({ diff --git a/type-definitions/quagga.d.ts b/type-definitions/quagga.d.ts index 8726e5f9..f416c1a3 100644 --- a/type-definitions/quagga.d.ts +++ b/type-definitions/quagga.d.ts @@ -119,7 +119,7 @@ export interface BarcodeReaderConfig { export enum BarcodeDirection { Forward = 1, - Reverse = -1 + Reverse = -1, } type BarcodeFormat = string; @@ -129,11 +129,11 @@ export interface BarcodeCorrection { } export interface BarcodePosition { - start: number; - startCounter?: number; end: number; endCounter?: number; error?: number; + start: number; + startCounter?: number; } export interface BarcodeInfo extends BarcodePosition { @@ -156,18 +156,18 @@ export interface Barcode { } export interface ThresholdSize { - size: number; counts: number; - min: number; max: number; + min: number; + size: number; } export interface Threshold { - space: { + bar: { narrow: ThresholdSize; wide: ThresholdSize; }; - bar: { + space: { narrow: ThresholdSize; wide: ThresholdSize; }; @@ -176,14 +176,17 @@ export interface Threshold { export declare module Readers { export abstract class BarcodeReader { _row: Array; + SINGLE_CODE_ERROR: number; + FORMAT: BarcodeFormat; + CONFIG_KEYS: BarcodeReaderConfig; static get Exception(): { - StartNotFoundException: string; CodeNotFoundException: string; PatternNotFoundException: string; + StartNotFoundException: string; }; constructor(config: BarcodeReaderConfig, supplements?: Array); @@ -209,7 +212,9 @@ export declare module Readers { export class TwoOfFiveReader extends BarcodeReader { FORMAT: string; + SINGLE_CODE_ERROR: number; + AVG_CODE_ERROR: number; decode(row?: Array, start?: BarcodePosition): Barcode | null; @@ -259,17 +264,29 @@ export declare module Readers { export class Code128Reader extends BarcodeReader { CODE_SHIFT: number; + CODE_C: number; + CODE_B: number; + CODE_A: number; + START_CODE_A: number; + START_CODE_B: number; + START_CODE_C: number; + STOP_CODE: number; + CODE_PATTERN: number[][]; + SINGLE_CODE_ERROR: number; + AVG_CODE_ERROR: number; + FORMAT: string; + MODULE_INDICES: { bar: number[]; space: number[]; @@ -288,16 +305,6 @@ export declare module Readers { protected _verifyTrailingWhitespace(endInfo: BarcodeInfo): BarcodeInfo | null; } - export class Code32Reader extends Code39Reader { - FORMAT: string; - - decode(row?: Array, start?: BarcodePosition): Barcode | null; - - protected _decodeCode32(code: string): string | null; - - protected _checkChecksum(code: string): boolean; - } - export class Code39Reader extends BarcodeReader { FORMAT: string; @@ -314,6 +321,16 @@ export declare module Readers { protected _verifyTrailingWhitespace(lastStart: number, nextStart: number, counters: Uint16Array): boolean; } + export class Code32Reader extends Code39Reader { + FORMAT: string; + + decode(row?: Array, start?: BarcodePosition): Barcode | null; + + protected _decodeCode32(code: string): string | null; + + protected _checkChecksum(code: string): boolean; + } + export class Code39VINReader extends Code39Reader { FORMAT: string; @@ -342,24 +359,6 @@ export declare module Readers { protected _verifyChecksums(charArray: Array): boolean; } - export class EAN2Reader extends EANReader { - FORMAT: string; - - decode(row?: Array, start?: number): Barcode | null; - } - - export class EAN5Reader extends EANReader { - FORMAT: string; - - decode(row?: Array, start?: number): Barcode | null; - } - - export class EAN8Reader extends EANReader { - FORMAT: string; - - protected _decodePayload(inCode: BarcodePosition, result: Array, decodedCodes: Array): BarcodeInfo | null; - } - export class EANReader extends BarcodeReader { FORMAT: string; SINGLE_CODE_ERROR: number; @@ -384,13 +383,37 @@ export declare module Readers { protected _checksum(result: Array): boolean; } + export class EAN2Reader extends EANReader { + FORMAT: string; + + decode(row?: Array, start?: number): Barcode | null; + } + + export class EAN5Reader extends EANReader { + FORMAT: string; + + decode(row?: Array, start?: number): Barcode | null; + } + + export class EAN8Reader extends EANReader { + FORMAT: string; + + protected _decodePayload(inCode: BarcodePosition, result: Array, decodedCodes: Array): BarcodeInfo | null; + } + export class I2of5Reader extends BarcodeReader { SINGLE_CODE_ERROR: number; + AVG_CODE_ERROR: number; + START_PATTERN: number[]; + STOP_PATTERN: number[]; + CODE_PATTERN: number[][]; + MAX_CORRECTION_FACTOR: number; + FORMAT: string; constructor(opts: BarcodeReaderConfig); @@ -418,7 +441,9 @@ export declare module Readers { export class UPCEReader extends EANReader { CODE_FREQUENCY: number[][]; + STOP_PATTERN: number[]; + FORMAT: string; protected _decodePayload(inCode: BarcodePosition, result: Array, decodedCodes: Array): BarcodeInfo | null; @@ -768,6 +793,13 @@ export interface QuaggaJSConfigObject { */ type?: InputStreamType; + /** + * Use canvas.getContext('2d', { willReadFrequently: true }) for browser frame grabber operations + * @default false + * ... defaulting false because historically this wasn't an option, so i don't want to change behavior + */ + willReadFrequently?: boolean; + target?: Element | string; constraints?: MediaTrackConstraints; @@ -939,16 +971,16 @@ export interface QuaggaJSConfigObject { } export interface QuaggaJSReaderConfig { - format: string; config: { supplements: string[]; }; + format: string; } export interface MediaTrackConstraintsWithDeprecated extends MediaTrackConstraints { + facing?: string; maxAspectRatio?: number; // i don't see this in the documentation anywhere, but it's in the original test suite... minAspectRatio?: number; - facing?: string; } export type TypedArrayConstructor =