From e12f9f0afd8c83aebec6fb280f994f20da94e848 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Tue, 19 Mar 2024 16:11:58 -0500 Subject: [PATCH] feat: add generic soft codec device --- .../SoftCodec/GenericSoftCodec.cs | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 src/PepperDash.Essentials.Devices.Common/SoftCodec/GenericSoftCodec.cs diff --git a/src/PepperDash.Essentials.Devices.Common/SoftCodec/GenericSoftCodec.cs b/src/PepperDash.Essentials.Devices.Common/SoftCodec/GenericSoftCodec.cs new file mode 100644 index 00000000..d7952ff7 --- /dev/null +++ b/src/PepperDash.Essentials.Devices.Common/SoftCodec/GenericSoftCodec.cs @@ -0,0 +1,80 @@ +using Newtonsoft.Json; +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Config; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PepperDash.Essentials.Devices.Common.SoftCodec +{ + public class GenericSoftCodec : EssentialsDevice, IRoutingInputsOutputs + { + public GenericSoftCodec(string key, string name, GenericSoftCodecProperties props) : base(key, name) + { + for(var i = 1; i <= props.OutputCount; i++) + { + var outputPort = new RoutingOutputPort($"{Key}-output{i}", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this); + + OutputPorts.Add(outputPort); + } + + for(var i = 1; i<= props.ContentInputCount; i++) + { + var inputPort = new RoutingInputPort($"{Key}-contentInput{i}", eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this); + + InputPorts.Add(inputPort); + } + + if (!props.HasCameraInputs) + { + return; + } + + for(var i = 1; i <=props.CameraInputCount; i++) + { + var cameraPort = new RoutingInputPort($"{Key}-cameraInput{i}", eRoutingSignalType.Video, eRoutingPortConnectionType.Hdmi, null, this); + + InputPorts.Add(cameraPort); + } + } + + public RoutingPortCollection InputPorts => throw new NotImplementedException(); + + public RoutingPortCollection OutputPorts => throw new NotImplementedException(); + } + + public class GenericSoftCodecProperties + { + [JsonProperty("hasCameraInputs")] + public bool HasCameraInputs { get; set; } + + [JsonProperty("cameraInputCount")] + public int CameraInputCount { get; set; } + + [JsonProperty("contentInputCount")] + public int ContentInputCount { get; set; } + + [JsonProperty("contentOutputCount")] + public int OutputCount { get; set; } + } + + public class GenericSoftCodecFactory: EssentialsDeviceFactory + { + public GenericSoftCodecFactory() + { + TypeNames = new List { "genericsoftcodec" }; + } + + public override EssentialsDevice BuildDevice(DeviceConfig dc) + { + Debug.Console(1, "Attempting to create new Generic SoftCodec Device"); + + var props = dc.Properties.ToObject(); + + return new GenericSoftCodec(dc.Key, dc.Name, props); + } + } +}