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

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

Merge "audio: Disable the C++ backend for android.hardware.audio.core"

parents f3d6ea54 8fcc4424
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -83,6 +83,10 @@ aidl_interface {
    ],
    stability: "vintf",
    backend: {
        // The C++ backend is disabled transitively due to use of FMQ.
        cpp: {
            enabled: false,
        },
        java: {
            platform_apis: true,
        },
+4 −4
Original line number Diff line number Diff line
@@ -18,12 +18,12 @@ cc_test {
        "VtsHalAudioCoreTargetTest.cpp",
    ],
    shared_libs: [
        "libbinder",
        "libbinder_ndk",
    ],
    static_libs: [
        "android.hardware.audio.common-V1-cpp",
        "android.hardware.audio.core-V1-cpp",
        "android.media.audio.common.types-V1-cpp",
        "android.hardware.audio.common-V1-ndk",
        "android.hardware.audio.core-V1-ndk",
        "android.media.audio.common.types-V1-ndk",
    ],
    test_suites: [
        "general-tests",
+13 −13
Original line number Diff line number Diff line
@@ -16,24 +16,24 @@

#include <algorithm>

#include <android/media/audio/common/AudioIoFlags.h>
#include <android/media/audio/common/AudioOutputFlags.h>
#include <aidl/android/media/audio/common/AudioIoFlags.h>
#include <aidl/android/media/audio/common/AudioOutputFlags.h>

#include "ModuleConfig.h"

using namespace android;

using android::hardware::audio::core::IModule;
using android::media::audio::common::AudioChannelLayout;
using android::media::audio::common::AudioFormatDescription;
using android::media::audio::common::AudioFormatType;
using android::media::audio::common::AudioIoFlags;
using android::media::audio::common::AudioOutputFlags;
using android::media::audio::common::AudioPort;
using android::media::audio::common::AudioPortConfig;
using android::media::audio::common::AudioPortExt;
using android::media::audio::common::AudioProfile;
using android::media::audio::common::Int;
using aidl::android::hardware::audio::core::IModule;
using aidl::android::media::audio::common::AudioChannelLayout;
using aidl::android::media::audio::common::AudioFormatDescription;
using aidl::android::media::audio::common::AudioFormatType;
using aidl::android::media::audio::common::AudioIoFlags;
using aidl::android::media::audio::common::AudioOutputFlags;
using aidl::android::media::audio::common::AudioPort;
using aidl::android::media::audio::common::AudioPortConfig;
using aidl::android::media::audio::common::AudioPortExt;
using aidl::android::media::audio::common::AudioProfile;
using aidl::android::media::audio::common::Int;

template <typename T>
auto findById(const std::vector<T>& v, int32_t id) {
+50 −45
Original line number Diff line number Diff line
@@ -21,67 +21,69 @@
#include <utility>
#include <vector>

#include <android/hardware/audio/core/AudioRoute.h>
#include <android/hardware/audio/core/IModule.h>
#include <android/media/audio/common/AudioPort.h>
#include <binder/Status.h>
#include <aidl/android/hardware/audio/core/AudioRoute.h>
#include <aidl/android/hardware/audio/core/IModule.h>
#include <aidl/android/media/audio/common/AudioPort.h>

class ModuleConfig {
  public:
    using SrcSinkPair = std::pair<android::media::audio::common::AudioPortConfig,
                                  android::media::audio::common::AudioPortConfig>;
    using SrcSinkPair = std::pair<aidl::android::media::audio::common::AudioPortConfig,
                                  aidl::android::media::audio::common::AudioPortConfig>;
    using SrcSinkGroup =
            std::pair<android::hardware::audio::core::AudioRoute, std::vector<SrcSinkPair>>;
            std::pair<aidl::android::hardware::audio::core::AudioRoute, std::vector<SrcSinkPair>>;

    explicit ModuleConfig(android::hardware::audio::core::IModule* module);
    android::binder::Status getStatus() const { return mStatus; }
    std::string getError() const { return mStatus.toString8().c_str(); }
    explicit ModuleConfig(aidl::android::hardware::audio::core::IModule* module);
    const ndk::ScopedAStatus& getStatus() const { return mStatus; }
    std::string getError() const { return mStatus.getMessage(); }

    std::vector<android::media::audio::common::AudioPort> getAttachedDevicePorts() const;
    std::vector<android::media::audio::common::AudioPort> getExternalDevicePorts() const;
    std::vector<android::media::audio::common::AudioPort> getInputMixPorts() const;
    std::vector<android::media::audio::common::AudioPort> getOutputMixPorts() const;
    std::vector<android::media::audio::common::AudioPort> getMixPorts(bool isInput) const {
    std::vector<aidl::android::media::audio::common::AudioPort> getAttachedDevicePorts() const;
    std::vector<aidl::android::media::audio::common::AudioPort> getExternalDevicePorts() const;
    std::vector<aidl::android::media::audio::common::AudioPort> getInputMixPorts() const;
    std::vector<aidl::android::media::audio::common::AudioPort> getOutputMixPorts() const;
    std::vector<aidl::android::media::audio::common::AudioPort> getMixPorts(bool isInput) const {
        return isInput ? getInputMixPorts() : getOutputMixPorts();
    }

    std::vector<android::media::audio::common::AudioPort> getAttachedDevicesPortsForMixPort(
            bool isInput, const android::media::audio::common::AudioPort& mixPort) const {
    std::vector<aidl::android::media::audio::common::AudioPort> getAttachedDevicesPortsForMixPort(
            bool isInput, const aidl::android::media::audio::common::AudioPort& mixPort) const {
        return isInput ? getAttachedSourceDevicesPortsForMixPort(mixPort)
                       : getAttachedSinkDevicesPortsForMixPort(mixPort);
    }
    std::vector<android::media::audio::common::AudioPort> getAttachedSinkDevicesPortsForMixPort(
            const android::media::audio::common::AudioPort& mixPort) const;
    std::vector<android::media::audio::common::AudioPort> getAttachedSourceDevicesPortsForMixPort(
            const android::media::audio::common::AudioPort& mixPort) const;
    std::optional<android::media::audio::common::AudioPort> getSourceMixPortForAttachedDevice()
            const;
    std::vector<aidl::android::media::audio::common::AudioPort>
    getAttachedSinkDevicesPortsForMixPort(
            const aidl::android::media::audio::common::AudioPort& mixPort) const;
    std::vector<aidl::android::media::audio::common::AudioPort>
    getAttachedSourceDevicesPortsForMixPort(
            const aidl::android::media::audio::common::AudioPort& mixPort) const;
    std::optional<aidl::android::media::audio::common::AudioPort>
    getSourceMixPortForAttachedDevice() const;

    std::optional<SrcSinkPair> getNonRoutableSrcSinkPair(bool isInput) const;
    std::optional<SrcSinkPair> getRoutableSrcSinkPair(bool isInput) const;
    std::vector<SrcSinkGroup> getRoutableSrcSinkGroups(bool isInput) const;

    std::vector<android::media::audio::common::AudioPortConfig>
    std::vector<aidl::android::media::audio::common::AudioPortConfig>
    getPortConfigsForAttachedDevicePorts() const {
        return generateAudioDevicePortConfigs(getAttachedDevicePorts(), false);
    }
    std::vector<android::media::audio::common::AudioPortConfig> getPortConfigsForMixPorts() const {
    std::vector<aidl::android::media::audio::common::AudioPortConfig> getPortConfigsForMixPorts()
            const {
        auto inputs = generateInputAudioMixPortConfigs(getInputMixPorts(), false);
        auto outputs = generateOutputAudioMixPortConfigs(getOutputMixPorts(), false);
        inputs.insert(inputs.end(), outputs.begin(), outputs.end());
        return inputs;
    }
    std::vector<android::media::audio::common::AudioPortConfig> getPortConfigsForMixPorts(
    std::vector<aidl::android::media::audio::common::AudioPortConfig> getPortConfigsForMixPorts(
            bool isInput) const {
        return isInput ? generateInputAudioMixPortConfigs(getInputMixPorts(), false)
                       : generateOutputAudioMixPortConfigs(getOutputMixPorts(), false);
    }
    std::vector<android::media::audio::common::AudioPortConfig> getPortConfigsForMixPorts(
            bool isInput, const android::media::audio::common::AudioPort& port) const {
    std::vector<aidl::android::media::audio::common::AudioPortConfig> getPortConfigsForMixPorts(
            bool isInput, const aidl::android::media::audio::common::AudioPort& port) const {
        return isInput ? generateInputAudioMixPortConfigs({port}, false)
                       : generateOutputAudioMixPortConfigs({port}, false);
    }
    std::optional<android::media::audio::common::AudioPortConfig> getSingleConfigForMixPort(
    std::optional<aidl::android::media::audio::common::AudioPortConfig> getSingleConfigForMixPort(
            bool isInput) const {
        const auto config = isInput ? generateInputAudioMixPortConfigs(getInputMixPorts(), true)
                                    : generateOutputAudioMixPortConfigs(getOutputMixPorts(), true);
@@ -93,8 +95,8 @@ class ModuleConfig {
            return {};
        }
    }
    std::optional<android::media::audio::common::AudioPortConfig> getSingleConfigForMixPort(
            bool isInput, const android::media::audio::common::AudioPort& port) const {
    std::optional<aidl::android::media::audio::common::AudioPortConfig> getSingleConfigForMixPort(
            bool isInput, const aidl::android::media::audio::common::AudioPort& port) const {
        const auto config = isInput ? generateInputAudioMixPortConfigs({port}, true)
                                    : generateOutputAudioMixPortConfigs({port}, true);
        if (!config.empty()) {
@@ -104,12 +106,12 @@ class ModuleConfig {
        }
    }

    std::vector<android::media::audio::common::AudioPortConfig> getPortConfigsForDevicePort(
            const android::media::audio::common::AudioPort& port) const {
    std::vector<aidl::android::media::audio::common::AudioPortConfig> getPortConfigsForDevicePort(
            const aidl::android::media::audio::common::AudioPort& port) const {
        return generateAudioDevicePortConfigs({port}, false);
    }
    android::media::audio::common::AudioPortConfig getSingleConfigForDevicePort(
            const android::media::audio::common::AudioPort& port) const {
    aidl::android::media::audio::common::AudioPortConfig getSingleConfigForDevicePort(
            const aidl::android::media::audio::common::AudioPort& port) const {
        const auto config = generateAudioDevicePortConfigs({port}, true);
        return *config.begin();
    }
@@ -117,26 +119,29 @@ class ModuleConfig {
    std::string toString() const;

  private:
    std::vector<android::media::audio::common::AudioPortConfig> generateInputAudioMixPortConfigs(
            const std::vector<android::media::audio::common::AudioPort>& ports,
    std::vector<aidl::android::media::audio::common::AudioPortConfig>
    generateInputAudioMixPortConfigs(
            const std::vector<aidl::android::media::audio::common::AudioPort>& ports,
            bool singleProfile) const;
    std::vector<android::media::audio::common::AudioPortConfig> generateOutputAudioMixPortConfigs(
            const std::vector<android::media::audio::common::AudioPort>& ports,
    std::vector<aidl::android::media::audio::common::AudioPortConfig>
    generateOutputAudioMixPortConfigs(
            const std::vector<aidl::android::media::audio::common::AudioPort>& ports,
            bool singleProfile) const;

    // Unlike MixPorts, the generator for DevicePorts always returns a non-empty
    // vector for a non-empty input port list. If there are no profiles in the
    // port, its initial configs are looked up, if there are none,
    // then an empty config is used, assuming further negotiation via setAudioPortConfig.
    std::vector<android::media::audio::common::AudioPortConfig> generateAudioDevicePortConfigs(
            const std::vector<android::media::audio::common::AudioPort>& ports,
    std::vector<aidl::android::media::audio::common::AudioPortConfig>
    generateAudioDevicePortConfigs(
            const std::vector<aidl::android::media::audio::common::AudioPort>& ports,
            bool singleProfile) const;

    android::binder::Status mStatus = android::binder::Status::ok();
    std::vector<android::media::audio::common::AudioPort> mPorts;
    std::vector<android::media::audio::common::AudioPortConfig> mInitialConfigs;
    ndk::ScopedAStatus mStatus = ndk::ScopedAStatus::ok();
    std::vector<aidl::android::media::audio::common::AudioPort> mPorts;
    std::vector<aidl::android::media::audio::common::AudioPortConfig> mInitialConfigs;
    std::set<int32_t> mAttachedSinkDevicePorts;
    std::set<int32_t> mAttachedSourceDevicePorts;
    std::set<int32_t> mExternalDevicePorts;
    std::vector<android::hardware::audio::core::AudioRoute> mRoutes;
    std::vector<aidl::android::hardware::audio::core::AudioRoute> mRoutes;
};
+213 −188

File changed.

Preview size limit exceeded, changes collapsed.