1a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov/* 2a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov * Copyright (C) 2017 The Android Open Source Project 3a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov * 4a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov * Licensed under the Apache License, Version 2.0 (the "License"); 5a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov * you may not use this file except in compliance with the License. 6a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov * You may obtain a copy of the License at 7a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov * 8a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov * http://www.apache.org/licenses/LICENSE-2.0 9a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov * 10a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov * Unless required by applicable law or agreed to in writing, software 11a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov * distributed under the License is distributed on an "AS IS" BASIS, 12a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov * See the License for the specific language governing permissions and 14a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov * limitations under the License. 15a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov */ 16a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov 1762588b69f6289e2ccb7a363a4b0727d51b76bfb5Kevin Rocard#include <common/all-versions/IncludeGuard.h> 18a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov 19a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov#include <mutex> 20a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov 21a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov#include <android/hidl/memory/1.0/IMemory.h> 22a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov#include <system/audio_effect.h> 23a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov#include <utils/KeyedVector.h> 2422505e6bf1959d2b2217a399f75e0721631718d5Kevin Rocard#include <utils/RefBase.h> 25a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov#include <utils/Singleton.h> 26a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov 2762588b69f6289e2ccb7a363a4b0727d51b76bfb5Kevin Rocardusing ::android::hardware::audio::effect::AUDIO_HAL_VERSION::AudioBuffer; 28a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganovusing ::android::hidl::memory::V1_0::IMemory; 29a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov 30a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganovnamespace android { 31a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganovnamespace hardware { 32a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganovnamespace audio { 33a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganovnamespace effect { 3462588b69f6289e2ccb7a363a4b0727d51b76bfb5Kevin Rocardnamespace AUDIO_HAL_VERSION { 35a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganovnamespace implementation { 36a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov 37a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganovclass AudioBufferWrapper : public RefBase { 3822505e6bf1959d2b2217a399f75e0721631718d5Kevin Rocard public: 39a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov explicit AudioBufferWrapper(const AudioBuffer& buffer); 40a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov virtual ~AudioBufferWrapper(); 41a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov bool init(); 42a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov audio_buffer_t* getHalBuffer() { return &mHalBuffer; } 4322505e6bf1959d2b2217a399f75e0721631718d5Kevin Rocard 4422505e6bf1959d2b2217a399f75e0721631718d5Kevin Rocard private: 45a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov AudioBufferWrapper(const AudioBufferWrapper&) = delete; 46a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov void operator=(AudioBufferWrapper) = delete; 47a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov 48a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov AudioBuffer mHidlBuffer; 49a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov sp<IMemory> mHidlMemory; 50a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov audio_buffer_t mHalBuffer; 51a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov}; 52a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov 53a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov} // namespace implementation 5462588b69f6289e2ccb7a363a4b0727d51b76bfb5Kevin Rocard} // namespace AUDIO_HAL_VERSION 55a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov} // namespace effect 56a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov} // namespace audio 57a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov} // namespace hardware 58a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov} // namespace android 59a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov 6062588b69f6289e2ccb7a363a4b0727d51b76bfb5Kevin Rocardusing ::android::hardware::audio::effect::AUDIO_HAL_VERSION::implementation::AudioBufferWrapper; 61a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov 62a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganovnamespace android { 63a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov 64a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov// This class needs to be in 'android' ns because Singleton macros require that. 65a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganovclass AudioBufferManager : public Singleton<AudioBufferManager> { 6622505e6bf1959d2b2217a399f75e0721631718d5Kevin Rocard public: 67a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov bool wrap(const AudioBuffer& buffer, sp<AudioBufferWrapper>* wrapper); 68a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov 6922505e6bf1959d2b2217a399f75e0721631718d5Kevin Rocard private: 7062588b69f6289e2ccb7a363a4b0727d51b76bfb5Kevin Rocard friend class hardware::audio::effect::AUDIO_HAL_VERSION::implementation::AudioBufferWrapper; 71a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov 72a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov // Called by AudioBufferWrapper. 73a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov void removeEntry(uint64_t id); 74a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov 75a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov std::mutex mLock; 76a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov KeyedVector<uint64_t, wp<AudioBufferWrapper>> mBuffers; 77a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov}; 78a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov 79a331de14219b34b08f4cbb462a45f1fd82a92d48Mikhail Naganov} // namespace android 80