<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" 
   xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" 
   xmlns:html="http://www.w3.org/1999/html" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
<channel>
   <title>Regular Impressions</title>
   <link>http://doganov.org/blog</link>
   <description>Разпиляни мисли и впечатления на Калоян Доганов</description>
   <language>bg</language>
   <copyright>Public Domain</copyright>
   <ttl>60</ttl>
   <pubDate>Mon, 28 Jun 2004 00:24 GMT</pubDate>
   <managingEditor>kaloian@doganov.org</managingEditor>
   <generator>PyBlosxom http://pyblosxom.sourceforge.net/ 1.3 devel</generator>
<item>
   <title>CIFF parser</title>
   <guid isPermaLink="false">random/coreblog_98</guid>
   <link>http://doganov.org/blog/random/coreblog_98.xhtml</link>
   <description><![CDATA[

<p>Митко Миладинов преди време се сдоби с Canon Powershot G3 и не след дълго по сензорите на апарата се появиха мъртви пиксели.  Проблемът има чисто софтуерно решение като се интерполира стойността на мъртвия сензор от околните му събратя по цвят. Това беше и една от функциите на програмата <a href="http://www.cybercom.net/~dcoffin/dcraw/">dcraw.c</a> на Дейв Кофин. Неприятното е, че на изхода си dcraw винаги дава PPM-файл, а ние си искахме CRW (оригиналният недокументиран суров формат, използван във фотоапаратите Canon), само че със замаскирани мъртви пиксели. В началото на годината с Митко чоплихме този проблем няколко дни, но без резултат.</p>

<p>Тази вечер захраних тялото и душата си с ракия, цаца и сладки приказки. Настаних се удобно пред компютъра и се гмурнах в дебрите на CRW. Прекарах в упорито четене на изходния код на <a href="http://www.wonderland.org/crw/">libraw</a>. Няколко пъти криввах по грешна посока и губех доста време, докато се върна на правия път. Все пак CIFF-структурите, изграждащи CRW не са чак толкова сложно нещо, но поне малко документация да имаше... Бе то било същото като TIFF, с тия особености, че вътре наподобява директорийна структура с разни оптимизации по нея. Представете си например такава файлова система, в която за по-кратко съдържанието на файла може да се запази върху самия директориен запис, ако дължината на файла не надвишава 8 байта. Примерно. (В TIFF ограничението е 4 байта.)</p>

<p>С учебна цел пренаписах и сглобих на Питон нещо средно между parse.c и libraw (само в частта им за Канон). Първите лъчи на слънцето завариха новородения парсер на CIFF. Задача номер едно е изпълнена -- изчитам целия CRW в структури от данни. (Да живее модула <a href="http://python.org/doc/2.3.3/lib/module-struct.html">struct</a>!) Като страничен ефект моят парсер генерира XML-файл представящ всички CIFF-структури. Не беше нарочно -- просто след няколко часа пред конзолата не намерих по-ефективен начин за dump на вложени структури. (Да, не ползвам дебъгер и искам да виждам структурите си черно на бяло.)</p>

<p>Следващите задачи са:</p>

<p>- разкомпресиране на суровото изображение</p>

<p>- интерполиране на мъртвите пиксели</p>

<p>- компресиране на вече коригираното изображение</p>

<p>- сериализация на структурите обратно в CRW</p>

<p>Чакат ме вълнуващи моменти! :-)</p>

<p>След няколко часа ще дойдат моите колеги за да започнем да мятаме нашия проект. А аз дотогава ще взема да ударя наколко остри кафета в главата си...</p>
]]></description>
   <category domain="http://doganov.org/blog"></category>
   <pubDate>Mon, 28 Jun 2004 00:24 GMT</pubDate>
</item>
</channel>
</rss>
