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

Commit b49c278f authored by Harish Mahendrakar's avatar Harish Mahendrakar
Browse files

Codec2InfoBuilder: List HDR profiles only if device supports HDR display

If device doesn't support HDR display, then codecs must not advertise
support for HDR profiles. Support for HDR display can be queried
using system property ro.surface_flinger.has_HDR_display.
When this property is not true, no HDR profiles will be listed as
advertised.

Bug: 228237404
Test: set ro.surface_flinger.has_HDR_display to false and then
 adb shell dumpsys media.player to confirm HDR profiles are not
 advertised.

Change-Id: Ib6bb6af4f5bb58357e804f124521b71a08e174b5
parent 8952e8e6
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -37,6 +37,10 @@ cc_library_shared {
        "media_ndk_headers",
    ],

    static_libs: [
        "SurfaceFlingerProperties",
    ],

    shared_libs: [
        "android.hardware.cas.native@1.0",
        "android.hardware.drm@1.0",
+9 −2
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@
#include <OMX_Video.h>
#include <OMX_VideoExt.h>
#include <OMX_AsString.h>
#include <SurfaceFlingerProperties.sysprop.h>

#include <android/hardware/media/omx/1.0/IOmx.h>
#include <android/hardware/media/omx/1.0/IOmxObserver.h>
@@ -156,6 +157,12 @@ bool addSupportedProfileLevels(
    // TODO: directly check this from the component interface
    supports10Bit = (supportsHdr || supportsHdr10Plus);

    // If the device doesn't support HDR display, then no codec on the device
    // can advertise support for HDR profiles.
    // Default to true to maintain backward compatibility
    auto ret = sysprop::SurfaceFlingerProperties::has_HDR_display();
    bool hasHDRDisplay = ret.has_value() ? *ret : true;

    bool added = false;

    for (C2Value::Primitive profile : profileQuery[0].values.values) {
@@ -181,8 +188,8 @@ bool addSupportedProfileLevels(
        if (mapper && mapper->mapProfile(pl.profile, &sdkProfile)
                && mapper->mapLevel(pl.level, &sdkLevel)) {
            caps->addProfileLevel((uint32_t)sdkProfile, (uint32_t)sdkLevel);
            // also list HDR profiles if component supports HDR
            if (supportsHdr) {
            // also list HDR profiles if component supports HDR and device has HDR display
            if (supportsHdr && hasHDRDisplay) {
                auto hdrMapper = C2Mapper::GetHdrProfileLevelMapper(trait.mediaType);
                if (hdrMapper && hdrMapper->mapProfile(pl.profile, &sdkProfile)) {
                    caps->addProfileLevel((uint32_t)sdkProfile, (uint32_t)sdkLevel);