/*
 ** Copyright 2003-2010, VisualOn, Inc.
 **
 ** Licensed under the Apache License, Version 2.0 (the "License");
 ** you may not use this file except in compliance with the License.
 ** You may obtain a copy of the License at
 **
 **     http://www.apache.org/licenses/LICENSE-2.0
 **
 ** Unless required by applicable law or agreed to in writing, software
 ** distributed under the License is distributed on an "AS IS" BASIS,
 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 ** See the License for the specific language governing permissions and
 ** limitations under the License.
 */
/*******************************************************************************
	File:		line_pe.h

	Content:	Perceptual entropie module structure and functions

*******************************************************************************/

#ifndef __LINE_PE_H
#define __LINE_PE_H


#include "psy_const.h" 
#include "interface.h" 


typedef struct {
   Word16 sfbLdEnergy[MAX_GROUPED_SFB];     /* 4*log(sfbEnergy)/log(2) */
   Word16 sfbNLines4[MAX_GROUPED_SFB];      /* 4*number of relevant lines in sfb */
   Word16 sfbPe[MAX_GROUPED_SFB];           /* pe for each sfb */
   Word16 sfbConstPart[MAX_GROUPED_SFB];    /* constant part for each sfb */
   Word16 sfbNActiveLines[MAX_GROUPED_SFB]; /* number of active lines in sfb */
   Word16 pe;                               /* sum of sfbPe */
   Word16 constPart;                        /* sum of sfbConstPart */
   Word16 nActiveLines;                     /* sum of sfbNActiveLines */
} PE_CHANNEL_DATA; /* size Word16: 303 */


typedef struct {
   PE_CHANNEL_DATA peChannelData[MAX_CHANNELS];
   Word16 pe;
   Word16 constPart;
   Word16 nActiveLines;
   Word16 offset;
   Word16 ahFlag[MAX_CHANNELS][MAX_GROUPED_SFB];
   Word32 thrExp[MAX_CHANNELS][MAX_GROUPED_SFB];
   Word32 sfbPeFactors[MAX_CHANNELS][MAX_GROUPED_SFB];
} PE_DATA; /* size Word16: 303 + 4 + 120 + 240 = 667 */




void prepareSfbPe(PE_DATA *peData,
                  PSY_OUT_CHANNEL  psyOutChannel[MAX_CHANNELS],
                  Word16 logSfbEnergy[MAX_CHANNELS][MAX_GROUPED_SFB],
                  Word16 sfbNRelevantLines[MAX_CHANNELS][MAX_GROUPED_SFB],
                  const Word16 nChannels,
                  const Word16 peOffset);





void calcSfbPe(PE_DATA *peData,
               PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS],
               const Word16 nChannels);




#endif 
