Я занимаюсь разработкой небольшой библиотеки видеозахвата поверх videoInput (тонкая оболочка для DirectShow), и в последнее время я столкнулся с сложной проблемой.
Библиотека захватывает и сохраняет видеокадры в своем внутреннем формате, используя следующий код:
if (VI->setupDevice(m_deviceIndex, width, height)) {
//... checks for frame size etc
//...
auto pixels = VI->getPixels(m_deviceIndex, true, true);
}
Этот код был построен в VS 2017 с использованием vc140 / sdk8.1, и он отлично работал на различных машинах под управлением Windows 7, 8.1 и 10, которые включали типичные офисные настольные и портативные компьютеры, несколько машин для разработки, крайне ограниченное производство Гости рабочего стола и VirtualBox.
Затем мы обнаружили, что на одном компьютере с Windows 7 videoInput выдает черные рамки (нулевые пиксели), даже если сама камера правильно работает с другими приложениями. Мы протестировали несколько разных моделей камер с одинаковым эффектом.
Я собрал примеры DirectShow из официального репозитория Microsoft и обнаружил, что при запуске образцы терпят неудачу с ошибкой hr = 0x80070005 (доступ запрещен), независимо от запуска в режиме повышенных прав. Здесь , где происходит ошибка (amcap.cpp, строка 787).
Поскольку официальные образцы предположительно должны работать «из коробки», я подозревал, что в более поздних версиях SDK / MSVC может быть ошибка совместимости, и попытался скомпилировать с VS 2010, но это не помогло. Я также пробовал разные серверы захвата, используя пример Windows Media Foundation из того же хранилища, а также OpenCV с ffmpeg - все с тем же эффектом.
Затем мы обнаружили другую машину под управлением Windows 10, у которой была точно такая же проблема, указывая, что это не проблема обратной совместимости. Между тем, те же сборки работали нормально на моих тестовых машинах, а сторонние приложения, такие как Webcamoid , работали на проблемных ПК.
Мое предположение заключается в том, что должен быть предоставлен какой-либо флаг совместимости или разрешение, поскольку камера отлично работает со сторонним программным обеспечением, но я не знаю, где их искать, а Windows 7 не ' Начните с того, что у меня нет настроек разрешения камеры, если я не ошибаюсь.
Теперь, кто-нибудь знает, что на земле может быть не так? Буду очень признателен за любой совет.
Спасибо-х.