Деинтерлейсинг графического процессора

У меня есть приложение, которое выполняет обработку видео, например преобразование цвета, масштабирование и перевод с использованием OpenGL. Я в основном работаю с видео BGRA (1xGL_BGRA) или YUVA (4xGL_R), т.е. включая альфу.

Теперь я также хотел бы сделать качественный деинтерлейсинг. Я заметил, что Nvidia поддерживает высококачественный деинтерлейсинг с аппаратным ускорением благодаря функции «PureVideo». В основном то, что я хотел бы сделать, это отправить чересстрочную текстуру OpenGL с количеством цветовых каналов x и получить две прогрессивные текстуры.

Мой вопрос заключается в том, как мне получить доступ к этой функции проще всего и наиболее эффективно (возможно, во взаимодействии с OpenGL)?

Я смотрел на DXVA и OpenMax, но оба, кажется, скорее сосредоточены на воспроизведении (а не на обработке деинтерлейсинга, т.е. необходимо установить нерелевантные параметры, такие как частота кадров и т. д.) и форматы без альфа-канала...


person ronag    schedule 15.03.2012    source источник
comment
Что определяет «высококачественный» деинтерлейсинг? Если вы просто хотите взять изображение и разделить его на две части с помощью чередующихся строк пикселей, вы можете легко сделать это в шейдере, но я не эксперт по видео и не уверен, что вы это имеете в виду.   -  person Tim    schedule 16.03.2012
comment
Я имею в виду что-то вроде пространственно-временного деинтерлейсинга. То, что вы предлагаете, отвратительного качества.   -  person ronag    schedule 16.03.2012
comment
Чтобы увидеть разницу между высококачественный и низкокачественный деинтерлейсинг.   -  person ronag    schedule 16.03.2012
comment
Просто из интереса, такие вещи, как деинтерлейсинг и т. д., тривиальны с gStreamer. Возможно, вам следует подумать о сторонних библиотеках для такого рода вещей, чем делать это самостоятельно?   -  person Robinson    schedule 20.03.2012
comment
Я уже использую ffmpeg для деинтерлейсинга, но это не ускорение GPU.   -  person ronag    schedule 20.03.2012
comment
для высококачественного деинтерлейса частота кадров действительно важна   -  person std''OrgnlDave    schedule 23.03.2012
comment
@OrgnlDave: О чем ты говоришь?   -  person ronag    schedule 24.03.2012


Ответы (3)


Библиотеки gStreamer имеют хорошие модули деинтерлейсинга. Вы можете использовать модуль directshow для отображения результатов в окне или самостоятельно обрабатывать кадры с помощью подключение к различным событиям. В настоящее время мы используем это на работе для всех наших потребностей в обработке видео.

person Robinson    schedule 20.03.2012
comment
Вроде не работает с gpu-ускорением. - person ronag; 20.03.2012
comment
С gStreamer это зависит от модуля, который вы связываете с конвейером. Например, есть модуль gldeinterlace с ускорением на GPU. На самом деле существует около 10 различных модулей GL, которые вы можете связать. - person Robinson; 20.03.2012
comment
Я уже использую ffmpeg yadif deinterlace, который, кажется, имеет лучшее качество, чем то, что предлагает gStreamer. - person ronag; 20.03.2012
comment
gldeinterlace (gst-plugins-gl0.10. sourcearchive.com/documentation/0.10.1/) кажется интересным, хотя он не использует PureVideo и кажется фильтром низкого-среднего качества. - person ronag; 20.03.2012

Основываясь на ваших уточненных требованиях, похоже, что VDPAU больше всего соответствует вашим желаниям. Усложнение: это для операционных систем на базе Unix, а не для Windows.

Если вы привязаны к Windows, вам подойдет DXVA. Если вы работаете в кросс-платформенной среде, вам подойдет OpenMAX. И если вы открыты для предложений помимо тех, которые вы уже дали в своем вопросе, остальные из этих заслуживают внимания.

person MrGomez    schedule 23.03.2012
comment
Это не добавляет ничего, кроме подтверждения того, что мне, вероятно, нужно использовать DXVA или OpenMax, о чем я уже говорил в своем вопросе. Хотя ни у одного из них нет простого способа делать то, что я хочу, и они не поддерживают какие-либо форматы с альфа-каналом. - person ronag; 23.03.2012
comment
@ronag На самом деле, это так. Обратите внимание, что лучшее, что я могу сделать, это найти ближайшее совпадение, потому что ваш запрос не может быть удовлетворен для пересечения Windows & Alpha & Hardware Support. Самое простое из этих ограничений, которое можно снять в среде разработки, Windows, дает вам инструмент, который ранее не обсуждался. VDPAU поддерживается Nvidia и похоже, имеет альфа-версию. Я не верю, что ваш запрос может быть удовлетворен без развертывания вашего собственного решения или расширения существующих. - person MrGomez; 23.03.2012
comment
К сожалению, Windows является обязательным требованием. Хотя интересно, что VDPAU имеет альфа-поддержку. - person ronag; 23.03.2012
comment
@ronag Из любопытства, поддержка Nvidia также является требованием? У ATI и Intel есть конкурирующие решения. - person MrGomez; 23.03.2012
comment
@MrGomesz: К сожалению, да, у большинства конечных пользователей есть карты Nvidia. - person ronag; 24.03.2012

Пункт 1: вам придется использовать DirectX, если вы хотите иметь аппаратное ускорение деинтерлейсинга с хорошим качеством.

Пункт 2: Помимо опций, названных другими (DXVA и OpenMAX), существует, по крайней мере, Intel Media SDK для ускоренного деинтерлейсинга Quicksync, который не был назван и который предлагает деинтерлейсинг для каждого кадра с помощью своих фильтров предварительной обработки видео VPP.

Пункт 3: Чтобы перейти с DirectX на OpenGL на NVidia: http://developer.download.nvidia.com/opengl/specs/WGL_NV_DX_interop.txt

person Christopher Oezbek    schedule 11.05.2012