From 8c908c80e27647025e4f73b3ea29e18e0e7d0d73 Mon Sep 17 00:00:00 2001 From: equinoy Date: Thu, 20 Aug 2026 14:31:29 -0500 Subject: [PATCH] feat: add IHasMultiviewControl interface for multiview enable and layout feedback Exposes SetMultiviewEnabled plus MultiviewEnabled/MultiviewLayout feedbacks on an Essentials Core interface so room plugins can drive a multiview/UVC compositor (e.g. StreamSync) without a compile-time dependency on the hardware plugin. Layout selection remains on IHasScreensWithLayouts.ApplyLayout. --- .../IHasMultiviewControl.cs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasMultiviewControl.cs diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasMultiviewControl.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasMultiviewControl.cs new file mode 100644 index 00000000..58bdd1f3 --- /dev/null +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasMultiviewControl.cs @@ -0,0 +1,28 @@ +namespace PepperDash.Essentials.Core.DeviceTypeInterfaces; + +/// +/// Defines a device (e.g. a multiview/UVC compositor) whose multiview output can be enabled and +/// whose active layout can be observed. Implementing this interface (instead of requiring consumers +/// to reference the hardware-specific plugin type directly) lets other plugins (e.g. a room plugin) +/// turn the multiview on and read its current layout without taking a compile-time dependency on the +/// specific hardware plugin that implements it. The layout is set via +/// . +/// +public interface IHasMultiviewControl +{ + /// + /// Enables or disables the multiview output. + /// + /// True to enable multiview, false to disable. + void SetMultiviewEnabled(bool enabled); + + /// + /// Feedback for whether the multiview output is currently enabled. + /// + BoolFeedback MultiviewEnabled { get; } + + /// + /// Feedback for the current multiview layout index. + /// + IntFeedback MultiviewLayout { get; } +}