| // 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 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 |
| |
| #endif // COBALT_MEDIA_BASE_VECTOR_MATH_H_ |