blob: ad6d57744622eb1aae293e67143c1810e5a6c949 [file]
/*
* Copyright 2022 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "common/camera_metadata_string_utils.h"
#include <cinttypes>
#include <base/strings/stringprintf.h>
namespace cros {
namespace {
static constexpr char k50HzStr[] = "50Hz";
static constexpr char k60HzStr[] = "60Hz";
static constexpr char kActiveScanStr[] = "ACTIVE_SCAN";
static constexpr char kAutoStr[] = "AUTO";
static constexpr char kConvergedStr[] = "CONVERGED";
static constexpr char kFlashRequiredStr[] = "FLASH_REQUIRED";
static constexpr char kFocusedLockedStr[] = "FOCUSED_LOCKED";
static constexpr char kInactiveStr[] = "INACTIVE";
static constexpr char kLockedStr[] = "LOCKED";
static constexpr char kNotFocusedLockedStr[] = "NOT_FOCUSED_LOCKED";
static constexpr char kOffStr[] = "OFF";
static constexpr char kPassiveFocusedStr[] = "PASSIVE_FOCUSED";
static constexpr char kPassiveScanStr[] = "PASSIVE_SCAN";
static constexpr char kPassiveUnfocusedStr[] = "PASSIVE_UNFOCUSED";
static constexpr char kPrecaptureStr[] = "PRECAPTURE";
static constexpr char kSearchingStr[] = "SEARCHING";
} // namespace
std::string TimestampsToFPSString(
const base::queue<base::TimeTicks>& timestamps) {
if (timestamps.size() < 2) {
return "";
}
return base::StringPrintf(
"%.0f FPS", static_cast<double>(timestamps.size()) /
(timestamps.back() - timestamps.front()).InSecondsF());
}
std::string FaceInfoToString(
camera_metadata_enum_android_statistics_face_detect_mode_t face_detect_mode,
size_t num_faces) {
if (face_detect_mode == ANDROID_STATISTICS_FACE_DETECT_MODE_OFF) {
return kOffStr;
}
num_faces /= 4;
return base::StringPrintf("%" PRIu64 " %s", static_cast<uint64_t>(num_faces),
num_faces >= 2 ? "Faces" : "Face");
}
std::string FocusDistanceToString(double focus_distance) {
if (focus_distance == 0) {
return "";
}
return base::StringPrintf("%.1f cm", 100 / focus_distance);
}
const char* AFStateToString(
camera_metadata_enum_android_control_af_state_t state) {
switch (state) {
case ANDROID_CONTROL_AF_STATE_INACTIVE:
return kInactiveStr;
case ANDROID_CONTROL_AF_STATE_PASSIVE_SCAN:
return kPassiveScanStr;
case ANDROID_CONTROL_AF_STATE_PASSIVE_FOCUSED:
return kPassiveFocusedStr;
case ANDROID_CONTROL_AF_STATE_ACTIVE_SCAN:
return kActiveScanStr;
case ANDROID_CONTROL_AF_STATE_FOCUSED_LOCKED:
return kFocusedLockedStr;
case ANDROID_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED:
return kNotFocusedLockedStr;
case ANDROID_CONTROL_AF_STATE_PASSIVE_UNFOCUSED:
return kPassiveUnfocusedStr;
}
}
const char* AEModeToString(
camera_metadata_enum_android_control_ae_antibanding_mode_t mode) {
switch (mode) {
case ANDROID_CONTROL_AE_ANTIBANDING_MODE_OFF:
return kOffStr;
case ANDROID_CONTROL_AE_ANTIBANDING_MODE_50HZ:
return k50HzStr;
case ANDROID_CONTROL_AE_ANTIBANDING_MODE_60HZ:
return k60HzStr;
case ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO:
return kAutoStr;
}
}
const char* AEStateToString(
camera_metadata_enum_android_control_ae_state_t state) {
switch (state) {
case ANDROID_CONTROL_AE_STATE_INACTIVE:
return kInactiveStr;
case ANDROID_CONTROL_AE_STATE_SEARCHING:
return kSearchingStr;
case ANDROID_CONTROL_AE_STATE_CONVERGED:
return kConvergedStr;
case ANDROID_CONTROL_AE_STATE_LOCKED:
return kLockedStr;
case ANDROID_CONTROL_AE_STATE_FLASH_REQUIRED:
return kFlashRequiredStr;
case ANDROID_CONTROL_AE_STATE_PRECAPTURE:
return kPrecaptureStr;
}
}
std::string SensitivityToString(int32_t sensor_sensitivity,
int32_t sensor_sensitivity_boost) {
return base::StringPrintf(
"ISO %.1f",
static_cast<double>(sensor_sensitivity * sensor_sensitivity_boost) / 100);
}
std::string FrameDurationToString(int64_t frame_duration) {
return base::StringPrintf("%.0f Hz",
1e9 / static_cast<double>(frame_duration));
}
std::string ExposureTimeToString(int64_t exposure_time) {
return base::StringPrintf("1/%.0f", 1e9 / static_cast<double>(exposure_time));
}
std::string ColorGainToString(double gain) {
return base::StringPrintf("%.2fx", gain);
}
const char* AWBStateToString(
camera_metadata_enum_android_control_awb_state_t state) {
switch (state) {
case ANDROID_CONTROL_AWB_STATE_INACTIVE:
return kInactiveStr;
case ANDROID_CONTROL_AWB_STATE_SEARCHING:
return kSearchingStr;
case ANDROID_CONTROL_AWB_STATE_CONVERGED:
return kConvergedStr;
case ANDROID_CONTROL_AWB_STATE_LOCKED:
return kLockedStr;
}
}
std::string HdrRatioToString(float hdr_ratio) {
return base::StringPrintf("%.2f", hdr_ratio);
}
} // namespace cros