1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* 2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Copyright 2003-2010, VisualOn, Inc. 3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Licensed under the Apache License, Version 2.0 (the "License"); 5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** you may not use this file except in compliance with the License. 6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** You may obtain a copy of the License at 7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** http://www.apache.org/licenses/LICENSE-2.0 9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Unless required by applicable law or agreed to in writing, software 11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** distributed under the License is distributed on an "AS IS" BASIS, 12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** See the License for the specific language governing permissions and 14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** limitations under the License. 15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard */ 16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/******************************************************************************* 17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard File: stat_bits.c 18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Content: Static bit counter functions 20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 21956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong*******************************************************************************/ 22956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 23956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#include "stat_bits.h" 24956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#include "bitenc.h" 25956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#include "tns.h" 26956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 27956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 28956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongtypedef enum { 29956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong SI_ID_BITS =(3), 30956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong SI_FILL_COUNT_BITS =(4), 31956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong SI_FILL_ESC_COUNT_BITS =(8), 32956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong SI_FILL_EXTENTION_BITS =(4), 33956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong SI_FILL_NIBBLE_BITS =(4), 34956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong SI_SCE_BITS =(4), 35956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong SI_CPE_BITS =(5), 36956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong SI_CPE_MS_MASK_BITS =(2) , 37956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong SI_ICS_INFO_BITS_LONG =(1+2+1+6+1), 38956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong SI_ICS_INFO_BITS_SHORT =(1+2+1+4+7), 39956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong SI_ICS_BITS =(8+1+1+1) 40956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong} SI_BITS; 41956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 42956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 43956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong/********************************************************************************* 44956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong* 45956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong* function name: countMsMaskBits 46956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong* description: count ms stereo bits demand 47956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong* 48956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong**********************************************************************************/ 49956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongstatic Word16 countMsMaskBits(Word16 sfbCnt, 50956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong Word16 sfbPerGroup, 51956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong Word16 maxSfbPerGroup, 52956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong struct TOOLSINFO *toolsInfo) 53956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong{ 54956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong Word16 msBits, sfbOff, sfb; 55b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard msBits = 0; 56b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 57956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 58956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong switch(toolsInfo->msDigest) { 59956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong case MS_NONE: 60956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong case MS_ALL: 61956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong break; 62956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 63956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong case MS_SOME: 64956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong for(sfbOff=0; sfbOff<sfbCnt; sfbOff+=sfbPerGroup) 65956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong for(sfb=0; sfb<maxSfbPerGroup; sfb++) 66956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong msBits += 1; 67956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong break; 68956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 69956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong return(msBits); 70956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong} 71956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 72956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong/********************************************************************************* 73956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong* 74956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong* function name: tnsCount 75956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong* description: count tns bit demand core function 76956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong* 77956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong**********************************************************************************/ 78956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongstatic Word16 tnsCount(TNS_INFO *tnsInfo, Word16 blockType) 79956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong{ 80956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 81956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong Word32 i, k; 82956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong Flag tnsPresent; 83956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong Word32 numOfWindows; 84956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong Word32 count; 85e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word32 coefBits; 86956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong Word16 *ptcoef; 87956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 88b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard count = 0; 89b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 90956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong if (blockType == 2) 91956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong numOfWindows = 8; 92956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong else 93956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong numOfWindows = 1; 94b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard tnsPresent = 0; 95956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 96956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong for (i=0; i<numOfWindows; i++) { 97b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 98956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong if (tnsInfo->tnsActive[i]!=0) { 99b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard tnsPresent = 1; 100956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 101956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 102b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 103956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong if (tnsPresent) { 104956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong /* there is data to be written*/ 105956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong /*count += 1; */ 106956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong for (i=0; i<numOfWindows; i++) { 107b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 108956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong if (blockType == 2) 109956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong count += 1; 110956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong else 111956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong count += 2; 112b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 113956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong if (tnsInfo->tnsActive[i]) { 114956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong count += 1; 115b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 116956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong if (blockType == 2) { 117956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong count += 4; 118956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong count += 3; 119956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 120956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong else { 121956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong count += 6; 122956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong count += 5; 123956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 124b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 125956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong if (tnsInfo->order[i]) { 126956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong count += 1; /*direction*/ 127b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard count += 1; /*coef_compression */ 128b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 129956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong if (tnsInfo->coefRes[i] == 4) { 130e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ptcoef = tnsInfo->coef + i*TNS_MAX_ORDER_SHORT; 131b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard coefBits = 3; 132956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong for(k=0; k<tnsInfo->order[i]; k++) { 133b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 134956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong if ((ptcoef[k] > 3) || (ptcoef[k] < -4)) { 135b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard coefBits = 4; 136956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong break; 137956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 138956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 139956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 140956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong else { 141b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard coefBits = 2; 142e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ptcoef = tnsInfo->coef + i*TNS_MAX_ORDER_SHORT; 143956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong for(k=0; k<tnsInfo->order[i]; k++) { 144b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 145956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong if ((ptcoef[k] > 1) || (ptcoef[k] < -2)) { 146b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard coefBits = 3; 147956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong break; 148956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 149956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 150956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 151956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong for (k=0; k<tnsInfo->order[i]; k++ ) { 152956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong count += coefBits; 153956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 154956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 155956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 156956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 157e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 158b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 159956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong return count; 160956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong} 161956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 162956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong/********************************************************************************** 163956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong* 164956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong* function name: countTnsBits 165b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard* description: count tns bit demand 166956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong* 167956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong**********************************************************************************/ 168956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongstatic Word16 countTnsBits(TNS_INFO *tnsInfo,Word16 blockType) 169956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong{ 170956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong return(tnsCount(tnsInfo, blockType)); 171956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong} 172956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 173956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong/********************************************************************************* 174956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong* 175956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong* function name: countStaticBitdemand 176b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard* description: count static bit demand include tns 177956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong* 178956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong**********************************************************************************/ 179956c553ab0ce72f8074ad0fda2ffd66a0305700cJames DongWord16 countStaticBitdemand(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], 180956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong PSY_OUT_ELEMENT *psyOutElement, 181b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard Word16 channels, 182956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong Word16 adtsUsed) 183956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong{ 184956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong Word32 statBits; 185956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong Word32 ch; 186b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 187b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard statBits = 0; 188e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 189956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong /* if adts used, add 56 bits */ 190956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong if(adtsUsed) statBits += 56; 191956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 192b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 193956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong switch (channels) { 194956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong case 1: 195956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong statBits += SI_ID_BITS+SI_SCE_BITS+SI_ICS_BITS; 196956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong statBits += countTnsBits(&(psyOutChannel[0].tnsInfo), 197956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong psyOutChannel[0].windowSequence); 198b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 199956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong switch(psyOutChannel[0].windowSequence){ 200956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong case LONG_WINDOW: 201956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong case START_WINDOW: 202956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong case STOP_WINDOW: 203956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong statBits += SI_ICS_INFO_BITS_LONG; 204956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong break; 205956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong case SHORT_WINDOW: 206956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong statBits += SI_ICS_INFO_BITS_SHORT; 207956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong break; 208956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 209956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong break; 210956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong case 2: 211956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong statBits += SI_ID_BITS+SI_CPE_BITS+2*SI_ICS_BITS; 212956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 213956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong statBits += SI_CPE_MS_MASK_BITS; 214956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong statBits += countMsMaskBits(psyOutChannel[0].sfbCnt, 215956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong psyOutChannel[0].sfbPerGroup, 216956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong psyOutChannel[0].maxSfbPerGroup, 217956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong &psyOutElement->toolsInfo); 218b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 219956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong switch (psyOutChannel[0].windowSequence) { 220956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong case LONG_WINDOW: 221956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong case START_WINDOW: 222956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong case STOP_WINDOW: 223956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong statBits += SI_ICS_INFO_BITS_LONG; 224956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong break; 225956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong case SHORT_WINDOW: 226956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong statBits += SI_ICS_INFO_BITS_SHORT; 227956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong break; 228956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 229956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong for(ch=0; ch<2; ch++) 230956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong statBits += countTnsBits(&(psyOutChannel[ch].tnsInfo), 231956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong psyOutChannel[ch].windowSequence); 232956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong break; 233956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong } 234956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 235956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong return statBits; 236956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong} 237956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong 238