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

Commit f2f5b736 authored by Haofan Wang's avatar Haofan Wang
Browse files

[MQ] Add parsing vendor sound parameter in the framework

Add setVendorSoundParameters method to store vendor sound parameters in
the soundParameters. So vendor can define their own parameters without
changing too much framework code.

Bug: 393450022
Flag: android.media.tv.flags.media_quality_fw_bugfix
Test: atest CtsMediaQualityTestCases
Change-Id: Ie16dc870651a9bde290791bfca0d5060d30b539c
parent f291d875
Loading
Loading
Loading
Loading
+20 −1
Original line number Diff line number Diff line
@@ -711,12 +711,14 @@ public class MediaQualityService extends SystemService {

            try {
                if (mMediaQuality != null) {
                    SoundParameters sp = new SoundParameters();
                    // put ID in params for profile update in HAL
                    params.putLong(BaseParameters.PARAMETER_ID, longId);
                    SoundParameter[] soundParameters =
                            MediaQualityUtils.convertPersistableBundleToSoundParameterList(params);

                    SoundParameters sp = new SoundParameters();
                    Parcel parcel = Parcel.obtain();
                    setVendorSoundParameters(sp, parcel, params);
                    sp.soundParameters = soundParameters;

                    mMediaQuality.sendDefaultSoundParameters(sp);
@@ -1591,6 +1593,11 @@ public class MediaQualityService extends SystemService {
            soundParameters.soundParameters =
                    MediaQualityUtils.convertPersistableBundleToSoundParameterList(params);

            Parcel parcel = Parcel.obtain();
            if (params != null) {
                setVendorSoundParameters(soundParameters, parcel, params);
            }

            android.hardware.tv.mediaquality.SoundProfile toReturn =
                    new android.hardware.tv.mediaquality.SoundProfile();
            toReturn.soundProfileId = id;
@@ -1995,6 +2002,18 @@ public class MediaQualityService extends SystemService {
        pictureParameters.vendorPictureParameters.setParcelable(defaultExtension);
    }

    private void setVendorSoundParameters(
            SoundParameters soundParameters,
            Parcel parcel,
            PersistableBundle vendorSoundParameters) {
        vendorSoundParameters.writeToParcel(parcel, 0);
        byte[] vendorBundleToByteArray = parcel.marshall();
        DefaultExtension defaultExtension = new DefaultExtension();
        defaultExtension.bytes = Arrays.copyOf(
                vendorBundleToByteArray, vendorBundleToByteArray.length);
        soundParameters.vendorSoundParameters.setParcelable(defaultExtension);
    }

    private boolean isPackageDefaultPictureProfile(PictureProfile pp) {
        return pp != null && pp.getProfileType() == PictureProfile.TYPE_SYSTEM &&
               pp.getName().equals(PictureProfile.NAME_DEFAULT);
+64 −17
Original line number Diff line number Diff line
@@ -1073,80 +1073,127 @@ public final class MediaQualityUtils {
        if (params.containsKey(SoundQuality.PARAMETER_BALANCE)) {
            soundParams.add(SoundParameter.balance(params.getInt(
                    SoundQuality.PARAMETER_BALANCE)));
            params.remove(SoundQuality.PARAMETER_BALANCE);
        }
        if (params.containsKey(SoundQuality.PARAMETER_BASS)) {
            soundParams.add(SoundParameter.bass(params.getInt(SoundQuality.PARAMETER_BASS)));
            params.remove(SoundQuality.PARAMETER_BASS);
        }
        if (params.containsKey(SoundQuality.PARAMETER_TREBLE)) {
            soundParams.add(SoundParameter.treble(params.getInt(
                    SoundQuality.PARAMETER_TREBLE)));
            params.remove(SoundQuality.PARAMETER_TREBLE);
        }
        if (params.containsKey(SoundQuality.PARAMETER_SURROUND_SOUND)) {
            soundParams.add(SoundParameter.surroundSoundEnabled(params.getBoolean(
                    SoundQuality.PARAMETER_SURROUND_SOUND)));
            params.remove(SoundQuality.PARAMETER_SURROUND_SOUND);
        }
        if (params.containsKey(SoundQuality.PARAMETER_SPEAKERS)) {
            soundParams.add(SoundParameter.speakersEnabled(params.getBoolean(
                    SoundQuality.PARAMETER_SPEAKERS)));
            params.remove(SoundQuality.PARAMETER_SPEAKERS);
        }
        if (params.containsKey(SoundQuality.PARAMETER_SPEAKERS_DELAY_MILLIS)) {
            soundParams.add(SoundParameter.speakersDelayMs(params.getInt(
                    SoundQuality.PARAMETER_SPEAKERS_DELAY_MILLIS)));
            params.remove(SoundQuality.PARAMETER_SPEAKERS_DELAY_MILLIS);
        }
        if (params.containsKey(SoundQuality.PARAMETER_AUTO_VOLUME_CONTROL)) {
            soundParams.add(SoundParameter.autoVolumeControl(params.getBoolean(
                    SoundQuality.PARAMETER_AUTO_VOLUME_CONTROL)));
            params.remove(SoundQuality.PARAMETER_AUTO_VOLUME_CONTROL);
        }
        if (params.containsKey(SoundQuality.PARAMETER_DTS_DRC)) {
            soundParams.add(SoundParameter.dtsDrc(params.getBoolean(
                    SoundQuality.PARAMETER_DTS_DRC)));
            params.remove(SoundQuality.PARAMETER_DTS_DRC);
        }
        if (params.containsKey(SoundQuality.PARAMETER_DIGITAL_OUTPUT_DELAY_MILLIS)) {
            soundParams.add(SoundParameter.surroundSoundEnabled(params.getBoolean(
                    SoundQuality.PARAMETER_DIGITAL_OUTPUT_DELAY_MILLIS)));
            params.remove(SoundQuality.PARAMETER_DIGITAL_OUTPUT_DELAY_MILLIS);
        }
        if (params.containsKey(SoundQuality.PARAMETER_EARC)) {
            soundParams.add(SoundParameter.enhancedAudioReturnChannelEnabled(params.getBoolean(
                    SoundQuality.PARAMETER_EARC)));
            params.remove(SoundQuality.PARAMETER_EARC);
        }
        if (params.containsKey(SoundQuality.PARAMETER_DOWN_MIX_MODE)) {
            soundParams.add(SoundParameter.downmixMode((byte) params.getInt(
                    SoundQuality.PARAMETER_DOWN_MIX_MODE)));
            params.remove(SoundQuality.PARAMETER_DOWN_MIX_MODE);
        }
        if (params.containsKey(SoundQuality.PARAMETER_SOUND_STYLE)) {
            soundParams.add(SoundParameter.soundStyle((byte) params.getInt(
                    SoundQuality.PARAMETER_SOUND_STYLE)));
            params.remove(SoundQuality.PARAMETER_SOUND_STYLE);
        }
        if (params.containsKey(SoundQuality.PARAMETER_DIGITAL_OUTPUT_MODE)) {
            soundParams.add(SoundParameter.digitalOutput((byte) params.getInt(
                    SoundQuality.PARAMETER_DIGITAL_OUTPUT_MODE)));
            params.remove(SoundQuality.PARAMETER_DIGITAL_OUTPUT_MODE);
        }
        if (params.containsKey(SoundQuality.PARAMETER_DIALOGUE_ENHANCER)) {
            soundParams.add(SoundParameter.dolbyDialogueEnhancer((byte) params.getInt(
                    SoundQuality.PARAMETER_DIALOGUE_ENHANCER)));
            params.remove(SoundQuality.PARAMETER_DIALOGUE_ENHANCER);
        }

        DolbyAudioProcessing dab = new DolbyAudioProcessing();
        if (params.containsKey(SoundQuality.PARAMETER_DOLBY_AUDIO_PROCESSING_SOUND_MODE)) {
            dab.soundMode =
                    (byte) params.getInt(SoundQuality.PARAMETER_DOLBY_AUDIO_PROCESSING_SOUND_MODE);
            params.remove(SoundQuality.PARAMETER_DOLBY_AUDIO_PROCESSING_SOUND_MODE);
        }
        if (params.containsKey(SoundQuality.PARAMETER_DOLBY_AUDIO_PROCESSING_VOLUME_LEVELER)) {
            dab.volumeLeveler =
                    params.getBoolean(SoundQuality.PARAMETER_DOLBY_AUDIO_PROCESSING_VOLUME_LEVELER);
            params.remove(SoundQuality.PARAMETER_DOLBY_AUDIO_PROCESSING_VOLUME_LEVELER);
        }
        if (params.containsKey(
                SoundQuality.PARAMETER_DOLBY_AUDIO_PROCESSING_SURROUND_VIRTUALIZER)) {
            dab.surroundVirtualizer = params.getBoolean(
                    SoundQuality.PARAMETER_DOLBY_AUDIO_PROCESSING_SURROUND_VIRTUALIZER);
            params.remove(SoundQuality.PARAMETER_DOLBY_AUDIO_PROCESSING_SURROUND_VIRTUALIZER);
        }
        if (params.containsKey(SoundQuality.PARAMETER_DOLBY_AUDIO_PROCESSING_DOLBY_ATMOS)) {
            dab.dolbyAtmos =
                    params.getBoolean(SoundQuality.PARAMETER_DOLBY_AUDIO_PROCESSING_DOLBY_ATMOS);
            params.remove(SoundQuality.PARAMETER_DOLBY_AUDIO_PROCESSING_DOLBY_ATMOS);
        }
        soundParams.add(SoundParameter.dolbyAudioProcessing(dab));

        DtsVirtualX dts = new DtsVirtualX();
        if (params.containsKey(SoundQuality.PARAMETER_DTS_VIRTUAL_X_TBHDX)) {
            dts.tbHdx = params.getBoolean(SoundQuality.PARAMETER_DTS_VIRTUAL_X_TBHDX);
        dts.limiter = params.getBoolean(SoundQuality.PARAMETER_DTS_VIRTUAL_X_LIMITER);
        dts.truSurroundX = params.getBoolean(
                SoundQuality.PARAMETER_DTS_VIRTUAL_X_TRU_SURROUND_X);
        dts.truVolumeHd = params.getBoolean(SoundQuality.PARAMETER_DTS_VIRTUAL_X_TRU_VOLUME_HD);
        dts.dialogClarity = params.getBoolean(
                SoundQuality.PARAMETER_DTS_VIRTUAL_X_DIALOG_CLARITY);
        dts.definition = params.getBoolean(SoundQuality.PARAMETER_DTS_VIRTUAL_X_DEFINITION);
        dts.height = params.getBoolean(SoundQuality.PARAMETER_DTS_VIRTUAL_X_HEIGHT);
            params.remove(SoundQuality.PARAMETER_DTS_VIRTUAL_X_TBHDX);
        }

        if (params.containsKey(SoundQuality.PARAMETER_DTS_VIRTUAL_X_LIMITER)) {
            dts.tbHdx = params.getBoolean(SoundQuality.PARAMETER_DTS_VIRTUAL_X_LIMITER);
            params.remove(SoundQuality.PARAMETER_DTS_VIRTUAL_X_LIMITER);
        }
        if (params.containsKey(SoundQuality.PARAMETER_DTS_VIRTUAL_X_TRU_SURROUND_X)) {
            dts.tbHdx = params.getBoolean(SoundQuality.PARAMETER_DTS_VIRTUAL_X_TRU_SURROUND_X);
            params.remove(SoundQuality.PARAMETER_DTS_VIRTUAL_X_TRU_SURROUND_X);
        }
        if (params.containsKey(SoundQuality.PARAMETER_DTS_VIRTUAL_X_TRU_VOLUME_HD)) {
            dts.tbHdx = params.getBoolean(SoundQuality.PARAMETER_DTS_VIRTUAL_X_TRU_VOLUME_HD);
            params.remove(SoundQuality.PARAMETER_DTS_VIRTUAL_X_TRU_VOLUME_HD);
        }
        if (params.containsKey(SoundQuality.PARAMETER_DTS_VIRTUAL_X_DIALOG_CLARITY)) {
            dts.tbHdx = params.getBoolean(SoundQuality.PARAMETER_DTS_VIRTUAL_X_DIALOG_CLARITY);
            params.remove(SoundQuality.PARAMETER_DTS_VIRTUAL_X_DIALOG_CLARITY);
        }
        if (params.containsKey(SoundQuality.PARAMETER_DTS_VIRTUAL_X_DEFINITION)) {
            dts.tbHdx = params.getBoolean(SoundQuality.PARAMETER_DTS_VIRTUAL_X_DEFINITION);
            params.remove(SoundQuality.PARAMETER_DTS_VIRTUAL_X_DEFINITION);
        }
        if (params.containsKey(SoundQuality.PARAMETER_DTS_VIRTUAL_X_HEIGHT)) {
            dts.tbHdx = params.getBoolean(SoundQuality.PARAMETER_DTS_VIRTUAL_X_HEIGHT);
            params.remove(SoundQuality.PARAMETER_DTS_VIRTUAL_X_HEIGHT);
        }
        soundParams.add(SoundParameter.dtsVirtualX(dts));

        return soundParams.toArray(new SoundParameter[0]);