Форум Beholder
http://beholder.ru/bb/

Формат данных кадра на входе в плагин
http://beholder.ru/bb/viewtopic.php?f=10&t=1434
Страница 1 из 1

Автор:  problemsolver [ 17 окт 2005, 12:50 ]
Заголовок сообщения:  Формат данных кадра на входе в плагин

Где можно прочитать, в каком формате лежат данные кадра, который передается в плагин. Т.е. я беру пример inverse и заменяю команду xor в обработчике на простое присваивание, типа
Код:
      for y := 0 to pPr^.FrameHeight - 1 do begin
        for x := 0 to xcycles - 1 do begin
          Block32  := PULONG(pSrcBuffer);
          Block32^ := dword(0);
          inc(pSrcBuffer, 4);
        end;
      end;

Почему у меня экран зеленый, а не черный?

Автор:  Support [ 17 окт 2005, 17:16 ]
Заголовок сообщения: 

Формат данных кадра можно узнать из значения поля PixFmt структуры PARAM_STR при старте стримминга. Данные могут находиться либо в формате YUY2, либо в RGB24. В зависимости от этого необходимо ветвить алгоритм обработки кадра. В примере Inverse ветвления не происходит, т.к. процедура инверсии цвета одинаково реализуется для обоих форматов данных.

В Вашем примере Вы имеете дело с форматом YUY2, где цвет двух соседних пикселов кодируется четырьмя байтами, два из которых являются яркостями каждого пиксела в отдельности, а два других представляют собой нормированные цветозразностные составляющие B-Y и R-Y для обоих пикселов одновременно. Чтобы получить заливку чёрным цветом в формате YUY2 необходимо заполнить массив кадра не нулями, а значением $80008000.

Узнать больше о форматах представления данных Вы можете, например, здесь.

Автор:  problemsolver [ 18 окт 2005, 16:05 ]
Заголовок сообщения: 

писал(а):
Узнать больше о форматах представления данных Вы можете, например, здесь.

Блин, хоть убейте, не могу врубиться
Можете дать конкретную формулу преобразования YUY2->RGB24 и обратно
Я не могу понять как преобразовать YUV4:2:2 в YUV4:4:4, а дальше нашел на www.microsoft.com
Или хотя бы дайте понять что обозначает вот это

Converting 4:2:2 YUV to 4:4:4 YUV requires horizontal upconversion by a factor of two.

Я понимаю, что 4 байта я как-то должен превратить в 8, но не понимаю как.

Автор:  Support [ 18 окт 2005, 17:45 ]
Заголовок сообщения: 

писал(а):
Можете дать конкретную формулу преобразования YUY2->RGB24 и обратно

YUV -> RGB

R = Y + 1.402 * ( V - 128 )
G = Y - 0.714 * ( V - 128 ) - 0.334 * ( U - 128 )
B = Y + 1.772 * ( U - 128 )

RGB -> YUV

Y = 0.299 * R + 0.587 * G + 0.114 * B
U = 0.5643 * ( B - Y ) + 128
V = 0.7132 * ( R - Y ) + 128

Цитата:
Converting 4:2:2 YUV to 4:4:4 YUV requires horizontal upconversion by a factor of two.

С форматом YUV4:4:4 мы не работали. Не было надобности.

Автор:  problemsolver [ 19 окт 2005, 09:05 ]
Заголовок сообщения: 

писал(а):
писал(а):
Можете дать конкретную формулу преобразования YUY2->RGB24 и обратно

YUV -> RGB
RGB -> YUV

Вот спасибо.

Автор:  BeteTest [ 31 авг 2008, 09:45 ]
Заголовок сообщения: 

писал(а):
YUV -> RGB

R = Y + 1.402 * ( V - 128 )
G = Y - 0.714 * ( V - 128 ) - 0.334 * ( U - 128 )
B = Y + 1.772 * ( U - 128 )

RGB -> YUV

Y = 0.299 * R + 0.587 * G + 0.114 * B
U = 0.5643 * ( B - Y ) + 128
V = 0.7132 * ( R - Y ) + 128

Эти формулы и применяются? Они же не эффективны с точки зрения выполнения ЦП.

Автор:  EugeneF [ 31 авг 2008, 23:55 ]
Заголовок сообщения: 

Напишите эффективные...

В самом тюнере и видеокарте эти преобразования выполняются аппаратно.

Автор:  BeteTest [ 01 сен 2008, 05:24 ]
Заголовок сообщения: 

См. гугль, 16 битные числа обрабатываются процессором напрямую.

Страница 1 из 1 Часовой пояс: UTC + 3 часа