summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo Chen <yinchiuan@google.com>2023-10-11 14:20:15 +0000
committerLeo Chen <yinchiuan@google.com>2023-10-27 00:38:12 +0000
commit9a55565eed10c80ce6b0f8d9262dd977d08b18e9 (patch)
treeb580ca994afeade7594f74eb257f399075689fa1
parentfe2cdb7b3d0718e4a6792efc31954b74f6cdf0f0 (diff)
downloadzuma-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.cpp17
-rw-r--r--libhwc2.1/libdevice/HistogramController.h1
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,