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

Commit 3314cced authored by Haofan Wang's avatar Haofan Wang
Browse files

[MQ] Handle more stream status

Test: CTS
Bug: 405339204
Flag: android.media.tv.flags.media_quality_fw

Change-Id: I4064a81e9a23e00a3089eb95cb52191a3b957748
parent fee75f23
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -140,6 +140,12 @@ public final class PictureProfile implements Parcelable {
     */
     */
    public static final String STATUS_HDR = "HDR";
    public static final String STATUS_HDR = "HDR";


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

    /** @hide */
    /** @hide */
    public static final String NAME_STANDARD = "standard";
    public static final String NAME_STANDARD = "standard";
    /** @hide */
    /** @hide */
+79 −59
Original line number Original line Diff line number Diff line
@@ -1837,20 +1837,26 @@ public class MediaQualityService extends SystemService {
                    String[] arr = splitNameAndStatus(previous.getName());
                    String[] arr = splitNameAndStatus(previous.getName());
                    String profileName = arr[0];
                    String profileName = arr[0];
                    String profileStatus = arr[1];
                    String profileStatus = arr[1];
                    if (status == StreamStatus.HDR10) {
                    if (status != StreamStatus.SDR) {
                        if (isHdr(profileStatus)) {
                        // TODO: merge SDR handling
                            // already HDR
                        if (isSameStatus(profileStatus, status)) {
                            // already same status
                            return;
                        }

                        // to new status
                        String newStatus = toPictureProfileStatus(status);
                        if (newStatus.isEmpty()) {
                            // not a supported status
                            return;
                            return;
                        }
                        }
                        if (isSdr(profileStatus)) {
                            // SDR to HDR
                        String selection = BaseParameters.PARAMETER_TYPE + " = ? AND "
                        String selection = BaseParameters.PARAMETER_TYPE + " = ? AND "
                                + BaseParameters.PARAMETER_PACKAGE + " = ? AND "
                                + BaseParameters.PARAMETER_PACKAGE + " = ? AND "
                                + BaseParameters.PARAMETER_NAME + " = ?";
                                + BaseParameters.PARAMETER_NAME + " = ?";
                        String[] selectionArguments = {
                        String[] selectionArguments = {
                                Integer.toString(previous.getProfileType()),
                                Integer.toString(previous.getProfileType()),
                                previous.getPackageName(),
                                previous.getPackageName(),
                                    profileName + "/" + PictureProfile.STATUS_HDR
                                profileName + "/" + newStatus
                        };
                        };
                        List<PictureProfile> list =
                        List<PictureProfile> list =
                                mMqDatabaseUtils.getPictureProfilesBasedOnConditions(
                                mMqDatabaseUtils.getPictureProfilesBasedOnConditions(
@@ -1858,7 +1864,7 @@ public class MediaQualityService extends SystemService {
                                        selection,
                                        selection,
                                        selectionArguments);
                                        selectionArguments);
                        if (list.isEmpty()) {
                        if (list.isEmpty()) {
                                // HDR profile not found
                            // new profile not found
                            return;
                            return;
                        }
                        }
                        PictureProfile current = list.get(0);
                        PictureProfile current = list.get(0);
@@ -1868,15 +1874,14 @@ public class MediaQualityService extends SystemService {


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

                    } else {
                        }
                        // handle SDR status
                    } else if (status == StreamStatus.SDR) {
                        if (isSdr(profileStatus)) {
                        if (isSdr(profileStatus)) {
                            // already SDR
                            // already SDR
                            return;
                            return;
                        }
                        }
                        if (isHdr(profileStatus)) {

                            // HDR to SDR
                        // to SDR
                        String selection = BaseParameters.PARAMETER_TYPE + " = ? AND "
                        String selection = BaseParameters.PARAMETER_TYPE + " = ? AND "
                                + BaseParameters.PARAMETER_PACKAGE + " = ? AND ("
                                + BaseParameters.PARAMETER_PACKAGE + " = ? AND ("
                                + BaseParameters.PARAMETER_NAME + " = ? OR "
                                + BaseParameters.PARAMETER_NAME + " = ? OR "
@@ -1905,7 +1910,6 @@ public class MediaQualityService extends SystemService {
                                current.getParameters());
                                current.getParameters());
                    }
                    }
                }
                }
                }
            });
            });


        }
        }
@@ -1924,13 +1928,29 @@ 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_HDR;
                case StreamStatus.TCH:
                    return PictureProfile.STATUS_TCH;
                default:
                    return "";
            }
        }

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


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


        @Override
        @Override