atem-connection
Version:
Typescript Node.js library for connecting with an ATEM switcher.
173 lines • 4.91 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getUpstreamKeyer = exports.getDownstreamKeyer = exports.getSuperSource = exports.getMixEffect = exports.getClip = exports.getMediaPlayer = exports.getMultiViewer = exports.Create = void 0;
const Enums = require("../enums");
function Create() {
return {
info: {
apiVersion: 0,
model: Enums.Model.Unknown,
superSources: [],
mixEffects: [],
power: [],
},
video: {
mixEffects: [],
downstreamKeyers: [],
auxilliaries: [],
superSources: [],
},
media: {
stillPool: [],
clipPool: [],
players: [],
},
inputs: {},
macro: {
macroPlayer: {
isRunning: false,
isWaiting: false,
loop: false,
macroIndex: 0,
},
macroRecorder: {
isRecording: false,
macroIndex: 0,
},
macroProperties: [],
},
settings: {
multiViewers: [],
videoMode: 0,
mediaPool: undefined,
},
};
}
exports.Create = Create;
function getMultiViewer(state, index) {
const multiViewer = state.settings.multiViewers[index];
if (!multiViewer) {
return (state.settings.multiViewers[index] = { index, windows: [] });
}
return multiViewer;
}
exports.getMultiViewer = getMultiViewer;
function getMediaPlayer(state, index, dontCreate) {
let player = state.media.players[index];
if (!player) {
player = {
playing: false,
loop: false,
atBeginning: true,
clipFrame: 0,
sourceType: Enums.MediaSourceType.Still,
clipIndex: 0,
stillIndex: 0,
};
if (!dontCreate) {
state.media.players[index] = player;
}
}
return player;
}
exports.getMediaPlayer = getMediaPlayer;
function getClip(state, index) {
const clip = state.media.clipPool[index];
if (!clip) {
return (state.media.clipPool[index] = {
isUsed: false,
name: '',
frameCount: 0,
frames: [],
});
}
return clip;
}
exports.getClip = getClip;
function getMixEffect(state, index, dontCreate) {
let me = state.video.mixEffects[index];
if (!me) {
me = {
index,
programInput: 0,
previewInput: 0,
transitionPreview: false,
transitionPosition: {
inTransition: false,
handlePosition: 0,
remainingFrames: 0,
},
transitionProperties: {
style: Enums.TransitionStyle.MIX,
selection: [Enums.TransitionSelection.Background],
nextStyle: Enums.TransitionStyle.MIX,
nextSelection: [Enums.TransitionSelection.Background],
},
transitionSettings: {},
upstreamKeyers: [],
};
if (!dontCreate) {
state.video.mixEffects[index] = me;
}
}
return me;
}
exports.getMixEffect = getMixEffect;
function getSuperSource(state, index, dontCreate) {
let ssrc = state.video.superSources[index];
if (!ssrc) {
ssrc = {
index,
boxes: [undefined, undefined, undefined, undefined],
};
if (!dontCreate) {
state.video.superSources[index] = ssrc;
}
}
return ssrc;
}
exports.getSuperSource = getSuperSource;
function getDownstreamKeyer(state, index, dontCreate) {
let dsk = state.video.downstreamKeyers[index];
if (!dsk) {
dsk = {
isAuto: false,
remainingFrames: 0,
onAir: false,
inTransition: false,
};
if (!dontCreate) {
state.video.downstreamKeyers[index] = dsk;
}
}
return dsk;
}
exports.getDownstreamKeyer = getDownstreamKeyer;
function getUpstreamKeyer(mixEffect, index, dontCreate) {
let usk = mixEffect.upstreamKeyers[index];
if (!usk) {
usk = {
canFlyKey: false,
upstreamKeyerId: index,
mixEffectKeyType: 0,
cutSource: 0,
fillSource: 0,
onAir: false,
flyEnabled: false,
flyKeyframes: [undefined, undefined],
maskSettings: {
maskEnabled: false,
maskTop: 0,
maskBottom: 0,
maskLeft: 0,
maskRight: 0,
},
};
if (!dontCreate) {
mixEffect.upstreamKeyers[index] = usk;
}
}
return usk;
}
exports.getUpstreamKeyer = getUpstreamKeyer;
//# sourceMappingURL=util.js.map