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