Hi ,
I'm using 8168EVM + DVRRDK2.8,and a part of my code as follow.When i changed Time1 to 16 ,the display droped frames.What could i do to decode 1080P60 successfully?
Thanks!
Best Regards!
thread1:
#define inFile "/opt/dvr_rdk/ti816x/data/1080P60/1080P60_1.h264"
void FilerdThread_function(void)
{
FILE *stream;
stream = fopen(inFile,"rb");
int RecDataFlag = 0;
int i = 0;
while(i < 200)
{
fread(RDataVirAddr,sizeof(char),BUF_SIZE[i],stream);
RecDataFlag = 1;
if(*vdec_Config.Valid != 0)
{
errorCount++;
}
vdec_Config.FrameSize = &BUF_SIZE[i];
vdec_Config.Valid = &RecDataFlag;
memcpy(vdec_Config.VirtualAddr,RDataVirAddr,BUF_SIZE[i]);
OSA_waitMsecs(32); //Time1
i ++;
}
pthread_exit(0);
}
thread2:
static Void *VdecVdis_bitsRdSendFxn(Void * prm)
{
VCODEC_BITSBUF_LIST_S emptyBufList;
UInt32 resId;
// VDEC_BUF_REQUEST_S reqInfo;
Int printStatsInterval = 0;
OSA_semWait(&vdec_Config.thrStartSem,OSA_TIMEOUT_FOREVER);
while (FALSE == vdec_Config.thrExit)
{
OSA_waitMsecs(MCFW_IPCBITS_SENDFXN_PERIOD_MS); //Time2 MCFW_IPCBITS_SENDFXN_PERIOD_MS = 8
//OSA_waitMsecs(16);
if(*vdec_Config.Valid)
{
VdecVdis_bitsRdGetEmptyBitBufs(&emptyBufList);
VdecVdis_bitsRdReadData(&emptyBufList,resId);
VdecVdis_bitsRdSendFullBitBufs(&emptyBufList);
*vdec_Config.Valid = 0;
}
printStatsInterval++;
}
return NULL;
}
static Void VdecVdis_bitsRdGetEmptyBitBufs(VCODEC_BITSBUF_LIST_S *emptyBufList)
{
VDEC_BUF_REQUEST_S reqInfo;
UInt32 i;
emptyBufList->numBufs = 0;
// require 2 buffers for each channel
reqInfo.numBufs = 1;
reqInfo.reqType = VDEC_BUFREQTYPE_CHID;
for (i = 0; i < reqInfo.numBufs ; i++)
{
reqInfo.u[i].chNum = i;
}
Vdec_requestBitstreamBuffer(&reqInfo, emptyBufList, 0);
}
static Void VdecVdis_bitsRdReadData(VCODEC_BITSBUF_LIST_S *emptyBufList,UInt32 resId)
{
VCODEC_BITSBUF_S *pEmptyBuf;
UInt32 i;
for (i = 0; i < emptyBufList->numBufs; i++)
{
pEmptyBuf = &emptyBufList->bitsBuf[i];
VdecVdis_bitsRdFillEmptyBuf(pEmptyBuf);
VdecVdis_setFrameTimeStamp(pEmptyBuf);
pEmptyBuf->seqId = Demo_displayGetCurSeqId();
}
}
static void VdecVdis_bitsRdFillEmptyBuf(VCODEC_BITSBUF_S *pEmptyBuf)
{
//int statHdr, statData;
int curCh;
//UInt32 test;
curCh = pEmptyBuf->chnId;
pEmptyBuf->filledBufSize = *vdec_Config.FrameSize;
printf("\r\n pEmptyBuf->filledBufSize = %d cnt2 = %d",pEmptyBuf->filledBufSize,cnt2);
memcpy(pEmptyBuf->bufVirtAddr, vdec_Config.VirtualAddr, pEmptyBuf->filledBufSize);
cnt2 ++;
}
static Void VdecVdis_bitsRdSendFullBitBufs( VCODEC_BITSBUF_LIST_S *fullBufList)
{
if (fullBufList->numBufs)
{
Vdec_putBitstreamBuffer(fullBufList);
}
}