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

Commit 2c7d3369 authored by Haofan Wang's avatar Haofan Wang Committed by Android (Google) Code Review
Browse files

Merge changes Iea73ca29,I4064a81e into main

* changes:
  Handle more stream status
  [MQ] Handle more stream status
parents 5e659e32 67bad0e2
Loading
Loading
Loading
Loading
+92 −2
Original line number Diff line number Diff line
@@ -135,10 +135,100 @@ public final class PictureProfile implements Parcelable {
    public static final String STATUS_SDR = "SDR";

    /**
     * HDR status.
     * HDR10 status.
     * @hide
     */
    public static final String STATUS_HDR = "HDR";
    public static final String STATUS_HDR10 = "HDR10";

    /**
     * DOLBY VISION status.
     * @hide
     */
    public static final String STATUS_DOLBY_VISION = "DOLBY_VISION";

    /**
     * TCH status.
     * @hide
     */
    public static final String STATUS_TCH = "TCH";

    /**
     * HLG status.
     * @hide
     */
    public static final String STATUS_HLG = "HLG";

    /**
     * HDR10 PLUS status.
     * @hide
     */
    public static final String STATUS_HDR10_PLUS = "HDR10_PLUS";

    /**
     * HDR VIVID status.
     * @hide
     */
    public static final String STATUS_HDR_VIVID = "HDR_VIVID";

    /**
     * IMAX SDR status.
     * @hide
     */
    public static final String STATUS_IMAX_SDR = " IMAX_SDR";

    /**
     * IMAX HDR10 status.
     * @hide
     */
    public static final String STATUS_IMAX_HDR10 = "IMAX_HDR10";

    /**
     * IMAX HDR10 PLUS status.
     * @hide
     */
    public static final String STATUS_IMAX_HDR10_PLUS = "IMAX_HDR10_PLUS";

    /**
     * FMM SDR status.
     * @hide
     */
    public static final String STATUS_FMM_SDR = "FMM_SDR";

    /**
     * FMM HDR10 status.
     * @hide
     */
    public static final String STATUS_FMM_HDR10 = "FMM_HDR10";

    /**
     * FMM HDR10 PLUS status.
     * @hide
     */
    public static final String STATUS_FMM_HDR10_PLUS = "FMM_HDR10_PLUS";

    /**
     * FMM HLG status.
     * @hide
     */
    public static final String STATUS_FMM_HLG = "FMM_HLG";

    /**
     * FMM DOLBY status.
     * @hide
     */
    public static final String STATUS_FMM_DOLBY = "FMM_DOLBY";

    /**
     * FMM TCH status.
     * @hide
     */
    public static final String STATUS_FMM_TCH = "FMM_TCH";

    /**
     * FMM HDR VIVID status.
     * @hide
     */
    public static final String STATUS_FMM_HDR_VIVID = "FMM_HDR_VIVID";

    /** @hide */
    public static final String NAME_STANDARD = "standard";
+111 −60
Original line number Diff line number Diff line
@@ -1985,29 +1985,38 @@ public class MediaQualityService extends SystemService {
                    // get from map if exists
                    PictureProfile previous = mHandleToPictureProfile.get(profileHandle);
                    if (previous == null) {
                        Slog.d(TAG, "Previous profile not in the map");
                        // get from DB if not exists
                        previous = mMqDatabaseUtils.getPictureProfile(profileHandle);
                        if (previous == null) {
                            Slog.d(TAG, "Previous profile not in the database");
                            return;
                        }
                    }
                    String[] arr = splitNameAndStatus(previous.getName());
                    String profileName = arr[0];
                    String profileStatus = arr[1];
                    if (status == StreamStatus.HDR10) {
                        if (isHdr(profileStatus)) {
                            // already HDR
                    if (status != StreamStatus.SDR) {
                        // TODO: merge SDR handling
                        if (isSameStatus(profileStatus, status)) {
                            Slog.d(TAG, "The current status is the same as new status");
                            return;
                        }
                        if (isSdr(profileStatus)) {
                            // SDR to HDR

                        // to new status
                        String newStatus = toPictureProfileStatus(status);
                        if (newStatus.isEmpty()) {
                            Slog.d(TAG, "new status is not a supported status");
                            return;
                        }
                        Slog.d(TAG, "The new status is " + newStatus);
                        String selection = BaseParameters.PARAMETER_TYPE + " = ? AND "
                                + BaseParameters.PARAMETER_PACKAGE + " = ? AND "
                                + BaseParameters.PARAMETER_NAME + " = ?";
                        String[] selectionArguments = {
                                Integer.toString(previous.getProfileType()),
                                previous.getPackageName(),
                                    profileName + "/" + PictureProfile.STATUS_HDR
                                profileName + "/" + newStatus
                        };
                        List<PictureProfile> list =
                                mMqDatabaseUtils.getPictureProfilesBasedOnConditions(
@@ -2015,7 +2024,7 @@ public class MediaQualityService extends SystemService {
                                        selection,
                                        selectionArguments);
                        if (list.isEmpty()) {
                                // HDR profile not found
                            Slog.d(TAG, "Picture profile not found for status: " + newStatus);
                            return;
                        }
                        PictureProfile current = list.get(0);
@@ -2025,15 +2034,14 @@ public class MediaQualityService extends SystemService {

                        mHalNotifier.notifyHalOnPictureProfileChange(profileHandle,
                                current.getParameters());

                        }
                    } else if (status == StreamStatus.SDR) {
                    } else {
                        // handle SDR status
                        if (isSdr(profileStatus)) {
                            // already SDR
                            Slog.d(TAG, "Current status is already SDR");
                            return;
                        }
                        if (isHdr(profileStatus)) {
                            // HDR to SDR

                        // to SDR
                        String selection = BaseParameters.PARAMETER_TYPE + " = ? AND "
                                + BaseParameters.PARAMETER_PACKAGE + " = ? AND ("
                                + BaseParameters.PARAMETER_NAME + " = ? OR "
@@ -2050,7 +2058,7 @@ public class MediaQualityService extends SystemService {
                                        selection,
                                        selectionArguments);
                        if (list.isEmpty()) {
                                // SDR profile not found
                            Slog.d(TAG, "SDR profile not found");
                            return;
                        }
                        PictureProfile current = list.get(0);
@@ -2062,7 +2070,6 @@ public class MediaQualityService extends SystemService {
                                current.getParameters());
                    }
                }
                }
            });

        }
@@ -2081,13 +2088,57 @@ public class MediaQualityService extends SystemService {

        }

        private String toPictureProfileStatus(int halStatus) {
            switch (halStatus) {
                case StreamStatus.SDR:
                    return PictureProfile.STATUS_SDR;
                case StreamStatus.HDR10:
                    return PictureProfile.STATUS_HDR10;
                case StreamStatus.TCH:
                    return PictureProfile.STATUS_TCH;
                case StreamStatus.DOLBYVISION:
                    return PictureProfile.STATUS_DOLBY_VISION;
                case StreamStatus.HLG:
                    return PictureProfile.STATUS_HLG;
                case StreamStatus.HDR10PLUS:
                    return PictureProfile.STATUS_HDR10_PLUS;
                case StreamStatus.HDRVIVID:
                    return PictureProfile.STATUS_HDR_VIVID;
                case StreamStatus.IMAXSDR:
                    return PictureProfile.STATUS_IMAX_SDR;
                case StreamStatus.IMAXHDR10:
                    return PictureProfile.STATUS_IMAX_HDR10;
                case StreamStatus.IMAXHDR10PLUS:
                    return PictureProfile.STATUS_IMAX_HDR10_PLUS;
                case StreamStatus.FMMSDR:
                    return PictureProfile.STATUS_FMM_SDR;
                case StreamStatus.FMMHDR10:
                    return PictureProfile.STATUS_FMM_HDR10;
                case StreamStatus.FMMHDR10PLUS:
                    return PictureProfile.STATUS_FMM_HDR10_PLUS;
                case StreamStatus.FMMHLG:
                    return PictureProfile.STATUS_FMM_HLG;
                case StreamStatus.FMMDOLBY:
                    return PictureProfile.STATUS_FMM_DOLBY;
                case StreamStatus.FMMTCH:
                    return PictureProfile.STATUS_FMM_TCH;
                case StreamStatus.FMMHDRVIVID:
                    return PictureProfile.STATUS_FMM_HDR_VIVID;
                default:
                    return "";
            }
        }

        private boolean isSdr(@NonNull String profileStatus) {
            return profileStatus.equals(PictureProfile.STATUS_SDR)
                    || profileStatus.isEmpty();
        }

        private boolean isHdr(@NonNull String profileStatus) {
            return profileStatus.equals(PictureProfile.STATUS_HDR);
        private boolean isSameStatus(@NonNull String profileStatus, int halStatus) {
            if (halStatus == StreamStatus.SDR) {
                return isSdr(profileStatus);
            }
            return toPictureProfileStatus(halStatus).equals(profileStatus);
        }

        @Override