diff options
| -rw-r--r-- | core/jni/android_hardware_camera2_DngCreator.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/core/jni/android_hardware_camera2_DngCreator.cpp b/core/jni/android_hardware_camera2_DngCreator.cpp index d2932e43fe5b..3d021d6cc6b2 100644 --- a/core/jni/android_hardware_camera2_DngCreator.cpp +++ b/core/jni/android_hardware_camera2_DngCreator.cpp @@ -21,6 +21,7 @@ #include <algorithm> #include <memory> #include <vector> +#include <cmath> #include <utils/Log.h> #include <utils/Errors.h> @@ -1375,6 +1376,23 @@ static sp<TiffWriter> DngCreator_setup(JNIEnv* env, jobject thiz, uint32_t image } { + // Baseline exposure + camera_metadata_entry entry = + results.find(ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST); + BAIL_IF_EMPTY_RET_NULL_SP(entry, env, TAG_BASELINEEXPOSURE, writer); + + // post RAW gain should be boostValue / 100 + double postRAWGain = static_cast<double> (entry.data.i32[0]) / 100.f; + // Baseline exposure should be in EV units so log2(gain) = + // log10(gain)/log10(2) + double baselineExposure = std::log(postRAWGain) / std::log(2.0f); + int32_t baseExposureSRat[] = { static_cast<int32_t> (baselineExposure * 100), + 100 }; + BAIL_IF_INVALID_RET_NULL_SP(writer->addEntry(TAG_BASELINEEXPOSURE, 1, + baseExposureSRat, TIFF_IFD_0), env, TAG_BASELINEEXPOSURE, writer); + } + + { // focal length camera_metadata_entry entry = results.find(ANDROID_LENS_FOCAL_LENGTH); |