summaryrefslogtreecommitdiff
path: root/libs/nativewindow/ANativeWindow.cpp
diff options
context:
space:
mode:
author Peiyong Lin <lpy@google.com> 2018-01-30 14:21:33 -0800
committer Peiyong Lin <lpy@google.com> 2018-02-07 17:13:00 -0800
commit654f87b3c2b6777ecf53587dba10ecaaacbe3f4e (patch)
treefa0ebc35ff64e5edcc2581a03e6a4e3cba040547 /libs/nativewindow/ANativeWindow.cpp
parenteb7bdbcb5d15b19a38dc726968f4e4b59b8080e1 (diff)
[NDK] Expose NDK API to set buffers data space for P.
Previously, ANativeWindow_setBuffersDataSpace is only available in VNDK. This patch exposes it in NDK so that display mode for NativeWindow buffer can be set through NDK. The API will remain available in VNDK of NativeWindow since VNDK is the super set of NDK. BUG: 62482961 Test: bit CtsGraphicsTestCases:.ANativeWindowTest Change-Id: I576c4b87296e168d4b7360c437a32bbbbff690a5
Diffstat (limited to 'libs/nativewindow/ANativeWindow.cpp')
-rw-r--r--libs/nativewindow/ANativeWindow.cpp47
1 files changed, 43 insertions, 4 deletions
diff --git a/libs/nativewindow/ANativeWindow.cpp b/libs/nativewindow/ANativeWindow.cpp
index c6994c30b4..2598451ad3 100644
--- a/libs/nativewindow/ANativeWindow.cpp
+++ b/libs/nativewindow/ANativeWindow.cpp
@@ -33,6 +33,27 @@ static int32_t query(ANativeWindow* window, int what) {
return res < 0 ? res : value;
}
+static bool isDataSpaceValid(ANativeWindow* window, int32_t dataSpace) {
+ bool supported = false;
+ switch (dataSpace) {
+ case HAL_DATASPACE_UNKNOWN:
+ case HAL_DATASPACE_V0_SRGB:
+ return true;
+ // These data space need wide gamut support.
+ case HAL_DATASPACE_V0_SCRGB_LINEAR:
+ case HAL_DATASPACE_V0_SCRGB:
+ case HAL_DATASPACE_DISPLAY_P3:
+ native_window_get_wide_color_support(window, &supported);
+ return supported;
+ // These data space need HDR support.
+ case HAL_DATASPACE_BT2020_PQ:
+ native_window_get_hdr_support(window, &supported);
+ return supported;
+ default:
+ return false;
+ }
+}
+
/**************************************************************************************************
* NDK
**************************************************************************************************/
@@ -101,6 +122,28 @@ int32_t ANativeWindow_setBuffersTransform(ANativeWindow* window, int32_t transfo
return native_window_set_buffers_transform(window, transform);
}
+int32_t ANativeWindow_setBuffersDataSpace(ANativeWindow* window, int32_t dataSpace) {
+ static_assert(ADATASPACE_UNKNOWN == HAL_DATASPACE_UNKNOWN);
+ static_assert(ADATASPACE_SCRGB_LINEAR == HAL_DATASPACE_V0_SCRGB_LINEAR);
+ static_assert(ADATASPACE_SRGB == HAL_DATASPACE_V0_SRGB);
+ static_assert(ADATASPACE_SCRGB == HAL_DATASPACE_V0_SCRGB);
+ static_assert(ADATASPACE_DISPLAY_P3 == HAL_DATASPACE_DISPLAY_P3);
+ static_assert(ADATASPACE_BT2020_PQ == HAL_DATASPACE_BT2020_PQ);
+
+ if (!window || !query(window, NATIVE_WINDOW_IS_VALID) ||
+ !isDataSpaceValid(window, dataSpace)) {
+ return -EINVAL;
+ }
+ return native_window_set_buffers_data_space(window,
+ static_cast<android_dataspace_t>(dataSpace));
+}
+
+int32_t ANativeWindow_getBuffersDataSpace(ANativeWindow* window) {
+ if (!window || !query(window, NATIVE_WINDOW_IS_VALID))
+ return -EINVAL;
+ return query(window, NATIVE_WINDOW_DATASPACE);
+}
+
/**************************************************************************************************
* vndk-stable
**************************************************************************************************/
@@ -209,10 +252,6 @@ int ANativeWindow_setBuffersTimestamp(ANativeWindow* window, int64_t timestamp)
return native_window_set_buffers_timestamp(window, timestamp);
}
-int ANativeWindow_setBufferDataSpace(ANativeWindow* window, android_dataspace_t dataSpace) {
- return native_window_set_buffers_data_space(window, dataSpace);
-}
-
int ANativeWindow_setSharedBufferMode(ANativeWindow* window, bool sharedBufferMode) {
return native_window_set_shared_buffer_mode(window, sharedBufferMode);
}