Version: 3.0 (using KDE 3.5.5, Gentoo) Compiler: Target: i686-pc-linux-gnu OS: Linux (i686) release 2.6.19-gentoo-r5 KPhotoAlbum does not recognize the .erf files generated by the Epson R-D1. The files are not listed (and of course there are no thumbnails). My camera is set up so that no previews are stored in the file (for space savings), but that should be fine since dcraw deals with these files just fine.
Can you provide a sample image file or two?
The files are too big for creating an attachment to the bug (~9M). Anywhere else I can put them?
You can try to use any service listed at http://www.rapget.com/en/ . When you upload the file, please mail the URL to me (jkt@gentoo.org) and I'll post the files somewhere where people can easily download them.
File is available at http://dev.gentoo.org/~jkt/tmp/kde-bug-141877-digital00092-eps2029.erf and KPA indeed doesn't recognize it.
Created attachment 20533 [details] ImageManager-recognize-erf.patch Trivial patch that allows KPA to at least *see* the file. It still loads only a thumbnail from it for me, but that's a separate problem.
SVN commit 666157 by jkt: CCBUG: 141877 Recognize Epson R-D1 RAW format (.erf). Still no real support for it besides viewing thumbnails, though... M +1 -0 RawImageDecoder.cpp --- trunk/extragear/graphics/kphotoalbum/ImageManager/RawImageDecoder.cpp #666156:666157 @@ -70,6 +70,7 @@ QString::fromLatin1("raf"), QString::fromLatin1("rdc"), QString::fromLatin1("x3f"), + QString::fromLatin1("erf"), QString::null }; if (Settings::SettingsData::instance()->dontReadRawFilesWithOtherMatchingFile()) { static const QString standardExtensions[] = {
SVN commit 701359 by jkt: FEATURE: Use libkdcraw for RAW image processing instead of a bundled and outdated dcraw copy. Epson R-D1 RAW format (.erf) should be supported better... BUG: 130781 CCBUG: 141877 BUG: 145941 M +4 -0 ChangeLog M +8 -3 ImageManager/ImageLoader.cpp M +1 -2 ImageManager/Makefile.am M +9 -22 ImageManager/RawImageDecoder.cpp D ImageManager/parse.c M +1 -1 Makefile.am M +17 -0 configure.in.in --- branches/extragear/kde3/graphics/kphotoalbum/ChangeLog #701358:701359 @@ -1,3 +1,7 @@ +2007-08-18 Jan Kundrat <jkt@gentoo.org> + + * Use libkdcraw intead of budled and rotten dcraw copy + 2007-08-11 Jan Kundrat <jkt@gentoo.org> * Automatically hide mouse cursor and disable screensaver when in Viewer --- branches/extragear/kde3/graphics/kphotoalbum/ImageManager/ImageLoader.cpp #701358:701359 @@ -137,15 +137,20 @@ } else { - ok = img.load( request->fileName() ); + // At first, we have to give our RAW decoders a try. If we allowed + // QImage's load() method, it'd for example load a tiny thumbnail from + // NEF files, which is not what we want. + ok = ImageDecoder::decode( &img, request->fileName(), &fullSize, dim); if (ok) request->setFullSize( img.size() ); } + if (!ok) { - // Still didn't work, try with our own decoders - ok = ImageDecoder::decode( &img, request->fileName(), &fullSize, dim); + // Now we can try QImage's stuff as a fallback... + ok = img.load( request->fileName() ); if (ok) request->setFullSize( img.size() ); + } return img; --- branches/extragear/kde3/graphics/kphotoalbum/ImageManager/Makefile.am #701358:701359 @@ -3,8 +3,7 @@ INCLUDES = -I$(srcdir)/.. $(all_includes) libImageManager_la_SOURCES = ImageLoader.cpp Manager.cpp ImageRequest.cpp ImageClient.cpp \ - ImageDecoder.cpp RawImageDecoder.cpp parse.c VideoManager.cpp \ - RequestQueue.cpp + ImageDecoder.cpp RawImageDecoder.cpp VideoManager.cpp RequestQueue.cpp KDE_CXXFLAGS = $(USE_EXCEPTIONS) $(USE_THREADS) -DQT_NO_CAST_ASCII -DQT_CAST_NO_ASCII --- branches/extragear/kde3/graphics/kphotoalbum/ImageManager/RawImageDecoder.cpp #701358:701359 @@ -23,36 +23,23 @@ #include <qwmatrix.h> #include <qstringlist.h> #include "Settings/SettingsData.h" +#include <libkdcraw/kdcraw.h> -/* Main entry point into raw parser */ -extern "C" { - int extract_thumbnail( FILE*, FILE*, int* ); -} - namespace ImageManager { bool RAWImageDecoder::_decode( QImage *img, const QString& imageFile, QSize* fullSize, int dim) { - /* width and height seem to be only hints, ignore */ - Q_UNUSED( dim ); - /* Open file and extract thumbnail */ - FILE* input = fopen( QFile::encodeName(imageFile), "rb" ); - if( !input ) return false; - KTempFile output; - output.setAutoDelete(true); - int orientation = 0; - if( extract_thumbnail( input, output.fstream(), &orientation ) ) { - fclose(input); - return false; - } - fclose(input); - output.close(); - if( !img->load( output.name() ) ) return false; + /* width and height seem to be only hints, ignore */ + Q_UNUSED( dim ); - if( fullSize ) *fullSize = img->size(); + if ( !KDcrawIface::KDcraw::loadDcrawPreview( *img, imageFile ) ) + return false; - return true; + if ( fullSize ) + *fullSize = img->size(); + + return true; } QStringList RAWImageDecoder::_rawExtensions; --- branches/extragear/kde3/graphics/kphotoalbum/Makefile.am #701358:701359 @@ -34,7 +34,7 @@ CategoryListView/libCategoryListView.la \ $(LIBKPHOTOALBUM_SQLDB) $(LIB_KIO) -ljpeg $(KPHOTOALBUM_KIPI_LIBS) $(KPHOTOALBUM_KEXI_LIBS) \ $(LIBKPHOTOALBUM_KEXIDB) HTMLGenerator/libHTMLGenerator.la\ - $(KPHOTOALBUM_EXIV2_LIBS) -lkmediaplayer + $(KPHOTOALBUM_EXIV2_LIBS) -lkmediaplayer -lkdcraw METASOURCES = AUTO KDE_CXXFLAGS = $(USE_EXCEPTIONS) $(USE_THREADS) -DQT_NO_CAST_ASCII -DQT_CAST_NO_ASCII --- branches/extragear/kde3/graphics/kphotoalbum/configure.in.in #701358:701359 @@ -75,7 +75,24 @@ fi +# -------------------------------------------------- kdcraw Check +if test "$PKGCONFIGFOUND" = "yes" ; then + have_libkdcraw=no + KDE_PKG_CHECK_MODULES(LIBKDCRAW, libkdcraw >= 0.1.1, + have_libkdcraw=yes, have_libkdcraw=no) + + if test "x$have_libkdcraw" = "xno"; then + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Can't find the libkdcraw library]); + else + AC_MSG_RESULT([yes]) + fi +else + AC_MSG_ERROR([Can't find the libkdcraw library]); +fi + + # -------------------------------------------------- KexiDB Check #KDE_CHECK_HEADER(kexidb/connection.h, have_kexidb=yes, have_kexidb=no)
SVN commit 701490 by jkt: Decode RAW data if the embedded thumbnail's dimensions are less than 80% of the real image size BUG: 141877 M +35 -0 RawImageDecoder.cpp --- branches/extragear/kde3/graphics/kphotoalbum/ImageManager/RawImageDecoder.cpp #701489:701490 @@ -24,6 +24,7 @@ #include <qstringlist.h> #include "Settings/SettingsData.h" #include <libkdcraw/kdcraw.h> +#include <kdebug.h> namespace ImageManager { @@ -36,6 +37,40 @@ if ( !KDcrawIface::KDcraw::loadDcrawPreview( *img, imageFile ) ) return false; + KDcrawIface::DcrawInfoContainer metadata; + + if ( !KDcrawIface::KDcraw::rawFileIdentify( metadata, imageFile ) || + ( img->width() < metadata.imageSize.width() * 0.8 ) || + ( img->height() < metadata.imageSize.height() * 0.8 ) ) { + + // let's try to get a better resolution + KDcrawIface::KDcraw decoder; + KDcrawIface::RawDecodingSettings rawDecodingSettings; + + if ( rawDecodingSettings.sixteenBitsImage ) { + kdDebug() << "16 bits per color channel is not supported yet" << endl; + return false; + } else { + QByteArray imageData; /* 3 bytes for each pixel, */ + int width, height, rgbmax; + if ( !decoder.decodeRAWImage( imageFile, rawDecodingSettings, imageData, width, height, rgbmax ) ) + return false; + + // Now the funny part, how to turn this fugly QByteArray into an QImage. Yay! + if ( !img->create( width, height, 32 ) ) + return false; + + uchar* data = img->bits(); + + for ( uint i = 0; i < imageData.size(); i += 3, data += 4 ) { + data[0] = imageData[i + 2]; // blue + data[1] = imageData[i + 1]; // green + data[2] = imageData[i]; // red + data[3] = 0xff; // alpha + } + } + } + if ( fullSize ) *fullSize = img->size();