Потеря кадров для разрешения выше FullHD. Доступен ли фильтр преобразования AVI Decompressor в MediaFoundation?

Я разрабатываю приложение для потоковой передачи мультимедиа для рабочего стола, используя технику SourceReader MediaFoundation.

Я использую USB-камеру для показа потоковой передачи. Камера поддерживает 2 видеоформата: YUY2 и MJPG.

Для разрешения видео 1980x1080p YUY2 получение только 48fps для 60fps. Я получил преобразование YUY2-RGB32 со страницы MSDN и использовал его в своем приложении (Примечание: я не использовал фильтр преобразования для преобразования цвета).

Для видеоформата MJPG я использовал MJPEG Decoder MFT для преобразования MJPG в YUY2 в RGB32 и последующего отображения в окне с помощью Direct3D9. Для определенного разрешения я сталкиваюсь с падением частоты кадров с 60 кадров в секунду до 30 кадров в секунду (Пример: 1920x1080 60 кадров в секунду, но рисование только 30-33 кадра в секунду).

Два способа, которые я проверил в Graphedit, чтобы подтвердить фильтр:

  1. Добавлен фильтр MJPEG Decompressor и построен график для формата видео MJPG, чтобы проверить частоту кадров для разрешения FullHD и показать 28 кадров в секунду для 60 кадров в секунду.

  2. Добавлен фильтр AVI Decompressor и построен график для формата видео MJPG, чтобы проверить частоту кадров для разрешения FullHD и показать 60 кадров в секунду.

Я искал на многих сайтах, чтобы найти декомпрессор AVI для медиа-фонда, но безуспешно.

Кто-нибудь подтвердит, есть ли фильтр в MFT?


person Abi    schedule 19.01.2017    source источник
comment
Это может помочь: mftransform для преобразования mfsample из mjpg в yuy2 или rgb24"> stackoverflow.com/questions/9111362/ Однако в Windows 8 (и выше) я бы предложил использовать Video Processor MFT вместо Color Converter DSP для преобразования из YUY2 в RGB32. Видеопроцессор MFT должен быть быстрее, потому что он использует графическое оборудование. Кроме того, MFT видеопроцессора должен предоставлять вам поверхности RGB32 IDirect3DSurface9 напрямую (обернутые в IMFMediaBuffer), если вы настроите его с помощью IDirect3dDeviceManager9.   -  person VuVirt    schedule 19.01.2017
comment
Это камера USB3? Я не думаю, что 1080p60 с YUY2 или MJPEG возможно с камерой USB2. Вы убедились, что получаете 60 кадров в секунду без декодера? (NullRenderer или запись в avi)   -  person CPlusSharp    schedule 20.01.2017
comment
Да, его камера USB3 и поддерживает 60 кадров в секунду для YUY2 и MJPEG. Без использования какого-либо декодера я могу добиться 60 кадров в секунду. Так что проблем с моим устройством нет.   -  person Abi    schedule 23.01.2017
comment
Спасибо за ответ, ВуВрит. Я не настроил IDirect3dDeviceManager9 в своем приложении. Без настройки я получаю кадры RGB32 и могу достичь частоты кадров от 49 до 53 кадров в секунду для формата 1920x1080 YUY2, но кадры рисуются очень-очень медленно. Это рендеринг со скоростью от 4 до 5 кадров в секунду в окне ... Нужно ли настраивать этот интерфейс для решения этой проблемы с рендерингом? Если да, можете ли вы написать мне, как его настроить.   -  person Abi    schedule 27.01.2017
comment
Есть идеи, Вуврит?   -  person Abi    schedule 30.01.2017


Ответы (1)


Microsoft поставляет [последние версии] Windows со стандартными декодерами Motion JPEG:

Насколько мне известно, они не имеют общих кодовых баз, однако оба они не должны быть эффективными декодерами.

Использование вами GraphEdit означает, что вы пытаетесь использовать декодеры DirectShow, а AVI Decompressor предположительно использует другой кодек (Video for Windows), который вы не идентифицировали.

Для Media Foundation вы можете использовать Intel Hardware M-JPEG Decoder MFT или NVIDIA MJPEG Video Decoder MFT, если у вас есть соответствующее оборудование и драйверы. Предположительно, декодеры конкретного поставщика обеспечивают лучшую производительность, а также имеют более высокий приоритет по сравнению с аналогами общего программного обеспечения. Помимо этого, для форм-фактора MFT вам, возможно, придется взглянуть на коммерческие декодеры и / или разработанные на заказ, поскольку сам API не так популярен, чтобы предлагать широкий спектр вариантов.

person Roman R.    schedule 19.01.2017
comment
Спасибо за ваш ответ, Роман... Я использовал инструмент редактирования графика, чтобы проверить fps в DirectShow. Я перечислю Intel Hardware M-JPEG Decoder MFT и буду использовать его в своем приложении. Почему при разрешении 1920x1080 YUY2 происходят выпадения кадров? Я использую алгоритм преобразования цвета с этой страницы MSDN: msdn.microsoft.com/en-us/library/windows/desktop/. Не могли бы вы сказать мне причину? Еще раз, спасибо. - person Abi; 19.01.2017
comment
Вы можете столкнуться с разными узкими местами с разными вариантами. С видео MJPG медленный декодер, вероятно, будет узким местом, и вы, как ожидается, получите симптомы, описанные в исходном вопросе. Если вы захватываете YUY2, шаг декодирования отсутствует, но пропускная способность может быть проблемой и причиной снижения частоты кадров при захвате, а также более медленной загрузки в видеоподсистему, когда дело доходит до презентации. - person Roman R.; 19.01.2017