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