/*
 *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#ifndef MEDIA_ENGINE_APM_HELPERS_H_
#define MEDIA_ENGINE_APM_HELPERS_H_

#include <cstdint>

namespace webrtc {

class AudioProcessing;

enum EcModes {
  kEcConference,  // Conferencing default (aggressive AEC).
  kEcAecm,        // AEC mobile.
};

struct AgcConfig {
  uint16_t targetLeveldBOv;
  uint16_t digitalCompressionGaindB;
  bool limiterEnable;
};

namespace apm_helpers {

void Init(AudioProcessing* apm);
AgcConfig GetAgcConfig(AudioProcessing* apm);
void SetAgcConfig(AudioProcessing* apm, const AgcConfig& config);
void SetAgcStatus(AudioProcessing* apm, bool enable);
void SetEcStatus(AudioProcessing* apm, bool enable, EcModes mode);
void SetEcMetricsStatus(AudioProcessing* apm, bool enable);
void SetAecmMode(AudioProcessing* apm, bool enable_cng);
void SetNsStatus(AudioProcessing* apm, bool enable);

}  // namespace apm_helpers
}  // namespace webrtc

#endif  // MEDIA_ENGINE_APM_HELPERS_H_
