Записки разработчика RAW-обработчика
Поправил сегодня серьезную багу в LibRaw, что заставило меня призадуматься о жизни. Если в подробностях, то:
- У некоторых мыльниц (ряд моделей Nikon, Pentax, Samsung, Casio) режим RAW включается через инженерное (скрытое) меню.
- В этих RAW нет никаких метаданных, а только данные с сенсора, обычно просто дамп байтов в каком-то некомпрессированном формате.
- Метаданные сохраняются в JPEG-файле с обычным снимком, который записывается рядом (с тем же именем файла и другим расширением или же с другим номером файла).
- В dcraw, а оттуда и в LibRaw есть поддержка этого составного формата: вычисляется имя файла, открывается, загружается EXIF.
И вот эта вот поддержка - категорически не работала. Даже хуже: наличие JPEG с метаданными приводило к неправильной распаковке собственно RAW, а отсутствие этого файла - к падениям.
Эта ошибка была начиная с LibRaw 0.0 и до сегодняшнего дня. И ни одна зараза - не заметила. Несмотря на то, что LibRaw уже несколько месяцев используется в digiKam и Krita, а у этих программ должны быть десятки тысяч пользователей, если не больше.
Надо сказать, что нужность этого режима у меня всегда вызывала сомнения. С одной стороны, это нужно для нескольких десятков камер. С другой - камеры все какие-то старые (кроме Samsung S85). С третьей - мне так и не удалось найти ни одного примера такого файла, поэтому это место оставалось неоттестированным.
А оттестировал я его сделав синтетический пример - RAW-данные от одного кадра Optio S4, JPEG (с балансом белого и прочим) - от другого. Тут то оно и вылезло.
И честно говоря, чешутся руки превратить эту багу в фичу: убрать нафиг этот режим, раз он реально никому не нужен. Ибо он порождает массу ненужных проблем, например необходимость чтения из внешнего файла (потока данных) не дает возможности удобно интегрироваться в приложения, читающие поток, а не файлы.
Comments
А нельзя ли туда поставить типа заглушки такой, что мол, &qu
А нельзя ли туда поставить типа заглушки такой, что мол, "есть такая (экспериментальная) фича в полуработающем состоянии. Доводить до ума кажется нецелесообразным, но выбрасывать жалко, поэтому ежель кому действительно надо - обращайтесь, подумаем что можно сделать"?
Ну я с 8-го февраля прошлого года был уверен, что она работа
Ну я с 8-го февраля прошлого года был уверен, что она работающая. Но теста на это место не было. Сегодня сподобился сделать тест - и она опять работающая. Там не хватало одной строчки кода.
в режиме чтения потока дисаблить эту фичу
в режиме чтения потока дисаблить эту фичу
Ну оно так примерно и делается в новой версии (текущая вообщ
Ну оно так примерно и делается в новой версии (текущая вообще умеет только filename принять): появляется объект типа LibRaw_abstract_datastream, у него метод capabilities(), который возвращает то, что данный поток умеет. И в зависимости от capabilities - поддерживается этот внешний JPEG и еще одно место в распаковке данных от Sony (там нужна другая капабилитя).
Но это - это такой софтверный овердевелопмент на пустом месте, если бы нужна была только одна капабилитя для Sony - я бы ее спрограммировал другим способом (и, наверное, так и сделаю чуть попозже...)
картинка с тараканами суперская! :-))
картинка с тараканами суперская! :-))
Две ноги лишние у обоих.
Две ноги лишние у обоих.
Это не ноги, это руки.
Это не ноги, это руки.
Всё равно лишние :-)
Всё равно лишние :-)
ну так: картинка с багой
ну так: картинка с багой
нет, это фича
нет, это фича
<b>неуместный вопрос</b><br/> уже существует какой-нибудь ра
неуместный вопрос
уже существует какой-нибудь рабочий продукт использующий LibRaw?
<b>Re: неуместный вопрос</b><br/> digiKam, Krita и что-то ещ
Re: неуместный вопрос
digiKam, Krita и что-то еще в KDE
Вот тут более-менее полный список
http://blog.lexa.ru/2008/09/16/libraw_055_i_libraw_060_beta2.html
<b>Re: неуместный вопрос</b><br/> угу спасибо, посмотрю
Re: неуместный вопрос
угу спасибо, посмотрю
<b>Re: неуместный вопрос</b><br/> Если тебя интересует качес
Re: неуместный вопрос
Если тебя интересует качество процессинга, то смотреть туда смысла нет.
<b>Re: неуместный вопрос</b><br/> вот так сразу мордой оПсто
Re: неуместный вопрос
вот так сразу мордой оПстол ;)
Убрать, я считаю. Тем более оно всё равно не работало :-) И
Убрать, я считаю. Тем более оно всё равно не работало :-)
Или, как вариант, вынести в отдельную утилиту, склеивающую нужную информацию воедино: те люди, которые включают raw у мыльниц через инженерное меню, явно простых путей не ищут, и вариант "перед конвертацией необходимо приклеить exif к raw-файлу при помощи такой вот утилиты" должен быть воспринят в целом нормально.
Я так понимаю, что "те люди" используют raw2dng (и
Я так понимаю, что "те люди" используют raw2dng (или как-то так называющуюся утилиту) и имеют счастье.
Какого-то другого универсального формата RAW нету (DNG тоже не сахар, но хоть что-то)
Убрать когда только-что положил в это место душевные силы с целью починки - обидно как-то. Тем более, что оно уже поехало в KDE интегрироваться
Вот поэтому и жалоб не было. То есть те кто пробовали - убеж
Вот поэтому и жалоб не было. То есть те кто пробовали - убеждались что не работает, думали "не судьба" (официально-то такого формата вообще не существует) и шли проторенной дорожкой.
А есть ещё опасение, что поскольку фича довольно маргинальная, тестироваться будет редко, и <i>уже</i> вызывает потребность делать хитровывернутый код, через пару лет она опять сломается, просто потому что вот-тут-вот переписали заново, а про эту фишку забыли. И самое обидное - этого опять никто не заметит :-)
Ну в предшествующих версиях digiKam (которая внешнюю утилиту
Ну в предшествующих версиях digiKam (которая внешнюю утилиту dcraw звала) - оно работало скорее всего.
Тут скорее дело в другом - несмотря на то, что это все мыльницы (и их, типа, много), реально использующих такие хаки крайне мало, потому я и примеров не смог найти.
С CHDK оно не так - примеров сколько хочешь, у меня почти под все нужные мне камеры есть (кроме Canon A600, но это уж больно старая машинка)
Но вообще, мнение понятное. Я в районе версии 0.8 попрошу Ж
Но вообще, мнение понятное.
Я в районе версии 0.8 попрошу Жиля (который libkdcraw делает из LibRaw) по-дефолту фичу выключить и проверить реакцию народа :)
Оффтопик. О SSD/i-RAM http://dansdata.blogsome.com/2009/01
Оффтопик.
О SSD/i-RAM
http://dansdata.blogsome.com/2009/01/26/the-shifting-sands-of-ssds/
<i>Эта ошибка была начиная с LibRaw 0.0 и до сегодняшнего дн
Эта ошибка была начиная с LibRaw 0.0 и до сегодняшнего дня. И ни одна зараза - не заметила. Несмотря на то, что LibRaw уже несколько месяцев используется в digiKam и Krita, а у этих программ должны быть десятки тысяч пользователей, если не больше.
Алексей, LibRaw используется только в нестабильных версиях digiKam, которыми кроме разработчиков практически никто не пользуется. На днях вышла rc1 версии 0.10.0, а финальная 0.10.0 ожидается только в марте. Вот раньше марта отзывов ждать и не стоит :)
Это так осенью было. С тех пор поменялось. Сейчас LibRaw 0.6
Это так осенью было. С тех пор поменялось.
Сейчас LibRaw 0.6.x - в стабильных ветках KDE3 и KDE4, а вот 0.7-я версия - в девелоперских.
Во всяком случае, Жиль мне на анонсы в 0.6-й версии отвечает "backported to KDE3 and KDE4"
Могу сказать вам ка пользователь формата рав через стороннюю
Могу сказать вам ка пользователь формата рав через стороннюю прошивку фотика - это очень полезная вещь! Те кто не сталкивался с этой проблемой - этого просто не поймут! Было бы просто замечательно, если бы вы сказали, как воспользоваться данной функцией в dcraw?
Спасибо
Так так и пользоваться - подавать dcraw этот файл и до кучи
Так так и пользоваться - подавать dcraw этот файл и до кучи с ним jpeg
Если dcraw -i -v нормально показывает выдержку и прочие метаданные - значит все работает.
Any well documented bug becomes a feature (C).
Any well documented bug becomes a feature (C).