|  | /* | 
|  | *  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_GetHanningWindow(). | 
|  | * The description header can be found in signal_processing_library.h | 
|  | * | 
|  | */ | 
|  |  | 
|  | #include "common_audio/signal_processing/include/signal_processing_library.h" | 
|  |  | 
|  | // Hanning table with 256 entries | 
|  | static const int16_t kHanningTable[] = { | 
|  | 1,     2,     6,     10,    15,    22,    30,    39,    50,    62,    75, | 
|  | 89,    104,   121,   138,   157,   178,   199,   222,   246,   271,   297, | 
|  | 324,   353,   383,   413,   446,   479,   513,   549,   586,   624,   663, | 
|  | 703,   744,   787,   830,   875,   920,   967,   1015,  1064,  1114,  1165, | 
|  | 1218,  1271,  1325,  1381,  1437,  1494,  1553,  1612,  1673,  1734,  1796, | 
|  | 1859,  1924,  1989,  2055,  2122,  2190,  2259,  2329,  2399,  2471,  2543, | 
|  | 2617,  2691,  2765,  2841,  2918,  2995,  3073,  3152,  3232,  3312,  3393, | 
|  | 3475,  3558,  3641,  3725,  3809,  3895,  3980,  4067,  4154,  4242,  4330, | 
|  | 4419,  4509,  4599,  4689,  4781,  4872,  4964,  5057,  5150,  5244,  5338, | 
|  | 5432,  5527,  5622,  5718,  5814,  5910,  6007,  6104,  6202,  6299,  6397, | 
|  | 6495,  6594,  6693,  6791,  6891,  6990,  7090,  7189,  7289,  7389,  7489, | 
|  | 7589,  7690,  7790,  7890,  7991,  8091,  8192,  8293,  8393,  8494,  8594, | 
|  | 8694,  8795,  8895,  8995,  9095,  9195,  9294,  9394,  9493,  9593,  9691, | 
|  | 9790,  9889,  9987,  10085, 10182, 10280, 10377, 10474, 10570, 10666, 10762, | 
|  | 10857, 10952, 11046, 11140, 11234, 11327, 11420, 11512, 11603, 11695, 11785, | 
|  | 11875, 11965, 12054, 12142, 12230, 12317, 12404, 12489, 12575, 12659, 12743, | 
|  | 12826, 12909, 12991, 13072, 13152, 13232, 13311, 13389, 13466, 13543, 13619, | 
|  | 13693, 13767, 13841, 13913, 13985, 14055, 14125, 14194, 14262, 14329, 14395, | 
|  | 14460, 14525, 14588, 14650, 14711, 14772, 14831, 14890, 14947, 15003, 15059, | 
|  | 15113, 15166, 15219, 15270, 15320, 15369, 15417, 15464, 15509, 15554, 15597, | 
|  | 15640, 15681, 15721, 15760, 15798, 15835, 15871, 15905, 15938, 15971, 16001, | 
|  | 16031, 16060, 16087, 16113, 16138, 16162, 16185, 16206, 16227, 16246, 16263, | 
|  | 16280, 16295, 16309, 16322, 16334, 16345, 16354, 16362, 16369, 16374, 16378, | 
|  | 16382, 16383, 16384}; | 
|  |  | 
|  | void WebRtcSpl_GetHanningWindow(int16_t* v, size_t size) { | 
|  | size_t jj; | 
|  | int16_t* vptr1; | 
|  |  | 
|  | int32_t index; | 
|  | int32_t factor = ((int32_t)0x40000000); | 
|  |  | 
|  | factor = WebRtcSpl_DivW32W16(factor, (int16_t)size); | 
|  | if (size < 513) | 
|  | index = (int32_t)-0x200000; | 
|  | else | 
|  | index = (int32_t)-0x100000; | 
|  | vptr1 = v; | 
|  |  | 
|  | for (jj = 0; jj < size; jj++) { | 
|  | index += factor; | 
|  | (*vptr1++) = kHanningTable[index >> 22]; | 
|  | } | 
|  | } |