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

Commit b126b43f authored by keunyoung's avatar keunyoung Committed by Android Git Automerger
Browse files

am 4250b955: am 01310cd7: am 3190e67d: close remote submix\'s output when device is not available.

* commit '4250b955':
  close remote submix's output when device is not available.
parents 5111fe3e 4250b955
Loading
Loading
Loading
Loading
+9 −23
Original line number Diff line number Diff line
@@ -3442,29 +3442,15 @@ void AudioPolicyManager::addInput(audio_io_handle_t input, sp<AudioInputDescript
}

void AudioPolicyManager::findIoHandlesByAddress(sp<AudioOutputDescriptor> desc /*in*/,
        const audio_devices_t device /*in*/,
        const String8 address /*in*/,
        SortedVector<audio_io_handle_t>& outputs /*out*/) {
    // look for a match on the given address on the addresses of the outputs:
    // find the address by finding the patch that maps to this output
    ssize_t patchIdx = mAudioPatches.indexOfKey(desc->mPatchHandle);
    //ALOGV("    inspecting output %d (patch %d) for supported device=0x%x",
    //        outputIdx, patchIdx,  desc->mProfile->mSupportedDevices.types());
    if (patchIdx >= 0) {
        const sp<AudioPatch> patchDesc = mAudioPatches.valueAt(patchIdx);
        const int numSinks = patchDesc->mPatch.num_sinks;
        for (ssize_t j=0; j < numSinks; j++) {
            if (patchDesc->mPatch.sinks[j].type == AUDIO_PORT_TYPE_DEVICE) {
                const char* patchAddr =
                        patchDesc->mPatch.sinks[j].ext.device.address;
                if (strncmp(patchAddr,
                        address.string(), AUDIO_DEVICE_MAX_ADDRESS_LEN) == 0) {
    sp<DeviceDescriptor> devDesc =
        desc->mProfile->mSupportedDevices.getDevice(device, address);
    if (devDesc != 0) {
        ALOGV("findIoHandlesByAddress(): adding opened output %d on same address %s",
                            desc->mIoHandle,  patchDesc->mPatch.sinks[j].ext.device.address);
              desc->mIoHandle, address.string());
        outputs.add(desc->mIoHandle);
                    break;
                }
            }
        }
    }
}

@@ -3488,7 +3474,7 @@ status_t AudioPolicyManager::checkOutputsForDevice(const sp<DeviceDescriptor> de
                    outputs.add(mOutputs.keyAt(i));
                } else {
                    ALOGV("  checking address match due to device 0x%x", device);
                    findIoHandlesByAddress(desc, address, outputs);
                    findIoHandlesByAddress(desc, device, address, outputs);
                }
            }
        }
@@ -3716,7 +3702,7 @@ status_t AudioPolicyManager::checkOutputsForDevice(const sp<DeviceDescriptor> de
                // exact match on device
                if (deviceDistinguishesOnAddress(device) &&
                        (desc->mProfile->mSupportedDevices.types() == device)) {
                    findIoHandlesByAddress(desc, address, outputs);
                    findIoHandlesByAddress(desc, device, address, outputs);
                } else if (!(desc->mProfile->mSupportedDevices.types()
                        & mAvailableOutputDevices.types())) {
                    ALOGV("checkOutputsForDevice(): disconnecting adding output %d",
+1 −0
Original line number Diff line number Diff line
@@ -889,6 +889,7 @@ private:
        // see deviceDistinguishesOnAddress(audio_devices_t) for whether the device type is one
        //   where addresses are used to distinguish between one connected device and another.
        void findIoHandlesByAddress(sp<AudioOutputDescriptor> desc /*in*/,
                const audio_devices_t device /*in*/,
                const String8 address /*in*/,
                SortedVector<audio_io_handle_t>& outputs /*out*/);
        uint32_t nextUniqueId();