diff options
Diffstat (limited to 'devices/EmulatedCamera/hwl/EmulatedSensor.h')
-rw-r--r-- | devices/EmulatedCamera/hwl/EmulatedSensor.h | 47 |
1 files changed, 43 insertions, 4 deletions
diff --git a/devices/EmulatedCamera/hwl/EmulatedSensor.h b/devices/EmulatedCamera/hwl/EmulatedSensor.h index 1e33822..6402d4d 100644 --- a/devices/EmulatedCamera/hwl/EmulatedSensor.h +++ b/devices/EmulatedCamera/hwl/EmulatedSensor.h @@ -116,6 +116,8 @@ struct ColorFilterXYZ { struct SensorCharacteristics { size_t width = 0; size_t height = 0; + size_t full_res_width = 0; + size_t full_res_height = 0; nsecs_t exposure_time_range[2] = {0}; nsecs_t frame_duration_range[2] = {0}; int32_t sensitivity_range[2] = {0}; @@ -134,6 +136,7 @@ struct SensorCharacteristics { uint32_t max_pipeline_depth = 0; uint32_t orientation = 0; bool is_front_facing = false; + bool quad_bayer_sensor = false; }; // Maps logical/physical camera ids to sensor characteristics @@ -160,17 +163,30 @@ class EmulatedSensor : private Thread, public virtual RefBase { return true; } + if (HAL_PIXEL_FORMAT_RAW16 == input_format && + HAL_PIXEL_FORMAT_RAW16 == output_format) { + return true; + } + return false; } static bool AreCharacteristicsSupported( const SensorCharacteristics& characteristics); + static bool IsStreamCombinationSupported( uint32_t logical_id, const StreamConfiguration& config, - StreamConfigurationMap& map, + StreamConfigurationMap& map, StreamConfigurationMap& max_resolution_map, const PhysicalStreamConfigurationMap& physical_map, + const PhysicalStreamConfigurationMap& physical_map_max_resolution, const LogicalCharacteristics& sensor_chars); + static bool IsStreamCombinationSupported( + uint32_t logical_id, const StreamConfiguration& config, + StreamConfigurationMap& map, + const PhysicalStreamConfigurationMap& physical_map, + const LogicalCharacteristics& sensor_chars, bool is_max_res = false); + /* * Power control */ @@ -197,6 +213,7 @@ class EmulatedSensor : private Thread, public virtual RefBase { uint8_t video_stab = ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF; bool report_edge_mode = false; uint8_t edge_mode = ANDROID_EDGE_MODE_OFF; + uint8_t sensor_pixel_mode = ANDROID_SENSOR_PIXEL_MODE_DEFAULT; }; // Maps physical and logical camera ids to individual device settings @@ -295,10 +312,31 @@ class EmulatedSensor : private Thread, public virtual RefBase { nsecs_t next_capture_time_; + struct SensorBinningFactorInfo { + bool has_raw_stream = false; + bool has_non_raw_stream = false; + bool quad_bayer_sensor = false; + bool max_res_request = false; + }; + + std::map<uint32_t, SensorBinningFactorInfo> sensor_binning_factor_info_; + sp<EmulatedScene> scene_; - void CaptureRaw(uint8_t* img, uint32_t gain, - const SensorCharacteristics& chars); + static EmulatedScene::ColorChannels GetQuadBayerColor(uint32_t x, uint32_t y); + + static void RemosaicQuadBayerBlock(uint16_t* img_in, uint16_t* img_out, + int xstart, int ystart, int stride); + + static status_t RemosaicRAW16Image(uint16_t* img_in, uint16_t* img_out, + const SensorCharacteristics& chars); + + void CaptureRawBinned(uint8_t* img, uint32_t gain, + const SensorCharacteristics& chars); + + void CaptureRawFullRes(uint8_t* img, uint32_t gain, + const SensorCharacteristics& chars); + enum RGBLayout { RGB, RGBA, ARGB }; void CaptureRGB(uint8_t* img, uint32_t width, uint32_t height, uint32_t stride, RGBLayout layout, uint32_t gain, @@ -330,7 +368,8 @@ class EmulatedSensor : private Thread, public virtual RefBase { void ReturnResults(HwlPipelineCallback callback, std::unique_ptr<LogicalCameraSettings> settings, - std::unique_ptr<HwlPipelineResult> result); + std::unique_ptr<HwlPipelineResult> result, + bool reprocess_request); static float GetBaseGainFactor(float max_raw_value) { return max_raw_value / EmulatedSensor::kSaturationElectrons; |