Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c5b97c5b authored by Courtney Goeltzenleuchter's avatar Courtney Goeltzenleuchter
Browse files

Add plumbing for Surface::getHdrSupport

Add plumbing for future Vulkan and EGL extensions
VK_EXT_swapchain_colorspace
EGL_EXT_colorspace_scrgb_linear
EGL_KHR_gl_colorspace

Test: TBD
Change-Id: Id1f28cfb36828adbdc6dd3694b5943eca038c356
parent 1eb1b270
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -156,6 +156,7 @@ public:
            nsecs_t* outDequeueReadyTime, nsecs_t* outReleaseTime);

    status_t getWideColorSupport(bool* supported);
    status_t getHdrSupport(bool* supported);

    status_t getUniqueId(uint64_t* outId) const;

@@ -218,6 +219,7 @@ private:
    int dispatchGetCompositorTiming(va_list args);
    int dispatchGetFrameTimestamps(va_list args);
    int dispatchGetWideColorSupport(va_list args);
    int dispatchGetHdrSupport(va_list args);

protected:
    virtual int dequeueBuffer(ANativeWindowBuffer** buffer, int* fenceFd);
+27 −1
Original line number Diff line number Diff line
@@ -26,9 +26,10 @@
#include <utils/Trace.h>
#include <utils/NativeHandle.h>

#include <ui/DisplayStatInfo.h>
#include <ui/Fence.h>
#include <ui/HdrCapabilities.h>
#include <ui/Region.h>
#include <ui/DisplayStatInfo.h>

#include <gui/BufferItem.h>
#include <gui/IProducerListener.h>
@@ -333,6 +334,23 @@ status_t Surface::getWideColorSupport(bool* supported) {
    return NO_ERROR;
}

status_t Surface::getHdrSupport(bool* supported) {
    ATRACE_CALL();

    sp<IBinder> display(
        composerService()->getBuiltInDisplay(ISurfaceComposer::eDisplayIdMain));
    HdrCapabilities hdrCapabilities;
    status_t err =
        composerService()->getHdrCapabilities(display, &hdrCapabilities);

    if (err)
        return err;

    *supported = !hdrCapabilities.getSupportedHdrTypes().empty();

    return NO_ERROR;
}

int Surface::hook_setSwapInterval(ANativeWindow* window, int interval) {
    Surface* c = getSelf(window);
    return c->setSwapInterval(interval);
@@ -911,6 +929,9 @@ int Surface::perform(int operation, va_list args)
    case NATIVE_WINDOW_GET_WIDE_COLOR_SUPPORT:
        res = dispatchGetWideColorSupport(args);
        break;
    case NATIVE_WINDOW_GET_HDR_SUPPORT:
        res = dispatchGetHdrSupport(args);
        break;
    default:
        res = NAME_NOT_FOUND;
        break;
@@ -1080,6 +1101,11 @@ int Surface::dispatchGetWideColorSupport(va_list args) {
    return getWideColorSupport(outSupport);
}

int Surface::dispatchGetHdrSupport(va_list args) {
    bool* outSupport = va_arg(args, bool*);
    return getHdrSupport(outSupport);
}

int Surface::connect(int api) {
    static sp<IProducerListener> listener = new DummyProducerListener();
    return connect(api, listener);