// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COBALT_MEDIA_BASE_VECTOR_MATH_H_
#define COBALT_MEDIA_BASE_VECTOR_MATH_H_

#include <utility>

#include "cobalt/media/base/media_export.h"

namespace cobalt {
namespace media {
namespace vector_math {

// Required alignment for inputs and outputs to all vector math functions
enum { kRequiredAlignment = 16 };

// Multiply each element of |src| (up to |len|) by |scale| and add to |dest|.
// |src| and |dest| must be aligned by kRequiredAlignment.
MEDIA_EXPORT void FMAC(const float src[], float scale, int len, float dest[]);

// Multiply each element of |src| by |scale| and store in |dest|.  |src| and
// |dest| must be aligned by kRequiredAlignment.
MEDIA_EXPORT void FMUL(const float src[], float scale, int len, float dest[]);

// Computes the exponentially-weighted moving average power of a signal by
// iterating the recurrence:
//
//   y[-1] = initial_value
//   y[n] = smoothing_factor * src[n]^2 + (1-smoothing_factor) * y[n-1]
//
// Returns the final average power and the maximum squared element value.
MEDIA_EXPORT std::pair<float, float> EWMAAndMaxPower(float initial_value,
                                                     const float src[], int len,
                                                     float smoothing_factor);

MEDIA_EXPORT void Crossfade(const float src[], int len, float dest[]);

}  // namespace vector_math
}  // namespace media
}  // namespace cobalt

#endif  // COBALT_MEDIA_BASE_VECTOR_MATH_H_
