Media Foundation неправильно маркирует дескрипторы потоков захвата неподвижных изображений как захват видео

Я делаю захват видео с веб-камеры двумя разными способами (например, двумя приложениями): с помощью Direct Show и Media Foundation.

Используя Direct Show, моя веб-камера Logitech C920 имеет 3 выходных контакта:

  1. Захват видео (т.е. PIN_CATEGORY_CAPTURE или же
    PIN_CATEGORY_PREVIEW) в пиксельных форматах I420, RGB24 и MJPG, с
    FPS от 2 до 30, в зависимости от типа носителя.
  2. Захват неподвижного изображения (т.е. PIN_CATEGORY_STILL) в I420 и RGB24
    всего с 1 FPS.
  3. Захват видео (т.е. PIN_CATEGORY_CAPTURE или же
    PIN_CATEGORY_PREVIEW) в h264 с FPS от 5 до 30.

Итак, поскольку я занимаюсь только захватом видео, я игнорирую все контакты, которые не PIN_CATEGORY_CAPTURE или же PIN_CATEGORY_PREVIEW, который прекрасно работает.

Используя Media Foundation, та же камера имеет 3 потоковых дескриптора (IMFPresentationDescriptor::GetStreamDescriptorCount). Каждый дескриптор потока обеспечивает IMFMediaTypeHandler это позволяет вам перебирать типы медиа. Итак, у меня есть 3 IMFMediaTypeHandlers:

  1. Захват видео (т.е. IMFMediaTypeHandler::GetMajorType == MFMediaType_Video) в пиксельных форматах I420, RGB24 и MJPG, с
    FPS от 2 до 30, в зависимости от типа носителя.
  2. Захват видео (т.е. IMFMediaTypeHandler::GetMajorType == MFMediaType_Video) в i420 и RGB24
    всего с 1 FPS.
  3. Захват видео (т.е. IMFMediaTypeHandler::GetMajorType == MFMediaType_Video) в h264 с FPS от 5 до 30.

Вы можете заметить, что дескрипторы потока Media Foundation, кажется, отображаются на выходные выводы Direct Show 1 на 1. За исключением того, что Media Foundation не пометил дескриптор потока # 2 как захват неподвижного изображения (MFMediaType_Image), в отличие от того, что делает Direct Show.

Для захвата неподвижного изображения требуется другая обработка, чем для захвата видео, поэтому мой код Direct Show содержит ошибки и вообще не выполняет захват при попытке использовать типы мультимедиа со штырька № 2. Ну, во-первых, я забочусь только о захвате видео, так что все в порядке.

Но даже через Media Foundation сообщается, что дескриптор потока № 2 — это захват видео, мой код Media Foundation, который прекрасно работает со всеми типами мультимедиа из дескрипторов steam 1 и 3, вылетает на типах мультимедиа из дескриптора потока № 2, подобно тому, как Сбой Direct Show только при захвате неподвижного изображения.

Так что у меня сложилось впечатление, что это либо Media Foundation (или драйвер веб-камеры для Windows 7, предоставляемый Logitech) глючит и не помечает дескриптор потока № 2 как захват неподвижного изображения, когда это необходимо, или я проверяю неправильный флаг, чтобы определить, является ли это захватом видео или неподвижным изображением. Если это моя ошибка, то как правильно различать дескрипторы потоков захвата видео (# 1 и # 3) и неподвижного изображения (# 2)?

2

Решение

Да, у Mediafoundation нет атрибута стиля PIN_CATEGORY_STILL.

Возможно, вы можете предположить, что тип носителя с частотой всего 1 кадр / с все еще используется.

РЕДАКТИРОВАТЬ

делая еще несколько исследований, есть MF_CAPTURE_ENGINE_STREAM_CATEGORY_PHOTO_DEPENDENT

Это относится к MFCaptureEngine и для Windows 8 …

0

Другие решения


По вопросам рекламы [email protected]