PASDK-568: added logic and encoder wrapper to handle output buffer wrapping around
[processor-sdk/performance-audio-sr.git] / pasdk / test_dsp / framework / audioStreamOutDec.c
index eba3872e82601f371f590b5f479413edc530efdb..16b57b776c8d6a278fb35f36d208d50ee2afebc9 100644 (file)
@@ -51,6 +51,8 @@ All rights reserved.
 #include "audioStreamOutProc.h"
 #include "audioStreamOutIo.h"
 #include "audioStreamOutDec.h"
+#include "ioConfig.h"    //TODO: remove this header
+#include "ioPhy.h"
 
 #define ENC_Handle PCE_Handle /* works for all: PCE */
 
@@ -156,7 +158,7 @@ Int asopDecOutProcInfo1(
     // Reset ASP chain
     //
     TRACE_VERBOSE0("asopDecOutProcInfo1: calling streamChainFunction.");
-    errno = streamChainFunction(pP, pQ, pAsotCfg, PAF_ASP_CHAINFRAMEFXNS_RESET, 1, frame);
+    errno = streamChainFunction(pP, pQ, pAsotCfg, PAF_ASP_CHAINFRAMEFXNS_RESET, 1, frame);  // SRC reset is called inside;
     if (errno)
     {
         TRACE_TERSE1("asopDecOutProcInfo1: streamChainFunction returns errno 0x%x ", errno);
@@ -523,22 +525,27 @@ Int asopDecOutProcEncode(
 
         if (pOut[z].hIoPhy)
         {
-            // update length (e.g. ARC may have changed)
-            pAstCfg->xOut[z].outBufConfig.lengthofFrame =
+            uint32_t phyXferSizeOld;
+
+            // update length (e.g. ARC may have changed) - moved out of this function
+/*            pAstCfg->xOut[z].outBufConfig.lengthofFrame =
                 pAstCfg->xEnc[zE].encodeInStruct.pAudioFrame->sampleCount;
-                
+*/
             TRACE_GEN2("asopDecodeEncode: AS%d: processing frame %d -- idle", as+zS, frame);
 
 #if 0 // FL, New IO: add similar thing to be figured out
             // Update framework Phy transfer size
-            pOut[z].phyXferSize = pAstCfg->xOut[z].outBufConfig.lengthofFrame * OUTPUT_STRIDE * WORD_SIZE_PCM;
+            phyXferSizeOld = pOut[z].phyXferSize;
+            pOut[z].phyXferSize = pAstCfg->xOut[z].outBufConfig.lengthofFrame * pOut[z].stride * WORD_SIZE_PCM;
             // Update IO Phy transfer size            
             ioPhyCtl.code = IOPHY_CTL_FRAME_SIZE;
             ioPhyCtl.params.xferFrameSize = pOut[z].phyXferSize;
             ioPhyControl(pOut[z].hIoPhy, &ioPhyCtl);
             // Update IO Buff delay to match Phy transfer size
-            ioBuffAdjustDelay(pOut[z].hIoBuff, pOut[z].phyXferSize * (NUM_PRIME_XFERS+1));
-
+            if(pOut[z].phyXferSize != phyXferSizeOld) {
+                ioBuffAdjustDelay(pOut[z].hIoBuff, pOut[z].phyXferSize * (NUM_PRIME_XFERS+1));
+            }
+/*
             errno = SIO_reclaim(pAstCfg->xOut[z].hTxSio,(Ptr *) &pAstCfg->xOut[z].pOutBuf, NULL);
             if (errno < 0)
             {
@@ -546,6 +553,7 @@ Int asopDecOutProcEncode(
                 TRACE_TERSE2("PAF_ASOT_decodeEncode: AS%d: SIO_reclaim returns error %d", as+zS, -errno);
                 return -errno; // SIO negates error codes
             }
+*/
 #endif
 
 #if 0 // debug 
@@ -983,7 +991,7 @@ static Int streamChainFunction(
                        ? "asopStreamChainFunction: AS%d: processing frame %d -- audio stream (final)"
                        : "asopStreamChainFunction: AS%d: processing frame %d -- audio stream (?????)",
                        as+z, logArg);
-            errno = (*func) (chain, frame);
+            errno = (*func) (chain, frame);   // ASP chain reset function: SRC is the 1st in the chain and reset
             TRACE_VERBOSE2("asopStreamChainFunction: AS%d: errno 0x%x.", as+z, errno);
 
             if (errno && abortOnError)