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

Commit b17f157b authored by Mikhail Naganov's avatar Mikhail Naganov
Browse files

Remove automatic addition of AC3, IEC61937 to HDMI outputs

Historically, the automatic addition of AC3 and IEC61937 formats
to the list of supported formats for HDMI output ports was a
workaround for the problem occuring in certain TV setups that
don't report supported formats properly. It was found out that
this workaround creates confusion in setups which report
supported formats properly. This is why automatic addition is
being removed now.

It's still possible to restore the historic behavior if required:
 - on vendor side, by adding
  'encodedFormats="AUDIO_FORMAT_AC3 AUDIO_FORMAT_IEC61937"' to the
   HDMI output device port in the APM config file;
 - on user side, by going to "Surround Sound" settings and
   enabling "Dolby Digital" manually.

Bug: 199687164
Bug: 201089251
Test: atest audiopolicy_tests
Test: manual test on an Android TV dongle
Merged-In: I54d9a2c2f203db9fb462ef6d1206ce17043ab997
Change-Id: I54d9a2c2f203db9fb462ef6d1206ce17043ab997
parent 160e69bf
Loading
Loading
Loading
Loading
+0 −9
Original line number Diff line number Diff line
@@ -58,15 +58,6 @@ DeviceDescriptor::DeviceDescriptor(const AudioDeviceTypeAddr &deviceTypeAddr,
        mDeclaredAddress(DeviceDescriptorBase::address())
{
    mCurrentEncodedFormat = AUDIO_FORMAT_DEFAULT;
    /* If framework runs against a pre 5.0 Audio HAL, encoded formats are absent from the config.
     * FIXME: APM should know the version of the HAL and don't add the formats for V5.0.
     * For now, the workaround to remove AC3 and IEC61937 support on HDMI is to declare
     * something like 'encodedFormats="AUDIO_FORMAT_PCM_16_BIT"' on the HDMI devicePort.
     */
    if (mDeviceTypeAddr.mType == AUDIO_DEVICE_OUT_HDMI && mEncodedFormats.empty()) {
        mEncodedFormats.push_back(AUDIO_FORMAT_AC3);
        mEncodedFormats.push_back(AUDIO_FORMAT_IEC61937);
    }
}

void DeviceDescriptor::attach(const sp<HwModule>& module)
+2 −1
Original line number Diff line number Diff line
@@ -1153,7 +1153,8 @@ TEST_P(AudioPolicyManagerTestDeviceConnection, SetDeviceConnectionState) {
    if (type == AUDIO_DEVICE_OUT_HDMI) {
        // Set device connection state failed due to no device descriptor found
        // For HDMI case, it is easier to simulate device descriptor not found error
        // by using a undeclared encoded format.
        // by using an encoded format which isn't listed in the 'encodedFormats'
        // attribute for this devicePort.
        ASSERT_EQ(INVALID_OPERATION, mManager->setDeviceConnectionState(
                type, AUDIO_POLICY_DEVICE_STATE_AVAILABLE,
                address.c_str(), name.c_str(), AUDIO_FORMAT_MAT_2_1));
+2 −1
Original line number Diff line number Diff line
@@ -50,7 +50,8 @@
                </devicePort>
                <devicePort tagName="Built-In Mic" type="AUDIO_DEVICE_IN_BUILTIN_MIC" role="source">
                </devicePort>
                <devicePort tagName="Hdmi" type="AUDIO_DEVICE_OUT_HDMI" role="sink">
                <devicePort tagName="Hdmi" type="AUDIO_DEVICE_OUT_HDMI" role="sink"
                            encodedFormats="AUDIO_FORMAT_AC3">
                </devicePort>
                <devicePort tagName="Hdmi-In Mic" type="AUDIO_DEVICE_IN_HDMI" role="source">
                </devicePort>