LINUX.ORG.RU

RGB vs BGR


0

1

Заливаем в армовый девайс линукс. В ядре LCD контроллет (атмеловский) настроен на 24 бита режим BRG. Вместо заставки подсовываем картинку из трех квадратов (красный, зеленый, синий) - ОК вместо пингвина правильная картинка в правильных цветах(!). Запустилась система (переборка дистрибутива Ангстром) втыкаем Qt embedded 4.7 приложение которое вместо красного рисует синий и наоборот вместо синего рисует красный - ЧЯДНТ и как такое вообще возможно?????

ЗЫ: Я бы еще переварил еслибы линукс всегда цвета путал, а так мистика какая-то...

В ядре LCD контроллет (атмеловский) настроен на 24 бита режим BRG.

Чего за режим такой ? но вопрос не в этом - как вы его настраиваете, надеюсь в board-файле присутствует подобное

/* Driver datas */
static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
        .lcdcon_is_backlight            = true,
        .default_bpp                    = 32,
        .default_dmacon                 = ATMEL_LCDC_DMAEN,
        .default_lcdcon2                = AT91SAM9G45_DEFAULT_LCDCON2,
        .default_monspecs               = &at91fb_default_monspecs,
        .guard_time                     = 9,
>>>        .lcd_wiring_mode                = ATMEL_LCDC_WIRING_RGB,<<<
};

anonymous
()
Ответ на: комментарий от anonymous

Режим это такой:
static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
.lcdcon_is_backlight = true,
.default_bpp = 24,
.default_dmacon = ATMEL_LCDC_DMAEN,
.default_lcdcon2 = AT91SAM9G45_DEFAULT_LCDCON2,
.default_monspecs = &at91fb_default_monspecs,
.guard_time = 1,
.lcd_wiring_mode = ATMEL_LCDC_WIRING_BRG,
};

И вот на нем цвета в заставке (ну та что пингвином в момент развертывания и конфигурироания ядра) правильные в приложении лажа. Уже закрадываются мысли что ядро видеорежим где изменяет после вывода заставки...

mskmsk1985
() автор топика
Ответ на: комментарий от mskmsk1985

Это копипаста была или вы реально задаете адреса регистров для at91sam9g45 а реально процессор at91sam9261 ?
AT91SAM9G45_DEFAULT_LCDCON2,
потом такой странный режим отсутсвтует в ванильном ядре для atmel_lcdfb да и не всякое приложение думаю распарсит когда получит screeninfo - обычно rgb или bgr

anonymous
()
Ответ на: комментарий от anonymous

Нет там конечно не AT91SAM9G45_DEFAULT_LCDCON2 а нечто свое состоящее из трех флагов, щас нет под рукой исходников так что точно не скажу, но изучение показало что все эти AT91SAM9G45_DEFAULT_LCDCON2 как правило очень друг на друга похожи.

Странный это какой? ATMEL_LCDC_WIRING_BRG - в самом начале atmel_lcd.h определен как 0 а ATMEL_LCDC_WIRING_RGB как 1. битность контроллера ну уж какая в даташите прописана ту и пишем ( там либо 24 либо16), что еще странного Вы в этом режиме наковыряли, и что можете по существу про иневертаци красного/синего сказать?

mskmsk1985
() автор топика
Ответ на: комментарий от mskmsk1985

Атмеловский контроллер весьма убог к тому же работает в bgr тогда как весь нормальный мир в rgb - на нормальных контроллерах это настраивается. Похоже qt просто не умеет работать в bgr режиме. Если возможно я бы поменял аппаратно цвета на шлейфе панели (перекинул провода) и сделал нормальный rgb.

anonymous
()
Ответ на: комментарий от anonymous

Кстати атмеловские контроллеры с ядром arm весьма говенные и вообще сейчас продукцию их в рф днем с огнем не сыщешь, они свернули свои производственные мощности, я сильно подумал бы на вашем месте стоит ли с ними связываться в своих разработках.

anonymous
()
Ответ на: комментарий от anonymous

> bgr тогда как весь нормальный мир в rgb - на нормальных контроллерах это настраивается. Я чего-то не понял - это слив или нет? Все там настраисается при загрузке см ATMEL_LCDC_WIRING_... не то?

Похоже qt просто не умеет работать в bgr режиме.

Просветите меня - прикладному ПО не фиолетово разве в каком режиме там на самом деле работает железо? Не драйвера контроллера разве отвечают за то как трактовать цвет???

Кстати атмеловские контроллеры с ядром arm весьма говенные и вообще сейчас продукцию их в рф днем с огнем не сыщешь, они свернули свои производственные мощности, я сильно подумал бы на вашем месте стоит ли с ними связываться в своих разработках

Ой вот туточки Вы совсем не правы. Все продается и в промышленных масштабах. Мне как разраработчику ПО на самом деле пофигу где контора будет покупать железо навязанной ей ТЗ и нашими электронщиками. В чем интересно по вашему их «говеность»?

mskmsk1985
() автор топика
Ответ на: комментарий от mskmsk1985

>Я чего-то не понял - это слив или нет? Все там настраисается при загрузке см ATMEL_LCDC_WIRING_... не то?

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

Ой вот туточки Вы совсем не правы. Все продается и в промышленных масштабах.

На вот - почитай что пишут реальные разработчики железа http://electronix.ru/forum/index.php?showtopic=81195

В чем интересно по вашему их «говеность»?

Проще назвать их единиственный плюс - они достаточны просты при программировании, в остальной полный слив аналогичным решениям на arm9 от TI, Freescale или Philips

anonymous
()
Ответ на: комментарий от mskmsk1985

>Все там настраисается

Вот тебе оригинальный апнот, можешь сам посмотреть как там все «настраивается» :) см раздел 6.1 TFT Hardware Connection - как они там лихо предлагают «настраивать»
http://www.atmel.com/dyn/resources/prod_documents/doc6300.pdf

На нормальных контроллерах это как раз настраивается простым программированием режима контроллера и никто мозг не трахает с bgr в буфере или rgb.

anonymous
()
Ответ на: комментарий от mskmsk1985

Ты дурак или прикидываешься ? По теме - можешь патчить все приложения чтобы они записывали буфер в bgr-последовательности, потому что атмеловский lcd контроллер может работать только в bgr.

anonymous
()
Ответ на: комментарий от mskmsk1985

где сие параметр используется?

А исходник драйвера слабо посмотреть ?

436         case 24:
437                 if (sinfo->lcd_wiring_mode == ATMEL_LCDC_WIRING_RGB) {
438                         /* RGB:888 mode */
439                         var->red.offset = 16;
440                         var->blue.offset = 0;
441                 } else {
442                         /* BGR:888 mode */
443                         var->red.offset = 0;
444                         var->blue.offset = 16;
445                 }
446                 var->green.offset = 8;
447                 var->red.length = var->green.length = var->blue.length = 8;
448                 break;

Как видишь этот параметр нужен всего лишь чтобы сообщить в userspace через screeninfo смещение красного и синего. Драйвер fbcon это нормально проглатывает а вот qt похоже просто наплевал и пишет в rgb.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.