Home | History | Annotate | Download | only in src
      1 /*
      2  ** Copyright 2003-2010, VisualOn, Inc.
      3  **
      4  ** Licensed under the Apache License, Version 2.0 (the "License");
      5  ** you may not use this file except in compliance with the License.
      6  ** You may obtain a copy of the License at
      7  **
      8  **     http://www.apache.org/licenses/LICENSE-2.0
      9  **
     10  ** Unless required by applicable law or agreed to in writing, software
     11  ** distributed under the License is distributed on an "AS IS" BASIS,
     12  ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  ** See the License for the specific language governing permissions and
     14  ** limitations under the License.
     15  */
     16 /*******************************************************************************
     17 	File:		channel_map.c
     18 
     19 	Content:	channel mapping functions
     20 
     21 *******************************************************************************/
     22 
     23 #include "channel_map.h"
     24 #include "bitenc.h"
     25 #include "psy_const.h"
     26 #include "qc_data.h"
     27 
     28 static const Word16 maxChannelBits = MAXBITS_COEF;
     29 
     30 static Word16 initElement(ELEMENT_INFO* elInfo, ELEMENT_TYPE elType)
     31 {
     32   Word16 error=0;
     33 
     34   elInfo->elType=elType;
     35 
     36   switch(elInfo->elType) {
     37 
     38     case ID_SCE:
     39       elInfo->nChannelsInEl=1;
     40 
     41       elInfo->ChannelIndex[0]=0;
     42 
     43       elInfo->instanceTag=0;
     44       break;
     45 
     46     case ID_CPE:
     47 
     48       elInfo->nChannelsInEl=2;
     49 
     50       elInfo->ChannelIndex[0]=0;
     51       elInfo->ChannelIndex[1]=1;
     52 
     53       elInfo->instanceTag=0;
     54       break;
     55 
     56     default:
     57       error=1;
     58   }
     59 
     60   return error;
     61 }
     62 
     63 
     64 Word16 InitElementInfo (Word16 nChannels, ELEMENT_INFO* elInfo)
     65 {
     66   Word16 error;
     67   error = 0;
     68 
     69   switch(nChannels) {
     70 
     71     case 1:
     72       initElement(elInfo, ID_SCE);
     73       break;
     74 
     75     case 2:
     76       initElement(elInfo, ID_CPE);
     77       break;
     78 
     79     default:
     80       error=4;
     81   }
     82 
     83   return error;
     84 }
     85 
     86 
     87 Word16 InitElementBits(ELEMENT_BITS *elementBits,
     88                        ELEMENT_INFO elInfo,
     89                        Word32 bitrateTot,
     90                        Word16 averageBitsTot,
     91                        Word16 staticBitsTot)
     92 {
     93   Word16 error;
     94   error = 0;
     95 
     96    switch(elInfo.nChannelsInEl) {
     97     case 1:
     98       elementBits->chBitrate = bitrateTot;
     99       elementBits->averageBits = averageBitsTot - staticBitsTot;
    100       elementBits->maxBits = maxChannelBits;
    101 
    102       elementBits->maxBitResBits = maxChannelBits - averageBitsTot;
    103       elementBits->maxBitResBits = elementBits->maxBitResBits - (elementBits->maxBitResBits & 7);
    104       elementBits->bitResLevel = elementBits->maxBitResBits;
    105       elementBits->relativeBits  = 0x4000; /* 1.0f/2 */
    106       break;
    107 
    108     case 2:
    109       elementBits->chBitrate   = bitrateTot >> 1;
    110       elementBits->averageBits = averageBitsTot - staticBitsTot;
    111       elementBits->maxBits     = maxChannelBits << 1;
    112 
    113       elementBits->maxBitResBits = (maxChannelBits << 1) - averageBitsTot;
    114       elementBits->maxBitResBits = elementBits->maxBitResBits - (elementBits->maxBitResBits & 7);
    115       elementBits->bitResLevel = elementBits->maxBitResBits;
    116       elementBits->relativeBits = 0x4000; /* 1.0f/2 */
    117       break;
    118 
    119     default:
    120       error = 1;
    121   }
    122   return error;
    123 }
    124