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:		interface.h
18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	Content:	psychoaccoustic/quantizer structures and interface
20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
21956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong*******************************************************************************/
22956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
23956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#ifndef _INTERFACE_H
24956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#define _INTERFACE_H
25956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include "config.h"
27956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#include "psy_const.h"
28956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#include "psy_data.h"
29956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#include "typedefs.h"
30956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
31956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
32956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongenum
33956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong{
34956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  MS_NONE = 0,
35956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  MS_SOME = 1,
36956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  MS_ALL  = 2
37956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong};
38956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
39956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongenum
40956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong{
41956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  MS_ON = 1
42956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong};
43956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
44956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongstruct TOOLSINFO {
45956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 msDigest;
46956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 msMask[MAX_GROUPED_SFB];
47956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong};
48956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
49956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
50956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongtypedef struct {
51956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16  sfbCnt;
52956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16  sfbPerGroup;
53956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16  maxSfbPerGroup;
54956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16  windowSequence;
55956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16  windowShape;
56956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16  groupingMask;
57956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16  sfbOffsets[MAX_GROUPED_SFB+1];
58b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard  Word16  mdctScale;
59b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard  Word32 *sfbEnergy;
60956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word32 *sfbSpreadedEnergy;
61b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard  Word32 *sfbThreshold;
62b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard  Word32 *mdctSpectrum;
63956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word32  sfbEnSumLR;
64956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word32  sfbEnSumMS;
65956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word32 sfbDist[MAX_GROUPED_SFB];
66956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word32 sfbDistNew[MAX_GROUPED_SFB];
67956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16  sfbMinSnr[MAX_GROUPED_SFB];
68956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 minSfMaxQuant[MAX_GROUPED_SFB];
69956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 minScfCalculated[MAX_GROUPED_SFB];
70956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 prevScfLast[MAX_GROUPED_SFB];
71956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 prevScfNext[MAX_GROUPED_SFB];
72956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 deltaPeLast[MAX_GROUPED_SFB];
73956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  TNS_INFO tnsInfo;
74956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong} PSY_OUT_CHANNEL; /* Word16 size: 14 + 60(MAX_GROUPED_SFB) + 112(TNS_INFO) = 186 */
75956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
76956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongtypedef struct {
77956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  struct TOOLSINFO toolsInfo;
78956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 groupedSfbOffset[MAX_CHANNELS][MAX_GROUPED_SFB+1];  /* plus one for last dummy offset ! */
79956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  Word16 groupedSfbMinSnr[MAX_CHANNELS][MAX_GROUPED_SFB];
80956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong} PSY_OUT_ELEMENT;
81956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
82956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongtypedef struct {
83956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  /* information shared by both channels  */
84956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  PSY_OUT_ELEMENT  psyOutElement;
85956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  /* information specific to each channel */
86956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong  PSY_OUT_CHANNEL  psyOutChannel[MAX_CHANNELS];
87956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong}PSY_OUT;
88956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
89956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dongvoid BuildInterface(Word32                 *mdctSpectrum,
90956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong                    const Word16            mdctScale,
91956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong                    SFB_THRESHOLD          *sfbThreshold,
92956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong                    SFB_ENERGY             *sfbEnergy,
93956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong                    SFB_ENERGY             *sfbSpreadedEnergy,
94956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong                    const SFB_ENERGY_SUM    sfbEnergySumLR,
95956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong                    const SFB_ENERGY_SUM    sfbEnergySumMS,
96956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong                    const Word16            windowSequence,
97956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong                    const Word16            windowShape,
98956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong                    const Word16            sfbCnt,
99956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong                    const Word16           *sfbOffset,
100956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong                    const Word16            maxSfbPerGroup,
101956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong                    const Word16           *groupedSfbMinSnr,
102956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong                    const Word16            noOfGroups,
103956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong                    const Word16           *groupLen,
104956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong                    PSY_OUT_CHANNEL        *psyOutCh);
105956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong
106956c553ab0ce72f8074ad0fda2ffd66a0305700cJames Dong#endif /* _INTERFACE_H */
107