У меня есть код (Winforms, C#, .Net 4), который использует библиотеку Directshow.Net. Я дважды сталкивался с проблемой, когда на устройстве есть «веб-камера», но оно отображается в диспетчере устройств не как устройство обработки изображений, а как что-то еще. Когда это происходит, DirectShow.Net либо не распознает его, либо распознает достаточно, чтобы работать с ним, но если я попытаюсь захватить видео, оно взорвется. Совсем недавно это произошло на Microsoft Surface Pro 4 под управлением Windows 10. У кого-нибудь есть идеи по этому поводу? Почему это происходит или как это обойти? Аппаратный интерфейс не является моей специальностью, и это мой единственный код продукта, который имеет дело с прямым аппаратным интерфейсом.
Ответы могут быть на VB или C# (или на любом другом языке).
Спасибо
Изменить: я считаю, что ошибка происходит из этой строки кода (из библиотеки DirectShow.Net), полный вызов функции ниже:
hr = m_VidControl.SetMode(m_pinStill, VideoControlFlags.Trigger);
У меня возникли проблемы с этим, так как у меня нет доступа к разработке на устройстве с веб-камерой, которая на самом деле не является веб-камерой.
Возвращаемая ошибка
System.Runtime.InteropServices.COMException (0x80070032): The request is not supported.
at DirectShowLib.DsError.ThrowExceptionForHR(Int32 hr)
Полный код функции:
public IntPtr Click()
{
int hr;
// get ready to wait for new image
m_PictureReady.Reset();
m_ipBuffer = Marshal.AllocCoTaskMem(Math.Abs(m_stride) * m_videoHeight);
try
{
m_WantOne = true;
// If we are using a still pin, ask for a picture
if (m_VidControl != null)
{
// Tell the camera to send an image
hr = m_VidControl.SetMode(m_pinStill, VideoControlFlags.Trigger);
DsError.ThrowExceptionForHR(hr);
}
// Start waiting
if (!m_PictureReady.WaitOne(9000, false))
{
throw new Exception("Timeout waiting to get picture");
}
}
catch
{
Marshal.FreeCoTaskMem(m_ipBuffer);
m_ipBuffer = IntPtr.Zero;
throw;
}
// Got one
return m_ipBuffer;
}