/*
 *  Copyright (c) 2011 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.
 */

/*
 * This file contains the function WebRtcSpl_GetScalingSquare().
 * The description header can be found in signal_processing_library.h
 *
 */

#include "common_audio/signal_processing/include/signal_processing_library.h"

int16_t WebRtcSpl_GetScalingSquare(int16_t* in_vector,
                                   size_t in_vector_length,
                                   size_t times) {
  int16_t nbits = WebRtcSpl_GetSizeInBits((uint32_t)times);
  size_t i;
  int16_t smax = -1;
  int16_t sabs;
  int16_t* sptr = in_vector;
  int16_t t;
  size_t looptimes = in_vector_length;

  for (i = looptimes; i > 0; i--) {
    sabs = (*sptr > 0 ? *sptr++ : -*sptr++);
    smax = (sabs > smax ? sabs : smax);
  }
  t = WebRtcSpl_NormW32(WEBRTC_SPL_MUL(smax, smax));

  if (smax == 0) {
    return 0;  // Since norm(0) returns 0
  } else {
    return (t > nbits) ? 0 : nbits - t;
  }
}
