This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

About file encode using DVRRDK2.8

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;
}