Reduced memory consumption of thumbnail browser; see issue #396

This commit is contained in:
Oliver Duis 2011-02-27 15:32:13 +01:00
parent dfbc458ac9
commit 062a7f21a4

View File

@ -42,6 +42,9 @@ Thumbnail::Thumbnail (CacheManager* cm, const Glib::ustring& fname, CacheImageDa
loadProcParams (); loadProcParams ();
_loadThumbnail (); _loadThumbnail ();
generateExifDateTimeStrings (); generateExifDateTimeStrings ();
delete tpp;
tpp = 0;
} }
Thumbnail::Thumbnail (CacheManager* cm, const Glib::ustring& fname, const std::string& md5) Thumbnail::Thumbnail (CacheManager* cm, const Glib::ustring& fname, const std::string& md5)
@ -56,6 +59,9 @@ Thumbnail::Thumbnail (CacheManager* cm, const Glib::ustring& fname, const std::s
cfs.recentlySaved = false; cfs.recentlySaved = false;
initial_ = false; initial_ = false;
delete tpp;
tpp = 0;
} }
void Thumbnail::_generateThumbnailImage () { void Thumbnail::_generateThumbnailImage () {
@ -277,17 +283,30 @@ rtengine::IImage8* Thumbnail::processThumbImage (const rtengine::procparams::Pro
Glib::Mutex::Lock lock(mutex); Glib::Mutex::Lock lock(mutex);
if (!tpp) if ( tpp == 0 )
return NULL; {
_loadThumbnail();
if ( tpp == 0 )
{
return 0;
}
}
rtengine::IImage8* image = 0;
if ( cfs.thumbImgType == CacheImageData::QUICK_THUMBNAIL ) if ( cfs.thumbImgType == CacheImageData::QUICK_THUMBNAIL )
{ {
return tpp->quickProcessImage (pparams, h, rtengine::TI_Nearest, scale); image = tpp->quickProcessImage (pparams, h, rtengine::TI_Nearest, scale);
} }
else else
{ {
return tpp->processImage (pparams, h, rtengine::TI_Bilinear, scale); image = tpp->processImage (pparams, h, rtengine::TI_Bilinear, scale);
} }
//_saveThumbnail();
delete tpp;
tpp = 0;
return image;
} }
rtengine::IImage8* Thumbnail::upgradeThumbImage (const rtengine::procparams::ProcParams& pparams, int h, double& scale) { rtengine::IImage8* Thumbnail::upgradeThumbImage (const rtengine::procparams::ProcParams& pparams, int h, double& scale) {
@ -300,7 +319,17 @@ rtengine::IImage8* Thumbnail::upgradeThumbImage (const rtengine::procparams::Pro
} }
_generateThumbnailImage(); _generateThumbnailImage();
return tpp->processImage (pparams, h, rtengine::TI_Bilinear, scale); if ( tpp == 0 )
{
return 0;
}
rtengine::IImage8* image = tpp->processImage (pparams, h, rtengine::TI_Bilinear, scale);
//_saveThumbnail();
delete tpp;
tpp = 0;
return image;
} }
void Thumbnail::generateExifDateTimeStrings () { void Thumbnail::generateExifDateTimeStrings () {
@ -397,6 +426,8 @@ void Thumbnail::infoFromImage (const Glib::ustring& fname, rtengine::RawMetaData
void Thumbnail::_loadThumbnail(bool firstTrial) { void Thumbnail::_loadThumbnail(bool firstTrial) {
needsReProcessing = true; needsReProcessing = true;
tw = -1;
th = options.maxThumbnailHeight;
delete tpp; delete tpp;
tpp = new rtengine::Thumbnail (); tpp = new rtengine::Thumbnail ();
tpp->isRaw = (cfs.format == (int) FT_Raw); tpp->isRaw = (cfs.format == (int) FT_Raw);
@ -415,8 +446,10 @@ void Thumbnail::_loadThumbnail(bool firstTrial) {
else if (!succ) { else if (!succ) {
delete tpp; delete tpp;
tpp = NULL; tpp = NULL;
return;
} }
else if ( cfs.thumbImgType == CacheImageData::FULL_THUMBNAIL ) {
if ( cfs.thumbImgType == CacheImageData::FULL_THUMBNAIL ) {
// load aehistogram // load aehistogram
tpp->readAEHistogram (getCacheFileName ("aehistograms")); tpp->readAEHistogram (getCacheFileName ("aehistograms"));
@ -426,6 +459,8 @@ void Thumbnail::_loadThumbnail(bool firstTrial) {
tpp->init (); tpp->init ();
} }
getThumbnailSize(tw,th);
} }
void Thumbnail::loadThumbnail (bool firstTrial) { void Thumbnail::loadThumbnail (bool firstTrial) {