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

Commit df4ccdf1 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes from topic 'colorspace_support'

* changes:
  Use Surface::GetWideColorSupport in VK_EXT_swapchain_colorspace
  Add plumbing for Surface::getHdrSupport
  Add plumbing for Surface::getWideColorSupport
parents 0ed7c2af e278daf8
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -155,6 +155,9 @@ public:
            nsecs_t* outDisplayPresentTime, nsecs_t* outDisplayRetireTime,
            nsecs_t* outDequeueReadyTime, nsecs_t* outReleaseTime);

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

    status_t getUniqueId(uint64_t* outId) const;

protected:
@@ -215,6 +218,8 @@ private:
    int dispatchEnableFrameTimestamps(va_list args);
    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);
+63 −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>
@@ -305,6 +306,51 @@ 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;
}

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);
@@ -880,6 +926,12 @@ 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;
    case NATIVE_WINDOW_GET_HDR_SUPPORT:
        res = dispatchGetHdrSupport(args);
        break;
    default:
        res = NAME_NOT_FOUND;
        break;
@@ -1044,6 +1096,16 @@ 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::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);
+31 −1
Original line number Diff line number Diff line
@@ -19,11 +19,12 @@
#include <gtest/gtest.h>

#include <binder/ProcessState.h>
#include <cutils/properties.h>
#include <gui/BufferItemConsumer.h>
#include <gui/IDisplayEventConnection.h>
#include <gui/ISurfaceComposer.h>
#include <gui/Surface.h>
#include <gui/SurfaceComposerClient.h>
#include <gui/BufferItemConsumer.h>
#include <private/gui/ComposerService.h>
#include <ui/Rect.h>
#include <utils/String8.h>
@@ -252,6 +253,35 @@ TEST_F(SurfaceTest, GetConsumerName) {
    EXPECT_STREQ("TestConsumer", surface->getConsumerName().string());
}

TEST_F(SurfaceTest, GetWideColorSupport) {
    sp<IGraphicBufferProducer> producer;
    sp<IGraphicBufferConsumer> consumer;
    BufferQueue::createBufferQueue(&producer, &consumer);

    sp<DummyConsumer> dummyConsumer(new DummyConsumer);
    consumer->consumerConnect(dummyConsumer, false);
    consumer->setConsumerName(String8("TestConsumer"));

    sp<Surface> surface = new Surface(producer);
    sp<ANativeWindow> window(surface);
    native_window_api_connect(window.get(), NATIVE_WINDOW_API_CPU);

    bool supported;
    surface->getWideColorSupport(&supported);

    // TODO(courtneygo): How can we know what device we are on to
    // verify that this is correct?
    char product[PROPERTY_VALUE_MAX] = "0";
    property_get("ro.build.product", product, "0");
    std::cerr << "[          ] product = " << product << std::endl;

    if (strcmp("marlin", product) == 0 || strcmp("sailfish", product) == 0) {
        ASSERT_EQ(true, supported);
    } else {
        ASSERT_EQ(false, supported);
    }
}

TEST_F(SurfaceTest, DynamicSetBufferCount) {
    sp<IGraphicBufferProducer> producer;
    sp<IGraphicBufferConsumer> consumer;
+4 −0
Original line number Diff line number Diff line
@@ -4606,6 +4606,10 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingGOOGLE(
    VkPastPresentationTimingGOOGLE*             pPresentationTimings);
#endif

#define VK_EXT_swapchain_colorspace 1
#define VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION 1
#define VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace"

#define VK_EXT_hdr_metadata 1
#define VK_EXT_HDR_METADATA_SPEC_VERSION  0
#define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata"
+2 −1
Original line number Diff line number Diff line
@@ -683,12 +683,13 @@ bool InitDriverTable(VkDevice dev, PFN_vkGetDeviceProcAddr get_proc,
VK_ANDROID_native_buffer
VK_EXT_debug_report
VK_EXT_hdr_metadata
VK_EXT_swapchain_colorspace
VK_GOOGLE_display_timing
VK_KHR_android_surface
VK_KHR_incremental_present
VK_KHR_shared_presentable_image
VK_KHR_surface
VK_KHR_swapchain
VK_KHR_shared_presentable_image
{{end}}


Loading