Hi,
I'm using 8168EVM + DVRRDK2.8.
I failed to read file to encode, and my code as follow.
How could I change my code ?
Thank You and Best Regards !
Merry Christmas and Happy New Year !
My code:
static Void Venc_copyVidFrameInfoLink2McFw(VIDEO_FRAMEBUF_S *dstBuf,
VIDFrame_Buf *srcBuf)
{
Int i,j;
OSA_assert(VIDEO_MAX_FIELDS == VIDFRAME_MAX_FIELDS);
OSA_assert(VIDEO_MAX_PLANES == VIDFRAME_MAX_PLANES);
for (i = 0; i < VIDEO_MAX_FIELDS; i++)
{
for (j = 0; j < VIDEO_MAX_PLANES; j++)
{
dstBuf->addr[i][j] = srcBuf->addr[i][j];
dstBuf->phyAddr[i][j] = srcBuf->phyAddr[i][j];
}
}
dstBuf->channelNum = srcBuf->channelNum;
dstBuf->fid = srcBuf->fid;
dstBuf->frameWidth = srcBuf->frameWidth;
dstBuf->frameHeight = srcBuf->frameHeight;
dstBuf->linkPrivate = srcBuf->linkPrivate;
dstBuf->timeStamp = srcBuf->timeStamp;
dstBuf->framePitch[0] = srcBuf->framePitch[0];
dstBuf->framePitch[1] = srcBuf->framePitch[1];
VENC_TRACE_FXN_EXIT("VidFrameInfo:"
"virt[0][0]:%p,"
"phy[0][0]:%p,"
"channelNum:%d,"
"fid:%d,"
"frameWidth:%d,"
"frameHeight:%d,"
"framePitch[0]:%d,"
"framePitch[1]:%d,"
"timeStamp:%d,",
dstBuf->addr[0][0],
dstBuf->phyAddr[0][0],
dstBuf->channelNum,
dstBuf->fid,
dstBuf->frameWidth,
dstBuf->frameHeight,
dstBuf->framePitch[0],
dstBuf->framePitch[1],
dstBuf->timeStamp);
}
/***************************************************************************************************/
static Void Venc_copyVidFrameInfoMcFw2Link(VIDFrame_Buf *dstBuf,
VIDEO_FRAMEBUF_S *srcBuf)
{
Int i,j;
OSA_assert(VIDEO_MAX_FIELDS == VIDFRAME_MAX_FIELDS);
OSA_assert(VIDEO_MAX_PLANES == VIDFRAME_MAX_PLANES);
for (i = 0; i < VIDEO_MAX_FIELDS; i++)
{
for (j = 0; j < VIDEO_MAX_PLANES; j++)
{
dstBuf->addr[i][j] = srcBuf->addr[i][j];
dstBuf->phyAddr[i][j] = srcBuf->phyAddr[i][j];
}
}
dstBuf->channelNum = srcBuf->channelNum;
dstBuf->fid = srcBuf->fid;
dstBuf->frameWidth = srcBuf->frameWidth;
dstBuf->frameHeight = srcBuf->frameHeight;
dstBuf->linkPrivate = srcBuf->linkPrivate;
dstBuf->timeStamp = srcBuf->timeStamp;
dstBuf->framePitch[0] = srcBuf->framePitch[0];
dstBuf->framePitch[1] = srcBuf->framePitch[1];
VENC_TRACE_FXN_EXIT("VidFrameInfo:"
"virt[0][0]:%p,"
"phy[0][0]:%p,"
"channelNum:%d,"
"fid:%d,"
"frameWidth:%d,"
"frameHeight:%d,"
"framePitch[0]:%d,"
"framePitch[1]:%d,"
"timeStamp:%d,",
dstBuf->addr[0][0],
dstBuf->phyAddr[0][0],
dstBuf->channelNum,
dstBuf->fid,
dstBuf->frameWidth,
dstBuf->frameHeight,
dstBuf->framePitch[0],
dstBuf->framePitch[1],
dstBuf->timeStamp);
}
/***************************************************************************************************/
Int32 Venc_putFullVideoFrames(VIDEO_FRAMEBUF_LIST_S *pFrameBufList)
{
VIDEO_FRAMEBUF_S *pSrcBuf;
VIDFrame_Buf *pDstBuf;
VIDFrame_BufList vidBufList;
UInt32 i;
Int status = 0;
VENC_TRACE_FXN_ENTRY("Num bufs put:%d",pFrameBufList->numFrames);
vidBufList.numFrames = pFrameBufList->numFrames;
for (i = 0; i < vidBufList.numFrames; i++)
{
pSrcBuf = &pFrameBufList->frames[i];
pDstBuf = &vidBufList.frames[i];
Venc_copyVidFrameInfoMcFw2Link(pDstBuf,pSrcBuf);
}
if (vidBufList.numFrames)
{
status =
IpcFramesOutLink_putFullVideoFrames(gVencModuleContext.ipcFramesOutHostId,
&vidBufList);
}
VENC_TRACE_FXN_ENTRY("VIDFrame release status:%d",status);
return 0;
}
/***************************************************************************************************/
Int32 Venc_getEmptyVideoFrames(VIDEO_FRAMEBUF_LIST_S *pFrameBufList, UInt32 timeout)
{
VIDFrame_BufList vidBufList;
VIDFrame_Buf *pInBuf;
VIDEO_FRAMEBUF_S *pOutBuf;
UInt32 i;
VENC_TRACE_FXN_ENTRY();
pFrameBufList->numFrames = 0;
vidBufList.numFrames = 0;
IpcFramesOutLink_getEmptyVideoFrames(gVencModuleContext.ipcFramesOutHostId,
&vidBufList);
pFrameBufList->numFrames = vidBufList.numFrames;
for (i = 0; i < vidBufList.numFrames; i++)
{
pOutBuf = &pFrameBufList->frames[i];
pInBuf = &vidBufList.frames[i];
Venc_copyVidFrameInfoLink2McFw(pOutBuf,pInBuf);
}
VENC_TRACE_FXN_EXIT("NumFrames Received:%d",pFrameBufList->numFrames);
return 0;
}
/***************************************************************************************************/
static Void *Venc_ipcFramesSendFxn(Void *prm)
{
VIDEO_FRAMEBUF_LIST_S bufList;
FILE *stream;
stream = fopen("test.yuv", "wb");
Int status;
Int printStatsInterval = 0;
OSA_semWait(&thrObj->framesOutNotifySem,OSA_TIMEOUT_FOREVER);
while (FALSE == thrObj->exitFramesOutThread)
{
OSA_waitMsecs(16);
status = Venc_getEmptyVideoFrames(&bufList,0);
OSA_assert(0 == status);
if (bufList.numFrames)
{
for (i = 0; i < bufList.numFrames; i++)
{
fread(bufList.frames[i].addr[0][0],sizeof(char),3110400,stream);
status = Venc_putFullVideoFrames(&bufList);
OSA_assert(0 == status);
}
printStatsInterval++;
}
}
return NULL;
}