My goal is to create a C/C++ library that can read, understand and
potentially modify Canon .CRW and .CR2 files. The programs contained
herein are for demonstration purposes.

The work is very rough, but it is showing results. There are several
things that you can help with.



You can help in many ways:

== Testing

  If you find a bug, send a good, decent report. A raw file will also
  help.


== Reverse engineering:

* Decoding tags, particularly for cameras I don't have (I
  only own a 20d).

  In particular, for the 20d the following TIFF record tags are
  unknwon:

   {0x0003,  "Canon tag 3 Unknown 1 (0x5028 in CRW)"},
   {0x000e,  "Canon tag e"},
   {0x0010,  "Canon tag 10"},
   {0x00aa,  "Canon tag aa Unknown 14 (0x10aa in CRW)"},
   {0x00c0,  "Canon tag c0 Unknown 11 (0x10c0 in CRW)"},
   {0x00c1,  "Canon tag c1 Unknown 12 (0x10c1 in CRW)"},

   {0xc5d8, "Unknown TIFF record d8"},
   {0xc5d9, "Unknown TIFF record d9"},
   {0xc5e0, "Unknown TIFF record e0"},


== Testing

* We need regression testing. Otherwise we don't know when something gets broken.
 
* We need testers in different architectures, particulary 64 bit architectures.

== Packaging

* ANybody who knows how to create .RPMs?

== Programming

* Extending the programs supplied. Some ideas:

  * Continue the porting from C to C++ (the code is a mess as it
    stands). My goal is to have a parsing class that can be
    instantiated for any specific use.

  * Continue replacing variables with architecture independent ones
   (u_int_32 instead of unsigned int)

  * Add the textual descriptions for more of the data being dumped

  * Add command line options to specify the fields to dump, and the
    format to dump it (like the exif perl tools). See dcrawext for an
   example of the use of getopt.
 
  * Create a program that can alter the following fields:

    - Comment

    - Author

  * Port David Coffin's dcraw to these libraries and in the process
    cleanup his code, removing anything that is not CR2 or CRW related.

  * For CR2 code needs to be written to properly display some of the
    complex tags, such as Custom Functions.

  * Support for internationalization

  * There need to be support for loading important data into memory
    and then postprocess it. Currently data is thrown away once it has
    been read. The infrastructure is already there.

== GUI

  * Create an GUI that uses this library to display the
    metadata. Options are GNOME, KDE, TK/Tcl, etc.

== Database dump of metadata

  * Use this libraries to dump the metadata of files inside a
   directory in a Database/Spreedsheet readable format. Do this
   recursively.

== Documentation

  * We need better documentation of the format. Should we use a wiki?



