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 osd buffer change

hi, i use DVRRDK3.0 evm8168 , i want change all the pixel to be 0 in OSD alg to make the screen black, but the screen also displayes what the camera captrues . why ?? 

i changed OSD alg in AlgLink_OsdalgProcessFrame() , as follow

    for(winId=0; winId<pChObj->numWindows; winId++)
    {
        if(!pChObj->osdWinObj[winId].enableWin)
            continue;
        Vps_printf("$$$$$$$$$$$$$$$$$$$$$  enableWin  $$$$$$$$$$$$$$$$$$$$$\n");
        /* YUV422i or YUV420SP - Y-plane processing */

        int i=0,j=0;
        UInt8 *pBufferStart = pFrame->addr[0][0];

        UInt8 *pBuffer;

         for (i= 0; i < pFrameInfo->rtChInfo.height;i++)

        {

         pBuffer =pBufferStart + (i * pFrameInfo->rtChInfo.width);    

                 for (j = 0; j< pFrameInfo->rtChInfo.width/2; j++)  

                         {     

                          *(pBuffer + 0)=0;     

                          *(pBuffer + 1)=0;     

                          *(pBuffer + 2)=0;     

                          *(pBuffer + 3)=0;     

                           pBuffer  += 4;  

                        }

        }
         pSwOsdObj->videoWindowAddr = pFrame->addr[0][0];

................

}

my application code is


/*******************************************************************************
 *                                                                             *
 * Copyright (c) 2009 Texas Instruments Incorporated - http://www.ti.com/      *
 *                        ALL RIGHTS RESERVED                                  *
 *                                                                             *
 ******************************************************************************/

 
#include <demos/link_api_demos/common/chains.h>
#include <mcfw/interfaces/ti_venc.h>
#include <demos/link_api_demos/common/chains_ipcFrames.h> 

