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

Commit 49354e11 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 12368321 from a0b96335 to 24Q4-release

Change-Id: Ibce2083252f632612ea40760b28eefc5ef0f9a6f
parents eae8df60 a0b96335
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -75,6 +75,10 @@ StreamAlsa::~StreamAlsa() {
    }
    decltype(mAlsaDeviceProxies) alsaDeviceProxies;
    for (const auto& device : getDeviceProfiles()) {
        if ((device.direction == PCM_OUT && mIsInput) ||
            (device.direction == PCM_IN && !mIsInput)) {
            continue;
        }
        alsa::DeviceProxy proxy;
        if (device.isExternal) {
            // Always ask alsa configure as required since the configuration should be supported
@@ -92,6 +96,9 @@ StreamAlsa::~StreamAlsa() {
        }
        alsaDeviceProxies.push_back(std::move(proxy));
    }
    if (alsaDeviceProxies.empty()) {
        return ::android::NO_INIT;
    }
    mAlsaDeviceProxies = std::move(alsaDeviceProxies);
    return ::android::OK;
}
+7 −1
Original line number Diff line number Diff line
@@ -25,7 +25,8 @@ namespace aidl::android::hardware::audio::core {

class StreamPrimary : public StreamAlsa {
  public:
    StreamPrimary(StreamContext* context, const Metadata& metadata);
    StreamPrimary(StreamContext* context, const Metadata& metadata,
                  const std::vector<::aidl::android::media::audio::common::AudioDevice>& devices);

    ::android::status_t start() override;
    ::android::status_t transfer(void* buffer, size_t frameCount, size_t* actualFrameCount,
@@ -39,6 +40,11 @@ class StreamPrimary : public StreamAlsa {
    int64_t mStartTimeNs = 0;
    long mFramesSinceStart = 0;
    bool mSkipNextTransfer = false;

  private:
    static std::pair<int, int> getCardAndDeviceId(
            const std::vector<::aidl::android::media::audio::common::AudioDevice>& devices);
    const std::pair<int, int> mCardAndDeviceId;
};

class StreamInPrimary final : public StreamIn, public StreamSwitcher, public StreamInHwGainHelper {
+35 −14
Original line number Diff line number Diff line
@@ -15,7 +15,11 @@
 */

#define LOG_TAG "AHAL_StreamPrimary"

#include <cstdio>

#include <android-base/logging.h>
#include <android-base/parseint.h>
#include <android-base/properties.h>
#include <audio_utils/clock.h>
#include <error/Result.h>
@@ -28,6 +32,7 @@
using aidl::android::hardware::audio::common::SinkMetadata;
using aidl::android::hardware::audio::common::SourceMetadata;
using aidl::android::media::audio::common::AudioDevice;
using aidl::android::media::audio::common::AudioDeviceAddress;
using aidl::android::media::audio::common::AudioDeviceDescription;
using aidl::android::media::audio::common::AudioDeviceType;
using aidl::android::media::audio::common::AudioOffloadInfo;
@@ -36,9 +41,15 @@ using android::base::GetBoolProperty;

namespace aidl::android::hardware::audio::core {

StreamPrimary::StreamPrimary(StreamContext* context, const Metadata& metadata)
const static constexpr std::pair<int, int> kDefaultCardAndDeviceId = {
        primary::PrimaryMixer::kAlsaCard, primary::PrimaryMixer::kAlsaDevice};

StreamPrimary::StreamPrimary(
        StreamContext* context, const Metadata& metadata,
        const std::vector<::aidl::android::media::audio::common::AudioDevice>& devices)
    : StreamAlsa(context, metadata, 3 /*readWriteRetries*/),
      mIsAsynchronous(!!getContext().getAsyncCallback()) {
      mIsAsynchronous(!!getContext().getAsyncCallback()),
      mCardAndDeviceId(getCardAndDeviceId(devices)) {
    context->startStreamDataProcessor();
}

@@ -92,17 +103,27 @@ StreamPrimary::StreamPrimary(StreamContext* context, const Metadata& metadata)
}

std::vector<alsa::DeviceProfile> StreamPrimary::getDeviceProfiles() {
    static const std::vector<alsa::DeviceProfile> kBuiltInSource{
            alsa::DeviceProfile{.card = primary::PrimaryMixer::kAlsaCard,
                                .device = primary::PrimaryMixer::kAlsaDevice,
                                .direction = PCM_IN,
    return {alsa::DeviceProfile{.card = mCardAndDeviceId.first,
                                .device = mCardAndDeviceId.second,
                                .direction = mIsInput ? PCM_IN : PCM_OUT,
                                .isExternal = false}};
    static const std::vector<alsa::DeviceProfile> kBuiltInSink{
            alsa::DeviceProfile{.card = primary::PrimaryMixer::kAlsaCard,
                                .device = primary::PrimaryMixer::kAlsaDevice,
                                .direction = PCM_OUT,
                                .isExternal = false}};
    return mIsInput ? kBuiltInSource : kBuiltInSink;
}

std::pair<int, int> StreamPrimary::getCardAndDeviceId(const std::vector<AudioDevice>& devices) {
    if (devices.empty() || devices[0].address.getTag() != AudioDeviceAddress::id) {
        return kDefaultCardAndDeviceId;
    }
    std::string deviceAddress = devices[0].address.get<AudioDeviceAddress::id>();
    std::pair<int, int> cardAndDeviceId;
    if (const size_t suffixPos = deviceAddress.rfind("CARD_");
        suffixPos == std::string::npos ||
        sscanf(deviceAddress.c_str() + suffixPos, "CARD_%d_DEV_%d", &cardAndDeviceId.first,
               &cardAndDeviceId.second) != 2) {
        return kDefaultCardAndDeviceId;
    }
    LOG(DEBUG) << __func__ << ": parsed with card id " << cardAndDeviceId.first << ", device id "
               << cardAndDeviceId.second;
    return cardAndDeviceId;
}

StreamInPrimary::StreamInPrimary(StreamContext&& context, const SinkMetadata& sinkMetadata,
@@ -144,7 +165,7 @@ std::unique_ptr<StreamCommonInterfaceEx> StreamInPrimary::createNewStream(
                new InnerStreamWrapper<StreamStub>(context, metadata));
    }
    return std::unique_ptr<StreamCommonInterfaceEx>(
            new InnerStreamWrapper<StreamPrimary>(context, metadata));
            new InnerStreamWrapper<StreamPrimary>(context, metadata, devices));
}

ndk::ScopedAStatus StreamInPrimary::getHwGain(std::vector<float>* _aidl_return) {
@@ -215,7 +236,7 @@ std::unique_ptr<StreamCommonInterfaceEx> StreamOutPrimary::createNewStream(
                new InnerStreamWrapper<StreamStub>(context, metadata));
    }
    return std::unique_ptr<StreamCommonInterfaceEx>(
            new InnerStreamWrapper<StreamPrimary>(context, metadata));
            new InnerStreamWrapper<StreamPrimary>(context, metadata, devices));
}

ndk::ScopedAStatus StreamOutPrimary::getHwVolume(std::vector<float>* _aidl_return) {
+6 −11
Original line number Diff line number Diff line
@@ -3072,8 +3072,8 @@ std::shared_ptr<StateSequence> makeBurstCommands(bool isSync);
static bool skipStreamIoTestForMixPortConfig(const AudioPortConfig& portConfig) {
    return (portConfig.flags.value().getTag() == AudioIoFlags::input &&
            isAnyBitPositionFlagSet(portConfig.flags.value().template get<AudioIoFlags::input>(),
                                    {AudioInputFlags::VOIP_TX, AudioInputFlags::HW_HOTWORD,
                                     AudioInputFlags::HOTWORD_TAP})) ||
                                    {AudioInputFlags::MMAP_NOIRQ, AudioInputFlags::VOIP_TX,
                                     AudioInputFlags::HW_HOTWORD, AudioInputFlags::HOTWORD_TAP})) ||
           (portConfig.flags.value().getTag() == AudioIoFlags::output &&
            isAnyBitPositionFlagSet(
                    portConfig.flags.value().template get<AudioIoFlags::output>(),
@@ -3131,11 +3131,8 @@ class StreamFixtureWithWorker {
        EXPECT_FALSE(mWorker->hasError()) << mWorker->getError();
        EXPECT_EQ("", mWorkerDriver->getUnexpectedStateTransition());
        if (validatePosition) {
            if (IOTraits<Stream>::is_input &&
                !mStream->getStreamContext()->isMmapped() /*TODO(b/274456992) remove*/) {
            EXPECT_TRUE(mWorkerDriver->hasObservablePositionIncrease());
            EXPECT_TRUE(mWorkerDriver->hasHardwarePositionIncrease());
            }
            EXPECT_FALSE(mWorkerDriver->hasObservableRetrogradePosition());
            EXPECT_FALSE(mWorkerDriver->hasHardwareRetrogradePosition());
        }
@@ -4097,8 +4094,7 @@ class AudioStreamIo : public AudioCoreModuleBase,
        EXPECT_FALSE(worker.hasError()) << worker.getError();
        EXPECT_EQ("", driver.getUnexpectedStateTransition());
        if (ValidatePosition(stream.getDevice())) {
            if (validatePositionIncrease &&
                !stream.getStreamContext()->isMmapped() /*TODO(b/274456992) remove*/) {
            if (validatePositionIncrease) {
                EXPECT_TRUE(driver.hasObservablePositionIncrease());
                EXPECT_TRUE(driver.hasHardwarePositionIncrease());
            }
@@ -4132,8 +4128,7 @@ class AudioStreamIo : public AudioCoreModuleBase,
        EXPECT_FALSE(worker.hasError()) << worker.getError();
        EXPECT_EQ("", driver.getUnexpectedStateTransition());
        if (ValidatePosition(stream.getDevice())) {
            if (validatePositionIncrease &&
                !stream.getStreamContext()->isMmapped() /*TODO(b/274456992) remove*/) {
            if (validatePositionIncrease) {
                EXPECT_TRUE(driver.hasObservablePositionIncrease());
                EXPECT_TRUE(driver.hasHardwarePositionIncrease());
            }
+11 −0
Original line number Diff line number Diff line
@@ -49,6 +49,11 @@ namespace fake {

class FakeVehicleHardware : public IVehicleHardware {
  public:
    // Supports Suspend_to_ram.
    static constexpr int32_t SUPPORT_S2R = 0x1;
    // Supports Suspend_to_disk.
    static constexpr int32_t SUPPORT_S2D = 0x4;

    using ValueResultType = VhalResult<VehiclePropValuePool::RecyclableType>;

    FakeVehicleHardware();
@@ -117,6 +122,12 @@ class FakeVehicleHardware : public IVehicleHardware {

    bool UseOverrideConfigDir();

    // Gets the config whether S2R or S2D is supported, must returns a bit flag made up of
    // SUPPORT_S2R and SUPPORT_S2D, for example, 0x0 means no support, 0x5 means support both.
    // The default implementation is reading this from system property:
    // "ro.vendor.fake_vhal.ap_power_state_req.config".
    int32_t getS2rS2dConfig();

  private:
    // Expose private methods to unit test.
    friend class FakeVehicleHardwareTestHelper;
Loading