diff --git a/rtengine/rtlensfun.cc b/rtengine/rtlensfun.cc index 3b5124947..fc5bb0017 100644 --- a/rtengine/rtlensfun.cc +++ b/rtengine/rtlensfun.cc @@ -435,11 +435,21 @@ std::vector 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; if (data_ && !make.empty()) { 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()); if (found) { ret.data_ = found[0]; @@ -551,7 +561,7 @@ std::unique_ptr LFDatabase::findModifier( return nullptr; } - const LFCamera c = findCamera(make, model); + const LFCamera c = findCamera(make, model, lensProf.lfAutoMatch()); const LFLens l = findLens( lensProf.lfAutoMatch() ? c diff --git a/rtengine/rtlensfun.h b/rtengine/rtlensfun.h index 51212c9b9..bcce77f34 100644 --- a/rtengine/rtlensfun.h +++ b/rtengine/rtlensfun.h @@ -120,7 +120,7 @@ public: std::vector getCameras() const; std::vector 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; std::unique_ptr findModifier( diff --git a/rtgui/lensprofile.cc b/rtgui/lensprofile.cc index 784c49f15..58ea1df1d 100644 --- a/rtgui/lensprofile.cc +++ b/rtgui/lensprofile.cc @@ -242,7 +242,7 @@ void LensProfilePanel::read(const rtengine::procparams::ProcParams* pp, const Pa if (pp->lensProf.lfAutoMatch()) { if (metadata) { - c = db->findCamera(metadata->getMake(), metadata->getModel()); + c = db->findCamera(metadata->getMake(), metadata->getModel(), true); setLensfunCamera(c.getMake(), c.getModel()); } } else if (pp->lensProf.lfManual()) { @@ -521,7 +521,7 @@ void LensProfilePanel::onCorrModeChanged(const Gtk::RadioButton* rbChanged) setLensfunLens(""); } else if (metadata) { 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()); setLensfunCamera(c.getMake(), c.getModel()); setLensfunLens(l.getLens()); @@ -801,7 +801,7 @@ void LensProfilePanel::updateLensfunWarning() 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(); if (!itl) {