Решил залезть в libz , а имеено функуцию inflate, ее использует
libpng и именно там возникает ошибка incorrect data check
if ((
#ifdef GUNZIP
state->flags ? hold :
#endif
REVERSE(hold)) != state->check)
{
strm->msg = (char *)"incorrect data check";
state->mode = BAD;
break;
}
решил посмтотреть, какие контрольные суммы он сравнивает
добавил перед кодом, который выше
unsigned long ztmp;
ztmp = REVERSE(hold);
fprintf(stderr, "%8X\n",ztmp);
fprintf(stderr, "%8X\n",state->check);
Собственно результат в вел в ступор.
когда контрольные сумы совпадают, то естественно png отображается на экране и проблем нет.
Когда ошибка (incorrect data check) результат функции REVERSE(hold) совсем другой.
P.S было не сколько раз такой вариант, REVERSE(hold) вернула правильное значение, а state->check содержал не правильную контрольную сумму.
У кого есть мысли, почему идут такие пляски
Еще раз повторюсь это происходит с любым файлом png, четкой закономерности появления ошибки нет :(
P.P.S пробовал с разными версиями libz - эффект то же.
Если в багтрекере Qt или вообще в Инете не находите описания подобных проблем то скорей всего связано с ошибками этапа сборки - возможно с конкретным компилятором которым собирали. Примеры работают из Qt ? libpng - это достаточно зрелый проект, ошибок на пустом месте там 100% нет.
С QT проблем нет все остальное работает нормально. (навремя пришлось png заменить gif картинками)
Я так же пробовал собирать qt со встроенным lippng и libz картина такая же, проблема именно в libz внешнем или встроенным.
Компилятор, тот который идет в комплекте в образе виртуальной машины.
Тогда возможно проблема с самим рисунком png. Я например не смог подсунуть Qt Creator-у логотоп starterkit.ru (из шапки этого сайта) - не видит его браузер ресурсов в дезигнере QML, хотел летающий логотип сделать :)
Мысли две - тестировать DDR мемтестером и второе - на OEM модуле нет SDRAM, только DDR, на SK-AT91SAM9G45 есть SDRAM и помоему в качестве видеопамяти она используется - надо смотреть, т.е. на DDR нет такой нагрузки от контроллера LCD - ему надо постоянно обращаться к памяти.
Есть еще несколько модулей OEM попробую протестить
Верно в нотации к этой плате так и написано, что используется для хранения видео буфера, он наверное потом через DMА переливается в основной кусок памяти.
Кстати на этой плате Android мне удалось поднять, правда в усеченном варианте (вкинуть пришлось не нужные app), а вот на OEM модуле Android постоянно падает.
В OEM модуле нужно убрать перемычку R25 и поставить ее на R24
После этого больше глюков нет, png работает нормально, libz без ошибок.
P.S Модуль из старых поставок
P.P.S Павел давно об этом говорил, но вот несколько модулей остались без этого внимания.