The Life of RubenV - Oranje als een perzik!
Summer of Code 2009

GSOC 2009 is al drie weken gedaan en ik heb er nog steeds niet over geblogd. Foei! Deze zomer heb ik gewerkt aan RAW handling en processing in F-Spot. Op lange termijn is het de bedoeling om een volwaardige image processing tool te worden, zoals Adobe Lightroom. Met mijn GSOC project was het de bedoeling om een stapje dichter in de buurt van dat doel te komen.

Er zijn drie belangrijke zaken die hiervoor opgelost moeten worden:



RAW decoding and loading
RAW files worden over het algemeen opgeslaan in ongedocumenteerde, proprietary, formaten, die vaak zelfs verschillen naargelang he cameramodel. Deze files decoderen was iets dat F-Spot nog niet deed. Tijdens deze zomer heb ik de image loading infrastructuur van F-Spot refactored naar een nieuw model, waarin ik een nieuwe RAW loader heb ingehaakt, gebaseerd op LibRaw.

Dit betekent dat F-Spot elk type RAW file dat ondersteund wordt door dcraw (waarop LibRaw gebaseerd is) kan laden en weergeven. Zowat alle types dus.

RAW processing
Een grote taak bij het behandelen van RAW files is processing: de pure sensor data omzetten naar RGB pixels, witbalans en gamma correcties uitvoeren, ruis-onderdrukking etc. Dit gebeurt allemaal in een hoge bitdiepte (10, 12 of 14 bit), voor optimale kwaliteit. Hiervoor waren drie opties: de dcraw routines herbruiken, GEGL and zelf wat ineenhacken.

De dcraw routines herbruiken was een goede manier om te ontdekken wat voor een horror de dcraw code wel niet is. Veruit de meest onleesbare bizarre code die ik al gezien heb. Een bijkomend nadeel is dat deze routines niet herbruikbaar zijn voor JPEG, wat betekent dat we zaken als witbalans dubbel zouden moeten implementeren.

Plan B was het gebruik van GEGL, de geweldige image pipeline die in The GIMP gebruikt zal worden. Veelbelovend, maar nog veel te traag om bruikbaar te zijn (minuten om een enkele RAW file te laden).

Plan C was zelf wat knutselen. Dit zou onder andere inhouden dat GdkPixbuf aangepast moest worden om hogere bitdepths aan te kunnen en een berg complexe algoritmes schrijven.

Uiteindelijk heb ik de wijze beslissing gemaakt om geen pipeline te bouwen en me op de andere taken te richten. Voorlopig laat ik LibRaw de initiele processing doen, tot het punt waarop we een RGB afbeelding hebben, die dan doorgegeven wordt aan F-Spot voor verdere processing.

Repeatable (non-destructive) editing
De derde taak was repeatable editing. Om de volledige Lightroom experience te kunnen bieden, met alle knoppen en sliders om aan te passen, hebben we een repeatable editing framework nodig. Zij die F-Spot wat kennen weten dat elke edit destructief is: elke operatie creeƫrt een nieuwe JPEG, met het bijhorende kwaliteitsverlies. Ik heb de eerste versie gebouwd van een non-destructief image processing framework en heb alle kleuroperaties er naar omgezet.

Het wil zeggen dat we gaan van:
original --> editA --> editB --> editC

naar:
original + adjustment settings --> result

Wat goed is, want elke pijl betekent mogelijk kwaliteitsverlies.

Fish!
Paarse vis? Groene vis? Experimenteren toegestaan!


En nu?
Deze code is nog niet in de master branch, er zijn namelijk nog enkele zaken die opgelost moeten worden. Wie het wil proberen (denk er aan: backups maken, de database wordt aangepast!) kan het vinden in de libfspotraw branch op Gitorious. Alerte lezers hebben gemerkt dat we het einddoel nog niet bereikt hebben, wat waar is, maar het is een eerste stap in de juiste richting. Meer informatie en details kunnen gevonden worden in mijn final report email.

Ondertussen ben ik beginnen hacken aan een andere belangrijke F-Spot issue. Maar jullie zullen moeten wachten tot ik terug ben van Lissabon (ik vertrek morgen en kom 18 september terug) voor meer details.

f-spot, gnome, mono, summerofcode | Wednesday 9 September 2009 17:34 | Reacties (1)
The author:
RubenV
Ruben Vermeersch
Computer Scientist (Software Engineering), GNOME Hacker, PhD Researcher, Photographer, Earthling
More info | Tweets
You are here:
I speak:
More:
The past: