]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - processor-sdk/performance-audio-sr.git/blobdiff - pasdk/test_arm/framework/audioStreamDecodeProc.c
PASDK183: Updates for DTS legacy stream decode.
[processor-sdk/performance-audio-sr.git] / pasdk / test_arm / framework / audioStreamDecodeProc.c
index 197af1dba413bc58b2d49605e887bda5d6afc699..c28ae9226feb702b88c177b6f059986657f6a243 100644 (file)
@@ -61,6 +61,9 @@ All rights reserved.
 #include "audioStreamProc_common.h"
 #include "audioStreamDecodeProc.h"
 
+#include "statusOp_common.h"
+
+
 // FL: debug
 //#include "fwkSim.h"
 #include "dbgCapAf.h"
@@ -155,6 +158,7 @@ Void taskAsdpFxn(
     Int status;
     Int zI;
     Int bufEnd, wrapSize, currentBufSize, chunkSize;
+    Int8 temp8;
 
     
     Log_info0("Enter taskAsdpFxn()");
@@ -271,6 +275,28 @@ Void taskAsdpFxn(
         pP->fxns->memStatusPrint(HEAP_INTERNAL, HEAP_INTERNAL1, HEAP_EXTERNAL, HEAP_INTERNAL1_SHM);
     }
     
+#ifdef NON_CACHE_STATUS
+    //
+    // init Status structure Gate
+    //
+    if (statusOp_Init(GATEMP_INDEX_DEC) == STATUSOP_INIT_FAIL)
+    {
+        TRACE_TERSE1("TaskAsdp: Gate Index %d:initialization status GateMP Fail.", GATEMP_INDEX_DEC);
+    }
+    if (statusOp_Init(GATEMP_INDEX_DDP) == STATUSOP_INIT_FAIL)
+    {
+        TRACE_TERSE1("TaskAsdp: Gate Index %d:initialization status GateMP Fail.", GATEMP_INDEX_DDP);
+    }
+    if (statusOp_Init(GATEMP_INDEX_PCM) == STATUSOP_INIT_FAIL)
+    {
+        TRACE_TERSE1("TaskAsdp: Gate Index %d:initialization status GateMP Fail.", GATEMP_INDEX_PCM);
+    }
+    if (statusOp_Init(GATEMP_INDEX_THD) == STATUSOP_INIT_FAIL)
+    {
+        TRACE_TERSE1("TaskAsdp: Gate Index %d:initialization status GateMP Fail.", GATEMP_INDEX_THD);
+    }
+#endif
+
     // (***) FL: revisit
     // write back Status structure addresses for Beta Units initialized on Slave
     Cache_wb((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
@@ -280,29 +306,29 @@ Void taskAsdpFxn(
     Cache_wb((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP2]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
     Cache_wb((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_THD]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
     Cache_wb((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_THD2]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
+    Cache_wb((Ptr)(&IACP_STD_BETA_TABLE.pStatus[STD_BETA_DTSUHDA]), sizeof(IALG_Status *), Cache_Type_ALLD, 0);
     Cache_wait();
     
     // (***) FL: revisit
     // write back Status structures for Beta Units initialized on Slave
-    size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]->size;
-    Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]), size, Cache_Type_ALLD, 0);
+   /* size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]->size;
+    Cache_wbInv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]), size, Cache_Type_ALLD, 0);
     size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]->size;
-    Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]), size, Cache_Type_ALLD, 0);
+    Cache_wbInv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]), size, Cache_Type_ALLD, 0);
     size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM2]->size;
-    Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM2]), size, Cache_Type_ALLD, 0);
+    Cache_wbInv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM2]), size, Cache_Type_ALLD, 0);
     size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP]->size;
-    Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP]), size, Cache_Type_ALLD, 0);
+    Cache_wbInv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP]), size, Cache_Type_ALLD, 0);
     size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP2]->size;
-    Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP2]), size, Cache_Type_ALLD, 0);
-    size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_THD]->size;
-    Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_THD]), size, Cache_Type_ALLD, 0);
-    size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_THD2]->size;
-    Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_THD2]), size, Cache_Type_ALLD, 0);
+    Cache_wbInv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP2]), size, Cache_Type_ALLD, 0);
     Cache_wait();
 
     // (***) FL: revisit
     // write back Dec configuration
-    Cache_wb(&pAstCfg->xDec[0], DECODEN*sizeof(PAF_AST_Decode), Cache_Type_ALLD, 0);
+    Cache_wbInv(&pAstCfg->xDec[0], DECODEN*sizeof(PAF_AST_Decode), Cache_Type_ALLD, 0);
+    Cache_wait();*/
+    size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DTSUHDA]->size;
+    Cache_wbInv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DTSUHDA]), size, Cache_Type_ALLD, 0);
     Cache_wait();
     
     // Send initialization complete message to master
