Loud ramblings of a Software Artisan

Thursday 3 May 2018

libopenraw 0.1.3

I just released libopenraw 0.1.3. It has been a year since the last release. It mostly add new cameras.

I already have a branch for a new feature that will introduce Rust, for the next release.

Sunday 27 November 2016

libopenraw 0.1.0

I just released libopenraw 0.1.0. It is to be treated as a snapshot as it hasn't reached the level of functionality I was hoping for and it has been 5 years since last release.

Head on to the download page to get a tarball.

Several new API, some API + ABI breakage. Now the .pc files are parallel installable.

Sunday 13 November 2011

libopenraw 0.0.9

I just did a quick release for libopenraw 0.0.9. It just include a few fixes and enhancements cherry-picked from master. There is much more going into master including a serious API breakage. If you package libopenraw in a distro, I encourage you to pick this one up.

NEWS - tar.bz2 - gpg signature

Friday 15 May 2009

libopenraw 0.0.8

Another quick release: libopenraw 0.0.8, because I found a crasher when updating gegl RAW support.


  • includes missing for gcc 4.4
  • Fix crash in or_get_file_extensions()

Get it !

Tuesday 28 April 2009

libopenraw 0.0.7

Just a quick note to mention that I released libopenraw 0.0.7 to fix a nasty memory leak. I recommend the upgrade.

Saturday 28 February 2009

libopenraw 0.0.6

Last week-end I silently released libopenraw 0.0.6. It was almost a year since I hadn't done a release, and it was long overdue.

Amongst the changes are:

  • Relicensed to LGPLv3 or later
  • NEF decompress
  • GdkPixbuf loader
  • Various fixes and new APIs

Wednesday 27 August 2008

Hackweek, etc.

For hackweek, I have been working on implementating the "rendering" in libopenraw. This mean I need to extract metadata for the various parameters need for the demosaic and color correction, including linearization tables[1] and camera to XYZ matrices. For this I'm trying to stick to the DNG data model as it likely already abstract the different formats.


[1] not all files needs that

Tuesday 26 August 2008

Provo, etc.

I'm at the Novell offices in Provo, UT for hackweek. The YOW -> DTW -> SLC flight was uneventful. There will be attendance at the Utah Open Source Conference 2008 as well.

What are my plans for hackweek? Some libopenraw work in order to have a version releasable with more and more features. If that release can be usable to actually render RAW files, then it will be great. So far I have committed some changes to the test suite and and fixed the detection by content.

Saturday 26 July 2008


During my demo at GUADEC, I only showed JPEG images. But RAW support is supposed to be central to Niepce Digital. Here we go. Leveraging libopenraw and GEGL, I now have basic RAW demosaicizing working. It needs several adjustments, but it is there, much better than what I achieved before.


GEGL needs to be build with the "workshop" (see configure). I already have updated my packages for openSUSE. The code will soon be pushed to SVN.

Thursday 24 July 2008

Guadec slides

Just a quick note to let people know that I have put my slides online. They are linked from lgo (in OpenDocument).

I'll provide PDF and HTML versions soon.

Wednesday 16 July 2008


A while back I posted and teaser, but that was all until GUADEC where, with 3 lightning talk I could present the stack and and application I'm working on, on my copious spare time(tm). Let me introduce you to Niepce Digital. For what Niepce means, there is Wikipedia. For what are the plans, read on.

Niepce Digital is meant to be an application for digital photography that will allow end to end management of the workflow, starting with the acquisition from the camera to the final printing or publishing. For those who chose the easy way it is in the same idea than Adobe Ligthroom or Apple Aperture. I have had some concept written down on paper for over 3 years, before these applications were unleashed, I just didn't manage to make anything out of it. And of course it is Free Software, that goes without saying (licensed under GPLv3 or later).

Design goal

From a development point of view, the design goal is to:

  • try to provide, leverage or reuse infrastructure. In that case this mean using Exempi, libopenraw and GEGL, and making sure the whole processing pipeline can be reused. There is hope with GEGL being used by Gimp that some of the image processing can really be shared. I started Exempi especially with that application in mind, and I'm still developing libopenraw in parallel.
  • try to make it right: don't cut corner when implementing be rather take the time to do the right thing so that in the future it doesn't have to be redone. Of course this means that the initial shot will take more time but in the end the benefit is that things will be easier.
  • try to do things progressively but surely. Better have a well working limited set of feature than a half working extended set of features.
  • try to be modular so that it is easy to implement new modules.

