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

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

CSD: Add default AIDL HAL implementation am: 3c8b6ce1

parents afa8ccc7 3c8b6ce1
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -242,7 +242,8 @@ ndk::ScopedAStatus Module::createStreamContext(
                portConfigIt->channelMask.value(), portConfigIt->sampleRate.value().value, flags,
                portConfigIt->ext.get<AudioPortExt::mix>().handle,
                std::make_unique<StreamContext::DataMQ>(frameSize * in_bufferSizeFrames),
                asyncCallback, outEventCallback, params);
                asyncCallback, outEventCallback,
                std::weak_ptr<sounddose::StreamDataProcessorInterface>{}, params);
        if (temp.isValid()) {
            *out_context = std::move(temp);
        } else {
+12 −0
Original line number Diff line number Diff line
@@ -90,6 +90,14 @@ bool StreamContext::isValid() const {
    return true;
}

void StreamContext::startStreamDataProcessor() {
    auto streamDataProcessor = mStreamDataProcessor.lock();
    if (streamDataProcessor != nullptr) {
        streamDataProcessor->startDataProcessor(mSampleRate, getChannelCount(mChannelLayout),
                                                mFormat);
    }
}

void StreamContext::reset() {
    mCommandMQ.reset();
    mReplyMQ.reset();
@@ -593,6 +601,10 @@ bool StreamOutWorkerLogic::write(size_t clientSize, StreamDescriptor::Reply* rep
                fatal = true;
                LOG(ERROR) << __func__ << ": write failed: " << status;
            }
            auto streamDataProcessor = mContext->getStreamDataProcessor().lock();
            if (streamDataProcessor != nullptr) {
                streamDataProcessor->process(mDataBuffer.get(), actualFrameCount * frameSize);
            }
        } else {
            if (mContext->getAsyncCallback() == nullptr) {
                usleep(3000);  // Simulate blocking transfer delay.
+1 −1
Original line number Diff line number Diff line
@@ -175,7 +175,7 @@ class Module : public BnModule {
    bool mMicMute = false;
    bool mMasterMute = false;
    float mMasterVolume = 1.0f;
    ChildInterface<sounddose::ISoundDose> mSoundDose;
    ChildInterface<sounddose::SoundDose> mSoundDose;
    std::optional<bool> mIsMmapSupported;

  protected:
+14 −2
Original line number Diff line number Diff line
@@ -20,11 +20,23 @@

#include <aidl/android/hardware/audio/core/sounddose/BnSoundDose.h>
#include <aidl/android/media/audio/common/AudioDevice.h>

using aidl::android::media::audio::common::AudioDevice;
#include <aidl/android/media/audio/common/AudioFormatDescription.h>

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

// Interface used for processing the data received by a stream.
class StreamDataProcessorInterface {
  public:
    virtual ~StreamDataProcessorInterface() = default;

    virtual void startDataProcessor(
            uint32_t samplerate, uint32_t channelCount,
            const ::aidl::android::media::audio::common::AudioFormatDescription& format) = 0;
    virtual void setAudioDevice(
            const ::aidl::android::media::audio::common::AudioDevice& audioDevice) = 0;
    virtual void process(const void* buffer, size_t size) = 0;
};

class SoundDose : public BnSoundDose {
  public:
    SoundDose() : mRs2Value(DEFAULT_MAX_RS2){};
+10 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@
#include <utils/Errors.h>

#include "core-impl/ChildInterface.h"
#include "core-impl/SoundDose.h"
#include "core-impl/utils.h"

namespace aidl::android::hardware::audio::core {
@@ -87,6 +88,7 @@ class StreamContext {
                  int32_t mixPortHandle, std::unique_ptr<DataMQ> dataMQ,
                  std::shared_ptr<IStreamCallback> asyncCallback,
                  std::shared_ptr<IStreamOutEventCallback> outEventCallback,
                  std::weak_ptr<sounddose::StreamDataProcessorInterface> streamDataProcessor,
                  DebugParameters debugParameters)
        : mCommandMQ(std::move(commandMQ)),
          mInternalCommandCookie(std::rand()),
@@ -100,6 +102,7 @@ class StreamContext {
          mDataMQ(std::move(dataMQ)),
          mAsyncCallback(asyncCallback),
          mOutEventCallback(outEventCallback),
          mStreamDataProcessor(streamDataProcessor),
          mDebugParameters(debugParameters) {}
    StreamContext(StreamContext&& other)
        : mCommandMQ(std::move(other.mCommandMQ)),
@@ -114,6 +117,7 @@ class StreamContext {
          mDataMQ(std::move(other.mDataMQ)),
          mAsyncCallback(std::move(other.mAsyncCallback)),
          mOutEventCallback(std::move(other.mOutEventCallback)),
          mStreamDataProcessor(std::move(other.mStreamDataProcessor)),
          mDebugParameters(std::move(other.mDebugParameters)),
          mFrameCount(other.mFrameCount) {}
    StreamContext& operator=(StreamContext&& other) {
@@ -129,6 +133,7 @@ class StreamContext {
        mDataMQ = std::move(other.mDataMQ);
        mAsyncCallback = std::move(other.mAsyncCallback);
        mOutEventCallback = std::move(other.mOutEventCallback);
        mStreamDataProcessor = std::move(other.mStreamDataProcessor);
        mDebugParameters = std::move(other.mDebugParameters);
        mFrameCount = other.mFrameCount;
        return *this;
@@ -154,6 +159,10 @@ class StreamContext {
    std::shared_ptr<IStreamOutEventCallback> getOutEventCallback() const {
        return mOutEventCallback;
    }
    std::weak_ptr<sounddose::StreamDataProcessorInterface> getStreamDataProcessor() const {
        return mStreamDataProcessor;
    }
    void startStreamDataProcessor();
    int getPortId() const { return mPortId; }
    ReplyMQ* getReplyMQ() const { return mReplyMQ.get(); }
    int getTransientStateDelayMs() const { return mDebugParameters.transientStateDelayMs; }
@@ -179,6 +188,7 @@ class StreamContext {
    std::unique_ptr<DataMQ> mDataMQ;
    std::shared_ptr<IStreamCallback> mAsyncCallback;
    std::shared_ptr<IStreamOutEventCallback> mOutEventCallback;  // Only used by output streams
    std::weak_ptr<sounddose::StreamDataProcessorInterface> mStreamDataProcessor;
    DebugParameters mDebugParameters;
    long mFrameCount = 0;
};
Loading