Skip to Content

Искусство программирования

Потихоньку ковыряю исходники 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 )

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <s> <i> <b> <blockquote>
  • Lines and paragraphs break automatically.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <ruby>. The supported tag styles are: <foo>, [foo].
  • Images can be added to this post.

More information about formatting options



.