14a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov/* 24a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov * Copyright (C) 2016 The Android Open Source Project 34a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov * 44a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov * Licensed under the Apache License, Version 2.0 (the "License"); 54a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov * you may not use this file except in compliance with the License. 64a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov * You may obtain a copy of the License at 74a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov * 84a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov * http://www.apache.org/licenses/LICENSE-2.0 94a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov * 104a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov * Unless required by applicable law or agreed to in writing, software 114a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov * distributed under the License is distributed on an "AS IS" BASIS, 124a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov * See the License for the specific language governing permissions and 144a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov * limitations under the License. 154a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov */ 164a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov 174a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov#ifndef ANDROID_HARDWARE_EFFECTS_FACTORY_HAL_INTERFACE_H 184a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov#define ANDROID_HARDWARE_EFFECTS_FACTORY_HAL_INTERFACE_H 194a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov 20a0c91339814f37ea78365afb436c9f3d1f0a0090Mikhail Naganov#include <media/audiohal/EffectHalInterface.h> 2100260b5e6996b0a4b12f71c5b84e44adea040534Mikhail Naganov#include <system/audio_effect.h> 224a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov#include <utils/Errors.h> 234a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov#include <utils/RefBase.h> 244a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov 254a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganovnamespace android { 264a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov 27e4f1f63a2c54ee8687ad8cca18df0f6639ad7c81Mikhail Naganovclass EffectsFactoryHalInterface : public RefBase 284a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov{ 294a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov public: 304a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov // Returns the number of different effects in all loaded libraries. 314a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov virtual status_t queryNumberEffects(uint32_t *pNumEffects) = 0; 324a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov 334a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov // Returns a descriptor of the next available effect. 344a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov virtual status_t getDescriptor(uint32_t index, 354a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov effect_descriptor_t *pDescriptor) = 0; 364a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov 374a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov virtual status_t getDescriptor(const effect_uuid_t *pEffectUuid, 384a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov effect_descriptor_t *pDescriptor) = 0; 394a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov 404a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov // Creates an effect engine of the specified type. 414a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov // To release the effect engine, it is necessary to release references 424a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov // to the returned effect object. 434a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov virtual status_t createEffect(const effect_uuid_t *pEffectUuid, 444a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov int32_t sessionId, int32_t ioId, 454a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov sp<EffectHalInterface> *effect) = 0; 464a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov 474a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov virtual status_t dumpEffects(int fd) = 0; 484a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov 494a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov static sp<EffectsFactoryHalInterface> create(); 504a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov 517588ff418aca63b1dc43a85afc1e86c40dd889a3Kevin Rocard virtual status_t allocateBuffer(size_t size, sp<EffectBufferHalInterface>* buffer) = 0; 527588ff418aca63b1dc43a85afc1e86c40dd889a3Kevin Rocard virtual status_t mirrorBuffer(void* external, size_t size, 537588ff418aca63b1dc43a85afc1e86c40dd889a3Kevin Rocard sp<EffectBufferHalInterface>* buffer) = 0; 547588ff418aca63b1dc43a85afc1e86c40dd889a3Kevin Rocard 554a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov // Helper function to compare effect uuid to EFFECT_UUID_NULL. 564a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov static bool isNullUuid(const effect_uuid_t *pEffectUuid); 574a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov 584a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov protected: 594a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov // Subclasses can not be constructed directly by clients. 604a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov EffectsFactoryHalInterface() {} 611dc98674f701dada94143b4d31b7221c58346c6cMikhail Naganov 621dc98674f701dada94143b4d31b7221c58346c6cMikhail Naganov virtual ~EffectsFactoryHalInterface() {} 634a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov}; 644a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov 654a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov} // namespace android 664a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov 674a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov#endif // ANDROID_HARDWARE_EFFECTS_FACTORY_HAL_INTERFACE_H 68