Split Decoder Output Circular Buffer code between Master (DSP:init,read) and Slave...
[processor-sdk/performance-audio-sr.git] / processor_audio_sdk_1_00_00_00 / pasdk / test_dsp / framework / aspDecOpCircBuf_master.c
similarity index 63%
rename from processor_audio_sdk_1_00_00_00/pasdk/common/paf_decOpCircBuf.c
rename to processor_audio_sdk_1_00_00_00/pasdk/test_dsp/framework/aspDecOpCircBuf_master.c
index 425496a70776b6992f3223e1fccc1564facd547a..948c1fb9b4716d0092a1f8f27a07b1421a1dff51 100644 (file)
@@ -39,15 +39,9 @@ All rights reserved.
 #include <xdc/runtime/Log.h>
 
 #include "common.h"
+#include "paftyp.h"
 #include "pafdec.h"
-#include "pafsp.h"
-#include "paf_decOpCircBuf.h"
-
-// Generate mute AF on circular buffer read
-static Void cbReadAfMute(
-    PAF_AudioFrame *pAfRd,      // audio frame into which to read
-    Int16 strFrameLen           // stream frame length (output transaction size)
-);
+#include "aspDecOpCircBuf_master.h"
 
 #define MAX_NUM_AF_PCM      ( 4 )
 #define CB_INIT_RD_LAG_PCM  ( 2 ) // 0...3
