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

Commit c0461f5b authored by Mikhail Naganov's avatar Mikhail Naganov Committed by Android (Google) Code Review
Browse files

Merge "audio hal: Fix multichannel playback"

parents b4728afb 66916c26
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -113,6 +113,8 @@ public:
protected:
    sp<EffectsFactoryHalInterface> mEffectsFactory;
    sp<EffectHalInterface> mDownmixInterface;
    size_t mInFrameSize;
    size_t mOutFrameSize;
    sp<EffectBufferHalInterface> mInBuffer;
    sp<EffectBufferHalInterface> mOutBuffer;
    effect_config_t    mDownmixConfig;
+2 −0
Original line number Diff line number Diff line
@@ -42,6 +42,8 @@ class EffectBufferHalInterface : public RefBase

    virtual void update() = 0;  // copies data from the external buffer, noop for allocated buffers
    virtual void commit() = 0;  // copies data to the external buffer, noop for allocated buffers
    virtual void update(size_t size) = 0;  // copies partial data from external buffer
    virtual void commit(size_t size) = 0;  // copies partial data to external buffer

    static status_t allocate(size_t size, sp<EffectBufferHalInterface>* buffer);
    static status_t mirror(void* external, size_t size, sp<EffectBufferHalInterface>* buffer);
+13 −3
Original line number Diff line number Diff line
@@ -115,15 +115,25 @@ void EffectBufferHalHidl::setExternalData(void* external) {
}

void EffectBufferHalHidl::update() {
    update(mBufferSize);
}

void EffectBufferHalHidl::commit() {
    commit(mBufferSize);
}

void EffectBufferHalHidl::update(size_t size) {
    if (mExternalData == nullptr) return;
    mMemory->update();
    memcpy(mAudioBuffer.raw, mExternalData, mBufferSize);
    if (size > mBufferSize) size = mBufferSize;
    memcpy(mAudioBuffer.raw, mExternalData, size);
    mMemory->commit();
}

void EffectBufferHalHidl::commit() {
void EffectBufferHalHidl::commit(size_t size) {
    if (mExternalData == nullptr) return;
    memcpy(mExternalData, mAudioBuffer.raw, mBufferSize);
    if (size > mBufferSize) size = mBufferSize;
    memcpy(mExternalData, mAudioBuffer.raw, size);
}

} // namespace android
+2 −0
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@ class EffectBufferHalHidl : public EffectBufferHalInterface

    virtual void update();
    virtual void commit();
    virtual void update(size_t size);
    virtual void commit(size_t size);

    const AudioBuffer& hidlBuffer() const { return mHidlBuffer; }

+6 −0
Original line number Diff line number Diff line
@@ -75,4 +75,10 @@ void EffectBufferHalLocal::update() {
void EffectBufferHalLocal::commit() {
}

void EffectBufferHalLocal::update(size_t size) {
}

void EffectBufferHalLocal::commit(size_t size) {
}

} // namespace android
Loading