diff --git a/pasdk/test_arm/framework/aspDecOpCircBuf_slave.c b/pasdk/test_arm/framework/aspDecOpCircBuf_slave.c
index adf5fcfa906dcc93f7edd5bbf618efd2fd802e97..be5828a57df4739381f43b51d15d4f2861a10ba5 100644 (file)
/*
-Copyright (c) 2016, Texas Instruments Incorporated - http://www.ti.com/
+Copyright (c) 2017, Texas Instruments Incorporated - http://www.ti.com/
All rights reserved.
* Redistribution and use in source and binary forms, with or without
//#include "pafsp.h"
#include "aspDecOpCircBuf_slave.h"
+#include "evmc66x_gpio_dbg.h" // Debug
+
// Initialize circular buffer control
Int cbCtlInit(
PAF_AST_DecOpCircBufCtl *pCbCtl, // decoder output circular buffer control
}
+//Int8 gCbWriteStartCnt=0; // debug
+
// Start writes to circular buffer
Int cbWriteStart(
PAF_AST_DecOpCircBufCtl *pCbCtl, // decoder output circular buffer control
Int8 n;
//Int8 i;
+ //gCbWriteStartCnt++; // debug
+
// Get gate handle
gateHandle = pCbCtl->gateHandle;
// Enter gate
// Get circular buffer base pointer
pCb = &((*pCbCtl->pXDecOpCb)[cbIdx]);
- // (***) 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();
- //Log_info1("cbWriteStart:afCb=0x%04x", (IArg)pCb->afCb); // FL: debug
+ //Log_info1("cbWriteStart:afCb=0x%04x", (IArg)pCb->afCb); // debug
// Invalidate AF circular buffer
Cache_inv(pCb->afCb, pCb->maxNumAfCb*sizeof(PAF_AudioFrame), Cache_Type_ALLD, 0);
// update flags
pCb->writerActiveFlag = 1;
pCb->emptyFlag = 0;
+ //pCb->afLagIdx = 0;
- // (***) FL: revisit
// Write back circular buffer configuration
Cache_wb(pCb, sizeof(PAF_AST_DecOpCircBuf), Cache_Type_ALLD, 0);
Cache_wait();
Cache_inv(pCb, sizeof(PAF_AST_DecOpCircBuf), Cache_Type_ALLD, 0);
Cache_wait();
- //Log_info1("cbWriteStop:afCb=0x%04x", (IArg)pCb->afCb); // FL: debug
+ //Log_info1("cbWriteStop:afCb=0x%04x", (IArg)pCb->afCb); // debug
// 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 ASP_DECOP_CB_SOK;
}
+// debug
+//Int16 gSampleCountBuf[10];
+//Int16 gCalcDeltaSampsBuf[10];
+//Int8 gPrimedFlagCnt=0;
+
+// (***) FL: revisit
// Write audio frame to circular buffer
Int cbWriteAf(
PAF_AST_DecOpCircBufCtl *pCbCtl, // decoder output circular buffer control
// Enter gate
key = GateMP_enter(gateHandle);
- //Log_info2("cbWriteAf:gate enter, gateHandle=0x%04x, key=%d", (IArg)gateHandle, (IArg)key); // FL: debug
+ //Log_info2("cbWriteAf:gate enter, gateHandle=0x%04x, key=%d", (IArg)gateHandle, (IArg)key); // debug
// Get circular buffer base pointer
pCb = &((*pCbCtl->pXDecOpCb)[cbIdx]);
- //Log_info1("cbWriteAf:pCb=0x%04x", (IArg)pCb); // FL: debug
+ //Log_info1("cbWriteAf:pCb=0x%04x", (IArg)pCb); // debug
- // (***) FL: revisit
// Invalidate circular buffer configuration.
- // NOTE: Probably only a subset of this information nexeds to be updated.
+ // 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();
- //Log_info1("cbWriteAf:afCb=0x%04x", (IArg)pCb->afCb); // FL: debug
- //Log_info2("cbWriteAf:pCb->readerActiveFlag=%d, pCb->writerActiveFlag=%d", (IArg)pCb->readerActiveFlag, (IArg)pCb->writerActiveFlag); // FL: debug
+ //Log_info1("cbWriteAf:afCb=0x%04x", (IArg)pCb->afCb); // debug
+ //Log_info2("cbWriteAf:pCb->readerActiveFlag=%d, pCb->writerActiveFlag=%d", (IArg)pCb->readerActiveFlag, (IArg)pCb->writerActiveFlag); // debug
if ((pCb->readerActiveFlag == 1) && (pAfWrt->sampleCount)) //QIN ?
{
}
#endif
- //Log_info2("cbWriteAf:pCb->numAfCb=%d, pCb->maxNumAfCb=%d", (IArg)pCb->readerActiveFlag, (IArg)pCb->maxNumAfCb); // FL: debug
+ //Log_info2("cbWriteAf:pCb->numAfCb=%d, pCb->maxNumAfCb=%d", (IArg)pCb->readerActiveFlag, (IArg)pCb->maxNumAfCb); // debug
// check overflow
- //while (pCb->numAfCb >= pCb->maxNumAfCb); // FL: debug
+ //while (pCb->numAfCb >= pCb->maxNumAfCb); // debug
if (pCb->numAfCb >= pCb->maxNumAfCb)
{
pCb->errOvrCnt++;
// Leave the gate
GateMP_leave(gateHandle, key);
- //Log_info2("cbWriteAf:gate leave, gateHandle=0x%04x, key=%d", (IArg)gateHandle, (IArg)key); // FL: debug
+ //Log_info2("cbWriteAf:gate leave, gateHandle=0x%04x, key=%d", (IArg)gateHandle, (IArg)key); // debug
return ASP_DECOP_CB_WRITE_OVERFLOW;
}
for (i=0; i<pCb->maxAFChanNum; i++)
{
-
pAfCb->data.sample[i] = pPcmBuf;
pPcmBuf += pAfWrt->sampleCount;
pAfCb->data.samsiz[i] = 0;
}
- Cache_inv(pAfCb->data.sample, pCb->maxAFChanNum*sizeof(PAF_AudioData *), Cache_Type_ALLD, 0);
+ Cache_inv(pAfCb->data.sample, pCb->maxAFChanNum*sizeof(PAF_AudioData *), Cache_Type_ALLD, 0); // FL: this is write back and invalidate??
Cache_wait();
if ((pCb->afWrtIdx +1) >= pCb->maxNumAfCb)
{
//Log_info0("cbWriteAf: AF Wrap around **** ");
+ // next audio frame will be audio frame 0
nextWrtIdx = 0;
}else{
+ // next audio frame will be current audio frame + 1
nextWrtIdx = pCb->afWrtIdx + 1;
}
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
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 < pCb->maxAFChanNum; i++)
{
if ((streamMask >> i) & 0x1)
}
}
+ #ifdef CB_RW_OP_CAP_PP // debug
+ if (pCb->cb_opCnt < CB_OP_COUNT_MAX)
+ {
+ if ((pCb->cb_samples_op != NULL) && (pCb->cb_op_owner != NULL))
+ {
+ // log sample count
+ pCb->cb_samples_op[pCb->cb_opCnt] = pAfWrt->sampleCount;
+ pCb->cb_op_owner[pCb->cb_opCnt] = CB_OP_W;
+ // log idxs
+ pCb->cb_afRdIdx[pCb->cb_opCnt] = pCb->afRdIdx;
+ pCb->cb_afWrtIdx[pCb->cb_opCnt] = pCb->afWrtIdx;
+ pCb->cb_numAfCb[pCb->cb_opCnt] = pCb->numAfCb; // numAfCb might not be pointing to this instance
+ pCb->cb_opCnt++;
+ }
+ }
+ #endif
// prepare metadata buffer pointers according to the metadata and buffer sizes
for (i=0; i < pAfWrt->numPrivateMetadata; i++)
}
// Write metadata to circular buffer
- for (i = 0; i < pAfWrt->numPrivateMetadata; i++) // FL: only copy numPrivateMetadata
+ for (i = 0; i < pAfWrt->numPrivateMetadata; i++) // 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);
}
- Cache_inv(pAfCb->pafPrivateMetadata, pAfWrt->numPrivateMetadata*sizeof(PAF_PrivateMetadata *), Cache_Type_ALLD, 0);
+ Cache_inv(pAfCb->pafPrivateMetadata, pAfWrt->numPrivateMetadata*sizeof(PAF_PrivateMetadata *), Cache_Type_ALLD, 0); // FL: this is write back and invalidate??
Cache_wait();
- for (i=0; i<pAfCb->numPrivateMetadata; i++) // FL: only write back numPrivateMetadata
+ for (i=0; i<pAfCb->numPrivateMetadata; i++) // only write back numPrivateMetadata
{
//Log_info4("cbWriteAf: AF: %d nummd: %d offset: %d size: %d ", pCb->afWrtIdx, pAfCb->numPrivateMetadata, pAfCb->pafPrivateMetadata[i].offset, pAfCb->pafPrivateMetadata[i].size);
Cache_wb(pAfCb->pafPrivateMetadata[i].pMdBuf, pAfCb->pafPrivateMetadata[i].size, Cache_Type_ALLD, 0);
Cache_wait();
// update number of audio frames in circular buffer
pCb->numAfCb++;
+
+ // Update CB Lag index
+ //if (pCb->afLagIdx < pCb->afInitialLag)
+ //{
+ // pCb->afLagIdx += 1;
+ //}
+
+ // Update CB primed flag
+ // calculate number of delta samples before
+ 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;
+
+ // debug
+ //gSampleCountBuf[gPrimedFlagCnt] = pAfWrt->sampleCount;
+ //gCalcDeltaSampsBuf[gPrimedFlagCnt] = pCb->deltaSamps;
+ //if (gPrimedFlagCnt < 10)
+ // gPrimedFlagCnt++;
+ }
- // (***) FL: revisit
// Write back circular buffer configuration
Cache_wb(pCb, sizeof(PAF_AST_DecOpCircBuf), Cache_Type_ALLD, 0);
// write back audio frame
}
}
Cache_wait();
+
+ {
+ static Uint8 toggleState = 0;
+ if (toggleState == 0)
+ GPIOSetOutput(GPIO_PORT_0, GPIO_PIN_99);
+ else
+ GPIOClearOutput(GPIO_PORT_0, GPIO_PIN_99);
+ toggleState = ~(toggleState);
+ }
Log_info3("wrote %d samples into AF %d sourceSel: %d", pAfCb->sampleCount, pCb->afWrtIdx, pCb->sourceSel);
- // write back private metadata // QIN
Log_info4("CBWMETA num=%d size=%d offset=%d chrequest=0x%04x", pAfCb->numPrivateMetadata, pAfCb->pafPrivateMetadata[0].size, pAfCb->pafPrivateMetadata[0].offset, pAfCb->channelConfigurationRequest.full);
}
// Leave the gate
GateMP_leave(gateHandle, key);
- //Log_info2("cbWriteAf:gate leave, gateHandle=0x%04x, key=%d", (IArg)gateHandle, (IArg)key); // FL: debug
+ //Log_info2("cbWriteAf:gate leave, gateHandle=0x%04x, key=%d", (IArg)gateHandle, (IArg)key); // debug
return ASP_DECOP_CB_SOK;
}