private VideoInput[] ColletCrossbarVideoInputs(IAMCrossbar crossbar)
{
lock (cacheCrossbarVideoInputs)
{
if (cacheCrossbarVideoInputs.ContainsKey(deviceMoniker))
{
return cacheCrossbarVideoInputs[deviceMoniker];
}
List<VideoInput> videoInputsList = new List<VideoInput>();
if (crossbar != null)
{
int inPinsCount, outPinsCount;
// gen number of pins in the crossbar
if (crossbar.get_PinCounts(out outPinsCount, out inPinsCount) == 0)
{
// collect all video inputs
for (int i = 0; i < inPinsCount; i++)
{
int pinIndexRelated;
PhysicalConnectorType type;
if (crossbar.get_CrossbarPinInfo(true, i, out pinIndexRelated, out type) != 0)
continue;
if (type < PhysicalConnectorType.AudioTuner)
{
videoInputsList.Add(new VideoInput(i, type));
}
}
}
}
VideoInput[] videoInputs = new VideoInput[videoInputsList.Count];
videoInputsList.CopyTo(videoInputs);
cacheCrossbarVideoInputs.Add(deviceMoniker, videoInputs);
return videoInputs;
}
}