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

Commit 563d0084 authored by Naseer Ahmed's avatar Naseer Ahmed
Browse files

surfaceflinger1: Add support for getHdrCapabilities

CRs-Fixed: 1071400
Change-Id: Icf71e2eadc0277399848971cb4b106b829b0183a
parent bf981866
Loading
Loading
Loading
Loading
+45 −2
Original line number Diff line number Diff line
@@ -778,10 +778,53 @@ status_t SurfaceFlinger::getAnimationFrameStats(FrameStats* outStats) const {
    return NO_ERROR;
}

status_t SurfaceFlinger::getHdrCapabilities(const sp<IBinder>& /*display*/,
status_t SurfaceFlinger::getHdrCapabilities(const sp<IBinder>& display,
        HdrCapabilities* outCapabilities) const {
    // HWC1 does not provide HDR capabilities

    if (!display.get())
        return NAME_NOT_FOUND;

    int32_t type = NAME_NOT_FOUND;
    for (int i=0 ; i < DisplayDevice::NUM_BUILTIN_DISPLAY_TYPES ; i++) {
        if (display == mBuiltinDisplays[i]) {
            type = i;
            break;
        }
    }

    if (type < 0) {
        return type;
    }

#ifdef QTI_BSP
    // Call into display.qservice
    Parcel reply;
    sp<IServiceManager> sm(defaultServiceManager());
    sp<IBinder> binder =
        sm->getService(String16("display.qservice"));
    Parcel input;
    input.writeInterfaceToken(String16("android.display.IQService"));
    input.writeInt32(type);
    // GET_HDR_CAPABILITIES = 35 from IQService.h
    binder->transact(35, input, &reply);
    if (outCapabilities != nullptr) {
        outCapabilities->readFromParcel(&reply);
        if (outCapabilities->getSupportedHdrTypes().size() != 0) {
            ALOGD("HDR support on display: %d", type);
            for (auto hdrtype : outCapabilities->getSupportedHdrTypes()) {
                ALOGD(" HDR type: %d", hdrtype);
            }
            ALOGD(" HDR max luminance: %f", outCapabilities->getDesiredMaxLuminance());
            ALOGD(" HDR max avg luminance: %f",
                  outCapabilities->getDesiredMaxAverageLuminance());
            ALOGD(" HDR min luminance: %f", outCapabilities->getDesiredMinLuminance());
        } else {
            ALOGI("HDR is not supported on display: %d", type);
        }
    }
#else
    *outCapabilities = HdrCapabilities();
#endif
    return NO_ERROR;
}