mirror of
https://github.com/codedread/bitjs
synced 2025-10-03 09:39:16 +02:00
Remove Jpeg parse event boilerplate
This commit is contained in:
parent
c3a7b35fd5
commit
17c58ec416
6 changed files with 52 additions and 168 deletions
|
@ -10,6 +10,7 @@
|
|||
|
||||
import { ByteStream } from '../../io/bytestream.js';
|
||||
import { getExifProfile } from './exif.js';
|
||||
import { createEvent } from './parsers.js';
|
||||
|
||||
/** @typedef {import('./exif.js').ExifValue} ExifValue */
|
||||
|
||||
|
@ -73,15 +74,6 @@ export const JpegDensityUnits = {
|
|||
* @property {Uint8Array} thumbnailData RGB data. Size is 3 x thumbnailWidth x thumbnailHeight.
|
||||
*/
|
||||
|
||||
export class JpegApp0MarkerEvent extends Event {
|
||||
/** @param {JpegApp0Marker} */
|
||||
constructor(segment) {
|
||||
super(JpegParseEventType.APP0_MARKER);
|
||||
/** @type {JpegApp0Marker} */
|
||||
this.app0Marker = segment;
|
||||
}
|
||||
}
|
||||
|
||||
/** @enum {number} */
|
||||
export const JpegExtensionThumbnailFormat = {
|
||||
JPEG: 0x10,
|
||||
|
@ -95,23 +87,7 @@ export const JpegExtensionThumbnailFormat = {
|
|||
* @property {Uint8Array} thumbnailData Raw thumbnail data
|
||||
*/
|
||||
|
||||
export class JpegApp0ExtensionEvent extends Event {
|
||||
/** @param {JpegApp0Extension} */
|
||||
constructor(segment) {
|
||||
super(JpegParseEventType.APP0_EXTENSION);
|
||||
/** @type {JpegApp0Extension} */
|
||||
this.app0Extension = segment;
|
||||
}
|
||||
}
|
||||
|
||||
export class JpegApp1ExifEvent extends Event {
|
||||
/** @param {Map<number, ExifValue>} exifValueMap */
|
||||
constructor(exifValueMap) {
|
||||
super(JpegParseEventType.APP1_EXIF);
|
||||
/** @type {Map<number, ExifValue>} */
|
||||
this.exifValueMap = exifValueMap;
|
||||
}
|
||||
}
|
||||
/** @typedef {Map<number, ExifValue>} JpegExifProfile */
|
||||
|
||||
/**
|
||||
* @typedef JpegDefineQuantizationTable
|
||||
|
@ -120,15 +96,6 @@ export class JpegApp1ExifEvent extends Event {
|
|||
* @property {number[]} tableValues 64 numbers representing the quantization table.
|
||||
*/
|
||||
|
||||
export class JpegDefineQuantizationTableEvent extends Event {
|
||||
/** @param {JpegDefineQuantizationTable} table */
|
||||
constructor(table) {
|
||||
super(JpegParseEventType.DEFINE_QUANTIZATION_TABLE);
|
||||
/** @type {JpegDefineQuantizationTable} */
|
||||
this.quantizationTable = table;
|
||||
}
|
||||
}
|
||||
|
||||
/** @enum {number} */
|
||||
export const JpegHuffmanTableType = {
|
||||
DC: 0,
|
||||
|
@ -143,15 +110,6 @@ export const JpegHuffmanTableType = {
|
|||
* @property {number[]} symbols
|
||||
*/
|
||||
|
||||
export class JpegDefineHuffmanTableEvent extends Event {
|
||||
/** @param {JpegDefineHuffmanTable} table */
|
||||
constructor(table) {
|
||||
super(JpegParseEventType.DEFINE_HUFFMAN_TABLE);
|
||||
/** @type {JpegDefineHuffmanTable} */
|
||||
this.huffmanTable = table;
|
||||
}
|
||||
}
|
||||
|
||||
/** @enum {number} */
|
||||
export const JpegDctType = {
|
||||
BASELINE: 0,
|
||||
|
@ -186,15 +144,6 @@ export const JpegComponentType = {
|
|||
* @property {JpegComponentDetail[]} componentDetails
|
||||
*/
|
||||
|
||||
export class JpegStartOfFrameEvent extends Event {
|
||||
/** @param {JpegStartOfFrame} sof */
|
||||
constructor(sof) {
|
||||
super(JpegParseEventType.START_OF_FRAME);
|
||||
/** @type {JpegStartOfFrame} */
|
||||
this.startOfFrame = sof;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @typedef JpegStartOfScan
|
||||
* @property {number} componentsInScan
|
||||
|
@ -238,8 +187,8 @@ export class JpegParser extends EventTarget {
|
|||
}
|
||||
|
||||
/**
|
||||
* Type-safe way to bind a listener for a JpegApp0MarkerEvent.
|
||||
* @param {function(JpegApp0MarkerEvent): void} listener
|
||||
* Type-safe way to bind a listener for a JpegApp0Marker.
|
||||
* @param {function(CustomEvent<JpegApp0Marker>): void} listener
|
||||
* @returns {JpegParser} for chaining
|
||||
*/
|
||||
onApp0Marker(listener) {
|
||||
|
@ -248,8 +197,8 @@ export class JpegParser extends EventTarget {
|
|||
}
|
||||
|
||||
/**
|
||||
* Type-safe way to bind a listener for a JpegApp0ExtensionEvent.
|
||||
* @param {function(JpegApp0MarkerEvent): void} listener
|
||||
* Type-safe way to bind a listener for a JpegApp0Extension.
|
||||
* @param {function(CustomEvent<JpegApp0Extension>): void} listener
|
||||
* @returns {JpegParser} for chaining
|
||||
*/
|
||||
onApp0Extension(listener) {
|
||||
|
@ -258,8 +207,8 @@ export class JpegParser extends EventTarget {
|
|||
}
|
||||
|
||||
/**
|
||||
* Type-safe way to bind a listener for a JpegApp1ExifEvent.
|
||||
* @param {function(JpegApp1ExifEvent): void} listener
|
||||
* Type-safe way to bind a listener for a JpegExifProfile.
|
||||
* @param {function(CustomEvent<JpegExifProfile>): void} listener
|
||||
* @returns {JpegParser} for chaining
|
||||
*/
|
||||
onApp1Exif(listener) {
|
||||
|
@ -268,8 +217,8 @@ export class JpegParser extends EventTarget {
|
|||
}
|
||||
|
||||
/**
|
||||
* Type-safe way to bind a listener for a JpegDefineQuantizationTableEvent.
|
||||
* @param {function(JpegDefineQuantizationTableEvent): void} listener
|
||||
* Type-safe way to bind a listener for a JpegDefineQuantizationTable.
|
||||
* @param {function(CustomEvent<JpegDefineQuantizationTable>): void} listener
|
||||
* @returns {JpegParser} for chaining
|
||||
*/
|
||||
onDefineQuantizationTable(listener) {
|
||||
|
@ -278,8 +227,8 @@ export class JpegParser extends EventTarget {
|
|||
}
|
||||
|
||||
/**
|
||||
* Type-safe way to bind a listener for a JpegDefineHuffmanTableEvent.
|
||||
* @param {function(JpegDefineHuffmanTableEvent): void} listener
|
||||
* Type-safe way to bind a listener for a JpegDefineHuffmanTable.
|
||||
* @param {function(CustomEvent<JpegDefineHuffmanTable>): void} listener
|
||||
* @returns {JpegParser} for chaining
|
||||
*/
|
||||
onDefineHuffmanTable(listener) {
|
||||
|
@ -288,8 +237,8 @@ export class JpegParser extends EventTarget {
|
|||
}
|
||||
|
||||
/**
|
||||
* Type-safe way to bind a listener for a JpegStartOfFrameEvent.
|
||||
* @param {function(JpegStartOfFrameEvent): void} listener
|
||||
* Type-safe way to bind a listener for a JpegStartOfFrame.
|
||||
* @param {function(CustomEvent<JpegStartOfFrame>): void} listener
|
||||
* @returns {JpegParser} for chaining
|
||||
*/
|
||||
onStartOfFrame(listener) {
|
||||
|
@ -298,8 +247,8 @@ export class JpegParser extends EventTarget {
|
|||
}
|
||||
|
||||
/**
|
||||
* Type-safe way to bind a listener for a JpegStartOfScanEvent.
|
||||
* @param {function(JpegStartOfScanEvent): void} listener
|
||||
* Type-safe way to bind a listener for a JpegStartOfScan.
|
||||
* @param {function(CustomEvent<JpegStartOfScan>): void} listener
|
||||
* @returns {JpegParser} for chaining
|
||||
*/
|
||||
onStartOfScan(listener) {
|
||||
|
@ -345,7 +294,7 @@ export class JpegParser extends EventTarget {
|
|||
yThumbnail,
|
||||
thumbnailData: this.bstream.readBytes(3 * xThumbnail * yThumbnail),
|
||||
};
|
||||
this.dispatchEvent(new JpegApp0MarkerEvent(app0MarkerSegment));
|
||||
this.dispatchEvent(createEvent(JpegParseEventType.APP0_MARKER, app0MarkerSegment));
|
||||
}
|
||||
else if (identifier === 'JFXX') {
|
||||
if (!this.hasApp0MarkerSegment) throw `JFXX found without JFIF`;
|
||||
|
@ -364,7 +313,7 @@ export class JpegParser extends EventTarget {
|
|||
thumbnailFormat,
|
||||
thumbnailData,
|
||||
};
|
||||
this.dispatchEvent(new JpegApp0ExtensionEvent(app0ExtensionSegment));
|
||||
this.dispatchEvent(createEvent(JpegParseEventType.APP0_EXTENSION, app0ExtensionSegment));
|
||||
}
|
||||
else {
|
||||
throw `Bad APP0 identifier: ${identifier}`;
|
||||
|
@ -387,7 +336,7 @@ export class JpegParser extends EventTarget {
|
|||
if (this.bstream.readNumber(2) !== 0) throw `No null byte termination`;
|
||||
|
||||
const exifValueMap = getExifProfile(this.bstream);
|
||||
this.dispatchEvent(new JpegApp1ExifEvent(exifValueMap));
|
||||
this.dispatchEvent(createEvent(JpegParseEventType.APP1_EXIF, exifValueMap));
|
||||
|
||||
this.bstream = skipAheadStream;
|
||||
} // End of APP1
|
||||
|
@ -418,7 +367,7 @@ export class JpegParser extends EventTarget {
|
|||
precision,
|
||||
tableValues,
|
||||
};
|
||||
this.dispatchEvent(new JpegDefineQuantizationTableEvent(table));
|
||||
this.dispatchEvent(createEvent(JpegParseEventType.DEFINE_QUANTIZATION_TABLE, table));
|
||||
|
||||
ptr += (1 + valSize * 64);
|
||||
}
|
||||
|
@ -452,7 +401,7 @@ export class JpegParser extends EventTarget {
|
|||
numberOfSymbols,
|
||||
symbols,
|
||||
};
|
||||
this.dispatchEvent(new JpegDefineHuffmanTableEvent(table));
|
||||
this.dispatchEvent(createEvent(JpegParseEventType.DEFINE_HUFFMAN_TABLE, table));
|
||||
|
||||
ptr += (1 + 16 + numCodes);
|
||||
}
|
||||
|
@ -497,7 +446,7 @@ export class JpegParser extends EventTarget {
|
|||
componentDetails,
|
||||
};
|
||||
|
||||
this.dispatchEvent(new JpegStartOfFrameEvent(sof));
|
||||
this.dispatchEvent(createEvent(JpegParseEventType.START_OF_FRAME, sof));
|
||||
} // End of SOF0, SOF1, SOF2
|
||||
else if (jpegMarker === JpegSegmentType.SOS) {
|
||||
this.bstream.setBigEndian();
|
||||
|
@ -536,7 +485,7 @@ export class JpegParser extends EventTarget {
|
|||
// NOTE: The below will have the null bytes after every 0xFF value.
|
||||
sos.rawImageData = rawImageDataStream.readBytes(numBytes);
|
||||
|
||||
this.dispatchEvent(new JpegStartOfScanEvent(sos));
|
||||
this.dispatchEvent(createEvent(JpegParseEventType.START_OF_SCAN, sos));
|
||||
} // End of SOS
|
||||
else {
|
||||
this.bstream.setBigEndian();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue