1022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov/*
2022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov * Copyright (C) 2017 The Android Open Source Project
3022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov *
4022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov * Licensed under the Apache License, Version 2.0 (the "License");
5022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov * you may not use this file except in compliance with the License.
6022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov * You may obtain a copy of the License at
7022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov *
8022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov *      http://www.apache.org/licenses/LICENSE-2.0
9022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov *
10022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov * Unless required by applicable law or agreed to in writing, software
11022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov * distributed under the License is distributed on an "AS IS" BASIS,
12022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov * See the License for the specific language governing permissions and
14022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov * limitations under the License.
15022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov */
16022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
17022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov#ifndef ANDROID_HARDWARE_EFFECT_BUFFER_HAL_INTERFACE_H
18022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov#define ANDROID_HARDWARE_EFFECT_BUFFER_HAL_INTERFACE_H
19022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
20022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov#include <system/audio_effect.h>
21022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov#include <utils/Errors.h>
22022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov#include <utils/RefBase.h>
23022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
24022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganovnamespace android {
25022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
26022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov// Abstraction for an audio buffer. It may be a "mirror" for
27022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov// a buffer that the effect chain doesn't own, or a buffer owned by
28022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov// the effect chain.
297588ff418aca63b1dc43a85afc1e86c40dd889a3Kevin Rocard// Buffers are created from EffectsFactoryHalInterface
30022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganovclass EffectBufferHalInterface : public RefBase
31022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov{
32022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov  public:
33022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual audio_buffer_t* audioBuffer() = 0;
34022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual void* externalData() const = 0;
35022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    // To be used when interacting with the code that doesn't know about
36022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    // "mirrored" buffers.
37022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual void* ptr() {
38022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov        return externalData() != nullptr ? externalData() : audioBuffer()->raw;
39022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    }
40022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
4194a1ee822686e920a33e312f4032f991731aea07rago    virtual size_t getSize() const = 0;
4294a1ee822686e920a33e312f4032f991731aea07rago
43022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual void setExternalData(void* external) = 0;
44022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual void setFrameCount(size_t frameCount) = 0;
4540be8a343e8ceb7ae087bfb8988247731fa5ae75Mikhail Naganov    virtual bool checkFrameCountChange() = 0;  // returns whether frame count has been updated
4640be8a343e8ceb7ae087bfb8988247731fa5ae75Mikhail Naganov                                               // since the last call to this method
47022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
48022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual void update() = 0;  // copies data from the external buffer, noop for allocated buffers
49022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual void commit() = 0;  // copies data to the external buffer, noop for allocated buffers
5066916c26a7055c9e10471720502a29f759609819Mikhail Naganov    virtual void update(size_t size) = 0;  // copies partial data from external buffer
5166916c26a7055c9e10471720502a29f759609819Mikhail Naganov    virtual void commit(size_t size) = 0;  // copies partial data to external buffer
52022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
53022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov  protected:
54022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    // Subclasses can not be constructed directly by clients.
55022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    EffectBufferHalInterface() {}
56022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
57022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual ~EffectBufferHalInterface() {}
58022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov};
59022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
60022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov} // namespace android
61022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
62022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov#endif // ANDROID_HARDWARE_EFFECT_BUFFER_HAL_INTERFACE_H
63