2016-02-19 14 views
0

У меня есть код (Winforms, C#, .Net 4), который использует библиотеку Directshow.Net. Я столкнулся с проблемой 2 раза, когда у устройства есть «веб-камера», но он не отображается в диспетчере устройств в качестве устройства обработки изображений, а как что-то еще. Когда это происходит, DirectShow.Net либо не распознает его, либо распознает его достаточно, чтобы работать с ним, но если я попытаюсь захватить видео, которое он взорвет. Это совсем недавно произошло на Microsoft Surface Pro 4, работающем под Windows 10. У кого-нибудь есть идеи об этом? Почему это происходит или как обойти это? Аппаратный интерфейс не является моей специальностью, и это мой единственный код продукта, который имеет дело с прямым аппаратным интерфейсом.Доступ к веб-камерам, которые не отображаются в диспетчере устройств в качестве устройств формирования изображения

Ответы могут быть в VB или C# (или на любом другом языке).

Благодаря

Edit: Я считаю, что ошибка происходит из этой строки кода (из библиотеки 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; 
    } 

ответ

0

Оказывается, проблема была действительно в другом разделе моего кода. Я использовал пример на странице DirectShow.Net при подключении к веб-камерам, и он искал неподвижный вывод на кулачке. Ни одна из кулачков я не сообщил о том, что все еще работает нормально, поэтому я прокомментировал это. Затем они продолжат и используют тройник, чтобы сделать все. Эти кулачки сообщали о неподвижном и предвзятом булавке, и я не исправил все. Я просто удалил булавки и использовал тройник для всего.