2013-04-22 7 views
2

Сценарий, с которым я имею дело, на самом деле выглядит следующим образом: мне нужно получить экран, сгенерированный OpenGL, и отправить его через HDMI в компонент FPGA, сохраняя альфа-канал. Но сейчас данные, передаваемые через HDMI, - это только RGB (24-битный без альфа-канала). Поэтому мне нужно как-то принудительно отправить биты Alpha через этот порт.Поддерживайте альфа-прозрачность видео через HDMI

См изображения: http://i.imgur.com/hhlcbb9.jpg

Одно из решений я мог думать о том, чтобы преобразовать буфер экрана из режима RGBA в RGB при смешивании каналов альфа в буфере RGB.

Например:

The original buffer: [R G B A][R G B A][R G B A] 
The output i want: [R G B][A R G][B A R][G B A] 

Дело не необходимость проходить через каждые отдельные пиксели. Но я не уверен, если это вообще возможно с использованием OpenGL или любой технологии (VideoCore ядра?)

+0

Вы нашли решение? Как насчет того, почему ваш альфа-канал не проходит через вашу HDMI-связь? Вам нужна спецификация HDMI 1.3+ для поддержки> 24-битного цвета. – kevinf

+0

@kevinf, я в настоящее время работаю над проектом, который мог бы использовать это. Кто-нибудь нашел решение? –

+0

@PaulKnopf Я пошел в другом направлении с проектом. Однако я все же хочу узнать больше о канале Alpha на пути обработки видео. – kevinf

ответ

1

OpenGL буфера кадра

ли вы на самом деле означает framebuffer, или какой-нибудь текстуры? Поскольку фреймбуферы не могут быть изменены, размер этого результирующего изображения будет больше в количестве пикселей на 25%. Вы не можете этого сделать.

Вы можете сделать это с текстурой, но только путем изменения размера. Вам нужно будет получить данные текселя с glGetTexImage в некоторый буфер, затем загрузить данные текселя в другую текстуру с помощью glTexImage2D. Вы просто изменили бы размер pixel transfer format и ширину текстуры. Чтение будет использовать GL_RGBA, и запись будет использовать GL_RGB с внутренним форматом GL_RGB8.

производительность этого почти наверняка не очень хорошо. Но он должен работы.

Но нет, нет простого вызова, который вы можете сделать, чтобы это произошло.

+1

Привет, спасибо за ваш ответ. Сценарий, с которым я имею дело, на самом деле выглядит следующим образом: Мне нужно получить экран, сгенерированный OpenGL, и отправить его через HDMI в компонент FPGA, сохраняя альфа-канал. Но сейчас данные, передаваемые через HDMI, - это только RGB (24-битный без альфа-канала). Поэтому мне нужно как-то принудительно отправить биты Alpha через этот порт. Есть ли у вас предложения? Есть ли в любом случае, чтобы получить Alpha Buffer (например, буфер Stencil)? Спасибо –

+0

@AkitoEki: Если все это имеет значение, вы должны поместить его в свой вопрос. И нет такой вещи, как «альфа-буфер». Цвета просто состоят из четырех отдельных каналов, один из которых - альфа. –

+0

Спасибо, Николь, я тоже обновлю свои фотографии. :) –

1

Вы можете отправить альфа-канал отдельно в opengl через различные видеовыходы rgb или hdmi на вашей видеокарте. Итак, ваш компьютер теперь выводит RGB по одному кабелю, а затем Alpha вниз по другому кабелю. Ваша альфа, вероятно, должна быть преобразована в шкалу серого, так что она по-прежнему равна 24 бит. Затем вы выбираете, какой сигнал является ключом в вашей fpga. Я предполагаю, что ваш fpga поддерживает цветной ключ.

Я уже делал что-то подобное раньше, но используя программу Brainstorm, которая использует определенную видеокарту, поддерживающую SDI, и разделяет RGB и Alpha на отдельные видеоканалы (кабели), а затем микшер видения делает манипуляция.

Сегодня, однако, я создал новое решение, которое сначала микширует несколько видеоканалов на ПК, а затем выводит окончательное смешанное видео непосредственно на потоковый сервер RTMP или в конвертер сканирования DVI в SDI.

 Смежные вопросы

  • Нет связанных вопросов^_^