atem-connection
Version:
Typescript Node.js library for connecting with an ATEM switcher.
43 lines • 1.92 kB
JavaScript
;
/**
* @todo: MINT - 2018-5-24:
* Create util functions that handle proper colour spaces in UHD.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.convertRGBAToYUV422 = void 0;
const colorConstants_1 = require("./colorConstants");
function convertRGBAToYUV422(width, height, data) {
const constants = height >= 720 ? colorConstants_1.ColorConvertConstantsBT709 : colorConstants_1.ColorConvertConstantsBT601;
const genColor = (rawA, uv16, y16) => {
const a = ((rawA << 2) * 219) / 255 + (16 << 2);
const y = Math.round(y16) >> 6;
const uv = Math.round(uv16) >> 6;
return (a << 20) + (uv << 10) + y;
};
const buffer = Buffer.alloc(width * height * 4);
for (let i = 0; i < width * height * 4; i += 8) {
const r1 = data[i + 0];
const g1 = data[i + 1];
const b1 = data[i + 2];
const r2 = data[i + 4];
const g2 = data[i + 5];
const b2 = data[i + 6];
const a1 = data[i + 3];
const a2 = data[i + 7];
const y16a = constants.YOffset +
constants.KR * constants.YRange * r1 +
constants.KG * constants.YRange * g1 +
constants.KB * constants.YRange * b1;
const cb16 = constants.CbCrOffset + (-constants.KRoKBi * r1 - constants.KGoKBi * g1 + constants.HalfCbCrRange * b1);
const y16b = constants.YOffset +
constants.KR * constants.YRange * r2 +
constants.KG * constants.YRange * g2 +
constants.KB * constants.YRange * b2;
const cr16 = constants.CbCrOffset + (constants.HalfCbCrRange * r1 - constants.KGoKRi * g1 - constants.KBoKRi * b1);
buffer.writeUInt32BE(genColor(a1, cb16, y16a), i);
buffer.writeUInt32BE(genColor(a2, cr16, y16b), i + 4);
}
return buffer;
}
exports.convertRGBAToYUV422 = convertRGBAToYUV422;
//# sourceMappingURL=rgbaToYuv422.js.map