| /* |
| ** 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; |
| } |