thedeemon: (Default)
[personal profile] thedeemon
Недавно обнаружил в своей программе, что при отображении в окошке текущего обрабатываемого видео иногда цвета не совсем такие, как надо. Это было видно, если исходное видео в формате YV12, а в процессе преобразуется в RGB32. Причем в получающемся файле все нормально, проблема только в отображении на экране в процессе. И на многих видео проблема была не заметна, а заметна лишь чуть-чуть на некоторых видеофайлах. Стал разбираться, и выяснилось, что в коде преобразования цветов из цветового пространства YUV в RGB было две грубых ошибки: сначала перепутаны местами цветовые плоскости U и V, а потом перепутаны позиции красного и синего цветов в четверке RGBA. В результате две этих ошибки друг друга почти компенсировали:



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

Date: 2010-09-16 10:57 am (UTC)
From: [identity profile] metaclass.livejournal.com
Мрак. Я бы разницы наверно не увидел :)

офигенная ошибка =)

Date: 2010-09-16 11:41 am (UTC)
From: [identity profile] kosiakk.livejournal.com
у меня такие обычно получаются, когда я начинаю вслепую подбирать "правильные" комбинации параметров. Т.е. если с первого раза не получилось - пытаюсь интуитивно что-то переставить до получения правдоподобного результата.

тут результат как раз очень и очень правдоподобен =)

Re: офигенная ошибка =)

Date: 2010-09-16 05:10 pm (UTC)
From: [identity profile] theiced.livejournal.com
(записал в заметкм - kosiakk на работу не брать).

Re: офигенная ошибка =)

Date: 2010-09-16 05:38 pm (UTC)
From: [identity profile] kosiakk.livejournal.com
Аахахахаааха =) Спалился.

Скажете эта ошибка не так появилась? Слишком красиво для двух независимых ошибок.
Да и вообще я повзрослел, поумнел и сто лет так не делаю! Чессснослово

Re: офигенная ошибка =)

Date: 2010-09-16 06:09 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Не, не так, никакого подбора параметров не было.
Есть входные данные в формате YV12, состоящем из трех последовательных плоскостей разного размера - Y, U и V (первая ошибка - в YV12, в отличие от IYUV, сначала V, потом U). И есть формулы для перевода YUV-RGB, где в ходе редактирования и оптимизаций оказались перепутаны индексы.

Date: 2010-09-16 07:11 pm (UTC)
From: [identity profile] soonts.livejournal.com
YUV та ещё чорная магия.

Помню когда делал инструмент для снятия скриншотов с Wii, мальца поебался его декодировать: там фторой фреймбуфер (который ближе к телеку) как раз YUV, а именно Y'UV422.
Это, в числе прочих факторов, приводит к тому, что на современных high definition TFT телеках при внимательном разглядывании low definition картинки, выдаваемой Wii, возникают неуместные ассоциации с NES a.k.a. Dendy.

ЧСХ, первый фреймбуфер, который ближе к процу и дальше от телека, нормальный RGB по байту на компоненту на пиксель.
Скриншоты можно вынимать из обоих.
Угадай, какой из 2 фреймбуферов использовался для изготовления рекламных материалов? :-)

Date: 2010-09-20 08:38 am (UTC)
From: [identity profile] thedeemon.livejournal.com
YUV та ещё чорная магия.

Это точно, там даже порой использование "стандартных" решений приводит к неприятным сюрпризам:
http://www.infognition.com/blog/2010/yv12_conversion.html

Profile

thedeemon: (Default)
Dmitry Popov

December 2025

S M T W T F S
 12 3456
789101112 13
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 28th, 2026 08:56 am
Powered by Dreamwidth Studios