diff options
author | Leo Chen <yinchiuan@google.com> | 2023-10-11 14:20:15 +0000 |
---|---|---|
committer | Leo Chen <yinchiuan@google.com> | 2023-10-27 00:38:12 +0000 |
commit | 9a55565eed10c80ce6b0f8d9262dd977d08b18e9 (patch) | |
tree | b580ca994afeade7594f74eb257f399075689fa1 | |
parent | fe2cdb7b3d0718e4a6792efc31954b74f6cdf0f0 (diff) | |
download | zuma-9a55565eed10c80ce6b0f8d9262dd977d08b18e9.tar.gz |
libhwc2.1: Add histogram blocking roi support in HistogramController
Bug: 299410182
Test: adb shell aidl_hist_client
Change-Id: I5ef88e0c3a4bed8bfdcb9e31b884f8b94949e98a
Signed-off-by: Leo Chen <yinchiuan@google.com>
-rw-r--r-- | libhwc2.1/libdevice/HistogramController.cpp | 17 | ||||
-rw-r--r-- | libhwc2.1/libdevice/HistogramController.h | 1 |
2 files changed, 18 insertions, 0 deletions
diff --git a/libhwc2.1/libdevice/HistogramController.cpp b/libhwc2.1/libdevice/HistogramController.cpp index ac616fb..6cf6f78 100644 --- a/libhwc2.1/libdevice/HistogramController.cpp +++ b/libhwc2.1/libdevice/HistogramController.cpp @@ -16,6 +16,11 @@ #include "HistogramController.h" +void HistogramController::initPlatformHistogramCapability() { + mHistogramCapability.supportSamplePosList.push_back(HistogramSamplePos::PRE_POSTPROC); + mHistogramCapability.supportBlockingRoi = true; +} + // TODO: b/295990513 - Remove the if defined after kernel prebuilts are merged. #if defined(EXYNOS_HISTOGRAM_CHANNEL_REQUEST) int HistogramController::createHistogramDrmConfigLocked(const ChannelInfo& channel, @@ -34,6 +39,17 @@ int HistogramController::createHistogramDrmConfigLocked(const ChannelInfo& chann channelConfig->roi.start_y = channel.workingConfig.roi.top; channelConfig->roi.hsize = channel.workingConfig.roi.right - channel.workingConfig.roi.left; channelConfig->roi.vsize = channel.workingConfig.roi.bottom - channel.workingConfig.roi.top; + if (channel.workingConfig.blockingRoi.has_value() && + channel.workingConfig.blockingRoi.value() != DISABLED_ROI) { + const HistogramRoiRect& blockedRoi = channel.workingConfig.blockingRoi.value(); + channelConfig->flags |= HISTOGRAM_FLAGS_BLOCKED_ROI; + channelConfig->blocked_roi.start_x = blockedRoi.left; + channelConfig->blocked_roi.start_y = blockedRoi.top; + channelConfig->blocked_roi.hsize = blockedRoi.right - blockedRoi.left; + channelConfig->blocked_roi.vsize = blockedRoi.bottom - blockedRoi.top; + } else { + channelConfig->flags &= ~HISTOGRAM_FLAGS_BLOCKED_ROI; + } channelConfig->weights.weight_r = channel.workingConfig.weights.weightR; channelConfig->weights.weight_g = channel.workingConfig.weights.weightG; channelConfig->weights.weight_b = channel.workingConfig.weights.weightB; @@ -41,6 +57,7 @@ int HistogramController::createHistogramDrmConfigLocked(const ChannelInfo& chann ? POST_DQE : PRE_DQE; channelConfig->threshold = channel.threshold; + length = sizeof(struct histogram_channel_config); return NO_ERROR; diff --git a/libhwc2.1/libdevice/HistogramController.h b/libhwc2.1/libdevice/HistogramController.h index b5e8dac..a895bdd 100644 --- a/libhwc2.1/libdevice/HistogramController.h +++ b/libhwc2.1/libdevice/HistogramController.h @@ -21,6 +21,7 @@ class HistogramController : public HistogramDevice { public: HistogramController(ExynosDisplay* display) : HistogramDevice(display, 4, {3}) {} + virtual void initPlatformHistogramCapability() override; // TODO: b/295990513 - Remove the if defined after kernel prebuilts are merged. #if defined(EXYNOS_HISTOGRAM_CHANNEL_REQUEST) virtual int createHistogramDrmConfigLocked(const ChannelInfo& channel, |