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

Commit a29393db authored by Lorena Torres-Huerta's avatar Lorena Torres-Huerta Committed by Mikhail Naganov
Browse files

audio: Set connectedProfiles for non-attached device ports.

For external (non-attached) device ports that have dynamic
profiles, 'connectedProfiles' must be provided. They are
used when 'ModuleDebug.simulateDeviceConnections' is enabled.

Bug: 205884982
Test: atest VtsHalAudioCoreTargetTest
Change-Id: Ic82e47abc50e2958ed93f5d4d18082b569ecb67b
parent dc9d1a4b
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -135,6 +135,22 @@ static AudioRoute createRoute(const std::vector<AudioPort>& sources, const Audio
    return route;
}

std::vector<AudioProfile> getStandard16And24BitPcmAudioProfiles() {
    auto createStdPcmAudioProfile = [](const PcmType& pcmType) {
        return AudioProfile{
                .format = AudioFormatDescription{.type = AudioFormatType::PCM, .pcm = pcmType},
                .channelMasks = {AudioChannelLayout::make<AudioChannelLayout::layoutMask>(
                                         AudioChannelLayout::LAYOUT_MONO),
                                 AudioChannelLayout::make<AudioChannelLayout::layoutMask>(
                                         AudioChannelLayout::LAYOUT_STEREO)},
                .sampleRates = {8000, 11025, 16000, 32000, 44100, 48000}};
    };
    return {
            createStdPcmAudioProfile(PcmType::INT_16_BIT),
            createStdPcmAudioProfile(PcmType::INT_24_BIT),
    };
}

// Primary (default) configuration:
//
// Device ports:
+21 −0
Original line number Diff line number Diff line
@@ -185,6 +185,11 @@ std::ostream& operator<<(std::ostream& os, Module::Type t) {
    return os;
}

Module::Module(Type type, std::unique_ptr<Configuration>&& config)
    : mType(type), mConfig(std::move(config)) {
    populateConnectedProfiles();
}

void Module::cleanUpPatch(int32_t patchId) {
    erase_all_values(mPatches, std::set<int32_t>{patchId});
}
@@ -320,6 +325,22 @@ ndk::ScopedAStatus Module::findPortIdForNewStream(int32_t in_portConfigId, Audio
    return ndk::ScopedAStatus::ok();
}

void Module::populateConnectedProfiles() {
    Configuration& config = getConfig();
    for (const AudioPort& port : config.ports) {
        if (port.ext.getTag() == AudioPortExt::device) {
            if (auto devicePort = port.ext.get<AudioPortExt::device>();
                !devicePort.device.type.connection.empty() && port.profiles.empty()) {
                if (auto connIt = config.connectedProfiles.find(port.id);
                    connIt == config.connectedProfiles.end()) {
                    config.connectedProfiles.emplace(
                            port.id, internal::getStandard16And24BitPcmAudioProfiles());
                }
            }
        }
    }
}

template <typename C>
std::set<int32_t> Module::portIdsFromPortConfigIds(C portConfigIds) {
    std::set<int32_t> result;
+2 −0
Original line number Diff line number Diff line
@@ -23,5 +23,7 @@
namespace aidl::android::hardware::audio::core::internal {

std::unique_ptr<Module::Configuration> getConfiguration(Module::Type moduleType);
std::vector<aidl::android::media::audio::common::AudioProfile>
getStandard16And24BitPcmAudioProfiles();

}  // namespace aidl::android::hardware::audio::core::internal
+2 −2
Original line number Diff line number Diff line
@@ -60,8 +60,7 @@ class Module : public BnModule {
                                                  std::unique_ptr<Configuration>&& config);
    static std::optional<Type> typeFromString(const std::string& type);

    Module(Type type, std::unique_ptr<Configuration>&& config)
        : mType(type), mConfig(std::move(config)) {}
    Module(Type type, std::unique_ptr<Configuration>&& config);

  protected:
    // The vendor extension done via inheritance can override interface methods and augment
@@ -235,6 +234,7 @@ class Module : public BnModule {
    const Streams& getStreams() const { return mStreams; }
    Type getType() const { return mType; }
    bool isMmapSupported();
    void populateConnectedProfiles();
    template <typename C>
    std::set<int32_t> portIdsFromPortConfigIds(C portConfigIds);
    void registerPatch(const AudioPatch& patch);