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

Commit f47b9ba2 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "libaudiohal: update AudioPortConfig when AudioSource is changed" into udc-dev

parents 54f185d4 a8f1e58e
Loading
Loading
Loading
Loading
+31 −11
Original line number Diff line number Diff line
@@ -1045,8 +1045,8 @@ bool DeviceHalAidl::audioDeviceMatches(const AudioDevice& device, const AudioPor
    return p.ext.get<AudioPortExt::Tag::device>().device == device;
}

status_t DeviceHalAidl::createPortConfig(
        const AudioPortConfig& requestedPortConfig, PortConfigs::iterator* result) {
status_t DeviceHalAidl::createOrUpdatePortConfig(
        const AudioPortConfig& requestedPortConfig, PortConfigs::iterator* result, bool* created) {
    TIME_CHECK();
    AudioPortConfig appliedPortConfig;
    bool applied = false;
@@ -1061,11 +1061,17 @@ status_t DeviceHalAidl::createPortConfig(
            return NO_INIT;
        }
    }
    auto id = appliedPortConfig.id;
    auto [it, inserted] = mPortConfigs.emplace(std::move(id), std::move(appliedPortConfig));
    LOG_ALWAYS_FATAL_IF(!inserted, "%s: port config with id %d already exists",
            __func__, it->first);

    int32_t id = appliedPortConfig.id;
    if (requestedPortConfig.id != 0 && requestedPortConfig.id != id) {
        LOG_ALWAYS_FATAL("%s: requested port config id %d changed to %d", __func__,
                requestedPortConfig.id, id);
    }

    auto [it, inserted] = mPortConfigs.insert_or_assign(std::move(id),
            std::move(appliedPortConfig));
    *result = it;
    *created = inserted;
    return OK;
}

@@ -1112,8 +1118,8 @@ status_t DeviceHalAidl::findOrCreatePortConfig(const AudioDevice& device,
        }
        AudioPortConfig requestedPortConfig;
        requestedPortConfig.portId = portsIt->first;
        RETURN_STATUS_IF_ERROR(createPortConfig(requestedPortConfig, &portConfigIt));
        *created = true;
        RETURN_STATUS_IF_ERROR(createOrUpdatePortConfig(requestedPortConfig, &portConfigIt,
                created));
    } else {
        *created = false;
    }
@@ -1163,16 +1169,30 @@ status_t DeviceHalAidl::findOrCreatePortConfig(
            requestedPortConfig.ext.get<AudioPortExt::Tag::mix>().usecase =
                    AudioPortMixExtUseCase::make<AudioPortMixExtUseCase::Tag::source>(source);
        }
        RETURN_STATUS_IF_ERROR(createPortConfig(requestedPortConfig, &portConfigIt));
        *created = true;
        RETURN_STATUS_IF_ERROR(createOrUpdatePortConfig(requestedPortConfig, &portConfigIt,
                created));
    } else if (!flags.has_value()) {
        ALOGW("%s: mix port config for %s, handle %d not found in the module %s, "
                "and was not created as flags are not specified",
                __func__, config.toString().c_str(), ioHandle, mInstance.c_str());
        return BAD_VALUE;
    } else {
        AudioPortConfig requestedPortConfig = portConfigIt->second;
        if (requestedPortConfig.ext.getTag() == AudioPortExt::Tag::mix) {
            AudioPortMixExt& mixExt = requestedPortConfig.ext.get<AudioPortExt::Tag::mix>();
            if (mixExt.usecase.getTag() == AudioPortMixExtUseCase::Tag::source &&
                    source != AudioSource::SYS_RESERVED_INVALID) {
                mixExt.usecase.get<AudioPortMixExtUseCase::Tag::source>() = source;
            }
        }

        if (requestedPortConfig != portConfigIt->second) {
            RETURN_STATUS_IF_ERROR(createOrUpdatePortConfig(requestedPortConfig, &portConfigIt,
                    created));
        } else {
            *created = false;
        }
    }
    *portConfig = portConfigIt->second;
    return OK;
}
+2 −2
Original line number Diff line number Diff line
@@ -203,9 +203,9 @@ class DeviceHalAidl : public DeviceHalInterface, public ConversionHelperAidl,
            const ::aidl::android::media::audio::common::AudioPort& p);
    bool audioDeviceMatches(const ::aidl::android::media::audio::common::AudioDevice& device,
            const ::aidl::android::media::audio::common::AudioPortConfig& p);
    status_t createPortConfig(
    status_t createOrUpdatePortConfig(
            const ::aidl::android::media::audio::common::AudioPortConfig& requestedPortConfig,
            PortConfigs::iterator* result);
            PortConfigs::iterator* result, bool *created);
    status_t findOrCreatePatch(
        const std::set<int32_t>& sourcePortConfigIds,
        const std::set<int32_t>& sinkPortConfigIds,