LibRaw 0.13-Beta1

Отметим завершение каникул анонсом LibRaw 0.13-Beta1.

Сегодня на экране:

  • Ускорение распаковки хаффмана за счет более правильной буферизации (а для файлов .CR2 - еще и за счет правильного пред-расчета смещений). В результате LibRaw::unpack() работает раза в полтора быстрее для .CR2 и на 20-30% быстрее для других подобных форматов (NEF, packed DNG).
  • Масса новых плюшек в demosaic packs (похоже, пора их переименовывать в feature packs):
    • Шумопонижение разных видов (подавление banding, подавление импульсного шума, выравнивание зеленых каналов).
    • Новый, более правильный, алгоритм автоподавления хроматических аберраций.
    • Правильная экспокоррекция с возможностью сохранять детали в светах (аналог compressed exposure в RPP).
    • Ускорение медианных фильтров при помощи OpenMP
  • Ну и, естественно, все фиксы из ветки 0.12
Все это благолепие - скоро в digiKam (собственно, кроме экспокоррекции - оно уже там).

Comments

Не могли бы Вы рассказать о рабочем процессе с применением LibRaw, ну или о Вашем рабочем процессе.

С уважением Юрра.

LibRaw - это в первую очередь тул для разработчиков, а во вторую - для копателей в потрохах у RAW.
Наверное, можно и к процессу приспособить, если речь идет о батч-обработке многих однотипных кадров (типа мультфильма).

А рабочий процесс у меня лично - на RPP.

Спасибо, с компиляторами я дружу, а вот приспосабливать и возиться с LibRaw нужны какие либо основания, я работаю с CameraRaw и мне интересно, есть смысл погружаться в эти потроха или нет. Спасибо за внимание :-)

LibRaw - это не RAW-конвертор, это способ снять с автора конвертора головняк по разбору форматов.

То что некоторые используют и постпроцессинг тамошний (который там скорее для галочки) - это их проблема....

И вас с наступающим.

Я тут случайно заглянул унутро void CLASS ahd_interpolate(). Не знаю как шедулятся треды в приложении, но вот в этом куске не могут ли случиться трудно отлавливаемые глюки (dcraw_cbrt объявлена как static) при вызовах из разных тредов:

if(dcraw_cbrt[0]<-0.1){
for (i=0; i < 0x10000; i++) {
r = i / 65535.0;
dcraw_cbrt[i] = 64.0*(r > 0.008856 ? pow((double)r,1/3.0) : 7.787*r + 16/116.0);
}
}

Ну да, в теории можно попасть на ситуацию, когда один поток начал эту таблицу инициализировать, а второй по ней уже фигачит.

Переделаю инициализацию в обратную сторону, спасибо.