Доступ к веб-камерам, которые не отображаются в диспетчере устройств как устройства обработки изображений

У меня есть код (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;
    }

person Benji    schedule 19.02.2016    source источник


Ответы (1)


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

person Benji    schedule 25.02.2016