/// <summary> /// Register a new <see cref="OutputCallbackHandlerBase"/>. /// </summary> /// <param name="handler">The callback handler.</param> public static void RegisterCallback(OutputCallbackHandlerBase handler) { if (handler?.WorkingPort == null) { throw new NullReferenceException("Callback handler not configured correctly."); } if (WorkingHandlers.ContainsKey(handler.WorkingPort)) { WorkingHandlers[handler.WorkingPort] = handler; } else { WorkingHandlers.Add(handler.WorkingPort, handler); } }
/// <summary> /// Enables processing on a port. /// </summary> internal override void EnableControlPort() { if (!this.Enabled) { this.ManagedControlCallback = OutputCallbackProvider.FindCallback(this); this.NativeCallback = new MMALPort.MMAL_PORT_BH_CB_T(this.NativeControlPortCallback); IntPtr ptrCallback = Marshal.GetFunctionPointerForDelegate(this.NativeCallback); MMALLog.Logger.Debug("Enabling control port."); if (this.ManagedControlCallback == null) { MMALLog.Logger.Debug("Callback null"); MMALCheck(MMALPort.mmal_port_enable(this.Ptr, IntPtr.Zero), "Unable to enable port."); } else { MMALCheck(MMALPort.mmal_port_enable(this.Ptr, ptrCallback), "Unable to enable port."); } } }
/// <summary> /// Registers a <see cref="OutputCallbackHandlerBase"/>. /// </summary> /// <param name="handler">The output handler.</param> public void RegisterOutputCallback(OutputCallbackHandlerBase handler) => OutputCallbackProvider.RegisterCallback(handler);