15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 1999-2012 Broadcom Corporation
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  you may not use this file except in compliance with the License.
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  You may obtain a copy of the License at:
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  See the License for the specific language governing permissions and
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  limitations under the License.
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  This file contains the code for bit allocation algorithm. It calculates
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  the number of bits required for the encoded stream of data.
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*Includes*/
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "sbc_encoder.h"
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "sbc_enc_func_declare.h"
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*global arrays*/
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern const SINT16 sbc_enc_as16Offset4[4][4];
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern const SINT16 sbc_enc_as16Offset8[4][8];
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project* BitAlloc - Calculates the required number of bits for the given scale factor
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project* and the number of subbands.
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project* RETURNS : N/A
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*/
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid sbc_enc_bit_alloc_ste(SBC_ENC_PARAMS *pstrCodecParams)
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	/* CAUTIOM -> mips optim for arm 32 require to use SINT32 instead of SINT16 */
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project	/* Do not change variable type or name */
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT32 s32MaxBitNeed;   /*to store the max bits needed per sb*/
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT32 s32BitCount;     /*the used number of bits*/
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT32 s32SliceCount;   /*to store hwo many slices can be put in bitpool*/
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT32 s32BitSlice;     /*number of bitslices in bitpool*/
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT32 s32Sb;           /*counter for sub-band*/
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT32 s32Ch;           /*counter for channel*/
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 *ps16BitNeed;    /*temp memory to store required number of bits*/
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT32 s32Loudness;     /*used in Loudness calculation*/
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 *ps16GenBufPtr,*pas16ScaleFactor;
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 *ps16GenArrPtr;
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 *ps16GenTabPtr;
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT32  s32NumOfSubBands = pstrCodecParams->s16NumOfSubBands;
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT32  s32BitPool       = pstrCodecParams->s16BitPool;
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* bitneed values are derived from scale factor */
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (pstrCodecParams->s16AllocationMethod == SBC_SNR)
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ps16BitNeed   = pstrCodecParams->as16ScaleFactor;
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        s32MaxBitNeed = pstrCodecParams->s16MaxBitNeed;
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    else
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ps16BitNeed   = pstrCodecParams->s16ScartchMemForBitAlloc;
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        pas16ScaleFactor=pstrCodecParams->as16ScaleFactor;
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        s32MaxBitNeed = 0;
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ps16GenBufPtr = ps16BitNeed;
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (s32Ch = 0; s32Ch < 2; s32Ch++)
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (s32NumOfSubBands == 4)
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                ps16GenTabPtr = (SINT16 *)sbc_enc_as16Offset4[pstrCodecParams->s16SamplingFreq];
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                ps16GenTabPtr = (SINT16 *)sbc_enc_as16Offset8[pstrCodecParams->s16SamplingFreq];
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            for (s32Sb = 0; s32Sb < s32NumOfSubBands; s32Sb++)
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (*pas16ScaleFactor == 0)
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    *ps16GenBufPtr = -5;
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                {
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    s32Loudness = (SINT32)(*pas16ScaleFactor - *ps16GenTabPtr);
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    if (s32Loudness > 0)
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        *ps16GenBufPtr = (SINT16)(s32Loudness >> 1);
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    else
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                        *ps16GenBufPtr = (SINT16)s32Loudness;
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                }
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (*ps16GenBufPtr > s32MaxBitNeed)
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    s32MaxBitNeed = *ps16GenBufPtr;
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                pas16ScaleFactor++;
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                ps16GenBufPtr++;
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                ps16GenTabPtr++;
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* iterative process to find out hwo many bitslices fit into the bitpool */
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    s32BitSlice = s32MaxBitNeed + 1;
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    s32BitCount = s32BitPool;
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    s32SliceCount = 0;
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    do
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        s32BitSlice --;
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        s32BitCount -= s32SliceCount;
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        s32SliceCount = 0;
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        ps16GenBufPtr = ps16BitNeed;
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (s32Sb = 0; s32Sb < 2*s32NumOfSubBands; s32Sb++)
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if ( (*ps16GenBufPtr >= s32BitSlice + 1) && (*ps16GenBufPtr < s32BitSlice + 16) )
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            {
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                if (*(ps16GenBufPtr) == s32BitSlice+1)
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    s32SliceCount += 2;
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                else
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                    s32SliceCount++;
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            }
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ps16GenBufPtr++;
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    } while (s32BitCount-s32SliceCount>0);
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    if (s32BitCount-s32SliceCount == 0)
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        s32BitCount -= s32SliceCount;
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        s32BitSlice --;
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* Bits are distributed until the last bitslice is reached */
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ps16GenBufPtr = ps16BitNeed;
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ps16GenArrPtr = pstrCodecParams->as16Bits;
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    for (s32Ch = 0; s32Ch < 2; s32Ch++)
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        for (s32Sb = 0; s32Sb < s32NumOfSubBands; s32Sb++)
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            if (*ps16GenBufPtr < s32BitSlice+2)
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                *ps16GenArrPtr = 0;
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            else
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                *ps16GenArrPtr = ((*(ps16GenBufPtr)-s32BitSlice) < 16) ?
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        (SINT16)(*(ps16GenBufPtr)-s32BitSlice):16;
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ps16GenBufPtr++;
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ps16GenArrPtr++;
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    /* the remaining bits are allocated starting at subband 0 */
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    s32Ch=0;
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    s32Sb=0;
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ps16GenBufPtr = ps16BitNeed;
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ps16GenArrPtr -= 2*s32NumOfSubBands;
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    while ( (s32BitCount > 0) && (s32Sb < s32NumOfSubBands) )
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if ( (*(ps16GenArrPtr) >= 2) && (*(ps16GenArrPtr) < 16) )
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (*(ps16GenArrPtr))++;
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            s32BitCount--;
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else if ((*ps16GenBufPtr == s32BitSlice+1) && (s32BitCount > 1))
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            *(ps16GenArrPtr) = 2;
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            s32BitCount -= 2;
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(s32Ch == 1)
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            s32Ch = 0;
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            s32Sb++;
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ps16GenBufPtr = ps16BitNeed+s32Sb;
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ps16GenArrPtr = pstrCodecParams->as16Bits+s32Sb;
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            s32Ch =1;
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ps16GenBufPtr = ps16BitNeed+s32NumOfSubBands+s32Sb;
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ps16GenArrPtr = pstrCodecParams->as16Bits+s32NumOfSubBands+s32Sb;
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    s32Ch=0;
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    s32Sb=0;
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    ps16GenArrPtr = pstrCodecParams->as16Bits;
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    while ((s32BitCount >0) && (s32Sb < s32NumOfSubBands))
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    {
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if(*(ps16GenArrPtr) < 16)
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            (*(ps16GenArrPtr))++;
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            s32BitCount--;
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        if (s32Ch == 1)
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            s32Ch = 0;
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            s32Sb++;
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ps16GenArrPtr = pstrCodecParams->as16Bits+s32Sb;
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        else
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        {
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            s32Ch = 1;
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project            ps16GenArrPtr = pstrCodecParams->as16Bits+s32NumOfSubBands+s32Sb;
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project        }
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    }
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*End of BitAlloc() function*/
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
213