static SystemVideo_Ivahd2ChMap_Tbl systemVid_encDecIvaChMapTbl =
{
    .isPopulated = 1,
    .ivaMap[0] =
    {
        .EncNumCh  = 1,
        .EncChList = {0},
        .DecNumCh  = 0,
        .DecChList = {0},
    },
    .ivaMap[1] =
    {
        .EncNumCh  = 0,
        .EncChList = {0},
        .DecNumCh  = 1,
        .DecChList = {0},
    },
    .ivaMap[2] =
    {
        .EncNumCh  = 1,
        .EncChList = {1},
        .DecNumCh  = 1,
        .DecChList = {1},
    },
};

 
  Void Chains_doubleChCapNsfEncDecSwMsDis(Chains_Ctrl *chainsCfg)
  {
   CaptureLink_CreateParams  capturePrm;
   CaptureLink_VipInstParams  *pCaptureInstPrm;
   CaptureLink_OutParams   *pCaptureOutPrm;
  printf("@@@@@@@@@@@@@@@@@@@@@@@ hehe @@@@@@@@@@@@@@@@@@@@@@@\n");
   /* changed by chen longhu */
 
   IpcFramesInLinkRTOS_CreateParams  ipcFramesInDspPrm;
   IpcFramesOutLinkRTOS_CreateParams ipcFramesOutVpssPrm;
 
   AlgLink_CreateParams      dspAlgPrm;
 
   DisplayLink_CreateParams  displayPrm[CHAINS_SW_MS_MAX_DISPLAYS];
   UInt32 captureId, vipInstId;
   UInt32 ipcFramesOutVpssId,ipcFramesInDspId;
   UInt32 ipcBitsOutDspId,ipcBitsInHostId;
   UInt32 dspAlgId;
   UInt32 displayId[CHAINS_SW_MS_MAX_DISPLAYS];
 
   UInt32 i;
   char ch;
 
   CHAINS_INIT_STRUCT(CaptureLink_CreateParams,capturePrm);
   CHAINS_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams,ipcFramesOutVpssPrm);
   CHAINS_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams,ipcFramesInDspPrm);

   CHAINS_INIT_STRUCT(AlgLink_CreateParams ,dspAlgPrm);
   for (i=0; i<CHAINS_SW_MS_MAX_DISPLAYS; i++) {
    CHAINS_INIT_STRUCT(DisplayLink_CreateParams,displayPrm[i]);
   }
   captureId    = SYSTEM_LINK_ID_CAPTURE;
   ipcFramesOutVpssId  = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0;
   ipcFramesInDspId= SYSTEM_DSP_LINK_ID_IPC_FRAMES_IN_0;
 
   dspAlgId= SYSTEM_LINK_ID_ALG_0;
   displayId[0]  = SYSTEM_LINK_ID_DISPLAY_0;
   displayId[1]  = SYSTEM_LINK_ID_DISPLAY_1;
 
   capturePrm.numVipInst     = 2;
   capturePrm.tilerEnable     = FALSE;
   capturePrm.numBufsPerCh    = 16;
   capturePrm.numExtraBufs    = 0;
   capturePrm.maxBlindAreasPerCh   = 0;
   capturePrm.isPalMode     = FALSE;
   capturePrm.enableSdCrop    = FALSE;
   capturePrm.doCropInCapture    = FALSE;
 
   for(i=0; i<capturePrm.numVipInst; i++)
   {
    vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA + 2*i;
    pCaptureInstPrm      = &capturePrm.vipInst[i];
    pCaptureInstPrm->vipInstId    = vipInstId%SYSTEM_CAPTURE_INST_MAX;
    pCaptureInstPrm->videoDecoderId  = SYSTEM_DEVICE_VID_DEC_SII9233A_DRV;
    pCaptureInstPrm->inDataFormat   = SYSTEM_DF_YUV422P;
    pCaptureInstPrm->standard    = chainsCfg->displayRes[i];
    pCaptureInstPrm->numOutput    = 1;
    pCaptureInstPrm->numChPerOutput  = 1;
    pCaptureInstPrm->frameCaptureMode  = FALSE;
    pCaptureInstPrm->fieldsMerged   = FALSE;
    pCaptureOutPrm       = &pCaptureInstPrm->outParams[0];
    pCaptureOutPrm->dataFormat    = SYSTEM_DF_YUV422I_YUYV;
    pCaptureOutPrm->scEnable    = FALSE;
    pCaptureOutPrm->scOutWidth    = chainsCfg->channelConf[i].width;
    pCaptureOutPrm->scOutHeight   = chainsCfg->channelConf[i].height;
    pCaptureOutPrm->outQueId    = 0;
   }
 
   capturePrm.outQueParams[0].nextLink  = ipcFramesOutVpssId;
   System_linkCreate(captureId, &capturePrm, sizeof(capturePrm));
   for (i=0; i<gChains_ctrl.channelNum; i++) {
    chainsCfg->displayRes[i] = capturePrm.vipInst[i].standard;
    Vsys_getResSize(chainsCfg->displayRes[i], &chainsCfg->channelConf[i].width, &chainsCfg->channelConf[i].height);
    Vsys_getResRate(chainsCfg->displayRes[i], &chainsCfg->channelConf[i].frameRate);
 
   }
 
  
   ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkId = captureId;
   ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
   ipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink = displayId[0];
   ipcFramesOutVpssPrm.baseCreateParams.numOutQue = 1;
   ipcFramesOutVpssPrm.baseCreateParams.processLink = ipcFramesInDspId;
 
   ipcFramesOutVpssPrm.baseCreateParams.notifyProcessLink = TRUE;
   ipcFramesOutVpssPrm.baseCreateParams.notifyNextLink = TRUE;
   ipcFramesOutVpssPrm.baseCreateParams.notifyPrevLink = TRUE;
   ipcFramesOutVpssPrm.baseCreateParams.noNotifyMode = TRUE;
  
   //prevLink->processLink->nextLink
   ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkId = ipcFramesOutVpssId;
   ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
   ipcFramesInDspPrm.baseCreateParams.outQueParams[0].nextLink =dspAlgId;
   ipcFramesInDspPrm.baseCreateParams.numOutQue = 1;
 
   ipcFramesInDspPrm.baseCreateParams.notifyPrevLink = TRUE;
   ipcFramesInDspPrm.baseCreateParams.notifyNextLink = TRUE;
   ipcFramesInDspPrm.baseCreateParams.noNotifyMode  = TRUE;
  
  
   dspAlgPrm.enableOSDAlg = TRUE;
   dspAlgPrm.enableSCDAlg = FALSE;
   dspAlgPrm.inQueParams.prevLinkId =ipcFramesInDspId;
   dspAlgPrm.inQueParams.prevLinkQueId = 0;
   dspAlgPrm.outQueParams[0].nextLink =  SYSTEM_LINK_ID_INVALID;//ipcBitsOutDspId;

   AlgLink_OsdChWinParams * chWinPrm = &dspAlgPrm.osdChCreateParams[0].chDefaultParams;
 
   /* set osd window max width and height */
   dspAlgPrm.osdChCreateParams[0].maxWidth  = 320;
   dspAlgPrm.osdChCreateParams[0].maxHeight = 64;
   chWinPrm->chId = 0;
   chWinPrm->numWindows = 1;
   chWinPrm->winPrm[0].enableWin=1;

   Chains_displayCtrlInit(chainsCfg->displayRes);
   System_linkCreate(ipcFramesOutVpssId, &ipcFramesOutVpssPrm, sizeof(ipcFramesOutVpssPrm));
   System_linkCreate(ipcFramesInDspId, &ipcFramesInDspPrm, sizeof(ipcFramesInDspPrm));
   System_linkCreate(dspAlgId, &dspAlgPrm, sizeof(dspAlgPrm));
 
   displayPrm[0].numInputQueues     = 1;
   displayPrm[0].activeQueue      = 0;
   displayPrm[0].inQueParams[0].prevLinkId  = ipcFramesOutVpssId;
   displayPrm[0].inQueParams[0].prevLinkQueId  = 0;
   displayPrm[0].displayRes     = chainsCfg->displayRes[0];
   displayPrm[0].forceFieldSeparatedInputMode  = FALSE;
   System_linkCreate(displayId[0], &displayPrm[0], sizeof(displayPrm[0]));

 
   Chains_memPrintHeapStatus();
   {
    System_linkStart(displayId[0]);
    System_linkStart(captureId);
    System_linkStart(dspAlgId);
    while(1)
    {
     ch = Chains_menuRunTime();
     if(ch=='0')
      break;
     if(ch=='v')
      System_linkControl(captureId, CAPTURE_LINK_CMD_FORCE_RESET, NULL, 0, TRUE);
     if(ch=='p')
      System_linkControl(captureId, CAPTURE_LINK_CMD_PRINT_ADV_STATISTICS, NULL, 0, TRUE);
    }
 
    System_linkStop(captureId);
    System_linkStop(dspAlgId);
    System_linkStop(displayId[0]);

 
    Chains_ipcBitsStop();
   }
 
   System_linkDelete(captureId);
   System_linkDelete(displayId[0]);
   System_linkDelete(dspAlgId);
   System_linkDelete(ipcFramesOutVpssId);
   System_linkDelete(ipcFramesInDspId);

   Chains_displayCtrlDeInit();
 
  }

i find that the OSD has run, because the printf()can be executed in AlgLink_OsdalgProcessFrame()  . why screen is not black but displayes what the camera captrues ?