Merge pull request #4908 from Beep6581/getridoffeahistogramcache

Get rid of aehistogram files in RT cache.

Merged to get more tests. Issue and pr stay open for a while
This commit is contained in:
Ingo Weyrich 2018-10-31 21:56:00 +01:00 committed by GitHub
commit 0bb5d26ed0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 87 additions and 21 deletions

View File

@ -279,6 +279,11 @@ Thumbnail* Thumbnail::loadFromImage (const Glib::ustring& fname, int &w, int &h,
printf ("loadFromImage: Unsupported image type \"%s\"!\n", img->getType()); printf ("loadFromImage: Unsupported image type \"%s\"!\n", img->getType());
} }
ProcParams paramsForAutoExp; // Dummy for constructor
ImProcFunctions ipf (&paramsForAutoExp, false);
ipf.getAutoExp (tpp->aeHistogram, tpp->aeHistCompression, 0.02, tpp->aeExposureCompensation, tpp->aeLightness, tpp->aeContrast, tpp->aeBlack, tpp->aeHighlightCompression, tpp->aeHighlightCompressionThreshold);
tpp->aeValid = true;
if (n > 0) { if (n > 0) {
ColorTemp cTemp; ColorTemp cTemp;
@ -923,6 +928,11 @@ Thumbnail* Thumbnail::loadFromRaw (const Glib::ustring& fname, RawMetaDataLocati
} }
} }
} }
ProcParams paramsForAutoExp; // Dummy for constructor
ImProcFunctions ipf (&paramsForAutoExp, false);
ipf.getAutoExp (tpp->aeHistogram, tpp->aeHistCompression, 0.02, tpp->aeExposureCompensation, tpp->aeLightness, tpp->aeContrast, tpp->aeBlack, tpp->aeHighlightCompression, tpp->aeHighlightCompressionThreshold);
tpp->aeValid = true;
if (ri->get_colors() == 1) { if (ri->get_colors() == 1) {
pixSum[0] = pixSum[1] = pixSum[2] = 1.; pixSum[0] = pixSum[1] = pixSum[2] = 1.;
n[0] = n[1] = n[2] = 1; n[0] = n[1] = n[2] = 1;
@ -993,6 +1003,13 @@ Thumbnail::Thumbnail () :
wbEqual (-1.0), wbEqual (-1.0),
wbTempBias (0.0), wbTempBias (0.0),
aeHistCompression (3), aeHistCompression (3),
aeValid(false),
aeExposureCompensation(0.0),
aeLightness(0),
aeContrast(0),
aeBlack(0),
aeHighlightCompression(0),
aeHighlightCompressionThreshold(0),
embProfileLength (0), embProfileLength (0),
embProfileData (nullptr), embProfileData (nullptr),
embProfile (nullptr), embProfile (nullptr),
@ -1223,8 +1240,17 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT
int hlcompr = params.toneCurve.hlcompr; int hlcompr = params.toneCurve.hlcompr;
int hlcomprthresh = params.toneCurve.hlcomprthresh; int hlcomprthresh = params.toneCurve.hlcomprthresh;
if (params.toneCurve.autoexp && aeHistogram) { if (params.toneCurve.autoexp) {
ipf.getAutoExp (aeHistogram, aeHistCompression, params.toneCurve.clip, expcomp, bright, contr, black, hlcompr, hlcomprthresh); if (aeValid) {
expcomp = aeExposureCompensation;
bright = aeLightness;
contr = aeContrast;
black = aeBlack;
hlcompr = aeHighlightCompression;
hlcomprthresh = aeHighlightCompressionThreshold;
} else if (aeHistogram) {
ipf.getAutoExp (aeHistogram, aeHistCompression, 0.02, expcomp, bright, contr, black, hlcompr, hlcomprthresh);
}
} }
LUTf curve1 (65536); LUTf curve1 (65536);
@ -1991,6 +2017,38 @@ bool Thumbnail::readData (const Glib::ustring& fname)
aeHistCompression = keyFile.get_integer ("LiveThumbData", "AEHistCompression"); aeHistCompression = keyFile.get_integer ("LiveThumbData", "AEHistCompression");
} }
aeValid = true;
if (keyFile.has_key ("LiveThumbData", "AEExposureCompensation")) {
aeExposureCompensation = keyFile.get_double ("LiveThumbData", "AEExposureCompensation");
} else {
aeValid = false;
}
if (keyFile.has_key ("LiveThumbData", "AELightness")) {
aeLightness = keyFile.get_integer ("LiveThumbData", "AELightness");
} else {
aeValid = false;
}
if (keyFile.has_key ("LiveThumbData", "AEContrast")) {
aeContrast = keyFile.get_integer ("LiveThumbData", "AEContrast");
} else {
aeValid = false;
}
if (keyFile.has_key ("LiveThumbData", "AEBlack")) {
aeBlack = keyFile.get_integer ("LiveThumbData", "AEBlack");
} else {
aeValid = false;
}
if (keyFile.has_key ("LiveThumbData", "AEHighlightCompression")) {
aeHighlightCompression = keyFile.get_integer ("LiveThumbData", "AEHighlightCompression");
} else {
aeValid = false;
}
if (keyFile.has_key ("LiveThumbData", "AEHighlightCompressionThreshold")) {
aeHighlightCompressionThreshold = keyFile.get_integer ("LiveThumbData", "AEHighlightCompressionThreshold");
} else {
aeValid = false;
}
if (keyFile.has_key ("LiveThumbData", "RedMultiplier")) { if (keyFile.has_key ("LiveThumbData", "RedMultiplier")) {
redMultiplier = keyFile.get_double ("LiveThumbData", "RedMultiplier"); redMultiplier = keyFile.get_double ("LiveThumbData", "RedMultiplier");
} }
@ -2064,7 +2122,12 @@ bool Thumbnail::writeData (const Glib::ustring& fname)
keyFile.set_double ("LiveThumbData", "RedAWBMul", redAWBMul); keyFile.set_double ("LiveThumbData", "RedAWBMul", redAWBMul);
keyFile.set_double ("LiveThumbData", "GreenAWBMul", greenAWBMul); keyFile.set_double ("LiveThumbData", "GreenAWBMul", greenAWBMul);
keyFile.set_double ("LiveThumbData", "BlueAWBMul", blueAWBMul); keyFile.set_double ("LiveThumbData", "BlueAWBMul", blueAWBMul);
keyFile.set_integer ("LiveThumbData", "AEHistCompression", aeHistCompression); keyFile.set_double ("LiveThumbData", "AEExposureCompensation", aeExposureCompensation);
keyFile.set_integer ("LiveThumbData", "AELightness", aeLightness);
keyFile.set_integer ("LiveThumbData", "AEContrast", aeContrast);
keyFile.set_integer ("LiveThumbData", "AEBlack", aeBlack);
keyFile.set_integer ("LiveThumbData", "AEHighlightCompression", aeHighlightCompression);
keyFile.set_integer ("LiveThumbData", "AEHighlightCompressionThreshold", aeHighlightCompressionThreshold);
keyFile.set_double ("LiveThumbData", "RedMultiplier", redMultiplier); keyFile.set_double ("LiveThumbData", "RedMultiplier", redMultiplier);
keyFile.set_double ("LiveThumbData", "GreenMultiplier", greenMultiplier); keyFile.set_double ("LiveThumbData", "GreenMultiplier", greenMultiplier);
keyFile.set_double ("LiveThumbData", "BlueMultiplier", blueMultiplier); keyFile.set_double ("LiveThumbData", "BlueMultiplier", blueMultiplier);

