private void SetCurrentCrossbarInput(IAMCrossbar crossbar, VideoInput videoInput)
{
if (videoInput.Type != PhysicalConnectorType.Default)
{
int inPinsCount, outPinsCount;
// gen number of pins in the crossbar
if (crossbar.get_PinCounts(out outPinsCount, out inPinsCount) == 0)
{
int videoOutputPinIndex = -1;
int videoInputPinIndex = -1;
int pinIndexRelated;
PhysicalConnectorType type;
// find index of the video output pin
for (int i = 0; i < outPinsCount; i++)
{
if (crossbar.get_CrossbarPinInfo(false, i, out pinIndexRelated, out type) != 0)
continue;
if (type == PhysicalConnectorType.VideoDecoder)
{
videoOutputPinIndex = i;
break;
}
}
// find index of the required input pin
for (int i = 0; i < inPinsCount; i++)
{
if (crossbar.get_CrossbarPinInfo(true, i, out pinIndexRelated, out type) != 0)
continue;
if ((type == videoInput.Type) && (i == videoInput.Index))
{
videoInputPinIndex = i;
break;
}
}
// try connecting pins
if ((videoInputPinIndex != -1) && (videoOutputPinIndex != -1) &&
(crossbar.CanRoute(videoOutputPinIndex, videoInputPinIndex) == 0))
{
crossbar.Route(videoOutputPinIndex, videoInputPinIndex);
}
}
}
}