Минус на минус
Sep. 16th, 2010 05:54 pmНедавно обнаружил в своей программе, что при отображении в окошке текущего обрабатываемого видео иногда цвета не совсем такие, как надо. Это было видно, если исходное видео в формате YV12, а в процессе преобразуется в RGB32. Причем в получающемся файле все нормально, проблема только в отображении на экране в процессе. И на многих видео проблема была не заметна, а заметна лишь чуть-чуть на некоторых видеофайлах. Стал разбираться, и выяснилось, что в коде преобразования цветов из цветового пространства YUV в RGB было две грубых ошибки: сначала перепутаны местами цветовые плоскости U и V, а потом перепутаны позиции красного и синего цветов в четверке RGBA. В результате две этих ошибки друг друга почти компенсировали:

Слева - что получалось при таком двойном путании компонент, а справа - правильная картинка.

Слева - что получалось при таком двойном путании компонент, а справа - правильная картинка.
no subject
Date: 2010-09-16 07:11 pm (UTC)Помню когда делал инструмент для снятия скриншотов с Wii, мальца поебался его декодировать: там фторой фреймбуфер (который ближе к телеку) как раз YUV, а именно Y'UV422.
Это, в числе прочих факторов, приводит к тому, что на современных high definition TFT телеках при внимательном разглядывании low definition картинки, выдаваемой Wii, возникают неуместные ассоциации с NES a.k.a. Dendy.
ЧСХ, первый фреймбуфер, который ближе к процу и дальше от телека, нормальный RGB по байту на компоненту на пиксель.
Скриншоты можно вынимать из обоих.
Угадай, какой из 2 фреймбуферов использовался для изготовления рекламных материалов? :-)
no subject
Date: 2010-09-20 08:38 am (UTC)Это точно, там даже порой использование "стандартных" решений приводит к неприятным сюрпризам:
http://www.infognition.com/blog/2010/yv12_conversion.html