Clean up metadata handling in Dec Op circular buffer. Change initial delay (experiment).
authorFrank Livingston <frank-livingston@ti.com>
Thu, 1 Sep 2016 20:42:12 +0000 (15:42 -0500)
committerFrank Livingston <frank-livingston@ti.com>
Thu, 1 Sep 2016 20:42:12 +0000 (15:42 -0500)
processor_audio_sdk_1_00_00_00/pasdk/common/paf_decOpCircBuf.c

index 12e80a665fb4990b78e60bd9dcde855e7c3d1197..dfa8f809c4c95f34207d91f6a3d79fe618c1ed1e 100644 (file)
@@ -46,7 +46,7 @@ All rights reserved.
 #define MAX_NUM_AF_PCM      ( 4 )
 #define MAX_NUM_AF_DDP      ( 2 )
 
-#define CB_INIT_RD_LAG      ( 2 )
+#define CB_INIT_RD_LAG      ( 4 )
 
 // Initialize circular buffer
 Int cbInit(
@@ -140,7 +140,8 @@ Int cbInit(
             
             pAfCb->data.samsiz[i] = 0;
         }
-        //Initialize metadata buffers //QIN
+        
+        // Initialize metadata buffers //QIN
         for (i=0; i<PAF_MAX_NUM_PRIVATE_MD; i++)
         {
             pAfCb->pafPrivateMetadata[i].offset = 0; 
@@ -176,10 +177,11 @@ Int cbInit(
         {
             Cache_wb(pAfCb->data.sample[i], decOpFrameLen*sizeof(PAF_AudioData), Cache_Type_ALLD, 0);
         }
-        for (i=0; i<PAF_MAX_NUM_PRIVATE_MD; i++)     // Write back metadata //QIN
-        {
-            Cache_wb(&pAfCb->pafPrivateMetadata[i], sizeof(PAF_PrivateMetadata), Cache_Type_ALLD, 0);
-        }
+        // FL: unnecessary since part of AF
+        //for (i=0; i<PAF_MAX_NUM_PRIVATE_MD; i++)     // Write back metadata //QIN
+        //{
+        //    Cache_wb(&pAfCb->pafPrivateMetadata[i], sizeof(PAF_PrivateMetadata), Cache_Type_ALLD, 0);
+        //}
     }
     Cache_wait();
 
@@ -207,10 +209,11 @@ Int cbWriteStart(
     {
         pAfCb = &pCb->afCb[n];
         Cache_inv(pAfCb->data.sample, PAF_DECOP_CB_MAX_NUM_PCM_CH*sizeof(PAF_AudioData *), Cache_Type_ALLD, 0);
-        for (i=0; i<PAF_MAX_NUM_PRIVATE_MD; i++) //QIN
-        {
-             Cache_inv(&pAfCb->pafPrivateMetadata[i], sizeof(PAF_PrivateMetadata), Cache_Type_ALLD, 0);
-        }
+        // FL: unnecessary since part of AF
+        //for (i=0; i<PAF_MAX_NUM_PRIVATE_MD; i++) //QIN
+        //{
+        //     Cache_inv(&pAfCb->pafPrivateMetadata[i], sizeof(PAF_PrivateMetadata), Cache_Type_ALLD, 0);
+        //}
     }
     Cache_wait();
             
@@ -351,7 +354,6 @@ Int cbReadAf(
         {
             pCb->errUndCnt++;
             //SW_BREAKPOINT; // FL: debug
-            Log_info1("cbReadAf: ERROR: underflow, numAfCb=%d", pCb->numAfCb);
             return PAF_DECOP_CB_READ_UNDERFLOW;
         }
     }
@@ -370,10 +372,10 @@ Int cbReadAf(
         // Invalidate audio frame
         Cache_inv(pAfCb, sizeof(PAF_AudioFrame), Cache_Type_ALLD, 0);
         Cache_inv(pAfCb->data.samsiz, PAF_DECOP_CB_MAX_NUM_PCM_CH*sizeof(PAF_AudioSize), Cache_Type_ALLD, 0);
-        for (i=0; i<PAF_MAX_NUM_PRIVATE_MD; i++) //QIN
+        for (i=0; i<pAfCb->numPrivateMetadata; i++) //QIN // FL: only invalidate numPrivateMetadata
         {
-            Cache_inv(&pAfCb->pafPrivateMetadata[i], sizeof(PAF_PrivateMetadata), Cache_Type_ALLD, 0);
-            Cache_inv(pAfCb->pafPrivateMetadata[i].pMdBuf, PAF_MAX_PRIVATE_MD_SZ*sizeof(Int8), Cache_Type_ALLD, 0);
+            //Cache_inv(&pAfCb->pafPrivateMetadata[i], sizeof(PAF_PrivateMetadata), Cache_Type_ALLD, 0); // FL: unnecessary since part of AF
+            Cache_inv(pAfCb->pafPrivateMetadata[i].pMdBuf, pAfCb->pafPrivateMetadata[i].size, Cache_Type_ALLD, 0); // FL: only update metadata package size
         }
         Cache_wait();
 
@@ -418,23 +420,26 @@ Int cbReadAf(
             }
         }
         // read metadata //QIN
-        for (i = 0; i < PAF_MAX_NUM_PRIVATE_MD; i++)
+        for (i = 0; i < pAfCb->numPrivateMetadata; i++) // FL: only read numPrivateMetadata
         {
-            //Invalidate metadata data
-            Cache_inv(&pAfCb->pafPrivateMetadata[i], sizeof(PAF_PrivateMetadata), Cache_Type_ALLD, 0);
-            Cache_wait();        
+            // FL: this is done above
+            ////Invalidate metadata data
+            //Cache_inv(&pAfCb->pafPrivateMetadata[i], sizeof(PAF_PrivateMetadata), Cache_Type_ALLD, 0);
+            //Cache_wait();        
+            
             if ((pAfCb->pafPrivateMetadata[i].offset >= pCb->pcmRdIdx) 
                  &&(pAfCb->pafPrivateMetadata[i].offset < (pCb->pcmRdIdx + pCb->strFrameLen))
                  &&(pAfCb->pafPrivateMetadata[i].size))
             {
-                //Invalidate metadata data
-                Cache_inv(pAfCb->pafPrivateMetadata[i].pMdBuf, pAfCb->pafPrivateMetadata[i].size, Cache_Type_ALLD, 0);
-                Cache_wait();        
-
+                // FL: this is done above
+                ////Invalidate metadata data
+                //Cache_inv(pAfCb->pafPrivateMetadata[i].pMdBuf, pAfCb->pafPrivateMetadata[i].size, Cache_Type_ALLD, 0);
+                //Cache_wait();        
+        
                 // the offset is adjusted for segment [pCb->pcmRdIdx, (pCb->pcmRdIdx + pCb->pafFrameLen)]
-                pAfRd->pafPrivateMetadata[i].offset = 0;//pAfCb->pafPrivateMetadata[i].offset - pCb->pcmRdIdx;
+                pAfRd->pafPrivateMetadata[i].offset = 0; //pAfCb->pafPrivateMetadata[i].offset - pCb->pcmRdIdx;
                 pAfRd->pafPrivateMetadata[i].size   = pAfCb->pafPrivateMetadata[i].size;
-                memcpy (pAfRd->pafPrivateMetadata[i].pMdBuf, pAfCb->pafPrivateMetadata[i].pMdBuf, pAfCb->pafPrivateMetadata[i].size);
+                memcpy(pAfRd->pafPrivateMetadata[i].pMdBuf, pAfCb->pafPrivateMetadata[i].pMdBuf, pAfCb->pafPrivateMetadata[i].size);
             }
             else //reset un-used buf
             {
@@ -442,6 +447,7 @@ Int cbReadAf(
                 pAfRd->pafPrivateMetadata[i].size   = 0;
             }
         }
+        
         pCb->pcmRdIdx += pCb->strFrameLen; // update PCM read index
         if (pCb->pcmRdIdx == pCb->decOpFrameLen)
         {
@@ -494,7 +500,7 @@ Int cbWriteAf(
 
     // (***) FL: revisit
     // Invalidate circular buffer configuration.
-    // NOTE: Probably only a subset of this information needs to be updated.
+    // NOTE: Probably only a subset of this information nexeds to be updated.
     Cache_inv(pCb, sizeof(PAF_DecodeOpCircBuf), Cache_Type_ALLD, 0);
     Cache_wait();
     
@@ -528,7 +534,7 @@ Int cbWriteAf(
             Log_info1("cbWriteAf: ERROR: overflow, numAfCb=%d", pCb->numAfCb);
             return PAF_DECOP_CB_WRITE_OVERFLOW;
         }
-        //while (pCb->numAfCb >= pCb->maxNumAfCb); //Qin replace with while loop for debugging
+        
         // get pointer to current audio frame in circular buffer
         pAfCb = &pCb->afCb[pCb->afWrtIdx];
            
@@ -539,7 +545,7 @@ Int cbWriteAf(
         pAfCb->sampleCount = pAfWrt->sampleCount;
         pAfCb->channelConfigurationRequest = pAfWrt->channelConfigurationRequest;
         pAfCb->channelConfigurationStream = pAfWrt->channelConfigurationStream;
-        // write metadata information updated by decoder//QIN
+        // write metadata information updated by decoder //QIN
         pAfCb->bsMetadata_type     = pAfWrt->bsMetadata_type;        /* non zero if metadata is attached. */
         pAfCb->pafBsMetadataUpdate = pAfWrt->pafBsMetadataUpdate;    /* indicates whether bit-stream metadata update */
         pAfCb->numPrivateMetadata  = pAfWrt->numPrivateMetadata;     /* number of valid private metadata (0 or 1 if metadata filtering enabled) */
@@ -559,21 +565,14 @@ Int cbWriteAf(
             }
         }
         
-        //Write metadata to circular buffer //QIN
-        for (i = 0; i < PAF_MAX_NUM_PRIVATE_MD; i++)
+        // Write metadata to circular buffer
+        for (i = 0; i < pAfCb->numPrivateMetadata; i++) // FL: only copy numPrivateMetadata
         {
-            if (pAfWrt->pafPrivateMetadata[i].size)
-            {
-                pAfCb->pafPrivateMetadata[i].offset = pAfWrt->pafPrivateMetadata[i].offset; 
-                pAfCb->pafPrivateMetadata[i].size   = pAfWrt->pafPrivateMetadata[i].size; 
-                memcpy (pAfCb->pafPrivateMetadata[i].pMdBuf, pAfWrt->pafPrivateMetadata[i].pMdBuf, pAfWrt->pafPrivateMetadata[i].size); 
-            }
-            else 
-            {
-                pAfCb->pafPrivateMetadata[i].offset = 0; 
-                pAfCb->pafPrivateMetadata[i].size   = 0; 
-            }
+            pAfCb->pafPrivateMetadata[i].offset = pAfWrt->pafPrivateMetadata[i].offset; 
+            pAfCb->pafPrivateMetadata[i].size   = pAfWrt->pafPrivateMetadata[i].size; 
+            memcpy(pAfCb->pafPrivateMetadata[i].pMdBuf, pAfWrt->pafPrivateMetadata[i].pMdBuf, pAfWrt->pafPrivateMetadata[i].size); 
         }
+        
         // update audio frame write index
         pCb->afWrtIdx++;
         if (pCb->afWrtIdx >= pCb->maxNumAfCb)
@@ -598,11 +597,12 @@ Int cbWriteAf(
                 Cache_wb(pAfCb->data.sample[i], pCb->decOpFrameLen*sizeof(PAF_AudioData), Cache_Type_ALLD, 0);
             }
         }
-        // write back private metadata
-        for (i=0; i<PAF_MAX_NUM_PRIVATE_MD; i++) //QIN
+        
+        // write back private metadata // QIN
+        for (i=0; i<pAfCb->numPrivateMetadata; i++) // FL: only write back numPrivateMetadata
         {
-            Cache_wb(&pAfCb->pafPrivateMetadata[i], sizeof(PAF_PrivateMetadata), Cache_Type_ALLD, 0);
-            Cache_wb(pAfCb->pafPrivateMetadata[i].pMdBuf, PAF_MAX_PRIVATE_MD_SZ*sizeof(Int8), Cache_Type_ALLD, 0);
+            //Cache_wb(&pAfCb->pafPrivateMetadata[i], sizeof(PAF_PrivateMetadata), Cache_Type_ALLD, 0); // FL: unnecessary since part of AF
+            Cache_wb(pAfCb->pafPrivateMetadata[i].pMdBuf, pAfCb->pafPrivateMetadata[i].size, Cache_Type_ALLD, 0);
         }
         Cache_wait();
     }