Files
appRobotWebcam/test/readJpegWidth.test.js
2026-06-07 10:03:34 +02:00

33 lines
1.1 KiB
JavaScript

'use strict';
const { readJpegWidth } = require('../src/cameraSwitch');
// Minimaler JPEG-Kopf: SOI (FFD8) + SOF-Marker mit Höhe/Breite.
// SOF-Layout: FF Cx | len(2) | precision(1) | height(2) | width(2)
function jpegWithWidth(width, height = 480, marker = 0xC0) {
const b = Buffer.alloc(20, 0);
b[0] = 0xFF; b[1] = 0xD8; // SOI
b[2] = 0xFF; b[3] = marker; // SOF0 / SOF2
b.writeUInt16BE(17, 4); // Segment-Länge
b[6] = 8; // precision
b.writeUInt16BE(height, 7); // Höhe
b.writeUInt16BE(width, 9); // Breite
return b;
}
describe('readJpegWidth', () => {
test('liest Breite aus SOF0 (baseline)', () => {
expect(readJpegWidth(jpegWithWidth(320))).toBe(320);
expect(readJpegWidth(jpegWithWidth(1920))).toBe(1920);
});
test('liest Breite aus SOF2 (progressive)', () => {
expect(readJpegWidth(jpegWithWidth(1280, 720, 0xC2))).toBe(1280);
});
test('kein SOF-Marker → null', () => {
const b = Buffer.from([0xFF, 0xD8, 0xFF, 0xD9, 0, 0, 0, 0, 0, 0, 0, 0]);
expect(readJpegWidth(b)).toBeNull();
});
});