#415 Adds camera mute methods and feedback to CiscoSparkCodec

Adds new IHasCameraMute to more clearly define functions and implements on CiscoSparkCodec and ZoomRoom
This commit is contained in:
Neil Dorin
2021-02-17 16:50:18 -07:00
parent 86ad88969e
commit e356f57e1a
4 changed files with 104 additions and 6 deletions

View File

@@ -46,6 +46,17 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
void CameraOff();
}
/// <summary>
/// Describes the ability to mute and unmute camera video
/// </summary>
public interface IHasCameraMute
{
BoolFeedback CameraIsMutedFeedback { get; }
void CameraMuteOn();
void CameraMuteOff();
void CameraMuteToggle();
}
public class CameraSelectedEventArgs : EventArgs
{
public CameraBase SelectedCamera { get; private set; }

View File

@@ -29,7 +29,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
public class CiscoSparkCodec : VideoCodecBase, IHasCallHistory, IHasCallFavorites, IHasDirectory,
IHasScheduleAwareness, IOccupancyStatusProvider, IHasCodecLayouts, IHasCodecSelfView,
ICommunicationMonitor, IRouting, IHasCodecCameras, IHasCameraAutoMode, IHasCodecRoomPresets, IHasExternalSourceSwitching, IHasBranding
ICommunicationMonitor, IRouting, IHasCodecCameras, IHasCameraAutoMode, IHasCodecRoomPresets, IHasExternalSourceSwitching, IHasBranding, IHasCameraOff, IHasCameraMute
{
public event EventHandler<DirectoryEventArgs> DirectoryResultReturned;
@@ -311,6 +311,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
LocalLayoutFeedback = new StringFeedback(LocalLayoutFeedbackFunc);
LocalLayoutIsProminentFeedback = new BoolFeedback(LocalLayoutIsProminentFeedbackFunc);
FarEndIsSharingContentFeedback = new BoolFeedback(FarEndIsSharingContentFeedbackFunc);
CameraIsOffFeedback = new BoolFeedback(() => CodecStatus.Status.Video.Input.MainVideoMute.BoolValue);
CameraIsMutedFeedback = CameraIsOffFeedback;
PresentationViewMaximizedFeedback = new BoolFeedback(() => CurrentPresentationView == "Maximized");
@@ -376,8 +379,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
CodecStatus.Status.Video.Selfview.Mode.ValueChangedAction = SelfviewIsOnFeedback.FireUpdate;
CodecStatus.Status.Video.Selfview.PIPPosition.ValueChangedAction = ComputeSelfviewPipStatus;
CodecStatus.Status.Video.Layout.LayoutFamily.Local.ValueChangedAction = ComputeLocalLayout;
CodecStatus.Status.Conference.Presentation.Mode.ValueChangedAction += SharingContentIsOnFeedback.FireUpdate;
CodecStatus.Status.Conference.Presentation.Mode.ValueChangedAction += FarEndIsSharingContentFeedback.FireUpdate;
CodecStatus.Status.Conference.Presentation.Mode.ValueChangedAction = SharingContentIsOnFeedback.FireUpdate;
CodecStatus.Status.Conference.Presentation.Mode.ValueChangedAction = FarEndIsSharingContentFeedback.FireUpdate;
CodecStatus.Status.Video.Input.MainVideoMute.ValueChangedAction = CameraIsOffFeedback.FireUpdate;
CodecOsdIn = new RoutingInputPort(RoutingPortNames.CodecOsd, eRoutingSignalType.Audio | eRoutingSignalType.Video,
eRoutingPortConnectionType.Hdmi, new Action(StopSharing), this);
@@ -1631,6 +1635,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
public void CameraAutoModeOn()
{
SendText("xCommand Cameras SpeakerTrack Activate");
CameraMuteOff();
}
public void CameraAutoModeOff()
@@ -1706,6 +1711,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
_selectedCamera = value;
SelectedCameraFeedback.FireUpdate();
ControllingFarEndCameraFeedback.FireUpdate();
if (CameraIsOffFeedback.BoolValue)
CameraMuteOff();
var handler = CameraSelected;
if (handler != null)
@@ -1969,7 +1976,47 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
#endregion
}
#region IHasCameraOff Members
public BoolFeedback CameraIsOffFeedback { get; private set; }
public void CameraOff()
{
CameraMuteOn();
}
#endregion
public BoolFeedback CameraIsMutedFeedback { get; private set; }
/// <summary>
/// Mutes the outgoing camera video
/// </summary>
public void CameraMuteOn()
{
SendText("xCommand Video InputMainVideo Mute");
}
/// <summary>
/// Unmutes the outgoing camera video
/// </summary>
public void CameraMuteOff()
{
SendText("xCommand Video InputMainVideo Unmute");
}
/// <summary>
/// Toggles the camera mute state
/// </summary>
public void CameraMuteToggle()
{
if (CameraIsMutedFeedback.BoolValue)
CameraMuteOff();
else
CameraMuteOn();
}
}
/// <summary>

View File

@@ -1606,6 +1606,22 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
public string Value { get; set; }
}
public class MainVideoMute : ValueProperty
{
public bool BoolValue { get; private set; }
public string Value
{
set
{
// If the incoming value is "On" it sets the BoolValue true, otherwise sets it false
BoolValue = value == "On";
OnValueChanged();
}
}
}
public class ConnectorId
{
public string Value { get; set; }
@@ -1662,6 +1678,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
{
public List<Connector> Connector { get; set; }
public MainVideoSource MainVideoSource { get; set; }
public MainVideoMute MainVideoMute { get; set; }
public List<Source> Source { get; set; }
}

View File

@@ -23,7 +23,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{
public class ZoomRoom : VideoCodecBase, IHasCodecSelfView, IHasDirectoryHistoryStack, ICommunicationMonitor,
IRouting,
IHasScheduleAwareness, IHasCodecCameras, IHasParticipants, IHasCameraOff, IHasCameraAutoMode,
IHasScheduleAwareness, IHasCodecCameras, IHasParticipants, IHasCameraOff, IHasCameraMute, IHasCameraAutoMode,
IHasFarEndContentStatus, IHasSelfviewPosition, IHasPhoneDialing
{
private const long MeetingRefreshTimer = 60000;
@@ -98,6 +98,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
CameraIsOffFeedback = new BoolFeedback(CameraIsOffFeedbackFunc);
CameraIsMutedFeedback = CameraIsOffFeedback;
CameraAutoModeIsOnFeedback = new BoolFeedback(CameraAutoModeIsOnFeedbackFunc);
CodecSchedule = new CodecScheduleAwareness(MeetingRefreshTimer);
@@ -1775,16 +1777,37 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public void CameraOff()
{
SendText("zConfiguration Call Camera Mute: On");
CameraMuteOn();
}
#endregion
public BoolFeedback CameraIsMutedFeedback { get; private set; }
public void CameraMuteOn()
{
SendText("zConfiguration Call Camera Mute: On");
}
public void CameraMuteOff()
{
SendText("zConfiguration Call Camera Mute: Off");
}
public void CameraMuteToggle()
{
if (CameraIsMutedFeedback.BoolValue)
CameraMuteOff();
else
CameraMuteOn();
}
#region Implementation of IHasCameraAutoMode
//Zoom doesn't support camera auto modes. Setting this to just unmute video
public void CameraAutoModeOn()
{
CameraMuteOff();
throw new NotImplementedException("Zoom Room Doesn't support camera auto mode");
}