Add hdr attributes to setSurfaceAttr
Keep original copies of hdr metadata to return to the user if requested.
Scale integer values prior to sending to system.
Test: --deqp-case=dEQP-EGL.functional.hdr_color.*
Bug: 72491459, 72828483
Change-Id: I86ed35cf96d740ac230cc10acde322acbeffe847
diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp
index 26ae13d..b00602c 100644
--- a/opengl/libs/EGL/eglApi.cpp
+++ b/opengl/libs/EGL/eglApi.cpp
@@ -479,8 +479,8 @@
// Return true if we stripped any EGL_GL_COLORSPACE_KHR or HDR metadata attributes.
// Protect devices from attributes they don't recognize that are managed by Android
static EGLBoolean stripAttributes(egl_display_ptr dp, const EGLint* attrib_list,
- EGLint format,
- std::vector<EGLint>& stripped_attrib_list) {
+ EGLint format,
+ std::vector<EGLint>& stripped_attrib_list) {
std::vector<EGLint> allowedColorSpaces;
switch (format) {
case HAL_PIXEL_FORMAT_RGBA_8888:
@@ -712,7 +712,8 @@
cta8613 |= s->setCta8613Attribute(attr[0], attr[1]);
}
if (smpte2086) {
- int err = native_window_set_buffers_smpte2086_metadata(window, s->getSmpte2086Metadata());
+ android_smpte2086_metadata metadata = s->getSmpte2086Metadata();
+ int err = native_window_set_buffers_smpte2086_metadata(window, &metadata);
if (err != 0) {
ALOGE("error setting native window smpte2086 metadata: %s (%d)",
strerror(-err), err);
@@ -721,7 +722,8 @@
}
}
if (cta8613) {
- int err = native_window_set_buffers_cta861_3_metadata(window, s->getCta8613Metadata());
+ android_cta861_3_metadata metadata = s->getCta8613Metadata();
+ int err = native_window_set_buffers_cta861_3_metadata(window, &metadata);
if (err != 0) {
ALOGE("error setting native window CTS 861.3 metadata: %s (%d)",
strerror(-err), err);
@@ -1578,7 +1580,11 @@
return (err == 0) ? EGL_TRUE : setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE);
}
- if (s->cnx->egl.eglSurfaceAttrib) {
+ if (s->setSmpte2086Attribute(attribute, value)) {
+ return EGL_TRUE;
+ } else if (s->setCta8613Attribute(attribute, value)) {
+ return EGL_TRUE;
+ } else if (s->cnx->egl.eglSurfaceAttrib) {
return s->cnx->egl.eglSurfaceAttrib(
dp->disp.dpy, s->surface, attribute, value);
}