1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*
2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Copyright 2003-2010, VisualOn, Inc.
3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard **
4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Licensed under the Apache License, Version 2.0 (the "License");
5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** you may not use this file except in compliance with the License.
6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** You may obtain a copy of the License at
7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard **
8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard **     http://www.apache.org/licenses/LICENSE-2.0
9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard **
10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Unless required by applicable law or agreed to in writing, software
11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** distributed under the License is distributed on an "AS IS" BASIS,
12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** See the License for the specific language governing permissions and
14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** limitations under the License.
15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard */
16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*******************************************************************************
17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	File:		qc_data.h
18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Content:	Quantizing & coding structures
20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
21956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong*******************************************************************************/
22956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
23956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#ifndef _QC_DATA_H
24956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#define _QC_DATA_H
25956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
26956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#include "psy_const.h"
27956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#include "dyn_bits.h"
28956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#include "adj_thr_data.h"
29956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
30956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
31956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#define MAX_MODES 10
32956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
33956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongtypedef enum {
34956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  MODE_INVALID = 0,
35956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  MODE_1,        /* mono      */
36956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  MODE_1_1,      /* dual mono */
37956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  MODE_2         /* stereo    */
38956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong} ENCODER_MODE;
39956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
40956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongtypedef enum {
41956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  ID_SCE=0,     /* Single Channel Element   */
42956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  ID_CPE=1,     /* Channel Pair Element     */
43956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  ID_CCE=2,     /* Coupling Channel Element */
44956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  ID_LFE=3,     /* LFE Channel Element      */
45956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  ID_DSE=4,     /* current one DSE element for ancillary is supported */
46956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  ID_PCE=5,
47956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  ID_FIL=6,
48956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  ID_END=7
49956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong}ELEMENT_TYPE;
50956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
51956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongtypedef struct {
52956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  ELEMENT_TYPE elType;
53956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 instanceTag;
54956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 nChannelsInEl;
55956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 ChannelIndex[MAX_CHANNELS];
56956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong} ELEMENT_INFO;
57956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
58956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongtypedef struct {
59956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word32 paddingRest;
60956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong} PADDING;
61956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
62956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
63956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong/* Quantizing & coding stage */
64956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
65956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongstruct QC_INIT{
66956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  ELEMENT_INFO *elInfo;
67956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 maxBits;     /* maximum number of bits in reservoir  */
68956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 averageBits; /* average number of bits we should use */
69956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 bitRes;
70956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 meanPe;
71956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word32 chBitrate;
72956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 maxBitFac;
73956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word32 bitrate;
74956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
75956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  PADDING padding;
76956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong};
77956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
78956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongtypedef struct
79956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong{
80956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          *quantSpec;       /* [FRAME_LEN_LONG];                            */
81956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  UWord16         *maxValueInSfb;   /* [MAX_GROUPED_SFB];                           */
82956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          *scf;             /* [MAX_GROUPED_SFB];                           */
83956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          globalGain;
84956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          mdctScale;
85956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          groupingMask;
86956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  SECTION_DATA    sectionData;
87956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          windowShape;
88956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong} QC_OUT_CHANNEL;
89956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
90956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongtypedef struct
91956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong{
92e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard  Word16		  adtsUsed;
93956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          staticBitsUsed; /* for verification purposes */
94956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          dynBitsUsed;    /* for verification purposes */
95956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          pe;
96956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          ancBitsUsed;
97956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          fillBits;
98956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong} QC_OUT_ELEMENT;
99956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
100956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongtypedef struct
101956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong{
102956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  QC_OUT_CHANNEL  qcChannel[MAX_CHANNELS];
103956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  QC_OUT_ELEMENT  qcElement;
104956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          totStaticBitsUsed; /* for verification purposes */
105956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          totDynBitsUsed;    /* for verification purposes */
106956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          totAncBitsUsed;    /* for verification purposes */
107956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          totFillBits;
108956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          alignBits;
109956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          bitResTot;
110956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16          averageBitsTot;
111956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong} QC_OUT;
112956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
113956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongtypedef struct {
114956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word32 chBitrate;
115956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 averageBits;               /* brutto -> look ancillary.h */
116956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 maxBits;
117956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 bitResLevel;
118956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 maxBitResBits;
119956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 relativeBits;            /* Bits relative to total Bits scaled down by 2 */
120956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong} ELEMENT_BITS;
121956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
122956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongtypedef struct
123956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong{
124956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  /* this is basically struct QC_INIT */
125956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 averageBitsTot;
126956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 maxBitsTot;
127956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 globStatBits;
128956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 nChannels;
129956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 bitResTot;
130956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
131956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 maxBitFac;
132956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
133956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  PADDING   padding;
134956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
135956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  ELEMENT_BITS  elementBits;
136956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  ADJ_THR_STATE adjThr;
137956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
138956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 logSfbFormFactor[MAX_CHANNELS][MAX_GROUPED_SFB];
139956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 sfbNRelevantLines[MAX_CHANNELS][MAX_GROUPED_SFB];
140956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 logSfbEnergy[MAX_CHANNELS][MAX_GROUPED_SFB];
141956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong} QC_STATE;
142956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
143956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#endif /* _QC_DATA_H */
144