/* ** 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: block_switch.h Content: Block switching structure and functions *******************************************************************************/ #ifndef _BLOCK_SWITCH_H #define _BLOCK_SWITCH_H #include "typedef.h" /****************** Defines ******************************/ #define BLOCK_SWITCHING_IIR_LEN 2 /* Length of HighPass-FIR-Filter for Attack-Detection */ #define BLOCK_SWITCH_WINDOWS TRANS_FAC /* number of windows for energy calculation */ #define BLOCK_SWITCH_WINDOW_LEN FRAME_LEN_SHORT /* minimal granularity of energy calculation */ /****************** Structures ***************************/ typedef struct{ Word32 invAttackRatio; Word16 windowSequence; Word16 nextwindowSequence; Flag attack; Flag lastattack; Word16 attackIndex; Word16 lastAttackIndex; Word16 noOfGroups; Word16 groupLen[TRANS_FAC]; Word32 windowNrg[2][BLOCK_SWITCH_WINDOWS]; /* time signal energy in Subwindows (last and current) */ Word32 windowNrgF[2][BLOCK_SWITCH_WINDOWS]; /* filtered time signal energy in segments (last and current) */ Word32 iirStates[BLOCK_SWITCHING_IIR_LEN]; /* filter delay-line */ Word32 maxWindowNrg; /* max energy in subwindows */ Word32 accWindowNrg; /* recursively accumulated windowNrgF */ }BLOCK_SWITCHING_CONTROL; Word16 InitBlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, const Word32 bitRate, const Word16 nChannels); Word16 BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, Word16 *timeSignal, Word32 sampleRate, Word16 chIncrement); Word16 SyncBlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControlLeft, BLOCK_SWITCHING_CONTROL *blockSwitchingControlRight, const Word16 noOfChannels); #endif /* #ifndef _BLOCK_SWITCH_H */