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_LOCAL_H
18022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov#define ANDROID_HARDWARE_EFFECT_BUFFER_HAL_LOCAL_H
19022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
20022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov#include <memory>
21022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
22022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov#include <media/audiohal/EffectBufferHalInterface.h>
23022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov#include <system/audio_effect.h>
24022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
25022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganovnamespace android {
26022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
27022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganovclass EffectBufferHalLocal : public EffectBufferHalInterface
28022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov{
29022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov  public:
30022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual audio_buffer_t* audioBuffer();
31022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual void* externalData() const;
32022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
33022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual void setExternalData(void* external);
34022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual void setFrameCount(size_t frameCount);
3540be8a343e8ceb7ae087bfb8988247731fa5ae75Mikhail Naganov    virtual bool checkFrameCountChange();
36022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
37022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual void update();
38022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual void commit();
3966916c26a7055c9e10471720502a29f759609819Mikhail Naganov    virtual void update(size_t size);
4066916c26a7055c9e10471720502a29f759609819Mikhail Naganov    virtual void commit(size_t size);
41022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
42022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov  private:
43022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    friend class EffectBufferHalInterface;
44022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
45022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    std::unique_ptr<uint8_t[]> mOwnBuffer;
46022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    const size_t mBufferSize;
4740be8a343e8ceb7ae087bfb8988247731fa5ae75Mikhail Naganov    bool mFrameCountChanged;
48022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    audio_buffer_t mAudioBuffer;
49022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
50022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    // Can not be constructed directly by clients.
51022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    explicit EffectBufferHalLocal(size_t size);
52022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    EffectBufferHalLocal(void* external, size_t size);
53022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
54022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual ~EffectBufferHalLocal();
55022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
56022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    status_t init();
57022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov};
58022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
59022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov} // namespace android
60022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
61022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov#endif // ANDROID_HARDWARE_EFFECT_BUFFER_HAL_LOCAL_H
62