PASDK-254:
[processor-sdk/performance-audio-sr.git] / pasdk / test_dsp / framework / audioStreamOutProc.h
2 /*
3 Copyright (c) 2016, Texas Instruments Incorporated - http://www.ti.com/
4 All rights reserved.
6 * Redistribution and use in source and binary forms, with or without 
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 *
13 * Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the
16 * distribution.
17 *
18 * Neither the name of Texas Instruments Incorporated nor the names of
19 * its contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 *
34 */
36 /*
37  *  ======== audioStreamOutProc.h ========
38  */
40 #ifndef _ASOP_H_
41 #define _ASOP_H_
42  
43 #include <xdc/std.h>
44 #include <ti/sysbios/knl/Task.h>
46 #include "audioStreamProc_params.h"
47 #include "audioStreamProc_patchs.h"
48 #include "audioStreamProc_config.h"
49 #include "audioStreamProc_master.h"
51 // Global debug counter */
52 extern Uint32 gTaskAsopCnt; // debug counter for ASOP task
54 struct PAF_ASOT_Params;
55 struct PAF_ASOT_Patchs;
56 struct PAF_ASOT_Config;
58 // Audio Stream Output Task (ASOT) parameters, functions
59 typedef struct PAF_ASOT_Fxns {
60     Int (*initPhase[8]) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);
61     Int (*initFrame0) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int);
62     Int (*initFrame1) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int, Int);
63     //Int (*passProcessing) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *, Int);
64     //Int (*passProcessingCopy) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *);
65     //Int (*autoProcessing) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *, Int, ALG_Handle);
66     Int (*decodeProcessing) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int);    
67     //Int (*decodeCommand) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *);
68     Int (*encodeCommand) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);
69     Int (*decodeInit) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int);
70     //Int (*decodeInfo) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *, Int, Int);
71     Int (*decodeInfo1) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int, Int);
72     Int (*decodeInfo2) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int, Int);
73     //Int (*decodeCont) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *, ALG_Handle *, Int, Int);
74     //Int (*decodeDecode) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *, Int, Int, Int);
75     Int (*decodeStream) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int, Int);
76     Int (*decodeEncode) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int, Int);
77     //Int (*decodeFinalTest) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *, Int, Int);    
78     Int (*decodeComplete) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, ALG_Handle *, Int, Int);
79     Int (*selectDevices) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);
80     //Int (*sourceDecode) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *, Int);
81     Int (*startOutput) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);
82     Int (*stopOutput) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);
83     Int (*setCheckRateX) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int);
84     Int (*streamChainFunction) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int, Int, Int);
85     Int (*deviceAllocate) (SIO_Handle *, int, int, int, Ptr);
86     Int (*deviceSelect) (SIO_Handle *, int, int, Ptr);
87     //Int (*computeFrameLength) (Int, Int, Int);
88     //Int (*updateInputStatus) (SIO_Handle, PAF_InpBufStatus *, PAF_InpBufConfig *);
89     //Int (*copy) (Uns, PAF_InpBufConfig *, Uns, PAF_OutBufConfig *);
91     // For RAM_report
92     Void (*headerPrint)();
93     Int  (*allocPrint)(const PAF_ALG_AllocInit *pInit, Int sizeofInit, PAF_IALG_Config *p);
94     Void (*commonPrint)(IALG_MemRec common[], PAF_IALG_Config *p);
95     Void (*bufMemPrint)(Int z, Int size, Int heapId, Int bufType);
96     Void (*memStatusPrint)(HeapMem_Handle hInternalHeap, 
97         HeapMem_Handle hInternal1Heap, 
98         HeapMem_Handle hExternalHeap, 
99         HeapMem_Handle hInternal1HeapShm, 
100         HeapMem_Handle hExternalHeapShm, 
101         HeapMem_Handle hExternalNoncachedHeapShm);
102 } PAF_ASOT_Fxns;
104 // Audio Stream Output Task (ASOT) parameters
105 typedef struct PAF_ASOT_Params {
106     const PAF_ASOT_Fxns *fxns;
107     struct {
108         SmInt master;
109         SmInt inputs;
110         SmInt input1;
111         SmInt inputN;
112         SmInt decodes;
113         SmInt decode1;
114         SmInt decodeN;
115         SmInt streams;
116         SmInt stream1; /* unused */
117         SmInt streamN; /* unused */
118         SmInt encodes;
119         SmInt encode1;
120         SmInt encodeN;
121         SmInt outputs;
122         SmInt output1;
123         SmInt outputN;
124     } zone;
125     const SmInt *inputsFromDecodes;
126     const SmInt *outputsFromEncodes;
127     struct {
128         int *pHeapIdIntern;   //int *pIntern;
129         int *pHeapIdExtern;   //int *pExtern;
130         int *pHeapIdInpbuf;   //int *pInpbuf;
131         int *pHeapIdOutbuf;   //int *pOutbuf;
132         int *pHeapIdFrmbuf;   //int *pFrmbuf;
133         int *pHeapIdIntern1;  //int *pIntern1;
134         int clear; 
135     } heap;
136     struct {
137         const IALG_MemSpace *space;
138     } common;
139     const LgInt *z_rx_bufsiz;
140     const LgInt *z_tx_bufsiz;
141     const SmInt *z_numchan;
142     MdInt framelength;
143     const PAF_AudioFunctions *pAudioFrameFunctions;
144     const struct PAF_ASP_ChainFxns *pChainFxns;
145     const PAF_InpBufStatus *pInpBufStatus;
146     const PAF_DecodeStatus * const *z_pDecodeStatus;
147     const PAF_OutBufStatus *pOutBufStatus;
148     const PAF_EncodeStatus * const *z_pEncodeStatus;
149     const PAF_VolumeStatus *pVolumeStatus;
150     const PAF_ASP_AlgKey *pDecAlgKey;
151     const PAF_ASP_AlgKey *pEncAlgKey;
152     const PAF_ASP_SioMap *pDecSioMap;
153     const SmInt *streamsFromDecodes;
154     const SmInt *streamsFromEncodes;
155     const MdInt maxFramelength;
156     const SmInt *streamOrder;
157     const PAF_ASP_LinkInit * const (*i_inpLinkInit);
158     const PAF_ASP_LinkInit * const (*i_outLinkInit);
159     const PAF_ASP_outNumBufMap *  const (*poutNumBufMap);
160     const PAF_MetadataBufStatus *pMetadataBufStatus;
161     const PAF_AudioFrameBufStatus *pAudioFrameBufStatus;
162 } PAF_ASOT_Params;
164 // Audio Stream Output Task (ASOT) patchs
165 typedef struct PAF_ASOT_Patchs {
166     //const PAF_SIO_ParamsN * devinp;
167     const PAF_SIO_ParamsN * devout;
168     //const PAF_ASP_LinkInit * const (*i_decLinkInit);
169     const PAF_ASP_LinkInit * const (*i_aspLinkInit)[GEARS];
170     const PAF_ASP_LinkInit * const (*i_encLinkInit);
171 } PAF_ASOT_Patchs;
173 // Audio Stream Input Task (ASOT) configuration
174 typedef struct PAF_ASOT_Config {
175     Task_Handle taskHandle;     // ASOT handle
176     ACP_Handle acp;             // ASOT local ACP handle
177     PAF_ASPM_Config *pAspmCfg;  // ASIT/ASOT shared configuration
178     PAF_AST_Config *pAstCfg;    // ASIT/ASOT/ASDT shared configuration
179 } PAF_ASOT_Config;
182 //   Purpose:   Audio Stream Outpu Task Function for initialization of data pointers
183 //              by allocation of memory.
184 Int 
185 PAF_ASOT_initPhaseMalloc(
186     const PAF_ASOT_Params *pP, 
187     const PAF_ASOT_Patchs *pQ, 
188     PAF_ASOT_Config *pC
189 );
190     
191 //   Purpose:   Audio Stream Output Task Function for initialization of data values
192 //              from parameters.
193 Int
194 PAF_ASOT_initPhaseConfig(
195     const PAF_ASOT_Params *pP, 
196     const PAF_ASOT_Patchs *pQ, 
197     PAF_ASOT_Config *pC
198 );
200 //   Purpose:   Audio Stream Output Task Function for initialization of ACP by
201 //              instantiation of the algorithm.
202 Int
203 PAF_ASOT_initPhaseAcpAlg(
204     const PAF_ASOT_Params *pP, 
205     const PAF_ASOT_Patchs *pQ, 
206     PAF_ASOT_Config *pC
207 );
209 //   (***) FL: ASIT/ASOT currently consider common memory independently.
210 //             Should simultaneously consider all algs in ASIT/ASOT.
211 //   Purpose:   Audio Stream Output Task Function for allocation of common memory.
212 Int
213 PAF_ASOT_initPhaseCommon(
214     const PAF_ASOT_Params *pP, 
215     const PAF_ASOT_Patchs *pQ, 
216     PAF_ASOT_Config *pC
217 );
219 //   Purpose:   Audio Stream Output Task Function for initialization of ASP algorithms.
220 Int
221 PAF_ASOT_initPhaseAspAlg(
222     const PAF_ASOT_Params *pP, 
223     const PAF_ASOT_Patchs *pQ, 
224     PAF_ASOT_Config *pC
225 );
227 //   Purpose:   Audio Stream Output Task Function for initialization of data values
228 //              from parameters for Algorithm Keys.
229 Int
230 PAF_ASOT_initPhaseAlgKey(
231     const PAF_ASOT_Params *pP, 
232     const PAF_ASOT_Patchs *pQ, 
233     PAF_ASOT_Config *pC
234 );
236 //   Purpose:   Audio Stream Output Task Function for initialization of Input Devices.
237 Int
238 PAF_ASOT_initPhaseDevice(
239     const PAF_ASOT_Params *pP, 
240     const PAF_ASOT_Patchs *pQ, 
241     PAF_ASOT_Config *pC
242 );
244 //   Purpose:   Audio Stream Output Task Function for initialization of the Audio
245 //              Frame(s) by memory allocation and loading of data pointers
246 //              and values.
247 Int
248 PAF_ASOT_initFrame0(
249     const PAF_ASOT_Params *pP, 
250     const PAF_ASOT_Patchs *pQ, 
251     PAF_ASOT_Config *pC, 
252     Int z
253 );
255 //   Purpose:   Audio Stream Task Function for initialization or reinitiali-
256 //              zation of the Audio Frame(s) by loading of data values of a
257 //              time-varying nature.
258 Int
259 PAF_ASOT_initFrame1(
260     const PAF_ASOT_Params *pP, 
261     const PAF_ASOT_Patchs *pQ, 
262     PAF_ASOT_Config *pC, 
263     Int z, 
264     Int apply
265 );
267 //   Purpose:   Audio Stream Output Task Function for selecting the devices used
268 //              for output.
269 Int
270 PAF_ASOT_selectDevices(
271     const PAF_ASOT_Params *pP, 
272     const PAF_ASOT_Patchs *pQ, 
273     PAF_ASOT_Config *pC
274 );
276 //   Purpose:   Audio Stream Output Task Function for processing audio data.
277 //
278 Int
279 PAF_ASOT_decodeProcessing(
280     const PAF_ASOT_Params *pP, 
281     const PAF_ASOT_Patchs *pQ, 
282     PAF_ASOT_Config *pC, 
283     Int sourceSelect
284 );
286 //   Purpose:   Decoding Function for processing Encode Commands.
287 Int
288 PAF_ASOT_encodeCommand(
289     const PAF_ASOT_Params *pP, 
290     const PAF_ASOT_Patchs *pQ, 
291     PAF_ASOT_Config *pC
292 );
294 //   Purpose:   Decoding Function for reinitializing the decoding process.
295 Int
296 PAF_ASOT_decodeInit(
297     const PAF_ASOT_Params *pP, 
298     const PAF_ASOT_Patchs *pQ, 
299     PAF_ASOT_Config *pC, 
300     Int sourceSelect
301 );
303 //   Purpose:   Decoding Function for processing information in a manner that
304 //              is unique to initial frames of input data.
305 Int
306 PAF_ASOT_decodeInfo(
307     const PAF_ASOT_Params *pP, 
308     const PAF_ASOT_Patchs *pQ, 
309     PAF_ASOT_Config *pC, 
310     Int frame, 
311     Int block
312 );
314 //   Purpose:   Decoding Function for processing information in a manner that
315 //              is unique to initial frames of input data.
316 Int
317 PAF_ASOT_decodeInfo1(
318     const PAF_ASOT_Params *pP, 
319     const PAF_ASOT_Patchs *pQ, 
320     PAF_ASOT_Config *pC, 
321     Int frame, 
322     Int block
323 );
325 //   Purpose:   Decoding Function for processing information in a manner that
326 //              is unique to frames of input data other than the initial one.
327 Int
328 PAF_ASOT_decodeInfo2(
329     const PAF_ASOT_Params *pP, 
330     const PAF_ASOT_Patchs *pQ, 
331     PAF_ASOT_Config *pC, 
332     Int frame, 
333     Int block
334 );
336 //   Purpose:   Decoding Function for processing of audio frame data by the
337 //              ASP Algorithms.
338 Int
339 PAF_ASOT_decodeStream(
340     const PAF_ASOT_Params *pP, 
341     const PAF_ASOT_Patchs *pQ, 
342     PAF_ASOT_Config *pC, 
343     Int frame, 
344     Int block
345 );
347 //   Purpose:   Decoding Function for processing of audio frame data by the
348 //              Encode Algorithm.
349 Int
350 PAF_ASOT_decodeEncode(
351     const PAF_ASOT_Params *pP, 
352     const PAF_ASOT_Patchs *pQ, 
353     PAF_ASOT_Config *pC, 
354     Int frame, 
355     Int block
356 );
358 //   Purpose:   Decoding Function for terminating the decoding process.
359 Int
360 PAF_ASOT_decodeComplete(
361     const PAF_ASOT_Params *pP, 
362     const PAF_ASOT_Patchs *pQ, 
363     PAF_ASOT_Config *pC, 
364     ALG_Handle decAlg[], 
365     Int frame, 
366     Int block
367 );
369 //   Purpose:   Decoding Function for initiating output.
370 Int
371 PAF_ASOT_startOutput(
372     const PAF_ASOT_Params *pP, 
373     const PAF_ASOT_Patchs *pQ, 
374     PAF_ASOT_Config *pC
375 );
377 //   Purpose:   Decoding Function for terminating output.
378 Int
379 PAF_ASOT_stopOutput(
380     const PAF_ASOT_Params *pP, 
381     const PAF_ASOT_Patchs *pQ, 
382     PAF_ASOT_Config *pC
383 );
385 //   Purpose:   Decoding Function for re-initiating output.
386 Int
387 PAF_ASOT_setCheckRateX(
388     const PAF_ASOT_Params *pP, 
389     const PAF_ASOT_Patchs *pQ, 
390     PAF_ASOT_Config *pC, 
391     Int check
392 );
394 //   Purpose:   Common Function for processing algorithm chains.
395 Int
396 PAF_ASOT_streamChainFunction(
397     const PAF_ASOT_Params *pP, 
398     const PAF_ASOT_Patchs *pQ, 
399     PAF_ASOT_Config *pC, 
400     Int iChainFrameFxns, 
401     Int abortOnError, 
402     Int logArg
403 );
405 #endif /* _ASOP_H_ */