SVN commit 545416 by mwiesweg:
Use fast raw loading for histogram, and do not cache the low quality version instead of the full image - make DImg::fileFormat() static public - Use a different cache key in LoadingCache if image is loaded with halfSizeColorImage option - detect raw file format in ImagePropertiesColorTab, set time-optimized RawDecodingSettings CCMAIL: [hidden email] M +3 -1 dimg/dimg.h M +19 -4 imageproperties/imagepropertiescolorstab.cpp M +12 -3 threadimageio/loadingdescription.h M +3 -3 threadimageio/loadsavetask.cpp M +13 -2 threadimageio/loadsavethread.cpp M +0 -1 threadimageio/managedloadsavethread.cpp --- trunk/extragear/graphics/digikam/libs/dimg/dimg.h #545415:545416 @@ -84,6 +84,9 @@ VERTICAL }; + /** Identify file format */ + static FORMAT fileFormat(const QString& filePath); + /** Create null image */ DImg(); @@ -319,7 +322,6 @@ private: - FORMAT fileFormat(const QString& filePath); void copyMetaData(const DImgPrivate *src); void copyImageData(const DImgPrivate *src); void setImageData(bool null, uint width, uint height, bool sixteenBit, bool alpha); --- trunk/extragear/graphics/digikam/libs/imageproperties/imagepropertiescolorstab.cpp #545415:545416 @@ -581,11 +581,26 @@ } d->currentFilePath = url.path(); - d->imageLoaderThread->load(d->currentFilePath, SharedLoadSaveThread::AccessModeRead, - SharedLoadSaveThread::LoadingPolicyFirstRemovePrevious); - + + if (DImg::fileFormat(d->currentFilePath) == DImg::RAW) + { + // use raw settings optimized for speed + + RawDecodingSettings rawDecodingSettings = RawDecodingSettings(); + rawDecodingSettings.optimizeTimeLoading(); + + d->imageLoaderThread->load(LoadingDescription(d->currentFilePath, rawDecodingSettings), + SharedLoadSaveThread::AccessModeRead, + SharedLoadSaveThread::LoadingPolicyFirstRemovePrevious); + } + else + { + d->imageLoaderThread->load(d->currentFilePath, SharedLoadSaveThread::AccessModeRead, + SharedLoadSaveThread::LoadingPolicyFirstRemovePrevious); + } + d->histogramWidget->setDataLoading(); - + // Toggle ICC header to busy during loading. d->blinkTimer->start(200); } --- trunk/extragear/graphics/digikam/libs/threadimageio/loadingdescription.h #545415:545416 @@ -34,20 +34,29 @@ { public: + /* + Use this for files that are not raw files. + Stores only the filePath. + */ LoadingDescription(const QString &filePath) : filePath(filePath) { rawDecodingSettings = RawDecodingSettings(); }; - + + /* + For raw files: + Stores filePath and RawDecodingSettings + */ LoadingDescription(const QString &filePath, RawDecodingSettings settings) : filePath(filePath), rawDecodingSettings(settings) {}; - + QString filePath; RawDecodingSettings rawDecodingSettings; - bool operator==(const LoadingDescription &other); + QString cacheKey() const; + bool operator==(const LoadingDescription &other) const; }; } // namespace Digikam --- trunk/extragear/graphics/digikam/libs/threadimageio/loadsavetask.cpp #545415:545416 @@ -117,7 +117,7 @@ { LoadingCache::CacheLock lock(cache); DImg *cachedImg; - if ( (cachedImg = cache->retrieveImage(m_loadingDescription.filePath)) ) + if ( (cachedImg = cache->retrieveImage(m_loadingDescription.cacheKey())) ) { // image is found in image cache, loading is successfull //kdDebug() << "SharedLoadingTask " << this << ": " << m_loadingDescription.filePath << " found in image cache" << endl; @@ -127,7 +127,7 @@ QApplication::postEvent(m_thread, new LoadedEvent(m_loadingDescription.filePath, img)); return; } - else if ( (usedProcess = cache->retrieveLoadingProcess(m_loadingDescription.filePath)) ) + else if ( (usedProcess = cache->retrieveLoadingProcess(m_loadingDescription.cacheKey())) ) { // Other process is right now loading this image. // Add this task to the list of listeners and @@ -166,7 +166,7 @@ LoadingCache::CacheLock lock(cache); // put (valid) image into cache of loaded images if (!img.isNull()) - isCached = cache->putImage(m_loadingDescription.filePath, new DImg(img)); + isCached = cache->putImage(m_loadingDescription.cacheKey(), new DImg(img)); // remove this from the list of loading processes in cache cache->removeLoadingProcess(this); } --- trunk/extragear/graphics/digikam/libs/threadimageio/loadsavethread.cpp #545415:545416 @@ -28,14 +28,25 @@ #include "loadsavethread.h" #include "managedloadsavethread.h" #include "sharedloadsavethread.h" -#include "loadingcache.h" #include "loadsavetask.h" namespace Digikam { -bool LoadingDescription::operator==(const LoadingDescription &other) +QString LoadingDescription::cacheKey() const { + // Here we have the knowledge which LoadingDescriptions / RawFileDecodingSettings + // must be cached separately. + // When the Raw loading settings are changed in setup, the cache is cleaned, + // so we do not need to store check for every option here. + if (rawDecodingSettings.halfSizeColorImage) + return filePath + "-halfSizeColorImage"; + else + return filePath; +} + +bool LoadingDescription::operator==(const LoadingDescription &other) const +{ return filePath == other.filePath && rawDecodingSettings.cameraColorBalance == other.rawDecodingSettings.cameraColorBalance && rawDecodingSettings.automaticColorBalance == other.rawDecodingSettings.automaticColorBalance && --- trunk/extragear/graphics/digikam/libs/threadimageio/managedloadsavethread.cpp #545415:545416 @@ -27,7 +27,6 @@ // Local includes. #include "managedloadsavethread.h" -#include "loadingcache.h" #include "loadsavetask.h" namespace Digikam _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
Free forum by Nabble | Edit this page |