From f042f06926fa67561043478f8c2f868d2da622d9 Mon Sep 17 00:00:00 2001 From: Anes Hadziahmetagic Date: Tue, 26 Oct 2021 23:41:21 +0200 Subject: [PATCH] added focus configuration introduced focus configuration menu with: 1 - autofocus setting 2 - manual focus setting with focus distance configuration Signed-off-by: Anes Hadziahmetagic --- camera-hal3-sample/src/CameraHAL3Config.cpp | 22 +++++++++++++ camera-hal3-sample/src/CameraHAL3Config.h | 3 ++ camera-hal3-sample/src/CameraHAL3Main.cpp | 36 +++++++++++++++++++++ 3 files changed, 61 insertions(+) diff --git a/camera-hal3-sample/src/CameraHAL3Config.cpp b/camera-hal3-sample/src/CameraHAL3Config.cpp index 3606547..61aaa38 100644 --- a/camera-hal3-sample/src/CameraHAL3Config.cpp +++ b/camera-hal3-sample/src/CameraHAL3Config.cpp @@ -73,6 +73,10 @@ void configUpdateMeta(android::CameraMetadata* meta, int cmd) unsigned char awb = 1; (*meta).update(ANDROID_CONTROL_AWB_MODE, &awb, 1); } + case CONFIG_AUTO_FOCUS: { + unsigned char af = ANDROID_CONTROL_AF_MODE_AUTO; + (*meta).update(ANDROID_CONTROL_AF_MODE, &af, 1); + } break; default: break; @@ -80,6 +84,24 @@ void configUpdateMeta(android::CameraMetadata* meta, int cmd) } +void configUpdateMeta(android::CameraMetadata* meta, int cmd, float value) +{ + switch (cmd) { + case CONFIG_FIXED_FOCUS: { + unsigned char af = ANDROID_CONTROL_AF_MODE_OFF; + unsigned char af_trigger = ANDROID_CONTROL_AF_TRIGGER_CANCEL; + float focus_distance = value; + + (*meta).update(ANDROID_CONTROL_AF_MODE, &af, 1); + (*meta).update(ANDROID_CONTROL_AF_TRIGGER, &af_trigger, 1); + (*meta).update(ANDROID_LENS_FOCUS_DISTANCE, &focus_distance, 1); + } + break; + default: + break; + } +} + void configUpdateMeta(android::CameraMetadata* meta, int cmd, float value1, float value2, float value3) { android::sp vendorTags = android::VendorTagDescriptor::getGlobalVendorTagDescriptor(); diff --git a/camera-hal3-sample/src/CameraHAL3Config.h b/camera-hal3-sample/src/CameraHAL3Config.h index a87abf4..86e5dd5 100644 --- a/camera-hal3-sample/src/CameraHAL3Config.h +++ b/camera-hal3-sample/src/CameraHAL3Config.h @@ -18,6 +18,8 @@ #define CONFIG_WHITE_BALANCE_COLOR_TEMP 6 #define CONFIG_WHITE_BALANCE_GAIN 7 #define CONFIG_SNAPSHOT_ROTATION 8 +#define CONFIG_AUTO_FOCUS 9 +#define CONFIG_FIXED_FOCUS 10 typedef struct _StreamInfo { @@ -36,6 +38,7 @@ struct CamxHAL3Config { void configUpdateMeta(android::CameraMetadata* meta, int cmd); void configUpdateMeta(android::CameraMetadata* meta, int cmd, int value); +void configUpdateMeta(android::CameraMetadata* meta, int cmd, float value); void configUpdateMeta(android::CameraMetadata* meta, int cmd, float value1, float value2, float value3); diff --git a/camera-hal3-sample/src/CameraHAL3Main.cpp b/camera-hal3-sample/src/CameraHAL3Main.cpp index 2e3e06c..b663910 100644 --- a/camera-hal3-sample/src/CameraHAL3Main.cpp +++ b/camera-hal3-sample/src/CameraHAL3Main.cpp @@ -221,6 +221,7 @@ static void setAntibanding(); static void setColorCorrection(); static void setWhiteBalance(); static void setSnapshotRotation(); +static void setFocus(); static int getlineToInt(std::string prompt); static float getlineToFloat(std::string prompt); @@ -296,6 +297,8 @@ int main(int argc, char *argv[]) setWhiteBalance(); } else if (command == "r") { setSnapshotRotation(); + } else if (command == "f") { + setFocus(); } else { if (command != "h" && !command.empty()) { printf("Unknown command \'%s\'.\n", command.c_str()); @@ -307,6 +310,7 @@ int main(int argc, char *argv[]) printf("Press w: set white balance.\n"); printf("Press a: set antibanding.\n"); printf("Press c: set color correction.\n"); + printf("Press f: set focus.\n"); printf("Press q: quit.\n"); } } @@ -494,6 +498,38 @@ static void setSnapshotRotation() } } +static void setFocus() +{ + std::string command; + + while(true) { + printf("Press 1: auto focus, 2: fixed focus, q: quit\n"); + printf(">> "); + + std::getline(std::cin, command); + + if (command == "1") { + android::CameraMetadata *meta = ::getCurrentMeta(); + + configUpdateMeta(meta, CONFIG_AUTO_FOCUS); + ::updateMetaData(meta); + break; + } else if (command == "2") { + float focus_distance; + focus_distance = getlineToFloat("focus distance (e.g 0 - far, 1500 - near): "); + android::CameraMetadata *meta = ::getCurrentMeta(); + + configUpdateMeta(meta, CONFIG_FIXED_FOCUS, focus_distance); + ::updateMetaData(meta); + break; + } else if (command == "q") { + break; + } else { + printf("Wrong input.\n"); + } + } +} + static int getlineToInt(std::string prompt) {