@@ -445,12 +471,13 @@ Void taskAsdpFxn(
                     // invalidate Status structures for shared Beta Units
                     //size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]->size;
                     //Cache_inv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]), size, Cache_Type_ALLD, 0);
-                    size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]->size;
+                    /*size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]->size;
                     Cache_inv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]), size, Cache_Type_ALLD, 0);
                     size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP]->size;
                     Cache_inv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP]), size, Cache_Type_ALLD, 0);
-                    size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_THD]->size;
-                    Cache_inv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_THD]), size, Cache_Type_ALLD, 0);
+                    Cache_wait();*/
+                    size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DTSUHDA]->size;
+                    Cache_inv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DTSUHDA]), size, Cache_Type_ALLD, 0);
                     Cache_wait();
                     
                     argIdx = 0; // get decIdx
@@ -516,12 +543,13 @@ Void taskAsdpFxn(
                     // write back Status structures for shared Beta Units
                     //size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]->size;
                     //Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DECODE]), size, Cache_Type_ALLD, 0);
-                    size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]->size;
-                    Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]), size, Cache_Type_ALLD, 0);
+                   /* size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]->size;
+                    Cache_wbInv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_PCM]), size, Cache_Type_ALLD, 0);
                     size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP]->size;
-                    Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP]), size, Cache_Type_ALLD, 0);
-                    size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_THD]->size;
-                    Cache_wb((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_THD]), size, Cache_Type_ALLD, 0);
+                    Cache_wbInv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DDP]), size, Cache_Type_ALLD, 0);
+                    Cache_wait();*/
+                    size = IACP_STD_BETA_TABLE.pStatus[STD_BETA_DTSUHDA]->size;
+                    Cache_wbInv((Ptr)(IACP_STD_BETA_TABLE.pStatus[STD_BETA_DTSUHDA]), size, Cache_Type_ALLD, 0);
                     Cache_wait();
                     
                     // send dec reset complete message to master
