public SwitcherControl(System.Windows.Threading.Dispatcher dispatcher, ReportView reportProgrammView, ReportProgress progress) { m_switcherMonitor = new SwitcherMonitor(); m_switcherMonitor.SwitcherDisconnected += new SwitcherEventHandler((s, a) => dispatcher.Invoke((Action)(() => SwitcherDisconnected()))); m_mixEffectBlockMonitor = new MixEffectBlockMonitor(); m_mixEffectBlockMonitor.TransitionPositionChanged += new SwitcherEventHandler((s, a) => dispatcher.Invoke((Action)(() => UpdateSliderPosition()))); m_mixEffectBlockMonitor.InTransitionChanged += new SwitcherEventHandler((s, a) => dispatcher.Invoke((Action)(() => OnInTransitionChanged()))); m_switcherDiscovery = new CBMDSwitcherDiscovery(); if (m_switcherDiscovery == null) { MessageBox.Show("Could not create Switcher Discovery Instance.\nATEM Switcher Software may not be installed.", "Error"); Environment.Exit(1); } SwitcherDisconnected(); // start with switcher disconnected _reportProgrammView = reportProgrammView; _progress = progress; }
public Switcher(string ipAddress) { var options = new PusherOptions { Cluster = "us2", Encrypted = true }; pusher = new Pusher( "1137245", "f9cabd4c01730143d579", "3b87a4daf5b3f26ee1be", options); IBMDSwitcherDiscovery discovery = new CBMDSwitcherDiscovery(); _BMDSwitcherConnectToFailure failureReason; discovery.ConnectTo(ipAddress, out m_switcher, out failureReason); m_switcherMonitor = new SwitcherMonitor(); m_switcherMonitor.SwitcherDisconnected += OnSwitcherDisconnected; m_mixEffectBlockMonitor = new MixEffectBlockMonitor(); m_mixEffectBlockMonitor.ProgramInputChanged += OnSwitcherProgramChange; m_mixEffectBlockMonitor.PreviewInputChanged += OnSwitcherPreviewChange; m_switcher.AddCallback(m_switcherMonitor); IBMDSwitcherInput input = null; // We create input monitors for each input. To do this we iterate over all inputs: // This will allow us to update the combo boxes when input names change: IBMDSwitcherInputIterator inputIterator = null; IntPtr inputIteratorPtr; Guid inputIteratorIID = typeof(IBMDSwitcherInputIterator).GUID; m_switcher.CreateIterator(ref inputIteratorIID, out inputIteratorPtr); if (inputIteratorPtr != null) { inputIterator = (IBMDSwitcherInputIterator)Marshal.GetObjectForIUnknown(inputIteratorPtr); } if (inputIterator != null) { input = null; inputIterator.Next(out input); while (input != null) { InputMonitor newInputMonitor = new InputMonitor(input); input.AddCallback(newInputMonitor); m_inputMonitors.Add(newInputMonitor); inputIterator.Next(out input); } } //if (m_mixEffectBlock1 != null) //{ // // Remove callback // m_mixEffectBlock1.RemoveCallback(m_mixEffectBlockMonitor); // // Release reference // m_mixEffectBlock1 = null; //} //if (m_switcher != null) //{ // // Remove callback: // m_switcher.RemoveCallback(m_switcherMonitor); // // release reference: // m_switcher = null; //} // We want to get the first Mix Effect block (ME 1). We create a ME iterator, // and then get the first one: //m_mixEffectBlock1 = null; IBMDSwitcherMixEffectBlockIterator meIterator = null; IntPtr meIteratorPtr; Guid meIteratorIID = typeof(IBMDSwitcherMixEffectBlockIterator).GUID; m_switcher.CreateIterator(ref meIteratorIID, out meIteratorPtr); if (meIteratorPtr != null) { meIterator = (IBMDSwitcherMixEffectBlockIterator)Marshal.GetObjectForIUnknown(meIteratorPtr); } if (meIterator == null) { return; } if (meIterator != null) { meIterator.Next(out m_mixEffectBlock1); } // Install MixEffectBlockMonitor callbacks: m_mixEffectBlock1.AddCallback(m_mixEffectBlockMonitor); // Get an input iterator. inputIterator = null; inputIteratorIID = typeof(IBMDSwitcherInputIterator).GUID; m_switcher.CreateIterator(ref inputIteratorIID, out inputIteratorPtr); if (inputIteratorPtr != null) { inputIterator = (IBMDSwitcherInputIterator)Marshal.GetObjectForIUnknown(inputIteratorPtr); } if (inputIterator == null) { return; } input = null; inputIterator.Next(out input); while (input != null) { string inputName; long inputId; input.GetInputId(out inputId); input.GetLongName(out inputName); // Add items to list: m_output_list.Add(new StringObjectPair <long>(inputName, inputId)); //m_output_list.Add(new StringObjectPair<long>(inputName, inputId)); inputIterator.Next(out input); } //while (true) //{ //} }
public AtemMonitorService(IServiceScopeFactory scopeFactory) : base(scopeFactory) { _switcherMonitor = new SwitcherMonitor(); _switcherMonitor.SwitcherDisconnected += new SwitcherEventHandler((s, a) => SwitcherDisconnected()); }