View File

@ -50,6 +50,13 @@ class Thumbnail
double autoWBTemp, autoWBGreen, wbEqual, wbTempBias; // autoWBTemp and autoWBGreen are updated each time autoWB is requested and if wbEqual has been modified double autoWBTemp, autoWBGreen, wbEqual, wbTempBias; // autoWBTemp and autoWBGreen are updated each time autoWB is requested and if wbEqual has been modified
LUTu aeHistogram; LUTu aeHistogram;
int aeHistCompression; int aeHistCompression;
bool aeValid;
double aeExposureCompensation;
int aeLightness;
int aeContrast;
int aeBlack;
int aeHighlightCompression;
int aeHighlightCompressionThreshold;
int embProfileLength; int embProfileLength;
unsigned char* embProfileData; unsigned char* embProfileData;
cmsHPROFILE embProfile; cmsHPROFILE embProfile;
@ -100,6 +107,7 @@ public:
bool readAEHistogram (const Glib::ustring& fname); bool readAEHistogram (const Glib::ustring& fname);
bool writeAEHistogram (const Glib::ustring& fname); bool writeAEHistogram (const Glib::ustring& fname);
bool isAeValid() { return aeValid; };
unsigned char* getImage8Data(); // accessor to the 8bit image if it is one, which should be the case for the "Inspector" mode. unsigned char* getImage8Data(); // accessor to the 8bit image if it is one, which should be the case for the "Inspector" mode.
// Hombre: ... let's hope that proper template can make this cleaner // Hombre: ... let's hope that proper template can make this cleaner

