Merge pull request #6837 from Lawrence37/lensfun-match-saved-name

Fix for some Lensfun corrections not available
This commit is contained in:
Lawrence37
2024-03-02 15:45:59 -08:00
committed by GitHub
3 changed files with 26 additions and 6 deletions

View File

@@ -435,11 +435,21 @@ std::vector<LFLens> LFDatabase::getLenses() const
} }
LFCamera LFDatabase::findCamera(const Glib::ustring &make, const Glib::ustring &model) const LFCamera LFDatabase::findCamera(const Glib::ustring &make, const Glib::ustring &model, bool autoMatch) const
{ {
LFCamera ret; LFCamera ret;
if (data_ && !make.empty()) { if (data_ && !make.empty()) {
MyMutex::MyLock lock(lfDBMutex); MyMutex::MyLock lock(lfDBMutex);
if (!autoMatch) {
// Try to find exact match by name.
for (auto camera_list = data_->GetCameras(); camera_list[0]; camera_list++) {
const auto camera = camera_list[0];
if (make == camera->Maker && model == camera->Model) {
ret.data_ = camera;
return ret;
}
}
}
auto found = data_->FindCamerasExt(make.c_str(), model.c_str()); auto found = data_->FindCamerasExt(make.c_str(), model.c_str());
if (found) { if (found) {
ret.data_ = found[0]; ret.data_ = found[0];
@@ -455,6 +465,16 @@ LFLens LFDatabase::findLens(const LFCamera &camera, const Glib::ustring &name) c
LFLens ret; LFLens ret;
if (data_ && !name.empty()) { if (data_ && !name.empty()) {
MyMutex::MyLock lock(lfDBMutex); MyMutex::MyLock lock(lfDBMutex);
if (!camera.data_) {
// Only the lens name provided. Try to find exact match by name.
LFLens candidate;
for (auto lens_list = data_->GetLenses(); lens_list[0]; lens_list++) {
candidate.data_ = lens_list[0];
if (name == candidate.getLens()) {
return candidate;
}
}
}
auto found = data_->FindLenses(camera.data_, nullptr, name.c_str()); auto found = data_->FindLenses(camera.data_, nullptr, name.c_str());
for (size_t pos = 0; !found && pos < name.size(); ) { for (size_t pos = 0; !found && pos < name.size(); ) {
// try to split the maker from the model of the lens -- we have to // try to split the maker from the model of the lens -- we have to
@@ -541,7 +561,7 @@ std::unique_ptr<LFModifier> LFDatabase::findModifier(
return nullptr; return nullptr;
} }
const LFCamera c = findCamera(make, model); const LFCamera c = findCamera(make, model, lensProf.lfAutoMatch());
const LFLens l = findLens( const LFLens l = findLens(
lensProf.lfAutoMatch() lensProf.lfAutoMatch()
? c ? c

View File

@@ -120,7 +120,7 @@ public:
std::vector<LFCamera> getCameras() const; std::vector<LFCamera> getCameras() const;
std::vector<LFLens> getLenses() const; std::vector<LFLens> getLenses() const;
LFCamera findCamera(const Glib::ustring &make, const Glib::ustring &model) const; LFCamera findCamera(const Glib::ustring &make, const Glib::ustring &model, bool autoMatch) const;
LFLens findLens(const LFCamera &camera, const Glib::ustring &name) const; LFLens findLens(const LFCamera &camera, const Glib::ustring &name) const;
std::unique_ptr<LFModifier> findModifier( std::unique_ptr<LFModifier> findModifier(

View File

@@ -242,7 +242,7 @@ void LensProfilePanel::read(const rtengine::procparams::ProcParams* pp, const Pa
if (pp->lensProf.lfAutoMatch()) { if (pp->lensProf.lfAutoMatch()) {
if (metadata) { if (metadata) {
c = db->findCamera(metadata->getMake(), metadata->getModel()); c = db->findCamera(metadata->getMake(), metadata->getModel(), true);
setLensfunCamera(c.getMake(), c.getModel()); setLensfunCamera(c.getMake(), c.getModel());
} }
} else if (pp->lensProf.lfManual()) { } else if (pp->lensProf.lfManual()) {
@@ -521,7 +521,7 @@ void LensProfilePanel::onCorrModeChanged(const Gtk::RadioButton* rbChanged)
setLensfunLens(""); setLensfunLens("");
} else if (metadata) { } else if (metadata) {
const LFDatabase* const db = LFDatabase::getInstance(); const LFDatabase* const db = LFDatabase::getInstance();
const LFCamera c = db->findCamera(metadata->getMake(), metadata->getModel()); const LFCamera c = db->findCamera(metadata->getMake(), metadata->getModel(), true);
const LFLens l = db->findLens(c, metadata->getLens()); const LFLens l = db->findLens(c, metadata->getLens());
setLensfunCamera(c.getMake(), c.getModel()); setLensfunCamera(c.getMake(), c.getModel());
setLensfunLens(l.getLens()); setLensfunLens(l.getLens());
@@ -801,7 +801,7 @@ void LensProfilePanel::updateLensfunWarning()
return; return;
} }
const LFCamera c = db->findCamera((*itc)[lf->lensfunModelCam.make], (*itc)[lf->lensfunModelCam.model]); const LFCamera c = db->findCamera((*itc)[lf->lensfunModelCam.make], (*itc)[lf->lensfunModelCam.model], false);
const auto itl = lensfunLenses->get_active(); const auto itl = lensfunLenses->get_active();
if (!itl) { if (!itl) {