LibRaw 0.14 Alpha
По сложившейся традиции, анонсирую тут новую major версию LibRaw, которая пока существует в альфа-варианте.
Скачать ее можно в обычном месте, почитать формальный Changelog там же, а тут хочется рассказать об изменениях человеческим языком.
До сего момента жизнь в LibRaw была устроена просто: открыл файл (LibRaw::open()), распаковал (LibRaw::unpack()), если своего постпроцессинга нет, то попользовался нашим (LibRaw::dcraw_process()). Если какие-то параметры поменялись, то все сначала, open, unpack и так далее.
Плюс этого подхода в том, что все варится в одном буфере, и распаковывается сразу куда надо и демозаика сразу in-place и все остальное - тоже.
Минус - тоже понятно какой: поменял ББ, даже в интерактивной программе и .... опять надо распаковывать RAW, а скажем в кэноновских CR2 тамошний Хаффман (lossless JPEG) устроен так, что хрен распараллелишь его распаковку. И секунда-две только на 30-мегабайтный CR2 - просто в природе вещей.
Что делаем? Правильно, меняем память на скорость.
Начиная с 0.14 байеровские данные распаковываются в один буфер, а весь постпроцессинг идет в другом. Для байеровских камер это penalty по памяти в 25% (40Mb для 20-мегапиксельной камеры), зато счастье велико есть. Для не-байеровских камер потери больше (вдвое), но там и кадры, как правило, небольшие (sRaw - 3-10 мегапикселов, фовеоны - 4Mpix), а владельцы Sigma SD1 или multi-shot задников могут и пару гигабайт памяти докупить.
Смотрим дальше: современные мониторы - это 2, максимум 4 мегапикселя. Современные камеры - меньше 10Mpix осталось только в камерафонах. Следовательно, задачи показать картинку целиком в масштабе 1:1 просто нет, не влезает.
Что предлагается (разработчикам Raw-конверторов и прочих тулов обработки RAW):
- Для показа всего изображения используем "половинный" размер (half_size в терминах LibRaw). Уже текущая альфа делает в этом режиме постпроцессинг 16-мегапиксельной картинки за 220 миллисекунд (на быстром десктопе, да) и это уже почти приемлемо. Там еще есть куда расти разика в два, а может и три без программирования на ассемблере.
- Показ 1:1 делаем в отдельном окошке, размером скажем 200x300 и уже со всеми понтами: полноценная интерполяция, highlight recovery и тому подобное. Для указанного размера полноценную интерполяцию получается сделать за 11msec, а вместе с highlight recovery - за 13, то есть обновлять данное окошко при пользовательском помавении мышью со скоростью кадров 25-30 в секунду - вполне возможно.
- Ну а финальный рендеринг делается, скажем, в фоне в отдельном потоке. Будет он занимать 3 секунды или 15 - без разницы (для HL-recovery скорее 3, для всяких Wavelet-denoise - скорее 15).
С пользовательской же точки зрения, если вы используете не LibRaw, а прилагаемые к ней утилиты (dcraw_emu) разницы никакой нет. Ну местами стало побыстрее (но на фоне распаковки - незаметно), ну починился crop для FujiCCD.
Для желающих принести пользу обществу: берете (новый) пример postprocessing_benchmark, загоняете его в профайлер и начинаете чинить ускорять то, что из dcraw_process() зовется. Будет польза.
Авторам же RAW-конверторов я рекомендую начинать потихоньку переход к новому интерактивному миру. Потому что интерактивность - это хорошо.
Comments
>> Авторам же RAW-конверторов я рекомендую начинать потихонь
>> Авторам же RAW-конверторов я рекомендую начинать потихоньку переход к новому интерактивному миру. Потому что интерактивность - это хорошо.
Ну, какбэ, давно пора :) Так скоро, глядишь, и до 1:2, 1:4, 1:8 временных размеров доберутся, и скорость кручения ползунков будет как в лайтруме.
Да там и без уменьшения размера можно получить еще полпорядк
Да там и без уменьшения размера можно получить еще полпорядка точно, а порядок - не знаю, но думаю что да.
Просто надо потратить с неделю и, честно говоря, мне влом т.к. тамошний постпроцессинг развивать не хочется, там систему менять надо.
В LR конвертация не интерактивная. Интерактивная там работа
В LR конвертация не интерактивная. Интерактивная там работа с полноцветным битмэпом с гаммой 1.0
Whatever. Лишь бы пользватель в реалтайме видел эффект от п
Whatever.
Лишь бы пользватель в реалтайме видел эффект от ползунков, а при сохранении хоть 128-битное цветовое пространство с плавающим двоеточием используйте...
Они просто не нужны, эти ползунки. Обман трудового народа. В
Они просто не нужны, эти ползунки. Обман трудового народа. В Фотошопе есть то же, но больше и лучше.
А народ и не знал :) Остается понять, куда девать тех, кому
А народ и не знал :)
Остается понять, куда девать тех, кому для 95% фото достаточно тех ползунков, что есть в LR, при этом нет желания лезть в фотошоп по причине выигрыша в скорости работы, потоковой обработке и месте на диске.
Это не совсем так. Некоторые
Это не совсем так. Некоторые ползунки в ACR (и, следовательно, в LR) работают даже до де-баера, не говоря про гамму. Теоретически в PS это повторить можно, но гораздо более трудоёмко.
А есть к LibRAW какой-то фронтенд под Win?
А есть к LibRAW какой-то фронтенд под Win?
Есть digiKam, есть еще забыл фамилие, грек какой-то делает.
Есть digiKam, есть еще забыл фамилие, грек какой-то делает.
Но вы этого не хотите, честное слово!
Этого - да, уже видел :( А что же я хочу, если маки я не лю
Этого - да, уже видел :(
А что же я хочу, если маки я не люблю (да и для остальной работы не подходят), а в darktable, если я правильно понял их анонсы, либрав использоваться перестал?
А зачем вам постпроцессинг от LibRaw? Ничего в нем нет хорош
А зачем вам постпроцессинг от LibRaw? Ничего в нем нет хорошего, если уж совсем честно. Его используют там, где нет желания (или возможности) сделать свое, а вообще задача библиотеки - не постпроцессинг, а просто распаковка RAW в байеровские данные. Постпроцессинг "достался на халяву" от dcraw (+ волонтеры, конечно), но я не считаю что там все сколько-нибудь хорошо с точки зрения фотографа.
Другой вопрос, что более-менее весь опенсорс такой, диковатый. Оговорюсь сразу - по состоянию на полгода назад; в darktable, rawstudio и rawtherapee большие подвижки с точки зрения программирования (но, увы, не фотографии).
Не, постпроцессинг ладно, я хочу как раз распаковку от libra
Не, постпроцессинг ладно, я хочу как раз распаковку от libraw, но в законченном приложении вроде лайтрума (или хотя бы с интерфейсом уровня равшутера), а не ручками в тифф конвертить, чтобы потом его где-то ещё допиливать.
Я так <s>подозреваю</s> надеюсь, что распаковка должна везде
Я так
подозреваюнадеюсь, что распаковка должна везде давать одинаковый результат.Только что толку от этих данных, по одному каналу на пиксель, для "нормального человека"?
Э.. Если я правильно помню ченджлоги, то есть большая разниц
Э.. Если я правильно помню ченджлоги, то есть большая разница с точкой черного, у каждой софтины потом накладываются разные тоновые кривые и т.д. И все это каждый раз неправильно. А еще демозаика везде разная, это ведь относится к распаковке?
ну и мой любимый баг - проявка солнца - http://knutov.livejournal.com/1467900.html
Все что вы перечислили, кроме, быть может, точки черного, эт
Все что вы перечислили, кроме, быть может, точки черного, это в моей/LibRaw терминологии - именно постпроцессинг.
С точкой черного все сложнее, где-то она в тегах сидит и не забалуешь, где-то просто чистый ноль (камера вычла) и очень для немногих камер (но включая Canon) там есть реальное место для подвига.
С пересветами плохо везде. Я делаю dcraw -H 1 -o 0, потом о
С пересветами плохо везде.
Я делаю dcraw -H 1 -o 0, потом обработку пересвета в фотошопе руками, путём накладывания слоя с нужным цветом.
ну почему равшутер то делает все хорошо из коробки? И исходя
ну почему равшутер то делает все хорошо из коробки? И исходя из того что он делает - нет там пересветов и данных достаточно.
А почему бы не встрять в
А почему бы не встрять в darktable один из проектов?
Порезались псевдотэги. Очень
Порезались псевдотэги. Очень злой движок. (Я darktable обрамлял типа-тэгами imho )
Движок злой, он знает список
Движок злой, он знает список разрешенных тегов, а больше - нини.
Тут такое дело -
Тут такое дело - RAW-конвертор это не только код и алгоритмы, но еще и данные (например, профили камер). Я такими данными не владею/не распоряжаюсь и привнести их в открытый проект не могу. А значит и смысла нет.
Это одна из причин, но важная.
Я вот, кстати, всё давно хотел спросить. То есть, я сам проб
Я вот, кстати, всё давно хотел спросить. То есть, я сам пробовал, но у меня никак не получилось, то-ли я тупой, то ли это какой-то фокус.
Как можно из кода dcraw взять XYZ координаты primaries камеры? Чтобы их потом засунуть в icc файл.
В icc файле можно задавать точку белого, координаты для R, G и B точек, и точку черного. Черное на 0, белое, допустим, 100-100-100 будет.
Ну, вот у меня никак не выходит получить такой результат, что с параметрами "-o 0", а потом применением icc файла получалось бы тоже, что с цветами по-умолчанию.
Насколько я помню, это imgdata.color.cam_xyz Во всяком случ
Насколько я помню, это imgdata.color.cam_xyz
Во всяком случае, что-то такое оттуда изымает DNGConvertor (который KDE-шный), кладет в DNG-шный color matrix и получается счастье. Для большинства камер - это из builtin-таблицы в dcraw, за исключением тех камер, которые цветовые данные кладут прямо в Raw.
За давностию лет я мог перепутать название поля по памяти, но смысл именно такой, лучше посмотреть в исходники dngconverter.
Штатной утилиты, которая бы доставала ЭТО оттуда нет.
Я имею ввиду, сам код dcraw
Я имею ввиду, сам код dcraw
Ну так там таблица в функции adobe_coeff() или как-то так. Т
Ну так там таблица в функции adobe_coeff() или как-то так. Туда передается maker/model и, собственно, внутри заполняется cam_xyz[]
Это я понял. Я не понял, какими значениями можно заполнить
Это я понял.
Я не понял, какими значениями можно заполнить .icc файл.
То есть, то-ли я чего-то не понимаю, то-ли какая-то ерунда, но когда я тупо из этой матрицы переношу цифры в поля .icc файла, получается какая-то ерунда. В смысле, этот файл даёт дикие ужасные цвета, совсем не похожие на нормальные.
Raw Therapee не использует LibRaw?
Raw Therapee не использует LibRaw?
Насколько я знаю, нет. Они патчат dcraw сами, где-то зимой
Насколько я знаю, нет.
Они патчат dcraw сами, где-то зимой хотели переходить на LibRaw, но вроде забили.
Не знаешь -- как проверить целостность DNG?
На сколько въедливо libraw распаковывает DNG?
У меня тут есть подозрение, что часть файлов побилась. Но отсмотреть все 10K+ сил нет, конечно.
У DNG 1.2+ есть MD5 от контента, но у меня только 1.1, с его невнятным RawDataUniqueID который в моём случае не MD5 и не SHA1 (хотя и 16 байтов).
Какие шансы, что libraw заметит ошибки?
Не встречалось ли тебе описания (ВДРУГ!) что может быть в RawDataUniqueID?
Там lossless jpeg в данных,
Там lossless jpeg в данных, проверки целостности в данных нет.
Т.е. только выгнать в tiff и глазами.