UNPKG

atem-connection

Version:

Typescript Node.js library for connecting with an ATEM switcher.

134 lines 6.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MixEffectKeyDVEUpdateCommand = exports.MixEffectKeyDVECommand = void 0; const CommandBase_1 = require("../../CommandBase"); const state_1 = require("../../../state"); class MixEffectKeyDVECommand extends CommandBase_1.WritableCommand { constructor(mixEffect, upstreamKeyerId) { super(); this.mixEffect = mixEffect; this.upstreamKeyerId = upstreamKeyerId; } serialize() { const buffer = Buffer.alloc(64); buffer.writeUInt32BE(this.flag, 0); buffer.writeUInt8(this.mixEffect, 4); buffer.writeUInt8(this.upstreamKeyerId, 5); buffer.writeUInt32BE(this.properties.sizeX || 0, 8); buffer.writeUInt32BE(this.properties.sizeY || 0, 12); buffer.writeInt32BE(this.properties.positionX || 0, 16); buffer.writeInt32BE(this.properties.positionY || 0, 20); buffer.writeInt32BE(this.properties.rotation || 0, 24); buffer.writeUInt8(this.properties.borderEnabled ? 1 : 0, 28); buffer.writeUInt8(this.properties.shadowEnabled ? 1 : 0, 29); buffer.writeUInt8(this.properties.borderBevel || 0, 30); buffer.writeUInt16BE(this.properties.borderOuterWidth || 0, 32); buffer.writeUInt16BE(this.properties.borderInnerWidth || 0, 34); buffer.writeUInt8(this.properties.borderOuterSoftness || 0, 36); buffer.writeUInt8(this.properties.borderInnerSoftness || 0, 37); buffer.writeUInt8(this.properties.borderBevelSoftness || 0, 38); buffer.writeUInt8(this.properties.borderBevelPosition || 0, 39); buffer.writeUInt8(this.properties.borderOpacity || 0, 40); buffer.writeUInt16BE(this.properties.borderHue || 0, 42); buffer.writeUInt16BE(this.properties.borderSaturation || 0, 44); buffer.writeUInt16BE(this.properties.borderLuma || 0, 46); buffer.writeUInt16BE(this.properties.lightSourceDirection || 0, 48); buffer.writeUInt8(this.properties.lightSourceAltitude || 0, 50); buffer.writeUInt8(this.properties.maskEnabled ? 1 : 0, 51); buffer.writeUInt16BE(this.properties.maskTop || 0, 52); buffer.writeUInt16BE(this.properties.maskBottom || 0, 54); buffer.writeUInt16BE(this.properties.maskLeft || 0, 56); buffer.writeUInt16BE(this.properties.maskRight || 0, 58); buffer.writeUInt8(this.properties.rate || 0, 60); return buffer; } } exports.MixEffectKeyDVECommand = MixEffectKeyDVECommand; MixEffectKeyDVECommand.MaskFlags = { sizeX: 1 << 0, sizeY: 1 << 1, positionX: 1 << 2, positionY: 1 << 3, rotation: 1 << 4, borderEnabled: 1 << 5, shadowEnabled: 1 << 6, borderBevel: 1 << 7, borderOuterWidth: 1 << 8, borderInnerWidth: 1 << 9, borderOuterSoftness: 1 << 10, borderInnerSoftness: 1 << 11, borderBevelSoftness: 1 << 12, borderBevelPosition: 1 << 13, borderOpacity: 1 << 14, borderHue: 1 << 15, borderSaturation: 1 << 16, borderLuma: 1 << 17, lightSourceDirection: 1 << 18, lightSourceAltitude: 1 << 19, maskEnabled: 1 << 20, maskTop: 1 << 21, maskBottom: 1 << 22, maskLeft: 1 << 23, maskRight: 1 << 24, rate: 1 << 25, }; MixEffectKeyDVECommand.rawName = 'CKDV'; class MixEffectKeyDVEUpdateCommand extends CommandBase_1.DeserializedCommand { constructor(mixEffect, upstreamKeyerId, properties) { super(properties); this.mixEffect = mixEffect; this.upstreamKeyerId = upstreamKeyerId; } static deserialize(rawCommand) { const mixEffect = rawCommand.readUInt8(0); const upstreamKeyerId = rawCommand.readUInt8(1); const properties = { // Note: these are higher than the ui shows, but are within the range the atem can be set to sizeX: rawCommand.readUInt32BE(4), sizeY: rawCommand.readUInt32BE(8), positionX: rawCommand.readInt32BE(12), positionY: rawCommand.readInt32BE(16), rotation: rawCommand.readInt32BE(20), borderEnabled: rawCommand.readUInt8(24) === 1, shadowEnabled: rawCommand.readUInt8(25) === 1, borderBevel: rawCommand.readUInt8(26), borderOuterWidth: rawCommand.readUInt16BE(28), borderInnerWidth: rawCommand.readUInt16BE(30), borderOuterSoftness: rawCommand.readInt8(32), borderInnerSoftness: rawCommand.readInt8(33), borderBevelSoftness: rawCommand.readInt8(34), borderBevelPosition: rawCommand.readInt8(35), borderOpacity: rawCommand.readInt8(36), borderHue: rawCommand.readUInt16BE(38), borderSaturation: rawCommand.readUInt16BE(40), borderLuma: rawCommand.readUInt16BE(42), lightSourceDirection: rawCommand.readUInt16BE(44), lightSourceAltitude: rawCommand.readUInt8(46), maskEnabled: rawCommand.readUInt8(47) === 1, maskTop: rawCommand.readUInt16BE(48), maskBottom: rawCommand.readUInt16BE(50), maskLeft: rawCommand.readUInt16BE(52), maskRight: rawCommand.readUInt16BE(54), rate: rawCommand.readUInt8(56), }; return new MixEffectKeyDVEUpdateCommand(mixEffect, upstreamKeyerId, properties); } applyToState(state) { const meInfo = state.info.mixEffects[this.mixEffect]; if (!meInfo || this.upstreamKeyerId >= meInfo.keyCount) { throw new state_1.InvalidIdError('UpstreamKeyer', this.mixEffect, this.upstreamKeyerId); } else if (!state.info.capabilities || !state.info.capabilities.DVEs) { throw new state_1.InvalidIdError(`DVE is not supported`); } const mixEffect = state_1.AtemStateUtil.getMixEffect(state, this.mixEffect); const upstreamKeyer = state_1.AtemStateUtil.getUpstreamKeyer(mixEffect, this.upstreamKeyerId); upstreamKeyer.dveSettings = { ...this.properties, }; return `video.mixEffects.${this.mixEffect}.upstreamKeyers.${this.upstreamKeyerId}.dveSettings`; } } exports.MixEffectKeyDVEUpdateCommand = MixEffectKeyDVEUpdateCommand; MixEffectKeyDVEUpdateCommand.rawName = 'KeDV'; //# sourceMappingURL=MixEffectKeyDVECommand.js.map