xref: /aosp_15_r20/external/sonivox/arm-wt-22k/lib_src/eas_pcmdata.h (revision f81fb7c475c4b71ff83bdcc517de2a8c174e4e5c)
1*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
2*f81fb7c4SAndroid Build Coastguard Worker  *
3*f81fb7c4SAndroid Build Coastguard Worker  * File:
4*f81fb7c4SAndroid Build Coastguard Worker  * eas_pcmdata.h
5*f81fb7c4SAndroid Build Coastguard Worker  *
6*f81fb7c4SAndroid Build Coastguard Worker  * Contents and purpose:
7*f81fb7c4SAndroid Build Coastguard Worker  * Data declarations for the PCM engine
8*f81fb7c4SAndroid Build Coastguard Worker  *
9*f81fb7c4SAndroid Build Coastguard Worker  *
10*f81fb7c4SAndroid Build Coastguard Worker  * Copyright Sonic Network Inc. 2005
11*f81fb7c4SAndroid Build Coastguard Worker 
12*f81fb7c4SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
13*f81fb7c4SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
14*f81fb7c4SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
15*f81fb7c4SAndroid Build Coastguard Worker  *
16*f81fb7c4SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
17*f81fb7c4SAndroid Build Coastguard Worker  *
18*f81fb7c4SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
19*f81fb7c4SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
20*f81fb7c4SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21*f81fb7c4SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
22*f81fb7c4SAndroid Build Coastguard Worker  * limitations under the License.
23*f81fb7c4SAndroid Build Coastguard Worker  *
24*f81fb7c4SAndroid Build Coastguard Worker  *----------------------------------------------------------------------------
25*f81fb7c4SAndroid Build Coastguard Worker  * Revision Control:
26*f81fb7c4SAndroid Build Coastguard Worker  *   $Revision: 847 $
27*f81fb7c4SAndroid Build Coastguard Worker  *   $Date: 2007-08-27 21:30:08 -0700 (Mon, 27 Aug 2007) $
28*f81fb7c4SAndroid Build Coastguard Worker  *----------------------------------------------------------------------------
29*f81fb7c4SAndroid Build Coastguard Worker */
30*f81fb7c4SAndroid Build Coastguard Worker 
31*f81fb7c4SAndroid Build Coastguard Worker #ifndef _EAS_PCMDATA_H
32*f81fb7c4SAndroid Build Coastguard Worker #define _EAS_PCMDATA_H
33*f81fb7c4SAndroid Build Coastguard Worker 
34*f81fb7c4SAndroid Build Coastguard Worker /* sets the maximum number of simultaneous PCM streams */
35*f81fb7c4SAndroid Build Coastguard Worker #ifndef MAX_PCM_STREAMS
36*f81fb7c4SAndroid Build Coastguard Worker #define MAX_PCM_STREAMS             16
37*f81fb7c4SAndroid Build Coastguard Worker #define PCM_STREAM_THRESHOLD        (MAX_PCM_STREAMS - 4)
38*f81fb7c4SAndroid Build Coastguard Worker #endif
39*f81fb7c4SAndroid Build Coastguard Worker 
40*f81fb7c4SAndroid Build Coastguard Worker /* coefficents for high-pass filter in ADPCM */
41*f81fb7c4SAndroid Build Coastguard Worker #define INTEGRATOR_COEFFICIENT      100     /* coefficient for leaky integrator */
42*f81fb7c4SAndroid Build Coastguard Worker 
43*f81fb7c4SAndroid Build Coastguard Worker /* additional flags in S_PCM_STATE.flags used internal to module */
44*f81fb7c4SAndroid Build Coastguard Worker #define PCM_FLAGS_EMPTY             0x01000000  /* unsigned format */
45*f81fb7c4SAndroid Build Coastguard Worker 
46*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
47*f81fb7c4SAndroid Build Coastguard Worker  * S_PCM_STATE
48*f81fb7c4SAndroid Build Coastguard Worker  *
49*f81fb7c4SAndroid Build Coastguard Worker  * Retains state information for PCM streams.
50*f81fb7c4SAndroid Build Coastguard Worker  *----------------------------------------------------------------------------
51*f81fb7c4SAndroid Build Coastguard Worker */
52*f81fb7c4SAndroid Build Coastguard Worker typedef struct s_decoder_state_tag
53*f81fb7c4SAndroid Build Coastguard Worker {
54*f81fb7c4SAndroid Build Coastguard Worker     EAS_I32             output;             /* last output for DC offset filter */
55*f81fb7c4SAndroid Build Coastguard Worker     EAS_I32             acc;                /* accumulator for DC offset filter */
56*f81fb7c4SAndroid Build Coastguard Worker     EAS_I32             step;               /* current ADPCM step size */
57*f81fb7c4SAndroid Build Coastguard Worker     EAS_PCM             x1;                 /* current generated sample */
58*f81fb7c4SAndroid Build Coastguard Worker     EAS_PCM             x0;                 /* previous generated sample */
59*f81fb7c4SAndroid Build Coastguard Worker } S_DECODER_STATE;
60*f81fb7c4SAndroid Build Coastguard Worker 
61*f81fb7c4SAndroid Build Coastguard Worker typedef enum
62*f81fb7c4SAndroid Build Coastguard Worker {
63*f81fb7c4SAndroid Build Coastguard Worker     PCM_ENV_START = 0,
64*f81fb7c4SAndroid Build Coastguard Worker     PCM_ENV_ATTACK,
65*f81fb7c4SAndroid Build Coastguard Worker     PCM_ENV_DECAY,
66*f81fb7c4SAndroid Build Coastguard Worker     PCM_ENV_SUSTAIN,
67*f81fb7c4SAndroid Build Coastguard Worker     PCM_ENV_RELEASE,
68*f81fb7c4SAndroid Build Coastguard Worker     PCM_ENV_END
69*f81fb7c4SAndroid Build Coastguard Worker } E_PCM_ENV_STATE;
70*f81fb7c4SAndroid Build Coastguard Worker 
71*f81fb7c4SAndroid Build Coastguard Worker typedef struct s_pcm_state_tag
72*f81fb7c4SAndroid Build Coastguard Worker {
73*f81fb7c4SAndroid Build Coastguard Worker #ifdef _CHECKED_BUILD
74*f81fb7c4SAndroid Build Coastguard Worker     EAS_U32             handleCheck;        /* signature check for checked build */
75*f81fb7c4SAndroid Build Coastguard Worker #endif
76*f81fb7c4SAndroid Build Coastguard Worker     EAS_FILE_HANDLE     fileHandle;         /* pointer to input file */
77*f81fb7c4SAndroid Build Coastguard Worker     EAS_PCM_CALLBACK    pCallback;          /* pointer to callback function */
78*f81fb7c4SAndroid Build Coastguard Worker     EAS_VOID_PTR        cbInstData;         /* instance data for callback function */
79*f81fb7c4SAndroid Build Coastguard Worker     struct s_decoder_interface_tag EAS_CONST * pDecoder;    /* pointer to decoder interface */
80*f81fb7c4SAndroid Build Coastguard Worker     EAS_STATE           state;              /* stream state */
81*f81fb7c4SAndroid Build Coastguard Worker     EAS_I32             time;               /* media time */
82*f81fb7c4SAndroid Build Coastguard Worker     EAS_I32             startPos;           /* start of PCM stream */
83*f81fb7c4SAndroid Build Coastguard Worker     EAS_I32             loopLocation;       /* file location where loop starts */
84*f81fb7c4SAndroid Build Coastguard Worker     EAS_I32             byteCount;          /* size of file */
85*f81fb7c4SAndroid Build Coastguard Worker     EAS_U32             loopStart;          /* loop start, offset in samples from startPos */
86*f81fb7c4SAndroid Build Coastguard Worker                                             /* NOTE: For CMF, we use this to store total sample size */
87*f81fb7c4SAndroid Build Coastguard Worker     EAS_U32             loopSamples;        /* total loop length, in samples, 0 means no loop */
88*f81fb7c4SAndroid Build Coastguard Worker                                             /* NOTE: For CMF, non-zero means looped */
89*f81fb7c4SAndroid Build Coastguard Worker     EAS_U32             samplesInLoop;      /* samples left in the loop to play back */
90*f81fb7c4SAndroid Build Coastguard Worker     EAS_I32             samplesTilLoop;     /* samples left to play until top of loop */
91*f81fb7c4SAndroid Build Coastguard Worker     EAS_I32             bytesLeft;          /* count of bytes left in stream */
92*f81fb7c4SAndroid Build Coastguard Worker     EAS_I32             bytesLeftLoop;      /* count of bytes left in stream, value at start of loop */
93*f81fb7c4SAndroid Build Coastguard Worker     EAS_U32             phase;              /* current phase for interpolator */
94*f81fb7c4SAndroid Build Coastguard Worker     EAS_U32             basefreq;           /* frequency multiplier */
95*f81fb7c4SAndroid Build Coastguard Worker     EAS_U32             flags;              /* stream flags */
96*f81fb7c4SAndroid Build Coastguard Worker     EAS_U32             envData;            /* envelope data (and LFO data) */
97*f81fb7c4SAndroid Build Coastguard Worker     EAS_U32             envValue;           /* current envelope value */
98*f81fb7c4SAndroid Build Coastguard Worker     EAS_U32             envScale;           /* current envelope scale */
99*f81fb7c4SAndroid Build Coastguard Worker     EAS_U32             startOrder;         /* start order index, first is 0, next is 1, etc. */
100*f81fb7c4SAndroid Build Coastguard Worker     S_DECODER_STATE     decoderL;           /* left (mono) ADPCM state */
101*f81fb7c4SAndroid Build Coastguard Worker     S_DECODER_STATE     decoderR;           /* right ADPCM state */
102*f81fb7c4SAndroid Build Coastguard Worker     S_DECODER_STATE     decoderLLoop;       /* left (mono) ADPCM state, value at start of loop */
103*f81fb7c4SAndroid Build Coastguard Worker     S_DECODER_STATE     decoderRLoop;       /* right ADPCM state, value at start of loop */
104*f81fb7c4SAndroid Build Coastguard Worker     E_PCM_ENV_STATE     envState;           /* current envelope state */
105*f81fb7c4SAndroid Build Coastguard Worker     EAS_I16             volume;             /* volume for stream */
106*f81fb7c4SAndroid Build Coastguard Worker     EAS_I16             pitch;              /* relative pitch in cents - zero is unity playback */
107*f81fb7c4SAndroid Build Coastguard Worker     EAS_I16             gainLeft;           /* requested gain */
108*f81fb7c4SAndroid Build Coastguard Worker     EAS_I16             gainRight;          /* requested gain */
109*f81fb7c4SAndroid Build Coastguard Worker     EAS_I16             currentGainLeft;    /* current gain for anti-zipper filter */
110*f81fb7c4SAndroid Build Coastguard Worker     EAS_I16             currentGainRight;   /* current gain for anti-zipper filter */
111*f81fb7c4SAndroid Build Coastguard Worker     EAS_U16             blockSize;          /* block size for ADPCM decoder */
112*f81fb7c4SAndroid Build Coastguard Worker     EAS_U16             blockCount;         /* block counter for ADPCM decoder */
113*f81fb7c4SAndroid Build Coastguard Worker     EAS_U16             sampleRate;         /* input sample rate */
114*f81fb7c4SAndroid Build Coastguard Worker     EAS_U8              srcByte;            /* source byte */
115*f81fb7c4SAndroid Build Coastguard Worker     EAS_U8              msBitCount;         /* count keeps track of MS bits */
116*f81fb7c4SAndroid Build Coastguard Worker     EAS_U8              msBitMask;          /* mask keeps track of MS bits */
117*f81fb7c4SAndroid Build Coastguard Worker     EAS_U8              msBitValue;         /* value keeps track of MS bits */
118*f81fb7c4SAndroid Build Coastguard Worker     EAS_U8              msBitCountLoop;     /* count keeps track of MS bits, value at loop start */
119*f81fb7c4SAndroid Build Coastguard Worker     EAS_U8              msBitMaskLoop;      /* mask keeps track of MS bits, value at loop start */
120*f81fb7c4SAndroid Build Coastguard Worker     EAS_U8              msBitValueLoop;     /* value keeps track of MS bits, value at loop start */
121*f81fb7c4SAndroid Build Coastguard Worker     EAS_BOOL8           hiNibble;           /* indicates high/low nibble is next */
122*f81fb7c4SAndroid Build Coastguard Worker     EAS_BOOL8           hiNibbleLoop;       /* indicates high/low nibble is next, value loop start */
123*f81fb7c4SAndroid Build Coastguard Worker     EAS_U8              rateShift;          /* for playback rate greater than 1.0 */
124*f81fb7c4SAndroid Build Coastguard Worker } S_PCM_STATE;
125*f81fb7c4SAndroid Build Coastguard Worker 
126*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
127*f81fb7c4SAndroid Build Coastguard Worker  * S_DECODER_INTERFACE
128*f81fb7c4SAndroid Build Coastguard Worker  *
129*f81fb7c4SAndroid Build Coastguard Worker  * Generic interface for audio decoders
130*f81fb7c4SAndroid Build Coastguard Worker  *----------------------------------------------------------------------------
131*f81fb7c4SAndroid Build Coastguard Worker */
132*f81fb7c4SAndroid Build Coastguard Worker typedef struct s_decoder_interface_tag
133*f81fb7c4SAndroid Build Coastguard Worker {
134*f81fb7c4SAndroid Build Coastguard Worker     EAS_RESULT (* EAS_CONST pfInit)(EAS_DATA_HANDLE pEASData, S_PCM_STATE *pState);
135*f81fb7c4SAndroid Build Coastguard Worker     EAS_RESULT (* EAS_CONST pfDecodeSample)(EAS_DATA_HANDLE pEASData, S_PCM_STATE *pState);
136*f81fb7c4SAndroid Build Coastguard Worker     EAS_RESULT (* EAS_CONST pfLocate)(EAS_DATA_HANDLE pEASData, S_PCM_STATE *pState, EAS_I32 time);
137*f81fb7c4SAndroid Build Coastguard Worker } S_DECODER_INTERFACE;
138*f81fb7c4SAndroid Build Coastguard Worker 
139*f81fb7c4SAndroid Build Coastguard Worker 
140*f81fb7c4SAndroid Build Coastguard Worker /* header chunk for SMAF ADPCM */
141*f81fb7c4SAndroid Build Coastguard Worker #define TAG_YAMAHA_ADPCM    0x4d776100
142*f81fb7c4SAndroid Build Coastguard Worker #define TAG_MASK            0xffffff00
143*f81fb7c4SAndroid Build Coastguard Worker #define TAG_RIFF_FILE       0x52494646
144*f81fb7c4SAndroid Build Coastguard Worker #define TAG_WAVE_CHUNK      0x57415645
145*f81fb7c4SAndroid Build Coastguard Worker #define TAG_FMT_CHUNK       0x666d7420
146*f81fb7c4SAndroid Build Coastguard Worker 
147*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
148*f81fb7c4SAndroid Build Coastguard Worker  * EAS_PESeek
149*f81fb7c4SAndroid Build Coastguard Worker  *----------------------------------------------------------------------------
150*f81fb7c4SAndroid Build Coastguard Worker  * Purpose:
151*f81fb7c4SAndroid Build Coastguard Worker  * Locate to a particular byte in a PCM stream
152*f81fb7c4SAndroid Build Coastguard Worker  *----------------------------------------------------------------------------
153*f81fb7c4SAndroid Build Coastguard Worker */
154*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT EAS_PESeek (EAS_DATA_HANDLE pEASData, S_PCM_STATE *pState, EAS_I32 *pLocation);
155*f81fb7c4SAndroid Build Coastguard Worker 
156*f81fb7c4SAndroid Build Coastguard Worker #endif /* _EAS_PCMDATA_H */
157*f81fb7c4SAndroid Build Coastguard Worker 
158