@@ -550,7 +578,7 @@ Void taskAsdpFxn(
                     TRACE_TERSE2("slaveCmd=%d,decIdx=%d", slaveCmd, z);
                     // Get input associated w/ decoder
                     zI = pP->inputsFromDecodes[z];
-                    
+
                     // (***) FL: revisit
                     // invalidate Inp configuration
                     Cache_inv(&pAstCfg->xInp[zI], sizeof(PAF_AST_InpBuf), Cache_Type_ALLD, 0);
@@ -560,7 +588,7 @@ Void taskAsdpFxn(
                     size = pIpBufConfig->frameLength * pIpBufConfig->sizeofElement;
                     if (sourceSelect == PAF_SOURCE_PCM)
                     {
-                       size *= pIpBufConfig->stride;
+                        size *= pIpBufConfig->stride;
                     }
 
                     bufEnd = (Int) pIpBufConfig->base.pVoid + pIpBufConfig->sizeofBuffer;
@@ -605,12 +633,25 @@ Void taskAsdpFxn(
                     Cache_wb(&pAstCfg->xDec[z], sizeof(PAF_AST_Decode), Cache_Type_ALLD, 0);
                     Cache_wait();            
                     
-                    // Re-initialize audio frame if decoder is disabled or 
-                    // doesn't have a valid input 
+#ifdef NON_CACHE_STATUS
+                    statusOp_read(&(temp8),
+                                  &(pAstCfg->xDec[z].decodeStatus.mode),
+                                  sizeof(Int8),
+                                  GATEMP_INDEX_DEC);
+                    // Re-initialize audio frame if decoder is disabled or
+                    // doesn't have a valid input
+                    if (!temp8 || !pAstCfg->xInp[zI].hRxSio)
+                    {
+                        pP->fxns->initFrame1(pP, pQ, pC, z, 0);
+                    }
+#else
+                    // Re-initialize audio frame if decoder is disabled or
+                    // doesn't have a valid input
                     if (!pAstCfg->xDec[z].decodeStatus.mode || !pAstCfg->xInp[zI].hRxSio)
                     {
                         pP->fxns->initFrame1(pP, pQ, pC, z, 0);
                     }
+#endif
 
                     // send dec info complete message to master
                     queId = MessageQ_getReplyQueue(pAspMsg);
@@ -709,13 +750,25 @@ Void taskAsdpFxn(
                     Cache_wb(&pAstCfg->xDec[z], sizeof(PAF_AST_Decode), Cache_Type_ALLD, 0);
                     Cache_wait();
                     
+#ifdef NON_CACHE_STATUS
+                    statusOp_read(&(temp8),
+                                  &(pAstCfg->xDec[z].decodeStatus.mode),
+                                  sizeof(Int8),
+                                  GATEMP_INDEX_DEC);
                     // Re-initialize audio frame if decoder is disabled or 
                     // doesn't have a valid input 
+                    if (!temp8 || !pAstCfg->xInp[zI].hRxSio)
+                    {
+                        pP->fxns->initFrame1(pP, pQ, pC, z, 0);
+                    }
+#else
+                    // Re-initialize audio frame if decoder is disabled or
+                    // doesn't have a valid input
                     if (!pAstCfg->xDec[z].decodeStatus.mode || !pAstCfg->xInp[zI].hRxSio)
                     {
                         pP->fxns->initFrame1(pP, pQ, pC, z, 0);
                     }
-
+#endif
                     // send dec info complete message to master
                     queId = MessageQ_getReplyQueue(pAspMsg);
                     pAspMsg->procId = hAspMsgSlave->slaveProcId;
@@ -996,11 +1049,12 @@ PAF_ASDT_initPhaseCommon(
 
     TRACE_TERSE0("PAF_ASDT_initPhaseCommon: calling PAF_ALG_setup.");
     PAF_ALG_setup(&pafAlgConfig, 
-        HEAP_ID_INTERNAL,       HEAP_INTERNAL, 
-        HEAP_ID_INTERNAL1,      HEAP_INTERNAL1, 
-        HEAP_ID_EXTERNAL,       HEAP_EXTERNAL, 
-        HEAP_ID_INTERNAL1_SHM,  HEAP_INTERNAL1_SHM, 
-        HEAP_ID_EXTERNAL_SHM,   HEAP_EXTERNAL_SHM, 
+        HEAP_ID_INTERNAL,               HEAP_INTERNAL, 
+        HEAP_ID_INTERNAL1,              HEAP_INTERNAL1, 
+        HEAP_ID_EXTERNAL,               HEAP_EXTERNAL, 
+        HEAP_ID_INTERNAL1_SHM,          HEAP_INTERNAL1_SHM, 
+        HEAP_ID_EXTERNAL_SHM,           HEAP_EXTERNAL_SHM, 
+        HEAP_ID_EXTERNAL_NONCACHED_SHM, HEAP_EXTERNAL_NONCACHED_SHM,
         HEAP_CLEAR);
 
     if (pP->fxns->headerPrint)
@@ -1240,7 +1294,7 @@ PAF_ASDT_initFrame0(
     //maxFrameLength += PA_MODULO - maxFrameLength % PA_MODULO; // compute maximum framelength (needed for ARC support)
     //aLen = numchan[z] * maxFrameLength;
     aLen = numchan[z] * maxFrameLength + (maxFrameLength - FRAMELENGTH); /* Qin - need additional memory for starting offset
-                                                                                     See line 1307 */
+                                                                                     See line 1301 */
 
     //
     // Initialize audio frame elements directly
@@ -1438,6 +1492,15 @@ Int resetAf(
         case PAF_SOURCE_THD:
             pAudioFrame->data.nSamples = 5120; //QIN FIX ME
             break;
+        case PAF_SOURCE_DTS:
+        case PAF_SOURCE_DTSHD:
+        case PAF_SOURCE_DTS12:
+        case PAF_SOURCE_DTS13:
+        case PAF_SOURCE_DTS14:
+        case PAF_SOURCE_DTS16:
+        case PAF_SOURCE_DTSALL:
+            pAudioFrame->data.nSamples = 512; // TODO: Need to set correct value, max Sample output
+            break;
         default:  
             pAudioFrame->data.nSamples = FRAMELENGTH;
             break;