View File

@ -57,8 +57,10 @@ void CacheManager::init ()
auto error = g_mkdir_with_parents (baseDir.c_str(), cacheDirMode); auto error = g_mkdir_with_parents (baseDir.c_str(), cacheDirMode);
for (const auto& cacheDir : cacheDirs) { for (const auto& cacheDir : cacheDirs) {
if (strncmp(cacheDir, "aehistograms", 12)) { // don't create aehistograms folder.
error |= g_mkdir_with_parents (Glib::build_filename (baseDir, cacheDir).c_str(), cacheDirMode); error |= g_mkdir_with_parents (Glib::build_filename (baseDir, cacheDir).c_str(), cacheDirMode);
} }
}
if (error != 0 && options.rtSettings.verbose) { if (error != 0 && options.rtSettings.verbose) {
std::cerr << "Failed to create all cache directories: " << g_strerror(errno) << std::endl; std::cerr << "Failed to create all cache directories: " << g_strerror(errno) << std::endl;
@ -183,9 +185,6 @@ void CacheManager::renameEntry (const std::string& oldfilename, const std::strin
auto error = g_rename (getCacheFileName ("profiles", oldfilename, paramFileExtension, oldmd5).c_str (), getCacheFileName ("profiles", newfilename, paramFileExtension, newmd5).c_str ()); auto error = g_rename (getCacheFileName ("profiles", oldfilename, paramFileExtension, oldmd5).c_str (), getCacheFileName ("profiles", newfilename, paramFileExtension, newmd5).c_str ());
error |= g_rename (getCacheFileName ("images", oldfilename, ".rtti", oldmd5).c_str (), getCacheFileName ("images", newfilename, ".rtti", newmd5).c_str ()); error |= g_rename (getCacheFileName ("images", oldfilename, ".rtti", oldmd5).c_str (), getCacheFileName ("images", newfilename, ".rtti", newmd5).c_str ());
error |= g_rename (getCacheFileName ("images", oldfilename, ".cust16", oldmd5).c_str (), getCacheFileName ("images", newfilename, ".cust16", newmd5).c_str ());
error |= g_rename (getCacheFileName ("images", oldfilename, ".cust", oldmd5).c_str (), getCacheFileName ("images", newfilename, ".cust", newmd5).c_str ());
error |= g_rename (getCacheFileName ("images", oldfilename, ".jpg", oldmd5).c_str (), getCacheFileName ("images", newfilename, ".jpg", newmd5).c_str ());
error |= g_rename (getCacheFileName ("aehistograms", oldfilename, "", oldmd5).c_str (), getCacheFileName ("aehistograms", newfilename, "", newmd5).c_str ()); error |= g_rename (getCacheFileName ("aehistograms", oldfilename, "", oldmd5).c_str (), getCacheFileName ("aehistograms", newfilename, "", newmd5).c_str ());
error |= g_rename (getCacheFileName ("embprofiles", oldfilename, ".icc", oldmd5).c_str (), getCacheFileName ("embprofiles", newfilename, ".icc", newmd5).c_str ()); error |= g_rename (getCacheFileName ("embprofiles", oldfilename, ".icc", oldmd5).c_str (), getCacheFileName ("embprofiles", newfilename, ".icc", newmd5).c_str ());
error |= g_rename (getCacheFileName ("data", oldfilename, ".txt", oldmd5).c_str (), getCacheFileName ("data", newfilename, ".txt", newmd5).c_str ()); error |= g_rename (getCacheFileName ("data", oldfilename, ".txt", oldmd5).c_str (), getCacheFileName ("data", newfilename, ".txt", newmd5).c_str ());
@ -238,6 +237,7 @@ void CacheManager::clearImages () const
{ {
MyMutex::MyLock lock (mutex); MyMutex::MyLock lock (mutex);
deleteDir ("data");
deleteDir ("images"); deleteDir ("images");
deleteDir ("aehistograms"); deleteDir ("aehistograms");
deleteDir ("embprofiles"); deleteDir ("embprofiles");
@ -275,9 +275,6 @@ void CacheManager::deleteFiles (const Glib::ustring& fname, const std::string& m
} }
auto error = g_remove (getCacheFileName ("images", fname, ".rtti", md5).c_str ()); auto error = g_remove (getCacheFileName ("images", fname, ".rtti", md5).c_str ());
error |= g_remove (getCacheFileName ("images", fname, ".cust16", md5).c_str ());
error |= g_remove (getCacheFileName ("images", fname, ".cust", md5).c_str ());
error |= g_remove (getCacheFileName ("images", fname, ".jpg", md5).c_str ());
error |= g_remove (getCacheFileName ("aehistograms", fname, "", md5).c_str ()); error |= g_remove (getCacheFileName ("aehistograms", fname, "", md5).c_str ());
error |= g_remove (getCacheFileName ("embprofiles", fname, ".icc", md5).c_str ()); error |= g_remove (getCacheFileName ("embprofiles", fname, ".icc", md5).c_str ());

View File

@ -855,8 +855,10 @@ void Thumbnail::_loadThumbnail(bool firstTrial)
} }
if ( cfs.thumbImgType == CacheImageData::FULL_THUMBNAIL ) { if ( cfs.thumbImgType == CacheImageData::FULL_THUMBNAIL ) {
if(!tpp->isAeValid()) {
// load aehistogram // load aehistogram
tpp->readAEHistogram (getCacheFileName ("aehistograms", "")); tpp->readAEHistogram (getCacheFileName ("aehistograms", ""));
}
// load embedded profile // load embedded profile
tpp->readEmbProfile (getCacheFileName ("embprofiles", ".icc")); tpp->readEmbProfile (getCacheFileName ("embprofiles", ".icc"));
@ -898,19 +900,15 @@ void Thumbnail::_saveThumbnail ()
return; return;
} }
if (g_remove (getCacheFileName ("images", ".rtti").c_str ()) != 0) { g_remove (getCacheFileName ("images", ".rtti").c_str ());
// No file deleted, so we try to deleted obsolete files, if any
g_remove (getCacheFileName ("images", ".cust").c_str ());
g_remove (getCacheFileName ("images", ".cust16").c_str ());
g_remove (getCacheFileName ("images", ".jpg").c_str ());
}
// save thumbnail image // save thumbnail image
tpp->writeImage (getCacheFileName ("images", "")); tpp->writeImage (getCacheFileName ("images", ""));
if(!tpp->isAeValid()) {
// save aehistogram // save aehistogram
tpp->writeAEHistogram (getCacheFileName ("aehistograms", "")); tpp->writeAEHistogram (getCacheFileName ("aehistograms", ""));
}
// save embedded profile // save embedded profile
tpp->writeEmbProfile (getCacheFileName ("embprofiles", ".icc")); tpp->writeEmbProfile (getCacheFileName ("embprofiles", ".icc"));