// 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_TESTING_H_
#define COBALT_MEDIA_BASE_VECTOR_MATH_TESTING_H_

#include <utility>

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

namespace cobalt {
namespace media {
namespace vector_math {

// Optimized versions exposed for testing.  See vector_math.h for details.
MEDIA_EXPORT void FMAC_C(const float src[], float scale, int len, float dest[]);
MEDIA_EXPORT void FMUL_C(const float src[], float scale, int len, float dest[]);
MEDIA_EXPORT std::pair<float, float> EWMAAndMaxPower_C(float initial_value,
                                                       const float src[],
                                                       int len,
                                                       float smoothing_factor);

#if defined(ARCH_CPU_X86_FAMILY) && !defined(OS_NACL)
MEDIA_EXPORT void FMAC_SSE(const float src[], float scale, int len,
                           float dest[]);
MEDIA_EXPORT void FMUL_SSE(const float src[], float scale, int len,
                           float dest[]);
MEDIA_EXPORT std::pair<float, float> EWMAAndMaxPower_SSE(
    float initial_value, const float src[], int len, float smoothing_factor);
#endif

#if defined(ARCH_CPU_ARM_FAMILY) && defined(USE_NEON)
MEDIA_EXPORT void FMAC_NEON(const float src[], float scale, int len,
                            float dest[]);
MEDIA_EXPORT void FMUL_NEON(const float src[], float scale, int len,
                            float dest[]);
MEDIA_EXPORT std::pair<float, float> EWMAAndMaxPower_NEON(
    float initial_value, const float src[], int len, float smoothing_factor);
#endif

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

#endif  // COBALT_MEDIA_BASE_VECTOR_MATH_TESTING_H_
