hwc1: Add support for getHdrCapabilities
Change-Id: I4a18ac2235b6e759cbec08aff03b5fa6e399b481
CRs-Fixed: 1071400
diff --git a/libqservice/IQService.h b/libqservice/IQService.h
index d25a06d..bf4343a 100644
--- a/libqservice/IQService.h
+++ b/libqservice/IQService.h
@@ -74,6 +74,7 @@
GET_BW_TRANSACTION_STATUS = 32, //Client can query BW transaction status.
SET_LAYER_MIXER_RESOLUTION = 33, // Enables client to set layer mixer resolution.
SET_COLOR_MODE = 34, // Overrides the QDCM mode on the display
+ GET_HDR_CAPABILITIES = 35, // Get HDR capabilities for legacy HWC interface
COMMAND_LIST_END = 400,
};
diff --git a/sdm/libs/hwc/hwc_session.cpp b/sdm/libs/hwc/hwc_session.cpp
index 56c4a6f..6aab6d6 100644
--- a/sdm/libs/hwc/hwc_session.cpp
+++ b/sdm/libs/hwc/hwc_session.cpp
@@ -45,6 +45,7 @@
#include <sync/sync.h>
#include <profiler.h>
#include <bitset>
+#include <vector>
#include "hwc_buffer_allocator.h"
#include "hwc_buffer_sync_handler.h"
@@ -775,6 +776,10 @@
status = SetMixerResolution(input_parcel);
break;
+ case qService::IQService::GET_HDR_CAPABILITIES:
+ status = GetHdrCapabilities(input_parcel, output_parcel);
+ break;
+
default:
DLOGW("QService command = %d is not supported", command);
return -EINVAL;
@@ -1182,6 +1187,24 @@
return 0;
}
+android::status_t HWCSession::GetHdrCapabilities(const android::Parcel *input_parcel,
+ android::Parcel *output_parcel) {
+ // TODO(akumarkr): Get values from display intf
+ // uint32_t dpy = UINT32(input_parcel->readInt32());
+ std::vector<int32_t> supported_hdr_types;
+ supported_hdr_types.push_back(HAL_HDR_HDR10);
+ float max_luminance = 500.0;
+ float max_average_luminance = 200.0;
+ float min_luminance = 0.5;
+ if (output_parcel != nullptr) {
+ output_parcel->writeInt32Vector(supported_hdr_types);
+ output_parcel->writeFloat(max_luminance);
+ output_parcel->writeFloat(max_average_luminance);
+ output_parcel->writeFloat(min_luminance);
+ }
+ return 0;
+}
+
void HWCSession::DynamicDebug(const android::Parcel *input_parcel) {
int type = input_parcel->readInt32();
bool enable = (input_parcel->readInt32() > 0);
diff --git a/sdm/libs/hwc/hwc_session.h b/sdm/libs/hwc/hwc_session.h
index 4519c29..c0dba84 100644
--- a/sdm/libs/hwc/hwc_session.h
+++ b/sdm/libs/hwc/hwc_session.h
@@ -125,6 +125,8 @@
android::Parcel *output_parcel);
android::status_t SetMixerResolution(const android::Parcel *input_parcel);
android::status_t SetDisplayPort(DisplayPort sdm_disp_port, int *hwc_disp_port);
+ android::status_t GetHdrCapabilities(const android::Parcel *input_parcel,
+ android::Parcel *output_parcel);
static Locker locker_;
CoreInterface *core_intf_ = NULL;