Loading sdk/build/miphoto/miphoto-exec +248 B (9.38 MiB) File changed.No diff preview for this file type. View original file View changed file sdk/src/commander.cpp +28 −11 Original line number Diff line number Diff line Loading @@ -432,18 +432,22 @@ bool Commander::setBracketing(size_t evStep, size_t halfCount) if (_iso == Codes::ISO::Auto) { // - Find such combination (Speed, ISO) that fits measured exposure and bracketing is possible auto speedIt = findClosestSpeed(speed); auto isoIt = findClosestISO(iso); // Find such combination (Speed, ISO) that approximately fits the measured exposure and bracketing is possible double error; auto speedIt = findClosestSpeed(speed, 0, error); auto isoIt = findClosestISO(iso, error, error); if (!computeBracketingVector(speedIt, isoIt, halfCount, evStep)) return false; //ISO must be set manually before shooting, otherwise auto-ISO would compensate the exposure differences setISO(isoIt->first); } else { auto speedIt = findClosestSpeed(speed); // Find the closest exposure speed to the measured one double error; auto speedIt = findClosestSpeed(speed, 0, error); if (!computeBracketingVector(speedIt, halfCount, evStep)) return false; } Loading Loading @@ -1022,8 +1026,11 @@ bool Commander::measureExposureExif(double& speed, double& iso) return true; } std::vector<std::pair<Codes::Speed, double>>::iterator Commander::findClosestSpeed(double speed) std::vector<std::pair<Codes::Speed, double>>::iterator Commander::findClosestSpeed(double speed, double inputError, double& outputError) { speed = pow(2, log2(speed) - inputError); // error correction auto it = speedOrderedMapping.begin(); for ( ; it != speedOrderedMapping.end(); ++it) if (it->second >= speed) Loading @@ -1045,17 +1052,27 @@ std::vector<std::pair<Codes::Speed, double>>::iterator Commander::findClosestSpe // if previous speed is closer to the measured one, select it // ( (it-1)->second < speed <= it->second ) if ( middle-lower < upper-middle ) auto bottomError = middle - lower; auto topError = upper - middle; if ( bottomError < topError ) { --it; } //else do nothing, iterator is ok //else do nothing, iterator is ok) } outputError = log2(it->second) - log2(speed); return it; } std::vector<std::pair<Codes::ISO, double>>::iterator Commander::findClosestISO(double iso) std::vector<std::pair<Codes::ISO, double>>::iterator Commander::findClosestISO(double iso, double inputError, double& outputError) { iso = pow(2, log2( iso ) - inputError); // error correction // = pow(2, log2(iso/100) - inputError) * 100; auto it = isoOrderedMapping.begin(); for ( ; it != isoOrderedMapping.end(); ++it) if (it->second >= iso) Loading Loading @@ -1083,7 +1100,7 @@ std::vector<std::pair<Codes::ISO, double>>::iterator Commander::findClosestISO(d //else do nothing, iterator is ok) } outputError = log2(it->second/100) - log2(iso/100); return it; } Loading sdk/src/commander.h +8 −2 Original line number Diff line number Diff line Loading @@ -176,8 +176,14 @@ private: size_t evStep); bool measureExposureExif(double& speed, double& iso); std::vector<std::pair<Codes::Speed, double>>::iterator findClosestSpeed(double speed); std::vector<std::pair<Codes::ISO, double>>::iterator findClosestISO(double iso); std::vector<std::pair<Codes::Speed, double>>::iterator findClosestSpeed( double speed, double inputError, double& outputError); std::vector<std::pair<Codes::ISO, double>>::iterator findClosestISO( double iso, double inputError, double& outputError); // check if vector iterator is in valid range template <typename T> Loading Loading
sdk/build/miphoto/miphoto-exec +248 B (9.38 MiB) File changed.No diff preview for this file type. View original file View changed file
sdk/src/commander.cpp +28 −11 Original line number Diff line number Diff line Loading @@ -432,18 +432,22 @@ bool Commander::setBracketing(size_t evStep, size_t halfCount) if (_iso == Codes::ISO::Auto) { // - Find such combination (Speed, ISO) that fits measured exposure and bracketing is possible auto speedIt = findClosestSpeed(speed); auto isoIt = findClosestISO(iso); // Find such combination (Speed, ISO) that approximately fits the measured exposure and bracketing is possible double error; auto speedIt = findClosestSpeed(speed, 0, error); auto isoIt = findClosestISO(iso, error, error); if (!computeBracketingVector(speedIt, isoIt, halfCount, evStep)) return false; //ISO must be set manually before shooting, otherwise auto-ISO would compensate the exposure differences setISO(isoIt->first); } else { auto speedIt = findClosestSpeed(speed); // Find the closest exposure speed to the measured one double error; auto speedIt = findClosestSpeed(speed, 0, error); if (!computeBracketingVector(speedIt, halfCount, evStep)) return false; } Loading Loading @@ -1022,8 +1026,11 @@ bool Commander::measureExposureExif(double& speed, double& iso) return true; } std::vector<std::pair<Codes::Speed, double>>::iterator Commander::findClosestSpeed(double speed) std::vector<std::pair<Codes::Speed, double>>::iterator Commander::findClosestSpeed(double speed, double inputError, double& outputError) { speed = pow(2, log2(speed) - inputError); // error correction auto it = speedOrderedMapping.begin(); for ( ; it != speedOrderedMapping.end(); ++it) if (it->second >= speed) Loading @@ -1045,17 +1052,27 @@ std::vector<std::pair<Codes::Speed, double>>::iterator Commander::findClosestSpe // if previous speed is closer to the measured one, select it // ( (it-1)->second < speed <= it->second ) if ( middle-lower < upper-middle ) auto bottomError = middle - lower; auto topError = upper - middle; if ( bottomError < topError ) { --it; } //else do nothing, iterator is ok //else do nothing, iterator is ok) } outputError = log2(it->second) - log2(speed); return it; } std::vector<std::pair<Codes::ISO, double>>::iterator Commander::findClosestISO(double iso) std::vector<std::pair<Codes::ISO, double>>::iterator Commander::findClosestISO(double iso, double inputError, double& outputError) { iso = pow(2, log2( iso ) - inputError); // error correction // = pow(2, log2(iso/100) - inputError) * 100; auto it = isoOrderedMapping.begin(); for ( ; it != isoOrderedMapping.end(); ++it) if (it->second >= iso) Loading Loading @@ -1083,7 +1100,7 @@ std::vector<std::pair<Codes::ISO, double>>::iterator Commander::findClosestISO(d //else do nothing, iterator is ok) } outputError = log2(it->second/100) - log2(iso/100); return it; } Loading
sdk/src/commander.h +8 −2 Original line number Diff line number Diff line Loading @@ -176,8 +176,14 @@ private: size_t evStep); bool measureExposureExif(double& speed, double& iso); std::vector<std::pair<Codes::Speed, double>>::iterator findClosestSpeed(double speed); std::vector<std::pair<Codes::ISO, double>>::iterator findClosestISO(double iso); std::vector<std::pair<Codes::Speed, double>>::iterator findClosestSpeed( double speed, double inputError, double& outputError); std::vector<std::pair<Codes::ISO, double>>::iterator findClosestISO( double iso, double inputError, double& outputError); // check if vector iterator is in valid range template <typename T> Loading