channel_map.c revision f3664ae9369a861ffbc2354e8e93e48983802062
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
28static const Word16 maxChannelBits = MAXBITS_COEF;
29
30static 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
64Word16 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
87Word16 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