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