1470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
2470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
4470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  Use of this source code is governed by a BSD-style license
5470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  that can be found in the LICENSE file in the root of the source
6470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  tree. An additional intellectual property rights grant can be found
7470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  in the file PATENTS.  All contributing project authors may
8470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  be found in the AUTHORS file in the root of the source tree.
9470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */
10470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
11470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/******************************************************************
12470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
13470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com iLBC Speech Coder ANSI-C Source Code
14470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
15470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com WebRtcIlbcfix_GainDequant.c
16470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
17470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com******************************************************************/
18470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
19470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include "defines.h"
20470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#include "constants.h"
21470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
22470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*----------------------------------------------------------------*
23470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  decoder for quantized gains in the gain-shape coding of
24470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  residual
25470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *---------------------------------------------------------------*/
26470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
270946a56023d821e0deca04029bb016ae1f23aa82pbos@webrtc.orgint16_t WebRtcIlbcfix_GainDequant(
28470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com    /* (o) quantized gain value (Q14) */
290946a56023d821e0deca04029bb016ae1f23aa82pbos@webrtc.org    int16_t index, /* (i) quantization index */
300946a56023d821e0deca04029bb016ae1f23aa82pbos@webrtc.org    int16_t maxIn, /* (i) maximum of unquantized gain (Q14) */
310946a56023d821e0deca04029bb016ae1f23aa82pbos@webrtc.org    int16_t stage /* (i) The stage of the search */
32470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com                                                ){
330946a56023d821e0deca04029bb016ae1f23aa82pbos@webrtc.org  int16_t scale;
340946a56023d821e0deca04029bb016ae1f23aa82pbos@webrtc.org  const int16_t *gain;
35470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
36470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com  /* obtain correct scale factor */
37470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
38470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com  scale=WEBRTC_SPL_ABS_W16(maxIn);
39470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com  scale = WEBRTC_SPL_MAX(1638, scale);  /* if lower than 0.1, set it to 0.1 */
40470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
41470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com  /* select the quantization table and return the decoded value */
42470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com  gain = WebRtcIlbcfix_kGain[stage];
43470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
44ba97ea69f0b8bb73a837869211627b705eac8f98bjornv@webrtc.org  return (int16_t)((scale * gain[index] + 8192) >> 14);
45470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com}
46