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>
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 @@
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 @@
? 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,