From ca72a762b46afd5ac303f5773e0c8bbf3aa9d9f4 Mon Sep 17 00:00:00 2001 From: Frank Livingston Date: Thu, 1 Sep 2016 15:42:12 -0500 Subject: [PATCH] Clean up metadata handling in Dec Op circular buffer. Change initial delay (experiment). --- .../pasdk/common/paf_decOpCircBuf.c | 88 +++++++++---------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/processor_audio_sdk_1_00_00_00/pasdk/common/paf_decOpCircBuf.c b/processor_audio_sdk_1_00_00_00/pasdk/common/paf_decOpCircBuf.c index 12e80a66..dfa8f809 100644 --- a/processor_audio_sdk_1_00_00_00/pasdk/common/paf_decOpCircBuf.c +++ b/processor_audio_sdk_1_00_00_00/pasdk/common/paf_decOpCircBuf.c @@ -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; ipafPrivateMetadata[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; ipafPrivateMetadata[i], sizeof(PAF_PrivateMetadata), Cache_Type_ALLD, 0); - } + // FL: unnecessary since part of AF + //for (i=0; ipafPrivateMetadata[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; ipafPrivateMetadata[i], sizeof(PAF_PrivateMetadata), Cache_Type_ALLD, 0); - } + // FL: unnecessary since part of AF + //for (i=0; ipafPrivateMetadata[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; inumPrivateMetadata; 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; inumPrivateMetadata; 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(); } -- 2.39.2