blob: 2ddfb293eecda8cb7abd0f0ebf9d78cabfd5c4ff [file] [log] [blame]
// 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 LIB_MEDIA_AUDIO_DFX_LIB_DFX_BASE_H_
#define LIB_MEDIA_AUDIO_DFX_LIB_DFX_BASE_H_
#include <stdint.h>
#include <memory>
#include "garnet/public/lib/media/audio_dfx/audio_device_fx.h"
namespace media {
namespace 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 audio_dfx_test
} // namespace media
#endif // LIB_MEDIA_AUDIO_DFX_LIB_DFX_BASE_H_