diff options
| author | 2017-02-02 16:51:06 -0700 | |
|---|---|---|
| committer | 2017-03-03 08:05:01 -0700 | |
| commit | 1eb1b2703754beda3c20bedfca2b4fae885b7164 (patch) | |
| tree | 7cbe1745792451d2972deb61b2caad6d6085c798 /libs/gui/Surface.cpp | |
| parent | 297b306128550b037d6907a84db49cbb9d8e8b12 (diff) | |
Add plumbing for Surface::getWideColorSupport
Add plumbing for future Vulkan and EGL extensions
VK_EXT_swapchain_colorspace
EGL_EXT_colorspace_scrgb_linear
EGL_KHR_gl_colorspace
Test: make tests in libs/gui/tests/
Test: adb sync
Test: adb shell /data/nativetest/libgui_test/libgui_test --gtest_filter="SurfaceTest.GetWideColorSupport"
Change-Id: Ibb182d02c468d8f24130545187096d1abe5fc30e
(cherry picked from commit d634f970fabe965a421f50011bb1167d6b7cac86)
Diffstat (limited to 'libs/gui/Surface.cpp')
| -rw-r--r-- | libs/gui/Surface.cpp | 36 | 
1 files changed, 36 insertions, 0 deletions
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index efb15245a6..b7af1681a0 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -305,6 +305,34 @@ status_t Surface::getFrameTimestamps(uint64_t frameNumber,      return NO_ERROR;  } +status_t Surface::getWideColorSupport(bool* supported) { +    ATRACE_CALL(); + +    sp<IBinder> display( +        composerService()->getBuiltInDisplay(ISurfaceComposer::eDisplayIdMain)); +    Vector<android_color_mode_t> colorModes; +    status_t err = +        composerService()->getDisplayColorModes(display, &colorModes); + +    if (err) +        return err; + +    *supported = false; +    for (android_color_mode_t colorMode : colorModes) { +        switch (colorMode) { +            case HAL_COLOR_MODE_DISPLAY_P3: +            case HAL_COLOR_MODE_ADOBE_RGB: +            case HAL_COLOR_MODE_DCI_P3: +                *supported = true; +                break; +            default: +                break; +        } +    } + +    return NO_ERROR; +} +  int Surface::hook_setSwapInterval(ANativeWindow* window, int interval) {      Surface* c = getSelf(window);      return c->setSwapInterval(interval); @@ -880,6 +908,9 @@ int Surface::perform(int operation, va_list args)      case NATIVE_WINDOW_GET_FRAME_TIMESTAMPS:          res = dispatchGetFrameTimestamps(args);          break; +    case NATIVE_WINDOW_GET_WIDE_COLOR_SUPPORT: +        res = dispatchGetWideColorSupport(args); +        break;      default:          res = NAME_NOT_FOUND;          break; @@ -1044,6 +1075,11 @@ int Surface::dispatchGetFrameTimestamps(va_list args) {              outDisplayRetireTime, outDequeueReadyTime, outReleaseTime);  } +int Surface::dispatchGetWideColorSupport(va_list args) { +    bool* outSupport = va_arg(args, bool*); +    return getWideColorSupport(outSupport); +} +  int Surface::connect(int api) {      static sp<IProducerListener> listener = new DummyProducerListener();      return connect(api, listener);  |