public static void Build(AtemState state, IBMDSwitcher switcher)
        {
            var auxes = new List <AuxState>();
            var cols  = new List <ColorState>();
            var ssrcs = new List <SuperSourceState>();

            var iterator = AtemSDKConverter.CastSdk <IBMDSwitcherInputIterator>(switcher.CreateIterator);

            AtemSDKConverter.Iterate <IBMDSwitcherInput>(iterator.Next, (input, i) =>
            {
                input.GetInputId(out long id);
                var src = (VideoSource)id;

                state.Settings.Inputs[src] = BuildOne(input);

                if (input is IBMDSwitcherInputAux aux)
                {
                    auxes.Add(AuxInput(aux));
                }

                if (input is IBMDSwitcherInputColor col)
                {
                    cols.Add(ColorInput(col));
                }

                if (input is IBMDSwitcherInputSuperSource ssrc)
                {
                    ssrcs.Add(SuperSourceStateBuilder.Build(ssrc));
                }
            });

            state.Auxiliaries     = auxes;
            state.ColorGenerators = cols;
            state.SuperSources    = ssrcs;
        }
        private static void SerialPorts(AtemState state, IBMDSwitcher switcher)
        {
            var iterator = AtemSDKConverter.CastSdk <IBMDSwitcherSerialPortIterator>(switcher.CreateIterator);

            AtemSDKConverter.Iterate <IBMDSwitcherSerialPort>(iterator.Next, (port, id) =>
            {
                if (id != 0)
                {
                    throw new Exception("Too many serial ports");
                }

                port.GetFunction(out _BMDSwitcherSerialPortFunction function);
                state.Settings.SerialMode = AtemEnumMaps.SerialModeMap.FindByValue(function);
            });
        }
Пример #3
0
        public static AudioState Build(IBMDSwitcherAudioMixer props)
        {
            var state = new AudioState();

            props.GetProgramOutGain(out double gain);
            state.ProgramOut.Gain = gain;
            props.GetProgramOutBalance(out double balance);
            state.ProgramOut.Balance = balance * 50;
            props.GetProgramOutFollowFadeToBlack(out int follow);
            state.ProgramOut.FollowFadeToBlack = follow != 0;
            props.GetAudioFollowVideoCrossfadeTransition(out int followTransition);
            state.ProgramOut.AudioFollowVideoCrossfadeTransitionEnabled = followTransition != 0;

            state.Tally = new Dictionary <AudioSource, bool>();

            var inputIt = AtemSDKConverter.CastSdk <IBMDSwitcherAudioInputIterator>(props.CreateIterator);

            AtemSDKConverter.Iterate <IBMDSwitcherAudioInput>(inputIt.Next, (port, i) =>
            {
                port.GetAudioInputId(out long inputId);
                state.Inputs[inputId] = BuildInput(port);

                port.IsMixedIn(out int isMixedIn);
                state.Tally[(AudioSource)inputId] = isMixedIn != 0;
            });

            var monIt = AtemSDKConverter.CastSdk <IBMDSwitcherAudioMonitorOutputIterator>(props.CreateIterator);

            state.MonitorOutputs =
                AtemSDKConverter.IterateList <IBMDSwitcherAudioMonitorOutput, AudioState.MonitorOutputState>(
                    monIt.Next,
                    (mon, id) => BuildMonitor(mon));

            var headphoneIt = AtemSDKConverter.CastSdk <IBMDSwitcherAudioHeadphoneOutputIterator>(props.CreateIterator);

            state.HeadphoneOutputs =
                AtemSDKConverter.IterateList <IBMDSwitcherAudioHeadphoneOutput, AudioState.HeadphoneOutputState>(
                    headphoneIt.Next,
                    (hp, id) => BuildHeadphone(hp));

            return(state);
        }
Пример #4
0
        public static FairlightAudioState.InputState Build(IBMDSwitcherFairlightAudioInput props, AudioSource inputId, Dictionary <Tuple <AudioSource, long>, bool> tally)
        {
            var state = new FairlightAudioState.InputState();

            // Input basics
            props.GetCurrentExternalPortType(out _BMDSwitcherExternalPortType portType);
            state.ExternalPortType = AtemEnumMaps.AudioPortTypeMap.FindByValue(portType);
            props.GetConfiguration(out _BMDSwitcherFairlightAudioInputConfiguration configuration);
            state.ActiveConfiguration = AtemEnumMaps.FairlightInputConfigurationMap.FindByValue(configuration);
            props.GetSupportedConfigurations(out _BMDSwitcherFairlightAudioInputConfiguration supportedConfigurations);
            state.SupportedConfigurations = (FairlightInputConfiguration)supportedConfigurations;
            props.GetType(out _BMDSwitcherFairlightAudioInputType type);
            state.InputType = AtemEnumMaps.FairlightInputTypeMap.FindByValue(type);

            // Analog
            if (props is IBMDSwitcherFairlightAnalogAudioInput analog)
            {
                state.Analog = new FairlightAudioState.AnalogState();
                analog.GetInputLevel(out _BMDSwitcherFairlightAudioAnalogInputLevel level);
                state.Analog.InputLevel = AtemEnumMaps.FairlightAnalogInputLevelMap.FindByValue(level);

                analog.GetSupportedInputLevels(out _BMDSwitcherFairlightAudioAnalogInputLevel supportedLevels);
                state.Analog.SupportedInputLevel = (FairlightAnalogInputLevel)supportedLevels;
            }

#if ATEM_v8_1
            // XLR
            if (props is IBMDSwitcherFairlightAudioInputXLR xlr)
            {
                xlr.HasRCAToXLR(out int hasRcaToXlr);
                if (hasRcaToXlr != 0)
                {
                    if (state.Analog == null)
                    {
                        state.Analog = new FairlightAudioState.AnalogState();
                    }

                    state.Analog.SupportedInputLevel =
                        FairlightAnalogInputLevel.ConsumerLine | FairlightAnalogInputLevel.ProLine;
                    xlr.GetRCAToXLREnabled(out int rcaToXlrEnabled);
                    state.Analog.InputLevel = rcaToXlrEnabled != 0
                        ? FairlightAnalogInputLevel.ConsumerLine
                        : FairlightAnalogInputLevel.ProLine;
                }
            }
#else
            // TODO
#endif

            // Sources
            var iterator = AtemSDKConverter.CastSdk <IBMDSwitcherFairlightAudioSourceIterator>(props.CreateIterator);
            AtemSDKConverter.Iterate <IBMDSwitcherFairlightAudioSource>(
                iterator.Next,
                (src, id) =>
            {
                var val = BuildSource(src, inputId, tally);
                if (val != null)
                {
                    state.Sources.Add(val);
                }
            });

            return(state);
        }