1 /*
2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 /******************************************************************
12
13 iLBC Speech Coder ANSI-C Source Code
14
15 WebRtcIlbcfix_FilteredCbVecs.c
16
17 ******************************************************************/
18
19 #include "modules/audio_coding/codecs/ilbc/filtered_cb_vecs.h"
20
21 #include "modules/audio_coding/codecs/ilbc/constants.h"
22 #include "modules/audio_coding/codecs/ilbc/defines.h"
23
24 /*----------------------------------------------------------------*
25 * Construct an additional codebook vector by filtering the
26 * initial codebook buffer. This vector is then used to expand
27 * the codebook with an additional section.
28 *---------------------------------------------------------------*/
29
WebRtcIlbcfix_FilteredCbVecs(int16_t * cbvectors,int16_t * CBmem,size_t lMem,size_t samples)30 void WebRtcIlbcfix_FilteredCbVecs(
31 int16_t *cbvectors, /* (o) Codebook vector for the higher section */
32 int16_t *CBmem, /* (i) Codebook memory that is filtered to create a
33 second CB section */
34 size_t lMem, /* (i) Length of codebook memory */
35 size_t samples /* (i) Number of samples to filter */
36 ) {
37
38 /* Set up the memory, start with zero state */
39 WebRtcSpl_MemSetW16(CBmem+lMem, 0, CB_HALFFILTERLEN);
40 WebRtcSpl_MemSetW16(CBmem-CB_HALFFILTERLEN, 0, CB_HALFFILTERLEN);
41 WebRtcSpl_MemSetW16(cbvectors, 0, lMem-samples);
42
43 /* Filter to obtain the filtered CB memory */
44
45 WebRtcSpl_FilterMAFastQ12(
46 CBmem+CB_HALFFILTERLEN+lMem-samples, cbvectors+lMem-samples,
47 (int16_t*)WebRtcIlbcfix_kCbFiltersRev, CB_FILTERLEN, samples);
48
49 return;
50 }
51