Started refactoring output task and integrating new I/O into output
[processor-sdk/performance-audio-sr.git] / pasdk / test_dsp / framework / audioStreamOutProc.h
2 /*
3 Copyright (c) 2017, 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"
50 #include "ioPhy.h"
51 #include "ioBuff.h"
53 /* !!!!!!!!! Revisit !!!!!!!!!!!!!!
54  * Purpose : Temporary ASOT FL sizes.
55  *                       Deprecate PAF_SYS_FRAMELENGTH in phases.*/
56 #define PAF_ASOT_FRAMELENGTH            256
57 #define PAF_ASOT_MAX_FRAMELENGTH        1024
59 // Global debug counter */
60 extern Uint32 gTaskAsopCnt; // debug counter for ASOP task
62 struct PAF_ASOT_Params;
63 struct PAF_ASOT_Patchs;
64 struct PAF_ASOT_Config;
66 // Audio Stream Output Task (ASOT) parameters, functions
67 typedef struct PAF_ASOT_Fxns {
68     Int (*initPhase[8]) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);
69     Int (*initFrame0) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int);
70     Int (*initFrame1) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int, Int);
71     //Int (*passProcessing) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *, Int);
72     //Int (*passProcessingCopy) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *);
73     //Int (*autoProcessing) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *, Int, ALG_Handle);
74     
75     //Int (*decodeProcessing) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int);    
76     Int (*decodeProcessing) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);    
77     
78     //Int (*decodeCommand) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *);
79     Int (*encodeCommand) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);
80     
81     //Int (*decodeInit) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int);
82     Int (*decodeInit) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);
83     
84     //Int (*decodeInfo) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *, Int, Int);
85     Int (*decodeInfo1) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int, Int);
86     Int (*decodeInfo2) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int, Int);
87     //Int (*decodeCont) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *, ALG_Handle *, Int, Int);
88     //Int (*decodeDecode) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *, Int, Int, Int);
89     Int (*decodeStream) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int, Int);
90     Int (*decodeEncode) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int, Int);
92     //Int (*decodeFinalTest) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *, Int, Int);    
93     Int (*decodeFinalTest) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int, Int);    
95     Int (*decodeComplete) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, ALG_Handle *, Int, Int);
96     Int (*selectDevices) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);
97     //Int (*sourceDecode) (const struct PAF_AST_Params *, const struct PAF_AST_Patchs *, struct PAF_AST_Config *, Int);
98     Int (*startOutput) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);
99     Int (*stopOutput) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *);
100     Int (*setCheckRateX) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int);
101     Int (*streamChainFunction) (const struct PAF_ASOT_Params *, const struct PAF_ASOT_Patchs *, struct PAF_ASOT_Config *, Int, Int, Int);
102     Int (*deviceAllocate) (SIO_Handle *, int, int, int, Ptr);
103     Int (*deviceSelect) (SIO_Handle *, int, int, Ptr);
104     //Int (*computeFrameLength) (Int, Int, Int);
105     //Int (*updateInputStatus) (SIO_Handle, PAF_InpBufStatus *, PAF_InpBufConfig *);
106     //Int (*copy) (Uns, PAF_InpBufConfig *, Uns, PAF_OutBufConfig *);
108     // For RAM_report
109     Void (*headerPrint)();
110     Int  (*allocPrint)(const PAF_ALG_AllocInit *pInit, Int sizeofInit, PAF_IALG_Config *p);
111     Void (*commonPrint)(IALG_MemRec common[], PAF_IALG_Config *p);
112     Void (*bufMemPrint)(Int z, Int size, Int heapId, Int bufType);
113     Void (*memStatusPrint)(
114         CString header, 
115         HeapMem_Handle hInternalHeap, 
116         HeapMem_Handle hInternal1Heap, 
117         HeapMem_Handle hExternalHeap, 
118         HeapMem_Handle hInternal1HeapShm, 
119         HeapMem_Handle hExternalHeapShm, 
120         HeapMem_Handle hExternalNoncachedHeapShm);
121 } PAF_ASOT_Fxns;
123 // Audio Stream Output Task (ASOT) parameters
124 typedef struct PAF_ASOT_Params {
125     const PAF_ASOT_Fxns *fxns;
126     struct {
127         SmInt master;
128         SmInt inputs;
129         SmInt input1;
130         SmInt inputN;
131         SmInt decodes;
132         SmInt decode1;
133         SmInt decodeN;
134         SmInt streams;
135         SmInt stream1; /* unused */
136         SmInt streamN; /* unused */
137         SmInt encodes;
138         SmInt encode1;
139         SmInt encodeN;
140         SmInt outputs;
141         SmInt output1;
142         SmInt outputN;
143     } zone;
144     const SmInt *inputsFromDecodes;
145     const SmInt *outputsFromEncodes;
146     struct {
147         int *pHeapIdIntern;             // INT memory heap ID
148         int *pHeapIdExtern;             // EXT memory heap ID
149         int *pHeapIdInpbuf;             // IB buffer heap ID
150         int *pHeapIdOutbuf;             // OB buffer heap ID
151         int *pHeapIdFrmbuf;             // Frame buffer heap ID
152         int *pHeapIdIntern1;            // INT1 memory heap ID
153         int *pHeapIdInt1Shm;            // INT1 SHared Memory heap ID
154         int *pHeapIdExtShm;             // EXT SHared Memory heap ID
155         int *pHeapIdExtNonCachedShm;    // EXT Non-Cached SHared Memory heap ID
156         int clear; 
157     } heap;
158     struct {
159         const IALG_MemSpace *space;
160     } common;
161     const LgInt *z_rx_bufsiz;
162     const LgInt *z_tx_bufsiz;
163     const SmInt *z_numchan;
164     MdInt framelength;
165     const PAF_AudioFunctions *pAudioFrameFunctions;
166     const struct PAF_ASP_ChainFxns *pChainFxns;
167     const PAF_InpBufStatus *pInpBufStatus;
168     const PAF_DecodeStatus * const *z_pDecodeStatus;
169     const PAF_OutBufStatus *pOutBufStatus;
170     const PAF_EncodeStatus * const *z_pEncodeStatus;
171     const PAF_VolumeStatus *pVolumeStatus;
172     const PAF_ASP_AlgKey *pDecAlgKey;
173     const PAF_ASP_AlgKey *pEncAlgKey;
174     const PAF_ASP_SioMap *pDecSioMap;
175     const SmInt *streamsFromDecodes;
176     const SmInt *streamsFromEncodes;
177     const MdInt maxFramelength;
178     const SmInt *streamOrder;
179     const PAF_ASP_LinkInit * const (*i_inpLinkInit);
180     const PAF_ASP_LinkInit * const (*i_outLinkInit);
181     const PAF_ASP_outNumBufMap *  const (*poutNumBufMap);
182     const PAF_MetadataBufStatus *pMetadataBufStatus;
183     const PAF_AudioFrameBufStatus *pAudioFrameBufStatus;
184 } PAF_ASOT_Params;
186 // Audio Stream Output Task (ASOT) patchs
187 typedef struct PAF_ASOT_Patchs {
188     //const PAF_SIO_ParamsN * devinp;
189     const PAF_SIO_ParamsN * devout;
190     //const PAF_ASP_LinkInit * const (*i_decLinkInit);
191     const PAF_ASP_LinkInit * const (*i_aspLinkInit)[GEARS];
192     const PAF_ASP_LinkInit * const (*i_encLinkInit);
193 } PAF_ASOT_Patchs;
195 typedef struct PAF_AST_OutIO {
196     ioPhyHandle_t        hIoPhy;     /* handle to I/O physical layer */
197     ioBuffHandle_t       hIoBuff;    /* handle to I/O buffer management */
198     Ptr                  hMcaspChan; /* handle to McASP LLD channel for output */
199     uint32_t             phyXferSize;
201     void     *mcaspTxBuf1;
202     void     *mcaspTxBuf2;
203     uint32_t  mcaspTxSize1;
204     uint32_t  mcaspTxSize2;
205     int       mcaspTxtwoXfers;
207     int       numPrimeXfers;
209     uint32_t  mcaspXferErr;
211     // debugging counters
212     uint32_t num_xfers;
214 } PAF_AST_IoOut;
216 // Audio Stream Input Task (ASOT) configuration
217 typedef struct PAF_ASOT_Config {
218     Task_Handle taskHandle;             // ASOT handle
219     ACP_Handle acp;                     // ASOT local ACP handle
220     Int8 cbDrainedFlag[DECODEN_MAX];    // CB drained flags
221     PAF_ASPM_Config *pAspmCfg;          // ASIT/ASOT shared configuration
222     PAF_AST_Config *pAstCfg;            // ASIT/ASOT/ASDT shared configuration
223     PAF_AST_IoOut  *pIoOut;
224 } PAF_ASOT_Config;
227 //   Purpose:   Audio Stream Outpu Task Function for initialization of data pointers
228 //              by allocation of memory.
229 Int 
230 PAF_ASOT_initPhaseMalloc(
231     const PAF_ASOT_Params *pP, 
232     const PAF_ASOT_Patchs *pQ, 
233     PAF_ASOT_Config *pAsotCfg
234 );
235     
236 //   Purpose:   Audio Stream Output Task Function for initialization of data values
237 //              from parameters.
238 Int
239 PAF_ASOT_initPhaseConfig(
240     const PAF_ASOT_Params *pP, 
241     const PAF_ASOT_Patchs *pQ, 
242     PAF_ASOT_Config *pAsotCfg
243 );
245 //   Purpose:   Audio Stream Output Task Function for initialization of ACP by
246 //              instantiation of the algorithm.
247 Int
248 PAF_ASOT_initPhaseAcpAlg(
249     const PAF_ASOT_Params *pP, 
250     const PAF_ASOT_Patchs *pQ, 
251     PAF_ASOT_Config *pAsotCfg
252 );
254 //   (***) FL: ASIT/ASOT currently consider common memory independently.
255 //             Should simultaneously consider all algs in ASIT/ASOT.
256 //   Purpose:   Audio Stream Output Task Function for allocation of common memory.
257 Int
258 PAF_ASOT_initPhaseCommon(
259     const PAF_ASOT_Params *pP, 
260     const PAF_ASOT_Patchs *pQ, 
261     PAF_ASOT_Config *pAsotCfg
262 );
264 //   Purpose:   Audio Stream Output Task Function for initialization of ASP algorithms.
265 Int
266 PAF_ASOT_initPhaseAspAlg(
267     const PAF_ASOT_Params *pP, 
268     const PAF_ASOT_Patchs *pQ, 
269     PAF_ASOT_Config *pAsotCfg
270 );
272 //   Purpose:   Audio Stream Output Task Function for initialization of data values
273 //              from parameters for Algorithm Keys.
274 Int
275 PAF_ASOT_initPhaseAlgKey(
276     const PAF_ASOT_Params *pP, 
277     const PAF_ASOT_Patchs *pQ, 
278     PAF_ASOT_Config *pAsotCfg
279 );
281 //   Purpose:   Audio Stream Output Task Function for initialization of Input Devices.
282 Int
283 PAF_ASOT_initPhaseDevice(
284     const PAF_ASOT_Params *pP, 
285     const PAF_ASOT_Patchs *pQ, 
286     PAF_ASOT_Config *pAsotCfg
287 );
289 //   Purpose:   Audio Stream Output Task Function for initialization of the Audio
290 //              Frame(s) by memory allocation and loading of data pointers
291 //              and values.
292 Int
293 PAF_ASOT_initFrame0(
294     const PAF_ASOT_Params *pP, 
295     const PAF_ASOT_Patchs *pQ, 
296     PAF_ASOT_Config *pAsotCfg, 
297     Int z
298 );
300 //   Purpose:   Audio Stream Task Function for initialization or reinitiali-
301 //              zation of the Audio Frame(s) by loading of data values of a
302 //              time-varying nature.
303 Int
304 PAF_ASOT_initFrame1(
305     const PAF_ASOT_Params *pP, 
306     const PAF_ASOT_Patchs *pQ, 
307     PAF_ASOT_Config *pAsotCfg, 
308     Int z, 
309     Int apply
310 );
312 //   Purpose:   Audio Stream Output Task Function for selecting the devices used
313 //              for output.
314 Int
315 PAF_ASOT_selectDevices(
316     const PAF_ASOT_Params *pP, 
317     const PAF_ASOT_Patchs *pQ, 
318     PAF_ASOT_Config *pAsotCfg
319 );
321 //   Purpose:   Audio Stream Output Task Function for processing audio data.
322 //
323 Int
324 PAF_ASOT_decodeProcessing(
325     const PAF_ASOT_Params *pP, 
326     const PAF_ASOT_Patchs *pQ, 
327     PAF_ASOT_Config *pAsotCfg 
328 );
330 //   Purpose:   Decoding Function for processing Encode Commands.
331 Int
332 PAF_ASOT_encodeCommand(
333     const PAF_ASOT_Params *pP, 
334     const PAF_ASOT_Patchs *pQ, 
335     PAF_ASOT_Config *pAsotCfg
336 );
338 //   Purpose:   Decoding Function for reinitializing the decoding process.
339 Int
340 PAF_ASOT_decodeInit(
341     const PAF_ASOT_Params *pP, 
342     const PAF_ASOT_Patchs *pQ, 
343     PAF_ASOT_Config *pAsotCfg
344 );
346 //   Purpose:   Decoding Function for processing information in a manner that
347 //              is unique to initial frames of input data.
348 Int
349 PAF_ASOT_decodeInfo(
350     const PAF_ASOT_Params *pP, 
351     const PAF_ASOT_Patchs *pQ, 
352     PAF_ASOT_Config *pAsotCfg, 
353     Int frame, 
354     Int block
355 );
357 //   Purpose:   Decoding Function for processing information in a manner that
358 //              is unique to initial frames of input data.
359 Int
360 PAF_ASOT_decodeInfo1(
361     const PAF_ASOT_Params *pP, 
362     const PAF_ASOT_Patchs *pQ, 
363     PAF_ASOT_Config *pAsotCfg, 
364     Int frame, 
365     Int block
366 );
368 //   Purpose:   Decoding Function for processing information in a manner that
369 //              is unique to frames of input data other than the initial one.
370 Int
371 PAF_ASOT_decodeInfo2(
372     const PAF_ASOT_Params *pP, 
373     const PAF_ASOT_Patchs *pQ, 
374     PAF_ASOT_Config *pAsotCfg, 
375     Int frame, 
376     Int block
377 );
379 //   Purpose:   Decoding Function for processing of audio frame data by the
380 //              ASP Algorithms.
381 Int
382 PAF_ASOT_decodeStream(
383     const PAF_ASOT_Params *pP, 
384     const PAF_ASOT_Patchs *pQ, 
385     PAF_ASOT_Config *pAsotCfg, 
386     Int frame, 
387     Int block
388 );
390 //   Purpose:   Decoding Function for processing of audio frame data by the
391 //              Encode Algorithm.
392 Int
393 PAF_ASOT_decodeEncode(
394     const PAF_ASOT_Params *pP, 
395     const PAF_ASOT_Patchs *pQ, 
396     PAF_ASOT_Config *pAsotCfg, 
397     Int frame, 
398     Int block
399 );
401 //   Purpose:   Decoding Function for terminating the decoding process.
402 Int
403 PAF_ASOT_decodeComplete(
404     const PAF_ASOT_Params *pP, 
405     const PAF_ASOT_Patchs *pQ, 
406     PAF_ASOT_Config *pAsotCfg, 
407     ALG_Handle decAlg[], 
408     Int frame, 
409     Int block
410 );
412 //   Purpose:   Decoding Function for initiating output.
413 Int
414 PAF_ASOT_startOutput(
415     const PAF_ASOT_Params *pP, 
416     const PAF_ASOT_Patchs *pQ, 
417     PAF_ASOT_Config *pAsotCfg
418 );
420 //   Purpose:   Decoding Function for terminating output.
421 Int
422 PAF_ASOT_stopOutput(
423     const PAF_ASOT_Params *pP, 
424     const PAF_ASOT_Patchs *pQ, 
425     PAF_ASOT_Config *pAsotCfg
426 );
428 //   Purpose:   Decoding Function for re-initiating output.
429 Int
430 PAF_ASOT_setCheckRateX(
431     const PAF_ASOT_Params *pP, 
432     const PAF_ASOT_Patchs *pQ, 
433     PAF_ASOT_Config *pAsotCfg, 
434     Int check
435 );
437 //   Purpose:   Common Function for processing algorithm chains.
438 Int
439 PAF_ASOT_streamChainFunction(
440     const PAF_ASOT_Params *pP, 
441     const PAF_ASOT_Patchs *pQ, 
442     PAF_ASOT_Config *pAsotCfg, 
443     Int iChainFrameFxns, 
444     Int abortOnError, 
445     Int logArg
446 );
448 //   Purpose:   Decoding Function for determining whether processing of the
449 //              current stream is complete.
450 Int
451 PAF_ASOT_decodeFinalTest(
452     const struct PAF_ASOT_Params *pP, 
453     const struct PAF_ASOT_Patchs *pQ, 
454     struct PAF_ASOT_Config *pAsotCfg, 
455     Int frame, 
456     Int block
457 );
459 #endif /* _ASOP_H_ */