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

Commit 19ca45f5 authored by Mikhail Naganov's avatar Mikhail Naganov Committed by Automerger Merge Worker
Browse files

audio: Implement proper parsing of masks in XsdcConversion am: cc21b6f2

parents 55acd0be cc21b6f2
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -141,11 +141,12 @@ ConversionResult<AudioPortExt> createAudioPortExt(const ap_xsd::MixPorts::MixPor
}

ConversionResult<int> convertGainModeToAidl(const std::vector<ap_xsd::AudioGainMode>& gainModeVec) {
    static const char gainModeSeparator = ' ';
    int gainModeMask = 0;
    for (const ap_xsd::AudioGainMode& gainMode : gainModeVec) {
        gainModeMask |= static_cast<int>(::android::GainModeConverter::maskFromString(
                ap_xsd::toString(gainMode), &gainModeSeparator));
        audio_gain_mode_t legacyGainMode;
        if (::android::GainModeConverter::fromString(ap_xsd::toString(gainMode), legacyGainMode)) {
            gainModeMask |= static_cast<int>(legacyGainMode);
        }
    }
    return gainModeMask;
}
@@ -204,23 +205,26 @@ ConversionResult<AudioProfile> convertAudioProfileToAidl(const ap_xsd::Profile&
ConversionResult<AudioIoFlags> convertIoFlagsToAidl(
        const std::vector<ap_xsd::AudioInOutFlag>& flags, const ap_xsd::Role role,
        bool flagsForMixPort) {
    static const char flagSeparator = ' ';
    int flagMask = 0;
    if ((role == ap_xsd::Role::sink && flagsForMixPort) ||
        (role == ap_xsd::Role::source && !flagsForMixPort)) {
        for (const ap_xsd::AudioInOutFlag& flag : flags) {
            flagMask |= static_cast<int>(::android::InputFlagConverter::maskFromString(
                    ap_xsd::toString(flag), &flagSeparator));
            audio_input_flags_t legacyFlag;
            if (::android::InputFlagConverter::fromString(ap_xsd::toString(flag), legacyFlag)) {
                flagMask |= static_cast<int>(legacyFlag);
            }
        }
        return AudioIoFlags::make<AudioIoFlags::Tag::input>(flagMask);
    } else {
        for (const ap_xsd::AudioInOutFlag& flag : flags) {
            flagMask |= static_cast<int>(::android::OutputFlagConverter::maskFromString(
                    ap_xsd::toString(flag), &flagSeparator));
            audio_output_flags_t legacyFlag;
            if (::android::OutputFlagConverter::fromString(ap_xsd::toString(flag), legacyFlag)) {
                flagMask |= static_cast<int>(legacyFlag);
            }
        }
        return AudioIoFlags::make<AudioIoFlags::Tag::output>(flagMask);
    }
}

ConversionResult<AudioPort> convertDevicePortToAidl(
        const ap_xsd::DevicePorts::DevicePort& xDevicePort, const std::string& xDefaultOutputDevice,