Rename vertResolution to pixelsPerLine.

previously the number of pixels encoded in each scan line was represented as the `vertResolution`. This is a typo, and is better referred to as `pixelsPerLine`.
This commit is contained in:
CKegel 2025-03-26 23:56:24 -04:00
parent 627e3301dc
commit 38a673b30a

View File

@ -1,7 +1,7 @@
/* /*
MIT License MIT License
Copyright (c) 2024 Christian Kegel Copyright (c) 2025 Christian Kegel
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@ -30,16 +30,16 @@ const VIS_BIT_FREQ = {
class Format { class Format {
#numScanLines; #numScanLines;
#vertResolution; #pixelsPerLine;
#blankingInterval; #blankingInterval;
#scanLineLength; #scanLineLength;
#syncPulseLength; #syncPulseLength;
#VISCode; #VISCode;
#preparedImage = []; #preparedImage = [];
constructor(numScanLines, vertResolution, blankingInterval, scanLineLength, syncPulseLength, VISCode) { constructor(numScanLines, pixelsPerLine, blankingInterval, scanLineLength, syncPulseLength, VISCode) {
this.#numScanLines = numScanLines; this.#numScanLines = numScanLines;
this.#vertResolution = vertResolution; this.#pixelsPerLine = pixelsPerLine;
this.#blankingInterval = blankingInterval; this.#blankingInterval = blankingInterval;
this.#scanLineLength = scanLineLength; this.#scanLineLength = scanLineLength;
this.#syncPulseLength = syncPulseLength; this.#syncPulseLength = syncPulseLength;
@ -47,13 +47,13 @@ class Format {
} }
getGreyscaleFreq(data, scanLine, vertPos) { getGreyscaleFreq(data, scanLine, vertPos) {
const index = scanLine * (this.#vertResolution * 4) + vertPos * 4; const index = scanLine * (this.#pixelsPerLine * 4) + vertPos * 4;
let grey = data[index] * 0.299 + 0.587 * data[index + 1] + 0.114 * data[index + 2] let grey = data[index] * 0.299 + 0.587 * data[index + 1] + 0.114 * data[index + 2]
return grey * COLOR_FREQ_MULT + 1500 return grey * COLOR_FREQ_MULT + 1500
} }
getRGBValueAsFreq(data, scanLine, vertPos) { getRGBValueAsFreq(data, scanLine, vertPos) {
const index = scanLine * (this.#vertResolution * 4) + vertPos * 4; const index = scanLine * (this.#pixelsPerLine * 4) + vertPos * 4;
let red = data[index] * COLOR_FREQ_MULT + 1500; let red = data[index] * COLOR_FREQ_MULT + 1500;
let green = data[index + 1] * COLOR_FREQ_MULT + 1500; let green = data[index + 1] * COLOR_FREQ_MULT + 1500;
let blue = data[index + 2] * COLOR_FREQ_MULT + 1500; let blue = data[index + 2] * COLOR_FREQ_MULT + 1500;
@ -61,7 +61,7 @@ class Format {
} }
getYRYBYValueAsFreq(data, scanLine, vertPos) { getYRYBYValueAsFreq(data, scanLine, vertPos) {
const index = scanLine * (this.#vertResolution * 4) + vertPos * 4; const index = scanLine * (this.#pixelsPerLine * 4) + vertPos * 4;
let red = data[index]; let red = data[index];
let green = data[index + 1]; let green = data[index + 1];
let blue = data[index + 2]; let blue = data[index + 2];
@ -149,8 +149,8 @@ class Format {
get numScanLines() { get numScanLines() {
return this.#numScanLines; return this.#numScanLines;
} }
get vertResolution() { get pixelsPerLine() {
return this.#vertResolution; return this.#pixelsPerLine;
} }
get blankingInterval() { get blankingInterval() {
return this.#blankingInterval; return this.#blankingInterval;
@ -177,7 +177,7 @@ class MartinBase extends Format {
let red = []; let red = [];
let green = []; let green = [];
let blue = []; let blue = [];
for(let vertPos = 0; vertPos < this.vertResolution; ++vertPos){ for(let vertPos = 0; vertPos < this.pixelsPerLine; ++vertPos){
let freqs = this.getRGBValueAsFreq(data, scanLine, vertPos); let freqs = this.getRGBValueAsFreq(data, scanLine, vertPos);
red.push(freqs[0]); red.push(freqs[0]);
green.push(freqs[1]); green.push(freqs[1]);
@ -217,25 +217,25 @@ class MartinBase extends Format {
class MartinMOne extends MartinBase { class MartinMOne extends MartinBase {
constructor() { constructor() {
let numScanLines = 256; let numScanLines = 256;
let vertResolution = 320; let pixelsPerLine = 320;
let blankingInterval = 0.000572; let blankingInterval = 0.000572;
let scanLineLength = 0.146432; let scanLineLength = 0.146432;
let syncPulseLength = 0.004862; let syncPulseLength = 0.004862;
let VISCode = [false, true, false, true, true, false, false]; let VISCode = [false, true, false, true, true, false, false];
super(numScanLines, vertResolution, blankingInterval, scanLineLength, syncPulseLength, VISCode); super(numScanLines, pixelsPerLine, blankingInterval, scanLineLength, syncPulseLength, VISCode);
} }
} }
class MartinMTwo extends MartinBase { class MartinMTwo extends MartinBase {
constructor() { constructor() {
let numScanLines = 256; let numScanLines = 256;
let vertResolution = 320; let pixelsPerLine = 320;
let blankingInterval = 0.000572; let blankingInterval = 0.000572;
let scanLineLength = 0.073216; let scanLineLength = 0.073216;
let syncPulseLength = 0.004862; let syncPulseLength = 0.004862;
let VISCode = [false, true, false, true, false, false, false]; let VISCode = [false, true, false, true, false, false, false];
super(numScanLines, vertResolution, blankingInterval, scanLineLength, syncPulseLength, VISCode); super(numScanLines, pixelsPerLine, blankingInterval, scanLineLength, syncPulseLength, VISCode);
} }
} }
@ -246,7 +246,7 @@ class ScottieBase extends Format {
let red = []; let red = [];
let green = []; let green = [];
let blue = []; let blue = [];
for(let vertPos = 0; vertPos < this.vertResolution; ++vertPos){ for(let vertPos = 0; vertPos < this.pixelsPerLine; ++vertPos){
let freqs = this.getRGBValueAsFreq(data, scanLine, vertPos); let freqs = this.getRGBValueAsFreq(data, scanLine, vertPos);
red.push(freqs[0]); red.push(freqs[0]);
green.push(freqs[1]); green.push(freqs[1]);
@ -290,37 +290,37 @@ class ScottieBase extends Format {
class ScottieOne extends ScottieBase { class ScottieOne extends ScottieBase {
constructor() { constructor() {
let numScanLines = 256; let numScanLines = 256;
let vertResolution = 320; let pixelsPerLine = 320;
let blankingInterval = 0.0015; let blankingInterval = 0.0015;
let scanLineLength = 0.138240; let scanLineLength = 0.138240;
let syncPulseLength = 0.009; let syncPulseLength = 0.009;
let VISCode = [false, true, true, true, true, false, false]; let VISCode = [false, true, true, true, true, false, false];
super(numScanLines, vertResolution, blankingInterval, scanLineLength, syncPulseLength, VISCode); super(numScanLines, pixelsPerLine, blankingInterval, scanLineLength, syncPulseLength, VISCode);
} }
} }
class ScottieTwo extends ScottieBase { class ScottieTwo extends ScottieBase {
constructor() { constructor() {
let numScanLines = 256; let numScanLines = 256;
let vertResolution = 320; let pixelsPerLine = 320;
let blankingInterval = 0.0015; let blankingInterval = 0.0015;
let scanLineLength = 0.088064; let scanLineLength = 0.088064;
let syncPulseLength = 0.009; let syncPulseLength = 0.009;
let VISCode = [false, true, true, true, false, false, false]; let VISCode = [false, true, true, true, false, false, false];
super(numScanLines, vertResolution, blankingInterval, scanLineLength, syncPulseLength, VISCode); super(numScanLines, pixelsPerLine, blankingInterval, scanLineLength, syncPulseLength, VISCode);
} }
} }
class ScottieDX extends ScottieBase { class ScottieDX extends ScottieBase {
constructor() { constructor() {
let numScanLines = 256; let numScanLines = 256;
let vertResolution = 320; let pixelsPerLine = 320;
let blankingInterval = 0.0015; let blankingInterval = 0.0015;
let scanLineLength = 0.3456; let scanLineLength = 0.3456;
let syncPulseLength = 0.009; let syncPulseLength = 0.009;
let VISCode = [true, false, false, true, true, false, false]; let VISCode = [true, false, false, true, true, false, false];
super(numScanLines, vertResolution, blankingInterval, scanLineLength, syncPulseLength, VISCode); super(numScanLines, pixelsPerLine, blankingInterval, scanLineLength, syncPulseLength, VISCode);
} }
} }
@ -331,7 +331,7 @@ class PDBase extends Format {
let Y = []; let Y = [];
let RY = []; let RY = [];
let BY = []; let BY = [];
for(let vertPos = 0; vertPos < this.vertResolution; ++vertPos){ for(let vertPos = 0; vertPos < this.pixelsPerLine; ++vertPos){
let freqs = this.getYRYBYValueAsFreq(data, scanLine, vertPos); let freqs = this.getYRYBYValueAsFreq(data, scanLine, vertPos);
Y.push(freqs[0]); Y.push(freqs[0]);
RY.push(freqs[1]); RY.push(freqs[1]);
@ -340,7 +340,7 @@ class PDBase extends Format {
preparedImage.push([Y, RY, BY]); preparedImage.push([Y, RY, BY]);
} }
for(let scanLine = 0; scanLine < this.numScanLines; scanLine += 2){ for(let scanLine = 0; scanLine < this.numScanLines; scanLine += 2){
for(let vertPos = 0; vertPos < this.vertResolution; ++vertPos){ for(let vertPos = 0; vertPos < this.pixelsPerLine; ++vertPos){
let RY = preparedImage[scanLine][1][vertPos] + preparedImage[scanLine + 1][1][vertPos] let RY = preparedImage[scanLine][1][vertPos] + preparedImage[scanLine + 1][1][vertPos]
preparedImage[scanLine][1][vertPos] = RY / 2; preparedImage[scanLine][1][vertPos] = RY / 2;
let BY = preparedImage[scanLine][2][vertPos] + preparedImage[scanLine + 1][2][vertPos] let BY = preparedImage[scanLine][2][vertPos] + preparedImage[scanLine + 1][2][vertPos]
@ -382,85 +382,85 @@ class PDBase extends Format {
class PD50 extends PDBase { class PD50 extends PDBase {
constructor() { constructor() {
let numScanLines = 256; let numScanLines = 256;
let vertResolution = 320; let pixelsPerLine = 320;
let blankingInterval = 0.00208; let blankingInterval = 0.00208;
let scanLineLength = 0.091520; let scanLineLength = 0.091520;
let syncPulseLength = 0.02; let syncPulseLength = 0.02;
let VISCode = [true, false, true, true, true, false, true]; let VISCode = [true, false, true, true, true, false, true];
super(numScanLines, vertResolution, blankingInterval, scanLineLength, syncPulseLength, VISCode); super(numScanLines, pixelsPerLine, blankingInterval, scanLineLength, syncPulseLength, VISCode);
} }
} }
class PD90 extends PDBase { class PD90 extends PDBase {
constructor() { constructor() {
let numScanLines = 256; let numScanLines = 256;
let vertResolution = 320; let pixelsPerLine = 320;
let blankingInterval = 0.00208; let blankingInterval = 0.00208;
let scanLineLength = 0.170240; let scanLineLength = 0.170240;
let syncPulseLength = 0.02; let syncPulseLength = 0.02;
let VISCode = [true, true, false, false, false, true, true]; let VISCode = [true, true, false, false, false, true, true];
super(numScanLines, vertResolution, blankingInterval, scanLineLength, syncPulseLength, VISCode); super(numScanLines, pixelsPerLine, blankingInterval, scanLineLength, syncPulseLength, VISCode);
} }
} }
class PD120 extends PDBase { class PD120 extends PDBase {
constructor() { constructor() {
let numScanLines = 496; let numScanLines = 496;
let vertResolution = 640; let pixelsPerLine = 640;
let blankingInterval = 0.00208; let blankingInterval = 0.00208;
let scanLineLength = 0.121600; let scanLineLength = 0.121600;
let syncPulseLength = 0.02; let syncPulseLength = 0.02;
let VISCode = [true, false, true, true, true, true, true]; let VISCode = [true, false, true, true, true, true, true];
super(numScanLines, vertResolution, blankingInterval, scanLineLength, syncPulseLength, VISCode); super(numScanLines, pixelsPerLine, blankingInterval, scanLineLength, syncPulseLength, VISCode);
} }
} }
class PD160 extends PDBase { class PD160 extends PDBase {
constructor() { constructor() {
let numScanLines = 400; let numScanLines = 400;
let vertResolution = 512; let pixelsPerLine = 512;
let blankingInterval = 0.00208; let blankingInterval = 0.00208;
let scanLineLength = 0.195584; let scanLineLength = 0.195584;
let syncPulseLength = 0.02; let syncPulseLength = 0.02;
let VISCode = [true, true, false, false, true, false, false]; let VISCode = [true, true, false, false, true, false, false];
super(numScanLines, vertResolution, blankingInterval, scanLineLength, syncPulseLength, VISCode); super(numScanLines, pixelsPerLine, blankingInterval, scanLineLength, syncPulseLength, VISCode);
} }
} }
class PD180 extends PDBase { class PD180 extends PDBase {
constructor() { constructor() {
let numScanLines = 496; let numScanLines = 496;
let vertResolution = 640; let pixelsPerLine = 640;
let blankingInterval = 0.00208; let blankingInterval = 0.00208;
let scanLineLength = 0.18304; let scanLineLength = 0.18304;
let syncPulseLength = 0.02; let syncPulseLength = 0.02;
let VISCode = [true, true, false, false, false, false, false]; let VISCode = [true, true, false, false, false, false, false];
super(numScanLines, vertResolution, blankingInterval, scanLineLength, syncPulseLength, VISCode); super(numScanLines, pixelsPerLine, blankingInterval, scanLineLength, syncPulseLength, VISCode);
} }
} }
class PD240 extends PDBase { class PD240 extends PDBase {
constructor() { constructor() {
let numScanLines = 496; let numScanLines = 496;
let vertResolution = 640; let pixelsPerLine = 640;
let blankingInterval = 0.00208; let blankingInterval = 0.00208;
let scanLineLength = 0.24448; let scanLineLength = 0.24448;
let syncPulseLength = 0.02; let syncPulseLength = 0.02;
let VISCode = [true, true, false, false, false, false, true]; let VISCode = [true, true, false, false, false, false, true];
super(numScanLines, vertResolution, blankingInterval, scanLineLength, syncPulseLength, VISCode); super(numScanLines, pixelsPerLine, blankingInterval, scanLineLength, syncPulseLength, VISCode);
} }
} }
class PD290 extends PDBase { class PD290 extends PDBase {
constructor() { constructor() {
let numScanLines = 616; let numScanLines = 616;
let vertResolution = 800; let pixelsPerLine = 800;
let blankingInterval = 0.00208; let blankingInterval = 0.00208;
let scanLineLength = 0.2288; let scanLineLength = 0.2288;
let syncPulseLength = 0.02; let syncPulseLength = 0.02;
let VISCode = [true, false, true, true, true, true, false]; let VISCode = [true, false, true, true, true, true, false];
super(numScanLines, vertResolution, blankingInterval, scanLineLength, syncPulseLength, VISCode); super(numScanLines, pixelsPerLine, blankingInterval, scanLineLength, syncPulseLength, VISCode);
} }
} }
@ -471,7 +471,7 @@ class WrasseSC2 extends Format {
let red = []; let red = [];
let green = []; let green = [];
let blue = []; let blue = [];
for(let vertPos = 0; vertPos < this.vertResolution; ++vertPos){ for(let vertPos = 0; vertPos < this.pixelsPerLine; ++vertPos){
let freqs = this.getRGBValueAsFreq(data, scanLine, vertPos); let freqs = this.getRGBValueAsFreq(data, scanLine, vertPos);
red.push(freqs[0]); red.push(freqs[0]);
green.push(freqs[1]); green.push(freqs[1]);
@ -510,13 +510,13 @@ class WrasseSC2 extends Format {
class WrasseSC2180 extends WrasseSC2 { class WrasseSC2180 extends WrasseSC2 {
constructor() { constructor() {
let numScanLines = 256; let numScanLines = 256;
let vertResolution = 320; let pixelsPerLine = 320;
let blankingInterval = 0.0005; let blankingInterval = 0.0005;
let scanLineLength = 0.235; let scanLineLength = 0.235;
let syncPulseLength = 0.0055225; let syncPulseLength = 0.0055225;
let VISCode = [false, true, true, false, true, true, true]; let VISCode = [false, true, true, false, true, true, true];
super(numScanLines, vertResolution, blankingInterval, scanLineLength, syncPulseLength, VISCode); super(numScanLines, pixelsPerLine, blankingInterval, scanLineLength, syncPulseLength, VISCode);
} }
} }
@ -539,7 +539,7 @@ let rawImage = new Image();
let sstvFormat = new Format(); let sstvFormat = new Format();
function drawPreview() { function drawPreview() {
canvas.width = sstvFormat.vertResolution; canvas.width = sstvFormat.pixelsPerLine;
canvas.height = sstvFormat.numScanLines; canvas.height = sstvFormat.numScanLines;
canvasCtx.drawImage(rawImage,0,0, canvas.width, canvas.height); canvasCtx.drawImage(rawImage,0,0, canvas.width, canvas.height);
canvasCtx.font = "bold 24pt sans-serif"; canvasCtx.font = "bold 24pt sans-serif";