Искусство программирования
lexa - 16/Фев/2008 22:58
Потихоньку ковыряю исходники dcraw
Жесть: после отпиливания (по живому, расстановкой #if 0 в почти произвольных местах) примерно 3/4 программы (из 8500 строчек осталось 2500), остаток продолжает довольно осмысленно работать. Не удивлюсь, если он регенерирует к утру.
Надо сказать, что особенности материала (а разобрать данные от 160 разных фотокамер - это не шутки) наложились на особенности стиля автора. Взять, например, детектирование конкретной модели цифровика Canon по ширине картинки.
Comments
О, да! У меня от кода dcraw уже неделю шок не проходит...
О, да! У меня от кода dcraw уже неделю шок не проходит...
Ширина сенсора вполне себе сигнатура - мне это тоже показало
Ширина сенсора вполне себе сигнатура - мне это тоже показалось прикольным, но в общем без негативных эмоций. А вот всякие diff -= (1 << len) - !shl; меня просто в ступор вводят. Т.е. если ты так пишешь, то хотя бы комментарии ставь, а если не любишь комментировать, то пиши простыми развернутыми конструкциями без этих чертовых сишных вывертов.
Но в итоге его куски я просто стараюсь не трогать без особой нужды, иначе потом очень трудно вклеивать изменения из новых версий.
Меня, честно говоря, взбесило вот это: <i>if (raw_width =
Меня, честно говоря, взбесило вот это:
if (raw_width == 2672 && val < 512) val += 2;
<div style="text-align:left;color:#b6b6b6; background-color:
diff -= (1 << len) - !shl;
А Вы под какую ось эту штуку собираете? Я под Windows собира
А Вы под какую ось эту штуку собираете? Я под Windows собирал, но полностью собрать получилось только из бод cygwin'а. Что-то вот подумалось, что может существуют более прямые методы...
Ну я пока и вовсе под FreeBSD. А виндовую - проще брать гот
Ну я пока и вовсе под FreeBSD.
А виндовую - проще брать готовый бинарник, их есть.
Готовый бинарник - это не спортивно :)
Готовый бинарник - это не спортивно :)
Да я уже привык к такому стилю опенсорса. Стараюсь не трогат
Да я уже привык к такому стилю опенсорса. Стараюсь не трогать его, если нельзя взять и использовать как есть, либо обойтись небольшими точечными изменениями, а писать сам все.
Написание своего dcraw похоже вообще никто не осилил.
Написание своего dcraw похоже вообще никто не осилил.
Дык написать-то не проблема. Вот тестирование мало кто осили
Дык написать-то не проблема. Вот тестирование мало кто осилит :)
А что значит "никто"? Вроде бы рав-конверторов масса. Или они используют куски кода из DCRAW'а?
Ага, большинство - использует (включая, например, Adobe). Во
Ага, большинство - использует (включая, например, Adobe). Вот наверное C1 - исключение, ну так и камер сильно меньше поддерживает.
Надо будет, как руки дойдут, сделать несколько бинарных сигнатур из тамошних таблиц. Может быть и в C1 найдутся следы.
Тестирование, кстати, несложно автоматизировать.
<i>Дык написать-то не проблема</i> На "160 камер" ? Или на
Дык написать-то не проблема
На "160 камер" ? Или на одну ?
Форматов там все же не 160, скорее всего. А вот протестиро
Форматов там все же не 160, скорее всего.
А вот протестировать это - да, проблема большая.
Форматов там - не 160. Но вот матриц CAM - XYZ - 180 штучек
Форматов там - не 160. Но вот матриц CAM - XYZ - 180 штучек.
А в детекторе камер - 1200 строчек, не считая того детектора, который TIFF разбирает, там еще 980
Не, работа проделана гигантская и я сильно сомневаюсь, что ее можно за разумное время повторить.
>>>>Не удивлюсь, если он регенерирует к утру. Ну и как? Исин
>>>>Не удивлюсь, если он регенерирует к утру.
Ну и как? Исин жив? :)))))))))))
Не удивила, а скорее умилила попытка Dave Coffin усидеть на
Не удивила, а скорее умилила попытка Dave Coffin усидеть на двух стульях: заставить dcraw работать как с lcms, так и без неё. Вылилось это в 2 не пересекающихся пути преобразования цветовых пространств: convert_to_rgb(), использующая матрицу rgb_cam (считается в adobe_coeff()); и "CMS-way", - средствами lcms (apply_profile()), используется, если явно указан профиль (хотя бы входной).
Имхо, всё можно было бы упростить, если использовать для этого только lcms с генерацией профиля "на лету", по таблицам, если он не задан явно...
На самом деле, я не согласен. Во-первых, lcms появилась позж
На самом деле, я не согласен. Во-первых, lcms появилась позже dcraw и прикручена потом (сбоку).
Во-вторых, lcms - это далеко не подарок в смысле точности (см всю подборку прямо в этом блоге: http://blog.lexa.ru/tags/cmm )