Feature set

The feature set I wish to see implemented is quite extensive, and the application will be divided in "modules". The first one, the library is meant to manage the collection of pictures, add metadata, etc. The second module, darkroom, is meant to perform the image editing. Image editing is not like a full blown version of GIMP, but rather a limited and most used set: image adjustements, crop, straighten, dust removal, etc, all performed in a non-destructive mode. This will be for the first milestone, with maybe a few upload modules to export to you favorite image hosting.

Digital camera RAW files will be first class citizen, and actually they should provide the best result, and not be harder to use than JPEG. Metadata will be centered around XMP for maximum interoperability. And of course, color management will be.

This first milestone is quite ambitious, and having a very good output quality will already an achievement.

As a second milestone will come web gallery generation (static HTML) and printing. That last part might actually be a lot of work, including vertically down the stack.

Now what?

I have setup for a while a project on GNA to host the source code and the repository. You can grab the C++ source code and play with it.

But there won't be a release for a while. See the first milestone above.

Saturday 3 May 2008

demosaic and pixbuf

I just committed some code in libopenraw that allow displaying digital camera RAW files in eog (or anything else using GdkPixbuf). The colors and the gamut are still off, that's because I only perform the demosaic.

Just to be clear, I haven't changed a single line of code in eog. It is the stock version from openSUSE 10.3.

Tuesday 26 February 2008

libopenraw 0.0.5

Just released libopenraw 0.0.5.

Here is the announce mail.

Download it.

Friday 15 February 2008

Hack week

Long time no blog, mostly because I had nothing to say beside the usual rants.

This week at Novell it is hack week, and I decided to spend a good amount of time to put libopenraw into a better shape, mostly in the area of extracting and decompressing the CFA[1] data (the RAW data).

Recently I got my first major outside contribution for libopenraw as support for Minolta MRW files. Thanks Bradley, you rock!

So far this week I have done:

  • refactored and genericized the unpacking (12 bits to 16) as most RAW files have 12bits per channel and store it without padding in the file ("harder" to decode[2], but less space wasted). This code I wrote it for the Minolta MRW but end up being usefull to DNG and Nikon NEF
  • implemented an API to also obtain the CFA pattern. The CFA pattern describe the organisation of the CFA (Color Filter Array), mostly the order of the colors. Currently it only support RGB and 2 by 2 patterns. This data is required in order to perform the demosaic (ie convert the CFA to obtain a colorful RGB image)
  • enhanced the test suite to checksum the data (in order to check that we didn't break anything) and to check for the CFA pattern.
  • fixed various bugs needed to either go further or to that were actually bugs, like the unpacking that did fail because it was losing the last bytes of the buffer whose size was not multiple of 3.
  • started dealing with the Nikon mess. Nikon files are either uncompressed, packed with some weird padding (discard 8 bits if column % 10 == 9), or compressed in a lossy way. As of right now, only the uncompressed files are supported. Oh there is also a bug where NEF file from the D100 might be marked as compressed when they are not[3].

So far the file very well supported are:

  • Canon CR2 and CRW (not the CRW from the "hacked" firmware)
  • DNG (unless they are compressed, I need to support loading in tiles as I already have the lossless JPEG compression), and only with a number of bits per channel of 12 or 16. Strangely, the Leica M8 files seems to be 8 bits per channel.
  • Nikon NEF uncompressed (D1, D1X, D2X)
  • Minolta MRW (with the exception of the A200 for which I still miss a sample)


[1] Color Filter Array

[2] 12 bits is actually simplier than 14 or 10

[3] apparently some people did choose to compress, but it was very slow on the camera. I have to locate a sample.

Saturday 12 January 2008

Triple bill

Last night I did a triple release.

The openSUSE packages are being built as we speak.

Edit 01/13/08: I released Exempi 1.99.7 to correct the soversion problem mentioned below.