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_EFFECT_HAL_LOCAL_H
184a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov#define ANDROID_HARDWARE_EFFECT_HAL_LOCAL_H
194a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov
2000260b5e6996b0a4b12f71c5b84e44adea040534Mikhail Naganov#include <hardware/audio_effect.h>
21a0c91339814f37ea78365afb436c9f3d1f0a0090Mikhail Naganov#include <media/audiohal/EffectHalInterface.h>
224a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov
234a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganovnamespace android {
244a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov
254a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganovclass EffectHalLocal : public EffectHalInterface
264a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov{
274a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov  public:
28022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    // Set the input buffer.
29022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual status_t setInBuffer(const sp<EffectBufferHalInterface>& buffer);
30022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
31022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    // Set the output buffer.
32022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual status_t setOutBuffer(const sp<EffectBufferHalInterface>& buffer);
33022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
34022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    // Effect process function.
35022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual status_t process();
364a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov
374a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov    // Process reverse stream function. This function is used to pass
384a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov    // a reference stream to the effect engine.
39022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual status_t processReverse();
404a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov
414a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov    // Send a command and receive a response to/from effect engine.
424a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov    virtual status_t command(uint32_t cmdCode, uint32_t cmdSize, void *pCmdData,
434a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov            uint32_t *replySize, void *pReplyData);
444a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov
454a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov    // Returns the effect descriptor.
464a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov    virtual status_t getDescriptor(effect_descriptor_t *pDescriptor);
474a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov
48022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    // Free resources on the remote side.
49022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    virtual status_t close();
50022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov
516b111f32247800dccd34dd396e731b9e7888b185Mikhail Naganov    // Whether it's a local implementation.
526b111f32247800dccd34dd396e731b9e7888b185Mikhail Naganov    virtual bool isLocal() const { return true; }
536b111f32247800dccd34dd396e731b9e7888b185Mikhail Naganov
544a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov    effect_handle_t handle() const { return mHandle; }
554a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov
564a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov  private:
574a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov    effect_handle_t mHandle;
58022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    sp<EffectBufferHalInterface> mInBuffer;
59022b9953153bdb1984f0abb17d21ef8c1826ad49Mikhail Naganov    sp<EffectBufferHalInterface> mOutBuffer;
604a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov
614a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov    friend class EffectsFactoryHalLocal;
624a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov
634a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov    // Can not be constructed directly by clients.
644a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov    explicit EffectHalLocal(effect_handle_t handle);
651dc98674f701dada94143b4d31b7221c58346c6cMikhail Naganov
661dc98674f701dada94143b4d31b7221c58346c6cMikhail Naganov    // The destructor automatically releases the effect.
671dc98674f701dada94143b4d31b7221c58346c6cMikhail Naganov    virtual ~EffectHalLocal();
684a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov};
694a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov
704a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov} // namespace android
714a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov
724a3d5c23f79189eb7ab9f31c440c7da5b15947a2Mikhail Naganov#endif // ANDROID_HARDWARE_EFFECT_HAL_LOCAL_H
73