/* ** 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: channel_map.c Content: channel mapping functions *******************************************************************************/ #include "channel_map.h" #include "bitenc.h" #include "psy_const.h" #include "qc_data.h" static const Word16 maxChannelBits = MAXBITS_COEF; static Word16 initElement(ELEMENT_INFO* elInfo, ELEMENT_TYPE elType) { Word16 error=0; elInfo->elType=elType; switch(elInfo->elType) { case ID_SCE: elInfo->nChannelsInEl=1; elInfo->ChannelIndex[0]=0; elInfo->instanceTag=0; break; case ID_CPE: elInfo->nChannelsInEl=2; elInfo->ChannelIndex[0]=0; elInfo->ChannelIndex[1]=1; elInfo->instanceTag=0; break; default: error=1; } return error; } Word16 InitElementInfo (Word16 nChannels, ELEMENT_INFO* elInfo) { Word16 error; error = 0; switch(nChannels) { case 1: initElement(elInfo, ID_SCE); break; case 2: initElement(elInfo, ID_CPE); break; default: error=4; } return error; } Word16 InitElementBits(ELEMENT_BITS *elementBits, ELEMENT_INFO elInfo, Word32 bitrateTot, Word16 averageBitsTot, Word16 staticBitsTot) { Word16 error; error = 0; switch(elInfo.nChannelsInEl) { case 1: elementBits->chBitrate = bitrateTot; elementBits->averageBits = averageBitsTot - staticBitsTot; elementBits->maxBits = maxChannelBits; elementBits->maxBitResBits = maxChannelBits - averageBitsTot; elementBits->maxBitResBits = elementBits->maxBitResBits - (elementBits->maxBitResBits & 7); elementBits->bitResLevel = elementBits->maxBitResBits; elementBits->relativeBits = 0x4000; /* 1.0f/2 */ break; case 2: elementBits->chBitrate = bitrateTot >> 1; elementBits->averageBits = averageBitsTot - staticBitsTot; elementBits->maxBits = maxChannelBits << 1; elementBits->maxBitResBits = (maxChannelBits << 1) - averageBitsTot; elementBits->maxBitResBits = elementBits->maxBitResBits - (elementBits->maxBitResBits & 7); elementBits->bitResLevel = elementBits->maxBitResBits; elementBits->relativeBits = 0x4000; /* 1.0f/2 */ break; default: error = 1; } return error; }