|  | // Copyright 2018 The Fuchsia Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | // Refer to the accompanying README.md file for detailed API documentation | 
|  | // (functions, structs and constants). | 
|  |  | 
|  | #ifndef EXAMPLES_MEDIA_AUDIO_EFFECTS_DFX_BASE_H_ | 
|  | #define EXAMPLES_MEDIA_AUDIO_EFFECTS_DFX_BASE_H_ | 
|  |  | 
|  | #include <lib/media/audio_dfx/cpp/audio_device_fx.h> | 
|  | #include <stdint.h> | 
|  |  | 
|  | #include <memory> | 
|  |  | 
|  | namespace media::audio_dfx_test { | 
|  |  | 
|  | enum Effect : uint32_t { Delay = 0, Rechannel = 1, Swap = 2, Count = 3 }; | 
|  |  | 
|  | class DfxBase { | 
|  | public: | 
|  | static constexpr uint16_t kNumTestEffects = Effect::Count; | 
|  |  | 
|  | static bool GetNumEffects(uint32_t* num_effects_out); | 
|  | static bool GetInfo(uint32_t effect_id, fuchsia_audio_dfx_description* dfx_desc); | 
|  | static bool GetControlInfo(uint32_t effect_id, uint16_t control_num, | 
|  | fuchsia_audio_dfx_control_description* dfx_control_desc); | 
|  |  | 
|  | static DfxBase* Create(uint32_t effect_id, uint32_t frame_rate, uint16_t channels_in, | 
|  | uint16_t channels_out); | 
|  |  | 
|  | DfxBase(uint32_t effect_id, uint16_t num_controls, uint32_t frame_rate, uint16_t channels_in, | 
|  | uint16_t channels_out, uint32_t frames_latency, uint32_t suggested_buff_frames) | 
|  | : effect_id_(effect_id), | 
|  | num_controls_(num_controls), | 
|  | frame_rate_(frame_rate), | 
|  | channels_in_(channels_in), | 
|  | channels_out_(channels_out), | 
|  | frames_latency_(frames_latency), | 
|  | suggested_buff_frames_(suggested_buff_frames) {} | 
|  |  | 
|  | virtual ~DfxBase() = default; | 
|  |  | 
|  | bool GetParameters(fuchsia_audio_dfx_parameters* device_fx_params); | 
|  |  | 
|  | virtual bool GetControlValue(uint16_t, float*) { return false; } | 
|  | virtual bool SetControlValue(uint16_t, float) { return false; } | 
|  | virtual bool Reset() { return true; } | 
|  |  | 
|  | virtual bool ProcessInplace(uint32_t, float*) { return false; } | 
|  | virtual bool Process(uint32_t, const float*, float*) { return false; } | 
|  | virtual bool Flush() { return true; } | 
|  |  | 
|  | uint16_t num_controls() { return num_controls_; } | 
|  |  | 
|  | protected: | 
|  | uint32_t effect_id_; | 
|  | uint16_t num_controls_; | 
|  |  | 
|  | uint32_t frame_rate_; | 
|  | uint16_t channels_in_; | 
|  | uint16_t channels_out_; | 
|  | uint32_t frames_latency_; | 
|  | uint32_t suggested_buff_frames_; | 
|  | }; | 
|  |  | 
|  | }  // namespace media::audio_dfx_test | 
|  |  | 
|  | #endif  // EXAMPLES_MEDIA_AUDIO_EFFECTS_DFX_BASE_H_ |