summaryrefslogtreecommitdiff
path: root/devices/EmulatedCamera/hwl/EmulatedSensor.h
diff options
context:
space:
mode:
Diffstat (limited to 'devices/EmulatedCamera/hwl/EmulatedSensor.h')
-rw-r--r--devices/EmulatedCamera/hwl/EmulatedSensor.h38
1 files changed, 32 insertions, 6 deletions
diff --git a/devices/EmulatedCamera/hwl/EmulatedSensor.h b/devices/EmulatedCamera/hwl/EmulatedSensor.h
index 3141b8b..8c63ae4 100644
--- a/devices/EmulatedCamera/hwl/EmulatedSensor.h
+++ b/devices/EmulatedCamera/hwl/EmulatedSensor.h
@@ -77,11 +77,11 @@
#include <hwl_types.h>
+#include <algorithm>
#include <functional>
#include "Base.h"
#include "EmulatedScene.h"
-#include "HandleImporter.h"
#include "JpegCompressor.h"
#include "utils/Mutex.h"
#include "utils/StreamConfigurationMap.h"
@@ -90,7 +90,6 @@
namespace android {
-using android::hardware::camera::common::V1_0::helper::HandleImporter;
using google_camera_hal::HwlPipelineCallback;
using google_camera_hal::HwlPipelineResult;
using google_camera_hal::StreamConfiguration;
@@ -113,6 +112,12 @@ struct ColorFilterXYZ {
float bZ = 1.0570f;
};
+typedef std::unordered_map<
+ camera_metadata_enum_android_request_available_dynamic_range_profiles_map,
+ std::unordered_set<
+ camera_metadata_enum_android_request_available_dynamic_range_profiles_map>>
+ ProfileMap;
+
struct SensorCharacteristics {
size_t width = 0;
size_t height = 0;
@@ -137,6 +142,9 @@ struct SensorCharacteristics {
uint32_t orientation = 0;
bool is_front_facing = false;
bool quad_bayer_sensor = false;
+ bool is_10bit_dynamic_range_capable = false;
+ ProfileMap dynamic_range_profiles;
+ bool support_stream_use_case = false;
};
// Maps logical/physical camera ids to sensor characteristics
@@ -147,9 +155,25 @@ class EmulatedSensor : private Thread, public virtual RefBase {
EmulatedSensor();
~EmulatedSensor();
- static android_pixel_format_t OverrideFormat(android_pixel_format_t format) {
- if (format == HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) {
- return HAL_PIXEL_FORMAT_YCBCR_420_888;
+ static android_pixel_format_t OverrideFormat(
+ android_pixel_format_t format,
+ camera_metadata_enum_android_request_available_dynamic_range_profiles_map
+ profile) {
+ switch (profile) {
+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD:
+ if (format == HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) {
+ return HAL_PIXEL_FORMAT_YCBCR_420_888;
+ }
+ break;
+ case ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HLG10:
+ if (format == HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) {
+ return static_cast<android_pixel_format_t>(
+ HAL_PIXEL_FORMAT_YCBCR_P010);
+ }
+ break;
+ default:
+ ALOGE("%s: Unsupported dynamic range profile 0x%x", __FUNCTION__,
+ profile);
}
return format;
@@ -216,6 +240,7 @@ class EmulatedSensor : private Thread, public virtual RefBase {
uint8_t sensor_pixel_mode = ANDROID_SENSOR_PIXEL_MODE_DEFAULT;
uint8_t test_pattern_mode = ANDROID_SENSOR_TEST_PATTERN_MODE_OFF;
uint32_t test_pattern_data[4] = {0, 0, 0, 0};
+ uint32_t screen_rotation = 0;
};
// Maps physical and logical camera ids to individual device settings
@@ -313,6 +338,7 @@ class EmulatedSensor : private Thread, public virtual RefBase {
bool threadLoop() override;
nsecs_t next_capture_time_;
+ nsecs_t next_readout_time_;
struct SensorBinningFactorInfo {
bool has_raw_stream = false;
@@ -323,7 +349,7 @@ class EmulatedSensor : private Thread, public virtual RefBase {
std::map<uint32_t, SensorBinningFactorInfo> sensor_binning_factor_info_;
- sp<EmulatedScene> scene_;
+ std::unique_ptr<EmulatedScene> scene_;
static EmulatedScene::ColorChannels GetQuadBayerColor(uint32_t x, uint32_t y);