15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef MEDIA_BASE_VECTOR_MATH_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MEDIA_BASE_VECTOR_MATH_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <utility> 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/media_export.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace vector_math { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Required alignment for inputs and outputs to all vector math functions 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum { kRequiredAlignment = 16 }; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Multiply each element of |src| (up to |len|) by |scale| and add to |dest|. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |src| and |dest| must be aligned by kRequiredAlignment. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MEDIA_EXPORT void FMAC(const float src[], float scale, int len, float dest[]); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Multiply each element of |src| by |scale| and store in |dest|. |src| and 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// |dest| must be aligned by kRequiredAlignment. 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)MEDIA_EXPORT void FMUL(const float src[], float scale, int len, float dest[]); 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Computes the exponentially-weighted moving average power of a signal by 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// iterating the recurrence: 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// y[-1] = initial_value 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// y[n] = smoothing_factor * src[n]^2 + (1-smoothing_factor) * y[n-1] 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Returns the final average power and the maximum squared element value. 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)MEDIA_EXPORT std::pair<float, float> EWMAAndMaxPower( 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) float initial_value, const float src[], int len, float smoothing_factor); 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MEDIA_EXPORT void Crossfade(const float src[], int len, float dest[]); 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace vector_math 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace media 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // MEDIA_BASE_VECTOR_MATH_H_ 42