@@ -55,6 +49,12 @@ static Void cbReadAfMute(
 #define MAX_NUM_AF_DDP      ( 2 )
 #define CB_INIT_RD_LAG_DDP  ( 4 ) // 0...5
 
+// Generate mute AF on circular buffer read
+static Void cbReadAfMute(
+    PAF_AudioFrame *pAfRd,      // audio frame into which to read
+    Int16 strFrameLen           // stream frame length (output transaction size)
+);
+
 // Initialize circular buffer
 Int cbInit(
     Int8 sourceSelect,          // source select (PCM, DDP, etc.)
@@ -125,7 +125,7 @@ Int cbInit(
     }
     else
     {
-        return PAF_DECOP_CB_INIT_INV_SOURCE_SEL;
+        return ASP_DECOP_CB_INIT_INV_SOURCE_SEL;
     }
 
     // initialize circular buffer current number of frames
@@ -137,9 +137,9 @@ Int cbInit(
     for (n=0; n<pCb->maxNumAfCb; n++)
     {
         pAfCb = &pCb->afCb[n];
-        pAfCb->data.nChannels = PAF_DECOP_CB_MAX_NUM_PCM_CH;
+        pAfCb->data.nChannels = ASP_DECOP_CB_MAX_NUM_PCM_CH;
         pAfCb->data.nSamples = decOpFrameLen;
-        for (i=0; i<PAF_DECOP_CB_MAX_NUM_PCM_CH; i++)
+        for (i=0; i<ASP_DECOP_CB_MAX_NUM_PCM_CH; i++)
         {
             pAfCb->data.sample[i] = pPcmBuf;
             memset(pAfCb->data.sample[i], decOpFrameLen, 0);
@@ -178,9 +178,9 @@ Int cbInit(
     for (n=0; n<pCb->maxNumAfCb; n++)
     {
         pAfCb = &pCb->afCb[n];
-        Cache_wb(pAfCb->data.samsiz, PAF_DECOP_CB_MAX_NUM_PCM_CH*sizeof(PAF_AudioSize), Cache_Type_ALLD, 0);
-        Cache_wb(pAfCb->data.sample, PAF_DECOP_CB_MAX_NUM_PCM_CH*sizeof(PAF_AudioData *), Cache_Type_ALLD, 0);
-        for (i=0; i<PAF_DECOP_CB_MAX_NUM_PCM_CH; i++)
+        Cache_wb(pAfCb->data.samsiz, ASP_DECOP_CB_MAX_NUM_PCM_CH*sizeof(PAF_AudioSize), Cache_Type_ALLD, 0);
+        Cache_wb(pAfCb->data.sample, ASP_DECOP_CB_MAX_NUM_PCM_CH*sizeof(PAF_AudioData *), Cache_Type_ALLD, 0);
+        for (i=0; i<ASP_DECOP_CB_MAX_NUM_PCM_CH; i++)
         {
             Cache_wb(pAfCb->data.sample[i], decOpFrameLen*sizeof(PAF_AudioData), Cache_Type_ALLD, 0);
         }
@@ -192,69 +192,7 @@ Int cbInit(
     }
     Cache_wait();
 
-    return PAF_DECOP_CB_SOK;
-}
-
-// Start writes to circular buffer
-Int cbWriteStart(
-    PAF_AST_DecOpCircBuf *pCb   // decoder output circular buffer
-)
-{
-    PAF_AudioFrame *pAfCb;
-    Int8 n;
-    //Int8 i;
-
-    // (***) FL: revisit
-    // Invalidate circular buffer configuration.
-    // NOTE: Probably only a subset of this information needs to be updated.
-    Cache_inv(pCb, sizeof(PAF_AST_DecOpCircBuf), Cache_Type_ALLD, 0);
-    Cache_wait();
-    
-    // Invalidate AF circular buffer
-    Cache_inv(pCb->afCb, pCb->maxNumAfCb*sizeof(PAF_AudioFrame), Cache_Type_ALLD, 0);
-    for (n=0; n<pCb->maxNumAfCb; n++)
-    {
-        pAfCb = &pCb->afCb[n];
-        Cache_inv(pAfCb->data.sample, PAF_DECOP_CB_MAX_NUM_PCM_CH*sizeof(PAF_AudioData *), 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();
-            
-    // update flags
-    pCb->writerActiveFlag = 1;
-    pCb->emptyFlag = 0;
-    
-    // (***) FL: revisit
-    // Write back circular buffer configuration
-    Cache_wb(pCb, sizeof(PAF_AST_DecOpCircBuf), Cache_Type_ALLD, 0);
-    Cache_wait();
-
-    return PAF_DECOP_CB_SOK;
-};
-
-// Stop writes to circular buffer
-Int cbWriteStop(
-    PAF_AST_DecOpCircBuf *pCb   // decoder output circular buffer
-)
-{
-    // Invalidate circular buffer configuration
-    Cache_inv(pCb, sizeof(PAF_AST_DecOpCircBuf), Cache_Type_ALLD, 0);
-    Cache_wait();
-    
-    // update flags
-    pCb->writerActiveFlag = 0;
-    pCb->emptyFlag = 1;
-
-    // (***) FL: revisit
-    // Write back circular buffer configuration
-    Cache_wb(pCb, sizeof(PAF_AST_DecOpCircBuf), Cache_Type_ALLD, 0);
-    Cache_wait();
-    
-    return PAF_DECOP_CB_SOK;
+    return ASP_DECOP_CB_SOK;
 }
 
 // Start reads from circular buffer
@@ -274,7 +212,7 @@ Int cbReadStart(
     Cache_wb(pCb, sizeof(PAF_AST_DecOpCircBuf), Cache_Type_ALLD, 0);
     Cache_wait();
 
-    return PAF_DECOP_CB_SOK;
+    return ASP_DECOP_CB_SOK;
 }
 
 // Stop reads from circular buffer
@@ -294,7 +232,7 @@ Int cbReadStop(
     Cache_wb(pCb, sizeof(PAF_AST_DecOpCircBuf), Cache_Type_ALLD, 0);
     Cache_wait();
 
-    return PAF_DECOP_CB_SOK;
+    return ASP_DECOP_CB_SOK;
 }
 
 // Read audio frame from circular buffer
@@ -319,7 +257,7 @@ Int cbReadAf(
         //  writer is active AND draining circular buffer
         Log_info2("cbReadAf: ERROR: writerActiveFlag=%d, emptyFlag=%d", pCb->writerActiveFlag, pCb->emptyFlag);
         SW_BREAKPOINT; // FL: debug
-        return PAF_DECOP_CB_READ_INVSTATE;
+        return ASP_DECOP_CB_READ_INVSTATE;
     }
 
     if ((pCb->writerActiveFlag == 0) && (pCb->emptyFlag == 0))
@@ -330,7 +268,7 @@ Int cbReadAf(
         //
         cbReadAfMute(pAfRd, pCb->strFrameLen);
         
-        return PAF_DECOP_CB_SOK;
+        return ASP_DECOP_CB_SOK;
     }
         
     if ((pCb->writerActiveFlag == 1))
@@ -350,7 +288,7 @@ Int cbReadAf(
             Cache_wb(pCb, sizeof(PAF_AST_DecOpCircBuf), Cache_Type_ALLD, 0);
             Cache_wait();    
             
-            return PAF_DECOP_CB_READ_UNDERFLOW;
+            return ASP_DECOP_CB_READ_UNDERFLOW;
         }
     }
     
@@ -367,7 +305,7 @@ Int cbReadAf(
         // (***) FL: revisit
         // 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);
+        Cache_inv(pAfCb->data.samsiz, ASP_DECOP_CB_MAX_NUM_PCM_CH*sizeof(PAF_AudioSize), Cache_Type_ALLD, 0);
         for (i=0; i<pAfCb->numPrivateMetadata; i++) //QIN // FL: only invalidate numPrivateMetadata
         {
             //Cache_inv(&pAfCb->pafPrivateMetadata[i], sizeof(PAF_PrivateMetadata), Cache_Type_ALLD, 0); // FL: unnecessary since part of AF
@@ -379,7 +317,7 @@ Int cbReadAf(
         streamMask = pAfRd->fxns->channelMask(pAfRd, pAfCb->channelConfigurationStream);
 
         // Invalidate PCM data
-        for (i = 0; i < PAF_DECOP_CB_MAX_NUM_PCM_CH; i++)
+        for (i = 0; i < ASP_DECOP_CB_MAX_NUM_PCM_CH; i++)
         {
             if ((streamMask >> i) & 0x1)
             {
@@ -403,7 +341,7 @@ Int cbReadAf(
         pAfRd->bsMetadata_offset   = pAfCb->bsMetadata_offset;      /* offset into audio frame for change in bsMetadata_type field */
         
         // read PCM samples
-        for (i = 0; i < PAF_DECOP_CB_MAX_NUM_PCM_CH; i++)
+        for (i = 0; i < ASP_DECOP_CB_MAX_NUM_PCM_CH; i++)
         {
             if ((streamMask >> i) & 0x1)
             {
@@ -480,171 +418,7 @@ Int cbReadAf(
     Cache_wb(pCb, sizeof(PAF_AST_DecOpCircBuf), Cache_Type_ALLD, 0);
     Cache_wait();    
         
-    return PAF_DECOP_CB_SOK;
-}
-
-// Write audio frame to circular buffer
-Int cbWriteAf(
-    PAF_AST_DecOpCircBuf *pCb,  // decoder output circular buffer
-    PAF_AudioFrame *pAfWrt      // audio frame from which to write
-)
-{
-    PAF_AudioFrame *pAfCb;
-    PAF_ChannelMask_HD streamMask;
-    Int8 i;
-    Int16 j;
-
-    // (***) FL: revisit
-    // Invalidate circular buffer configuration.
-    // NOTE: Probably only a subset of this information nexeds to be updated.
-    Cache_inv(pCb, sizeof(PAF_AST_DecOpCircBuf), Cache_Type_ALLD, 0);
-    Cache_wait();
-    
-    if (pCb->readerActiveFlag == 1)
-    {
-        //
-        // Normal case, reader active.
-        // If reader not active, don't write to circular buffer or check OVRflow.
-
-#if 0        
-        if (pCb->cbWriteAfInit == 0)
-        {
-            // Invalidate AF circular buffer
-            Cache_inv(pCb->afCb, pCb->maxNumAfCb*sizeof(PAF_AudioFrame), Cache_Type_ALLD, 0);
-            for (n=0; n<pCb->maxNumAfCb; n++)
-            {
-                pAfCb = &pCb->afCb[n];
-                Cache_inv(pAfCb->data.sample, PAF_DECOP_CB_MAX_NUM_PCM_CH*sizeof(PAF_AudioData *), Cache_Type_ALLD, 0);
-            }
-            Cache_wait();
-
-            pCb->cbWriteAfInit = 1;
-        }
-#endif        
-
-        // check overflow
-        if (pCb->numAfCb >= pCb->maxNumAfCb)
-        {
-            pCb->errOvrCnt++;
-            //SW_BREAKPOINT;
-            Log_info1("cbWriteAf: ERROR: overflow, numAfCb=%d", pCb->numAfCb);
-            return PAF_DECOP_CB_WRITE_OVERFLOW;
-        }
-        
-        // get pointer to current audio frame in circular buffer
-        pAfCb = &pCb->afCb[pCb->afWrtIdx];
-           
-        // write audio frame information updated by decoder
-        pAfCb->sampleDecode = pAfWrt->sampleDecode;
-        PAF_PROCESS_COPY(pAfCb->sampleProcess, pAfWrt->sampleProcess);
-        pAfCb->sampleRate = pAfWrt->sampleRate;
-        pAfCb->sampleCount = pAfWrt->sampleCount;
-        pAfCb->channelConfigurationRequest = pAfWrt->channelConfigurationRequest;
-        pAfCb->channelConfigurationStream = pAfWrt->channelConfigurationStream;
-        // 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) */
-        pAfCb->bsMetadata_offset   = pAfWrt->bsMetadata_offset;      /* offset into audio frame for change in bsMetadata_type field */
-        // write PCM samples
-        streamMask = pAfWrt->fxns->channelMask(pAfWrt, pAfCb->channelConfigurationStream);
-        for (i = 0; i < PAF_DECOP_CB_MAX_NUM_PCM_CH; i++)
-        {
-            if ((streamMask >> i) & 0x1)
-            {
-                for (j = 0; j < pCb->decOpFrameLen; j++)
-                {
-                    pAfCb->data.sample[i][j] = pAfWrt->data.sample[i][j];
-                }            
-                
-                pAfCb->data.samsiz[i] = pAfWrt->data.samsiz[i];
-            }
-        }
-        
-        // Write metadata to circular buffer
-        for (i = 0; i < pAfCb->numPrivateMetadata; i++) // FL: only copy numPrivateMetadata
-        {
-            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)
-        {
-            pCb->afWrtIdx = 0;
-        }
-        
-        // update number of audio frames in circular buffer
-        pCb->numAfCb++;
-
-        // (***) FL: revisit
-        // Write back circular buffer configuration
-        Cache_wb(pCb, sizeof(PAF_AST_DecOpCircBuf), Cache_Type_ALLD, 0);
-        // write back audio frame
-        Cache_wb(pAfCb, sizeof(PAF_AudioFrame), Cache_Type_ALLD, 0);
-        Cache_wb(pAfCb->data.samsiz, PAF_DECOP_CB_MAX_NUM_PCM_CH*sizeof(PAF_AudioSize), Cache_Type_ALLD, 0);
-        // write back PCM data
-        for (i = 0; i < PAF_DECOP_CB_MAX_NUM_PCM_CH; i++)
-        {
-            if ((streamMask >> i) & 0x1)
-            {
-                Cache_wb(pAfCb->data.sample[i], pCb->decOpFrameLen*sizeof(PAF_AudioData), Cache_Type_ALLD, 0);
-            }
-        }
-        
-        // 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); // FL: unnecessary since part of AF
-            Cache_wb(pAfCb->pafPrivateMetadata[i].pMdBuf, pAfCb->pafPrivateMetadata[i].size, Cache_Type_ALLD, 0);
-        }
-        Cache_wait();
-    }  
-    
-    return PAF_DECOP_CB_SOK;
-}
-
-// Get next audio frame to write in circular buffer
-Int cbGetNextWriteAf(
-    PAF_AST_DecOpCircBuf *pCb, // decoder output circular buffer
-    PAF_AudioFrame **ppAfWrt   // audio frame next to be written
-)
-{
-    // get pointer to current audio frame in circular buffer
-    *ppAfWrt = &pCb->afCb[pCb->afWrtIdx];
-    
-    // update audio frame write index
-    pCb->afWrtIdx++;
-    if (pCb->afWrtIdx > pCb->maxNumAfCb)
-    {
-        pCb->afWrtIdx = 0;
-    }    
-    
-    return PAF_DECOP_CB_SOK;
-}
-
-// Output log of circular buffer control variables (debug)
-Int cbLog(
-    PAF_AST_DecOpCircBuf *pCb,
-    Int8 fullLog, 
-    char *locInfo
-)
-{
-    Log_info1("CB: %s", (IArg)locInfo);
-    Log_info3("CB: readerActiveFlag=%d, writerActiveFlag=%d, emptyFlag=%d", pCb->readerActiveFlag, pCb->writerActiveFlag, pCb->emptyFlag);
-    Log_info4("CB: afRdIdx=%d, pcmRdIdx=%d, afWrtIdx=%d, numAfCb=%d", pCb->afRdIdx, pCb->pcmRdIdx, 
-        pCb->afWrtIdx, 
-        pCb->numAfCb);
-    if (fullLog)
-    {
-        Log_info1("CB: maxNumAfCb=%d", pCb->maxNumAfCb);  
-        Log_info2("CB: decOpFrameLen=%d, strFrameLen=%d", pCb->decOpFrameLen, pCb->strFrameLen);
-        //Log_info1("cbWriteInit=%d", pCb->cbWriteAfInit);
-    }
-    
-    return 0;
+    return ASP_DECOP_CB_SOK;
 }
 
 // Generate mute AF on circular buffer read
@@ -670,7 +444,7 @@ static Void cbReadAfMute(
     // compute stream mask
     streamMask = pAfRd->fxns->channelMask(pAfRd, pAfRd->channelConfigurationStream);
     // Clear PCM data
-    for (i = 0; i < PAF_DECOP_CB_MAX_NUM_PCM_CH; i++)
+    for (i = 0; i < ASP_DECOP_CB_MAX_NUM_PCM_CH; i++)
     {
         if ((streamMask >> i) & 0x1)
         {