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. 29022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganovclass EffectBufferHalInterface : public RefBase 30022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov{ 31022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov public: 32022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov virtual audio_buffer_t* audioBuffer() = 0; 33022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov virtual void* externalData() const = 0; 34022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov // To be used when interacting with the code that doesn't know about 35022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov // "mirrored" buffers. 36022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov virtual void* ptr() { 37022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov return externalData() != nullptr ? externalData() : audioBuffer()->raw; 38022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov } 39022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov 40022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov virtual void setExternalData(void* external) = 0; 41022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov virtual void setFrameCount(size_t frameCount) = 0; 4240be8a343e8ceb7ae087bfb8988247731fa5ae75Mikhail Naganov virtual bool checkFrameCountChange() = 0; // returns whether frame count has been updated 4340be8a343e8ceb7ae087bfb8988247731fa5ae75Mikhail Naganov // since the last call to this method 44022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov 45022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov virtual void update() = 0; // copies data from the external buffer, noop for allocated buffers 46022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov virtual void commit() = 0; // copies data to the external buffer, noop for allocated buffers 4766916c26a7055c9e10471720502a29f759609819Mikhail Naganov virtual void update(size_t size) = 0; // copies partial data from external buffer 4866916c26a7055c9e10471720502a29f759609819Mikhail Naganov virtual void commit(size_t size) = 0; // copies partial data to external buffer 49022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov 50022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov static status_t allocate(size_t size, sp<EffectBufferHalInterface>* buffer); 51022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov static status_t mirror(void* external, size_t size, sp<EffectBufferHalInterface>* 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