xref: /aosp_15_r20/hardware/interfaces/audio/effect/all-versions/default/Effect.h (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker  * Copyright (C) 2018 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker  *
4*4d7e907cSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker  *
8*4d7e907cSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker  *
10*4d7e907cSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker  * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker  */
16*4d7e907cSAndroid Build Coastguard Worker 
17*4d7e907cSAndroid Build Coastguard Worker #ifndef ANDROID_HARDWARE_AUDIO_EFFECT_EFFECT_H
18*4d7e907cSAndroid Build Coastguard Worker #define ANDROID_HARDWARE_AUDIO_EFFECT_EFFECT_H
19*4d7e907cSAndroid Build Coastguard Worker 
20*4d7e907cSAndroid Build Coastguard Worker #include PATH(android/hardware/audio/effect/FILE_VERSION/IEffect.h)
21*4d7e907cSAndroid Build Coastguard Worker 
22*4d7e907cSAndroid Build Coastguard Worker #include "AudioBufferManager.h"
23*4d7e907cSAndroid Build Coastguard Worker 
24*4d7e907cSAndroid Build Coastguard Worker #include <atomic>
25*4d7e907cSAndroid Build Coastguard Worker #include <memory>
26*4d7e907cSAndroid Build Coastguard Worker #include <tuple>
27*4d7e907cSAndroid Build Coastguard Worker #include <vector>
28*4d7e907cSAndroid Build Coastguard Worker 
29*4d7e907cSAndroid Build Coastguard Worker #include <fmq/EventFlag.h>
30*4d7e907cSAndroid Build Coastguard Worker #include <fmq/MessageQueue.h>
31*4d7e907cSAndroid Build Coastguard Worker #include <hidl/MQDescriptor.h>
32*4d7e907cSAndroid Build Coastguard Worker #include <hidl/Status.h>
33*4d7e907cSAndroid Build Coastguard Worker #include <mediautils/MethodStatistics.h>
34*4d7e907cSAndroid Build Coastguard Worker #include <utils/Thread.h>
35*4d7e907cSAndroid Build Coastguard Worker 
36*4d7e907cSAndroid Build Coastguard Worker #include <hardware/audio_effect.h>
37*4d7e907cSAndroid Build Coastguard Worker 
38*4d7e907cSAndroid Build Coastguard Worker #include "VersionUtils.h"
39*4d7e907cSAndroid Build Coastguard Worker 
40*4d7e907cSAndroid Build Coastguard Worker namespace android {
41*4d7e907cSAndroid Build Coastguard Worker namespace hardware {
42*4d7e907cSAndroid Build Coastguard Worker namespace audio {
43*4d7e907cSAndroid Build Coastguard Worker namespace effect {
44*4d7e907cSAndroid Build Coastguard Worker namespace CPP_VERSION {
45*4d7e907cSAndroid Build Coastguard Worker namespace implementation {
46*4d7e907cSAndroid Build Coastguard Worker 
47*4d7e907cSAndroid Build Coastguard Worker using ::android::sp;
48*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::hidl_string;
49*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::hidl_vec;
50*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::Return;
51*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::Void;
52*4d7e907cSAndroid Build Coastguard Worker #if MAJOR_VERSION <= 6
53*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::audio::common::COMMON_TYPES_CPP_VERSION::implementation::
54*4d7e907cSAndroid Build Coastguard Worker         AudioDeviceBitfield;
55*4d7e907cSAndroid Build Coastguard Worker #endif
56*4d7e907cSAndroid Build Coastguard Worker using namespace ::android::hardware::audio::common::COMMON_TYPES_CPP_VERSION;
57*4d7e907cSAndroid Build Coastguard Worker using namespace ::android::hardware::audio::effect::CPP_VERSION;
58*4d7e907cSAndroid Build Coastguard Worker 
59*4d7e907cSAndroid Build Coastguard Worker struct Effect : public IEffect {
60*4d7e907cSAndroid Build Coastguard Worker     typedef MessageQueue<Result, kSynchronizedReadWrite> StatusMQ;
61*4d7e907cSAndroid Build Coastguard Worker     using GetParameterSuccessCallback =
62*4d7e907cSAndroid Build Coastguard Worker         std::function<void(uint32_t valueSize, const void* valueData)>;
63*4d7e907cSAndroid Build Coastguard Worker 
64*4d7e907cSAndroid Build Coastguard Worker     Effect(bool isInput, effect_handle_t handle);
65*4d7e907cSAndroid Build Coastguard Worker 
66*4d7e907cSAndroid Build Coastguard Worker     // Methods from ::android::hardware::audio::effect::CPP_VERSION::IEffect follow.
67*4d7e907cSAndroid Build Coastguard Worker     Return<Result> init() override;
68*4d7e907cSAndroid Build Coastguard Worker     Return<Result> setConfig(
69*4d7e907cSAndroid Build Coastguard Worker         const EffectConfig& config, const sp<IEffectBufferProviderCallback>& inputBufferProvider,
70*4d7e907cSAndroid Build Coastguard Worker         const sp<IEffectBufferProviderCallback>& outputBufferProvider) override;
71*4d7e907cSAndroid Build Coastguard Worker     Return<Result> reset() override;
72*4d7e907cSAndroid Build Coastguard Worker     Return<Result> enable() override;
73*4d7e907cSAndroid Build Coastguard Worker     Return<Result> disable() override;
74*4d7e907cSAndroid Build Coastguard Worker #if MAJOR_VERSION <= 6
75*4d7e907cSAndroid Build Coastguard Worker     Return<Result> setAudioSource(AudioSource source) override;
76*4d7e907cSAndroid Build Coastguard Worker     Return<Result> setDevice(AudioDeviceBitfield device) override;
77*4d7e907cSAndroid Build Coastguard Worker     Return<Result> setInputDevice(AudioDeviceBitfield device) override;
78*4d7e907cSAndroid Build Coastguard Worker #else
79*4d7e907cSAndroid Build Coastguard Worker     Return<Result> setAudioSource(const AudioSource& source) override;
80*4d7e907cSAndroid Build Coastguard Worker     Return<Result> setDevice(const DeviceAddress& device) override;
81*4d7e907cSAndroid Build Coastguard Worker     Return<Result> setInputDevice(const DeviceAddress& device) override;
82*4d7e907cSAndroid Build Coastguard Worker #endif
83*4d7e907cSAndroid Build Coastguard Worker     Return<void> setAndGetVolume(const hidl_vec<uint32_t>& volumes,
84*4d7e907cSAndroid Build Coastguard Worker                                  setAndGetVolume_cb _hidl_cb) override;
85*4d7e907cSAndroid Build Coastguard Worker     Return<Result> volumeChangeNotification(const hidl_vec<uint32_t>& volumes) override;
86*4d7e907cSAndroid Build Coastguard Worker     Return<Result> setAudioMode(AudioMode mode) override;
87*4d7e907cSAndroid Build Coastguard Worker     Return<Result> setConfigReverse(
88*4d7e907cSAndroid Build Coastguard Worker         const EffectConfig& config, const sp<IEffectBufferProviderCallback>& inputBufferProvider,
89*4d7e907cSAndroid Build Coastguard Worker         const sp<IEffectBufferProviderCallback>& outputBufferProvider) override;
90*4d7e907cSAndroid Build Coastguard Worker     Return<void> getConfig(getConfig_cb _hidl_cb) override;
91*4d7e907cSAndroid Build Coastguard Worker     Return<void> getConfigReverse(getConfigReverse_cb _hidl_cb) override;
92*4d7e907cSAndroid Build Coastguard Worker     Return<void> getSupportedAuxChannelsConfigs(
93*4d7e907cSAndroid Build Coastguard Worker         uint32_t maxConfigs, getSupportedAuxChannelsConfigs_cb _hidl_cb) override;
94*4d7e907cSAndroid Build Coastguard Worker     Return<void> getAuxChannelsConfig(getAuxChannelsConfig_cb _hidl_cb) override;
95*4d7e907cSAndroid Build Coastguard Worker     Return<Result> setAuxChannelsConfig(const EffectAuxChannelsConfig& config) override;
96*4d7e907cSAndroid Build Coastguard Worker     Return<Result> offload(const EffectOffloadParameter& param) override;
97*4d7e907cSAndroid Build Coastguard Worker     Return<void> getDescriptor(getDescriptor_cb _hidl_cb) override;
98*4d7e907cSAndroid Build Coastguard Worker     Return<void> prepareForProcessing(prepareForProcessing_cb _hidl_cb) override;
99*4d7e907cSAndroid Build Coastguard Worker     Return<Result> setProcessBuffers(const AudioBuffer& inBuffer,
100*4d7e907cSAndroid Build Coastguard Worker                                      const AudioBuffer& outBuffer) override;
101*4d7e907cSAndroid Build Coastguard Worker     Return<void> command(uint32_t commandId, const hidl_vec<uint8_t>& data, uint32_t resultMaxSize,
102*4d7e907cSAndroid Build Coastguard Worker                          command_cb _hidl_cb) override;
103*4d7e907cSAndroid Build Coastguard Worker     Return<Result> setParameter(const hidl_vec<uint8_t>& parameter,
104*4d7e907cSAndroid Build Coastguard Worker                                 const hidl_vec<uint8_t>& value) override;
105*4d7e907cSAndroid Build Coastguard Worker     Return<void> getParameter(const hidl_vec<uint8_t>& parameter, uint32_t valueMaxSize,
106*4d7e907cSAndroid Build Coastguard Worker                               getParameter_cb _hidl_cb) override;
107*4d7e907cSAndroid Build Coastguard Worker     Return<void> getSupportedConfigsForFeature(uint32_t featureId, uint32_t maxConfigs,
108*4d7e907cSAndroid Build Coastguard Worker                                                uint32_t configSize,
109*4d7e907cSAndroid Build Coastguard Worker                                                getSupportedConfigsForFeature_cb _hidl_cb) override;
110*4d7e907cSAndroid Build Coastguard Worker     Return<void> getCurrentConfigForFeature(uint32_t featureId, uint32_t configSize,
111*4d7e907cSAndroid Build Coastguard Worker                                             getCurrentConfigForFeature_cb _hidl_cb) override;
112*4d7e907cSAndroid Build Coastguard Worker     Return<Result> setCurrentConfigForFeature(uint32_t featureId,
113*4d7e907cSAndroid Build Coastguard Worker                                               const hidl_vec<uint8_t>& configData) override;
114*4d7e907cSAndroid Build Coastguard Worker     Return<Result> close() override;
115*4d7e907cSAndroid Build Coastguard Worker     Return<void> debug(const hidl_handle& fd, const hidl_vec<hidl_string>& options) override;
116*4d7e907cSAndroid Build Coastguard Worker 
117*4d7e907cSAndroid Build Coastguard Worker     // Utility methods for extending interfaces.
118*4d7e907cSAndroid Build Coastguard Worker     static const char* sContextConversion;
119*4d7e907cSAndroid Build Coastguard Worker 
120*4d7e907cSAndroid Build Coastguard Worker     Result analyzeStatus(const char* funcName, const char* subFuncName,
121*4d7e907cSAndroid Build Coastguard Worker                          const char* contextDescription, status_t status);
122*4d7e907cSAndroid Build Coastguard Worker     template <typename T>
getIntegerParamEffect123*4d7e907cSAndroid Build Coastguard Worker     Return<void> getIntegerParam(uint32_t paramId,
124*4d7e907cSAndroid Build Coastguard Worker                                  std::function<void(Result retval, T paramValue)> cb) {
125*4d7e907cSAndroid Build Coastguard Worker         T value;
126*4d7e907cSAndroid Build Coastguard Worker         Result retval = getParameterImpl(sizeof(uint32_t), &paramId, sizeof(T),
127*4d7e907cSAndroid Build Coastguard Worker                                          [&](uint32_t valueSize, const void* valueData) {
128*4d7e907cSAndroid Build Coastguard Worker                                              if (valueSize > sizeof(T)) valueSize = sizeof(T);
129*4d7e907cSAndroid Build Coastguard Worker                                              memcpy(&value, valueData, valueSize);
130*4d7e907cSAndroid Build Coastguard Worker                                          });
131*4d7e907cSAndroid Build Coastguard Worker         cb(retval, value);
132*4d7e907cSAndroid Build Coastguard Worker         return Void();
133*4d7e907cSAndroid Build Coastguard Worker     }
134*4d7e907cSAndroid Build Coastguard Worker 
135*4d7e907cSAndroid Build Coastguard Worker     template <typename T>
getParamEffect136*4d7e907cSAndroid Build Coastguard Worker     Result getParam(uint32_t paramId, T& paramValue) {
137*4d7e907cSAndroid Build Coastguard Worker         return getParameterImpl(sizeof(uint32_t), &paramId, sizeof(T),
138*4d7e907cSAndroid Build Coastguard Worker                                 [&](uint32_t valueSize, const void* valueData) {
139*4d7e907cSAndroid Build Coastguard Worker                                     if (valueSize > sizeof(T)) valueSize = sizeof(T);
140*4d7e907cSAndroid Build Coastguard Worker                                     memcpy(&paramValue, valueData, valueSize);
141*4d7e907cSAndroid Build Coastguard Worker                                 });
142*4d7e907cSAndroid Build Coastguard Worker     }
143*4d7e907cSAndroid Build Coastguard Worker 
144*4d7e907cSAndroid Build Coastguard Worker     template <typename T>
getParamEffect145*4d7e907cSAndroid Build Coastguard Worker     Result getParam(uint32_t paramId, uint32_t paramArg, T& paramValue) {
146*4d7e907cSAndroid Build Coastguard Worker         uint32_t params[2] = {paramId, paramArg};
147*4d7e907cSAndroid Build Coastguard Worker         return getParameterImpl(sizeof(params), params, sizeof(T),
148*4d7e907cSAndroid Build Coastguard Worker                                 [&](uint32_t valueSize, const void* valueData) {
149*4d7e907cSAndroid Build Coastguard Worker                                     if (valueSize > sizeof(T)) valueSize = sizeof(T);
150*4d7e907cSAndroid Build Coastguard Worker                                     memcpy(&paramValue, valueData, valueSize);
151*4d7e907cSAndroid Build Coastguard Worker                                 });
152*4d7e907cSAndroid Build Coastguard Worker     }
153*4d7e907cSAndroid Build Coastguard Worker 
154*4d7e907cSAndroid Build Coastguard Worker     template <typename T>
setParamEffect155*4d7e907cSAndroid Build Coastguard Worker     Result setParam(uint32_t paramId, const T& paramValue) {
156*4d7e907cSAndroid Build Coastguard Worker         return setParameterImpl(sizeof(uint32_t), &paramId, sizeof(T), &paramValue);
157*4d7e907cSAndroid Build Coastguard Worker     }
158*4d7e907cSAndroid Build Coastguard Worker 
159*4d7e907cSAndroid Build Coastguard Worker     template <typename T>
setParamEffect160*4d7e907cSAndroid Build Coastguard Worker     Result setParam(uint32_t paramId, uint32_t paramArg, const T& paramValue) {
161*4d7e907cSAndroid Build Coastguard Worker         uint32_t params[2] = {paramId, paramArg};
162*4d7e907cSAndroid Build Coastguard Worker         return setParameterImpl(sizeof(params), params, sizeof(T), &paramValue);
163*4d7e907cSAndroid Build Coastguard Worker     }
164*4d7e907cSAndroid Build Coastguard Worker 
getParameterImplEffect165*4d7e907cSAndroid Build Coastguard Worker     Result getParameterImpl(uint32_t paramSize, const void* paramData, uint32_t valueSize,
166*4d7e907cSAndroid Build Coastguard Worker                             GetParameterSuccessCallback onSuccess) {
167*4d7e907cSAndroid Build Coastguard Worker         return getParameterImpl(paramSize, paramData, valueSize, valueSize, onSuccess);
168*4d7e907cSAndroid Build Coastguard Worker     }
169*4d7e907cSAndroid Build Coastguard Worker     Result getParameterImpl(uint32_t paramSize, const void* paramData, uint32_t requestValueSize,
170*4d7e907cSAndroid Build Coastguard Worker                             uint32_t replyValueSize, GetParameterSuccessCallback onSuccess);
171*4d7e907cSAndroid Build Coastguard Worker     Result setParameterImpl(uint32_t paramSize, const void* paramData, uint32_t valueSize,
172*4d7e907cSAndroid Build Coastguard Worker                             const void* valueData);
173*4d7e907cSAndroid Build Coastguard Worker 
174*4d7e907cSAndroid Build Coastguard Worker     // process execution statistics
175*4d7e907cSAndroid Build Coastguard Worker     const std::shared_ptr<mediautils::MethodStatistics<std::string>> mStatistics =
176*4d7e907cSAndroid Build Coastguard Worker             std::make_shared<mediautils::MethodStatistics<std::string>>();
177*4d7e907cSAndroid Build Coastguard Worker 
178*4d7e907cSAndroid Build Coastguard Worker   private:
179*4d7e907cSAndroid Build Coastguard Worker     friend struct VirtualizerEffect;  // for getParameterImpl
180*4d7e907cSAndroid Build Coastguard Worker     friend struct VisualizerEffect;   // to allow executing commands
181*4d7e907cSAndroid Build Coastguard Worker 
182*4d7e907cSAndroid Build Coastguard Worker     using CommandSuccessCallback = std::function<void()>;
183*4d7e907cSAndroid Build Coastguard Worker     using GetConfigCallback = std::function<void(Result retval, const EffectConfig& config)>;
184*4d7e907cSAndroid Build Coastguard Worker     using GetCurrentConfigSuccessCallback = std::function<void(void* configData)>;
185*4d7e907cSAndroid Build Coastguard Worker     using GetSupportedConfigsSuccessCallback =
186*4d7e907cSAndroid Build Coastguard Worker         std::function<void(uint32_t supportedConfigs, void* configsData)>;
187*4d7e907cSAndroid Build Coastguard Worker 
188*4d7e907cSAndroid Build Coastguard Worker     // Sets the limit on the maximum size of vendor-provided data structures.
189*4d7e907cSAndroid Build Coastguard Worker     static constexpr size_t kMaxDataSize = 1 << 20;
190*4d7e907cSAndroid Build Coastguard Worker     static constexpr effect_handle_t kInvalidEffectHandle = nullptr;
191*4d7e907cSAndroid Build Coastguard Worker 
192*4d7e907cSAndroid Build Coastguard Worker     static const char* sContextResultOfCommand;
193*4d7e907cSAndroid Build Coastguard Worker     static const char* sContextCallToCommand;
194*4d7e907cSAndroid Build Coastguard Worker     static const char* sContextCallFunction;
195*4d7e907cSAndroid Build Coastguard Worker 
196*4d7e907cSAndroid Build Coastguard Worker     const bool mIsInput;
197*4d7e907cSAndroid Build Coastguard Worker     effect_handle_t mHandle;
198*4d7e907cSAndroid Build Coastguard Worker     sp<AudioBufferWrapper> mInBuffer;
199*4d7e907cSAndroid Build Coastguard Worker     sp<AudioBufferWrapper> mOutBuffer;
200*4d7e907cSAndroid Build Coastguard Worker     std::atomic<audio_buffer_t*> mHalInBufferPtr;
201*4d7e907cSAndroid Build Coastguard Worker     std::atomic<audio_buffer_t*> mHalOutBufferPtr;
202*4d7e907cSAndroid Build Coastguard Worker     std::unique_ptr<StatusMQ> mStatusMQ;
203*4d7e907cSAndroid Build Coastguard Worker     EventFlag* mEfGroup;
204*4d7e907cSAndroid Build Coastguard Worker     std::atomic<bool> mStopProcessThread;
205*4d7e907cSAndroid Build Coastguard Worker     sp<Thread> mProcessThread;
206*4d7e907cSAndroid Build Coastguard Worker 
207*4d7e907cSAndroid Build Coastguard Worker     virtual ~Effect();
208*4d7e907cSAndroid Build Coastguard Worker 
209*4d7e907cSAndroid Build Coastguard Worker     template <typename T>
210*4d7e907cSAndroid Build Coastguard Worker     static size_t alignedSizeIn(size_t s);
211*4d7e907cSAndroid Build Coastguard Worker     template <typename T>
212*4d7e907cSAndroid Build Coastguard Worker     std::unique_ptr<uint8_t[]> hidlVecToHal(const hidl_vec<T>& vec, uint32_t* halDataSize);
213*4d7e907cSAndroid Build Coastguard Worker     std::tuple<Result, effect_handle_t> closeImpl();
214*4d7e907cSAndroid Build Coastguard Worker     void effectAuxChannelsConfigFromHal(const channel_config_t& halConfig,
215*4d7e907cSAndroid Build Coastguard Worker                                         EffectAuxChannelsConfig* config);
216*4d7e907cSAndroid Build Coastguard Worker     static void effectAuxChannelsConfigToHal(const EffectAuxChannelsConfig& config,
217*4d7e907cSAndroid Build Coastguard Worker                                              channel_config_t* halConfig);
218*4d7e907cSAndroid Build Coastguard Worker     static void effectOffloadParamToHal(const EffectOffloadParameter& offload,
219*4d7e907cSAndroid Build Coastguard Worker                                         effect_offload_param_t* halOffload);
220*4d7e907cSAndroid Build Coastguard Worker     static bool parameterToHal(uint32_t paramSize, const void* paramData, uint32_t valueSize,
221*4d7e907cSAndroid Build Coastguard Worker                                const void** valueData, std::vector<uint8_t>* halParamBuffer);
222*4d7e907cSAndroid Build Coastguard Worker 
223*4d7e907cSAndroid Build Coastguard Worker     Result analyzeCommandStatus(const char* commandName, const char* context, status_t status);
224*4d7e907cSAndroid Build Coastguard Worker     Return<void> getConfigImpl(int commandCode, const char* commandName,
225*4d7e907cSAndroid Build Coastguard Worker                                GetConfigCallback _hidl_cb);
226*4d7e907cSAndroid Build Coastguard Worker     Result getCurrentConfigImpl(uint32_t featureId, uint32_t configSize,
227*4d7e907cSAndroid Build Coastguard Worker                                 GetCurrentConfigSuccessCallback onSuccess);
228*4d7e907cSAndroid Build Coastguard Worker     Result getSupportedConfigsImpl(uint32_t featureId, uint32_t maxConfigs, uint32_t configSize,
229*4d7e907cSAndroid Build Coastguard Worker                                    GetSupportedConfigsSuccessCallback onSuccess);
230*4d7e907cSAndroid Build Coastguard Worker     Result sendCommand(int commandCode, const char* commandName);
231*4d7e907cSAndroid Build Coastguard Worker     Result sendCommand(int commandCode, const char* commandName, uint32_t size, void* data);
232*4d7e907cSAndroid Build Coastguard Worker     Result sendCommandReturningData(int commandCode, const char* commandName, uint32_t* replySize,
233*4d7e907cSAndroid Build Coastguard Worker                                     void* replyData);
234*4d7e907cSAndroid Build Coastguard Worker     Result sendCommandReturningData(int commandCode, const char* commandName, uint32_t size,
235*4d7e907cSAndroid Build Coastguard Worker                                     void* data, uint32_t* replySize, void* replyData);
236*4d7e907cSAndroid Build Coastguard Worker     Result sendCommandReturningStatus(int commandCode, const char* commandName);
237*4d7e907cSAndroid Build Coastguard Worker     Result sendCommandReturningStatus(int commandCode, const char* commandName, uint32_t size,
238*4d7e907cSAndroid Build Coastguard Worker                                       void* data);
239*4d7e907cSAndroid Build Coastguard Worker     Result sendCommandReturningStatusAndData(int commandCode, const char* commandName,
240*4d7e907cSAndroid Build Coastguard Worker                                              uint32_t size, void* data, uint32_t* replySize,
241*4d7e907cSAndroid Build Coastguard Worker                                              void* replyData, uint32_t minReplySize,
242*4d7e907cSAndroid Build Coastguard Worker                                              CommandSuccessCallback onSuccess);
243*4d7e907cSAndroid Build Coastguard Worker     Result setConfigImpl(int commandCode, const char* commandName, const EffectConfig& config,
244*4d7e907cSAndroid Build Coastguard Worker                          const sp<IEffectBufferProviderCallback>& inputBufferProvider,
245*4d7e907cSAndroid Build Coastguard Worker                          const sp<IEffectBufferProviderCallback>& outputBufferProvider);
246*4d7e907cSAndroid Build Coastguard Worker };
247*4d7e907cSAndroid Build Coastguard Worker 
248*4d7e907cSAndroid Build Coastguard Worker }  // namespace implementation
249*4d7e907cSAndroid Build Coastguard Worker }  // namespace CPP_VERSION
250*4d7e907cSAndroid Build Coastguard Worker }  // namespace effect
251*4d7e907cSAndroid Build Coastguard Worker }  // namespace audio
252*4d7e907cSAndroid Build Coastguard Worker }  // namespace hardware
253*4d7e907cSAndroid Build Coastguard Worker }  // namespace android
254*4d7e907cSAndroid Build Coastguard Worker 
255*4d7e907cSAndroid Build Coastguard Worker #endif  // ANDROID_HARDWARE_AUDIO_EFFECT_EFFECT_H
256