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

Commit 86347bae authored by Amy's avatar Amy Committed by Amy Zhang
Browse files

Init ARC before init System Audio Mode from AVR

Some TV, for example Mi TV, will only send out requesrt Short Audio
Descriptor when its ARC is alreay on during the SAM initialization.
TV not sending out Short Audio Descriptor will cause TV not sending some
format of audio.

Test: manual
Bug:123157607
Change-Id: I29cc05afb95bc7e478b1fe8aab4a8e5c94925bd7
parent f2949eb2
Loading
Loading
Loading
Loading
+14 −2
Original line number Original line Diff line number Diff line
@@ -353,6 +353,10 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
        mService.sendCecCommand(
        mService.sendCecCommand(
                HdmiCecMessageBuilder.buildDeviceVendorIdCommand(mAddress, mService.getVendorId()));
                HdmiCecMessageBuilder.buildDeviceVendorIdCommand(mAddress, mService.getVendorId()));
        mService.registerTvInputCallback(mTvInputCallback);
        mService.registerTvInputCallback(mTvInputCallback);
        // Some TVs, for example Mi TV, need ARC on before turning System Audio Mode on
        // to request Short Audio Descriptor. Since ARC and SAM are independent,
        // we can turn on ARC anyways when audio system device just boots up.
        initArcOnFromAvr();
        int systemAudioControlOnPowerOnProp =
        int systemAudioControlOnPowerOnProp =
                SystemProperties.getInt(
                SystemProperties.getInt(
                        PROPERTY_SYSTEM_AUDIO_CONTROL_ON_POWER_ON,
                        PROPERTY_SYSTEM_AUDIO_CONTROL_ON_POWER_ON,
@@ -919,8 +923,8 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
        // Since some TVs don't request ARC on with System Audio Mode on request
        // Since some TVs don't request ARC on with System Audio Mode on request
        if (SystemProperties.getBoolean(Constants.PROPERTY_ARC_SUPPORT, true)
        if (SystemProperties.getBoolean(Constants.PROPERTY_ARC_SUPPORT, true)
                && isDirectConnectToTv()) {
                && isDirectConnectToTv()) {
            if (newSystemAudioMode && !isArcEnabled()) {
            if (newSystemAudioMode && !isArcEnabled()
                removeAction(ArcInitiationActionFromAvr.class);
                    && !hasAction(ArcInitiationActionFromAvr.class)) {
                addAndStartAction(new ArcInitiationActionFromAvr(this));
                addAndStartAction(new ArcInitiationActionFromAvr(this));
            } else if (!newSystemAudioMode && isArcEnabled()) {
            } else if (!newSystemAudioMode && isArcEnabled()) {
                removeAction(ArcTerminationActionFromAvr.class);
                removeAction(ArcTerminationActionFromAvr.class);
@@ -1096,6 +1100,14 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource {
        }
        }
    }
    }


    private void initArcOnFromAvr() {
        if (SystemProperties.getBoolean(Constants.PROPERTY_ARC_SUPPORT, true)
                && isDirectConnectToTv() && !isArcEnabled()) {
            removeAction(ArcInitiationActionFromAvr.class);
            addAndStartAction(new ArcInitiationActionFromAvr(this));
        }
    }

    @Override
    @Override
    protected void switchInputOnReceivingNewActivePath(int physicalAddress) {
    protected void switchInputOnReceivingNewActivePath(int physicalAddress) {
        int port = mService.pathToPortId(physicalAddress);
        int port = mService.pathToPortId(physicalAddress);