]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - processor-sdk/performance-audio-sr.git/blobdiff - pasdk/test_arm/framework/aspDecOpCircBuf_slave.c
PASDK-477:Merge remote-tracking branch 'origin/dev_pasdk_qin_dtsx' into pasdk_frank_p...
[processor-sdk/performance-audio-sr.git] / pasdk / test_arm / framework / aspDecOpCircBuf_slave.c
index 3f0b688248644b2e81c1f8a7a49bff043bf1ef1c..45a59506304401b62495336cbfe04f50860ebe75 100644 (file)
@@ -498,6 +498,10 @@ Int cbWriteStop(
 //Int16 gSampleCountBuf[10];
 //Int16 gCalcDeltaSampsBuf[10];
 //Int8 gPrimedFlagCnt=0;
+// debug
+//Int32 gPcmOvershootWrap1=0;
+//Int32 gPcmOvershootWrap2=0;
+//Int32 gPcmOvershootNoWrap=0;
 
 // (***) FL: revisit
 // Write audio frame to circular buffer
@@ -620,6 +624,7 @@ Int cbWriteAf(
                         ((pPcmBuf + pAfWrt->sampleCount) >= pPcmBufRd))
                     {
                         pCb->errPcmOvrCnt++;
+                        //gPcmOvershootWrap1 = pPcmBuf + pAfWrt->sampleCount - pPcmBufRd; // debug
                         pcmOvr = 1;
                     }
                     
@@ -632,6 +637,7 @@ Int cbWriteAf(
                             ((pPcmBuf + pAfWrt->sampleCount) >= pPcmBufRd))
                         {
                             pCb->errPcmOvrCnt++;
+                            //gPcmOvershootWrap2 = pPcmBuf + pAfWrt->sampleCount - pPcmBufRd; // debug
                             pcmOvr = 1;
                         }                                                                
                     }
@@ -641,6 +647,7 @@ Int cbWriteAf(
                 {
                     // this write won't wrap
                     
+                    //gPcmOvershootNoWrap = pPcmBuf + pAfWrt->sampleCount - pPcmBufRd; // debug
                     pCb->errPcmOvrCnt++;
                     pcmOvr = 1;
                 }
@@ -853,17 +860,16 @@ Int cbWriteAf(
             //    pCb->afLagIdx += 1;
             //}
             
-            // Update CB primed flag
-            // calculate number of delta samples before allowing CB read
+            // Update CB primed flag.
+            // Calculate number of delta samples before allowing CB read.
             if (pCb->primedFlag == 0)
             {
                 pCb->primedFlag = 1;
                 
-                // Calculate number of output frames to block reader.
-                // This is sample count reader waits before allowed to actually read samples from the CB.
-                //pCb->deltaSamps = (pCb->targetNDSamps - pAfWrt->sampleCount + (pCb->strFrameLen-1)) / pCb->strFrameLen * pCb->strFrameLen;
-                // FL: CB read decrements by strFrameLen and tests for >0, so rounding to strFrameLen is unnecessary
-                pCb->deltaSamps = pCb->targetNDSamps - pAfWrt->sampleCount;
+                // THD has variable number of AUs per frame. 
+                // Some frames can be quite large (e.g. 96 AUs), and delta samples calculation small or even negative.
+                // In this case, there won't be any reader hold off, and no nominal delay in the CB.
+                pCb->deltaSamps = pCb->targetNDSamps;
                 
                 // debug
                 //gSampleCountBuf[gPrimedFlagCnt] = pAfWrt->sampleCount;
@@ -872,6 +878,12 @@ Int cbWriteAf(
                 //    gPrimedFlagCnt++;
             }
 
+            // Update delta samples using number of write audio frame samples.
+            if (pCb->deltaSamps > 0)
+            {
+               pCb->deltaSamps = pCb->deltaSamps - pAfWrt->sampleCount;
+            }
+            
             // Write back circular buffer configuration
             Cache_wb(pCb, sizeof(PAF_AST_DecOpCircBuf), Cache_Type_ALLD, 0);
             // write back audio frame
@@ -900,7 +912,7 @@ Int cbWriteAf(
                        }
             Cache_wait();
 
-#if 0 // (***) FL: shows timing of CB write
+#if 0 // also for CB_RW_OP_CAP_PP (***) FL: shows timing of CB write
             // debug
             {
                 static Uint8 toggleState = 0;