无网不进  
软硬件开发

1 系统编译

 

① Linux端(A8)编译命令:

make –s dvr_rdk_linux

 

在文件夹

DVRRDK_04.01.00.02/dvr_rdk/bin/ti816x/bin/
生成
dvr_rdk_demo_mcfw_api.out
linux可执行程序,需要将该应用程序移动到下列目录并覆盖:
DVRRDK_04.01.00.02/target/rfs_816x/home/root/ti816x/

 

② Bios6端(DSP)编译命令:

make –s dvr_rdk_bios6

 

在文件夹

DVRRDK_04.01.00.02/dvr_rdk/bin/ti816x/firmware/
生成
dvr_rdk_fw_c6xdsp_1024M_256M.xe674
dvr_rdk_fw_m3video_1024M_256M.xem3
dvr_rdk_fw_m3vpss_1024M_256M.xem3
将这三个文件移动到下列文件夹并覆盖:
DVRRDK_04.01.00.02/target/rfs_816x/home/root/ti816x/firmware/

 

2 运行程序

① 加载驱动

./init.sh : 加载程序运行需要的linux内核模块
./init.sh will load the kernel modules (.ko) needed for the SDK demo 

② 加载M3固件

./load.sh : 加载Video-M3和VPSS-M3的固件
./load.sh will load the executable on the Video-M3 and VPSS-M3 processor and wait until these processor’s have finished their initialization

③ 运行程序

./run.sh : 运行A8端的linux应用程序
./run.sh will run the A8 side application. After running the application you will be presented with a menu of options.

④ 卸载固件

./unload.sh : 卸载Video-M3和VPSS-M3的固件
./unload.sh will send a stop command to both processors and wait until they finish their shutdown sequence. Then the executable will be “unloaded”.

 

3 Sys Link

① 软件框架Link

② Cap–Dis Link demo

[javascript] view plain copy
 
  1. CaptureLink_CreateParams_Init(&capturePrm);  
  2. capturePrm.numVipInst  = 1;  
  3. capturePrm.outQueParams[0].nextLink = gVdisModuleContext.displayId[0];  
  4. capturePrm.tilerEnable   = FALSE;  
  5. capturePrm.enableSdCrop   = FALSE;  
  6.   
  7. pCaptureInstPrm    = &capturePrm.vipInst[0];  
  8. pCaptureInstPrm->vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA;  
  9. pCaptureInstPrm->videoDecoderId    = 0;  
  10. pCaptureInstPrm->inDataFormat    = SYSTEM_DF_YUV422P;  
  11. pCaptureInstPrm->standard    = SYSTEM_STD_1080P_60;  
  12. pCaptureInstPrm->numOutput    = 1;  
  13. pCaptureInstPrm->inScanFormat = SYSTEM_SF_PROGRESSIVE;  
  14. pCaptureOutPrm   = &pCaptureInstPrm->outParams[0];  
  15. pCaptureOutPrm->dataFormat  =SYSTEM_DF_YUV422I_YUYV;  
  16. pCaptureOutPrm->scEnable            = FALSE;  
  17. pCaptureOutPrm->scOutWidth          = 0;  
  18. pCaptureOutPrm->scOutHeight         = 0;  
  19. pCaptureOutPrm->outQueId            = 0;  
  20.   
  21. displayPrm.inQueParams[0].prevLinkId   = gVcapModuleContext.captureId;  
  22. displayPrm.inQueParams[0].prevLinkQueId = 0;  
  23. displayPrm.displayRes   = VSYS_STD_1080P_60;  

③ Cap–OSD–Dis Link (DSP核处理图像)

[javascript] view plain copy
 
  1. CaptureLink_CreateParams_Init(&capturePrm);  
  2. capturePrm.numVipInst                   = 1;  
  3. capturePrm.outQueParams[0].nextLink = ipcFramesOutVpssId;  
  4. capturePrm.tilerEnable              = FALSE;  
  5. capturePrm.enableSdCrop         = FALSE;  
  6. pCaptureInstPrm                     = &capturePrm.vipInst[0];  
  7. pCaptureInstPrm->vipInstId          = SYSTEM_CAPTURE_INST_VIP0_PORTA;  
  8. pCaptureInstPrm->videoDecoderId     = 0;  
  9. pCaptureInstPrm->inDataFormat       = SYSTEM_DF_YUV422P;  
  10. pCaptureInstPrm->standard           = SYSTEM_STD_1080P_60;  
  11. pCaptureInstPrm->numOutput          = 1;  
  12. pCaptureInstPrm->inScanFormat= SYSTEM_SF_PROGRESSIVE;  
  13. pCaptureOutPrm                      = &pCaptureInstPrm->outParams[0];  
  14. pCaptureOutPrm->dataFormat    =SYSTEM_DF_YUV422I_YUYV;  
  15. pCaptureOutPrm->scEnable            = FALSE;  
  16. pCaptureOutPrm->scOutWidth          = 0;  
  17. pCaptureOutPrm->scOutHeight         = 0;  
  18. pCaptureOutPrm->outQueId            = 0;  
  19.   
  20. IpcFramesOutLinkRTOS_CreateParams_Init(&ipcFramesOutVpssPrm);  
  21. ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkId = gVcapModuleContext.captureId;  
  22. ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;  
  23. ipcFramesOutVpssPrm.baseCreateParams.inputFrameRate = 25;  
  24. ipcFramesOutVpssPrm.baseCreateParams.outputFrameRate = 25;  
  25. ipcFramesOutVpssPrm.baseCreateParams.notifyPrevLink = TRUE;  
  26. ipcFramesOutVpssPrm.baseCreateParams.equallyDivideChAcrossOutQues = TRUE;  
  27. ipcFramesOutVpssPrm.baseCreateParams.numOutQue =1;  
  28. ipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink= gVdisModuleContext.displayId[0];  
  29. ipcFramesOutVpssPrm.baseCreateParams.processLink = ipcFramesInDspId;  
  30. ipcFramesOutVpssPrm.baseCreateParams.notifyProcessLink = TRUE;  
  31. ipcFramesOutVpssPrm.baseCreateParams.notifyNextLink = TRUE;  
  32. ipcFramesOutVpssPrm.baseCreateParams.noNotifyMode = FALSE;//TRUE;  
  33.   
  34. IpcFramesInLinkRTOS_CreateParams_Init(&ipcFramesInDspPrm);  
  35. ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkId =ipcFramesOutVpssId;  
  36. ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;  
  37. ipcFramesInDspPrm.baseCreateParams.numOutQue = 1;  
  38. ipcFramesInDspPrm.baseCreateParams.outQueParams[0].nextLink = osdId;  
  39. ipcFramesInDspPrm.baseCreateParams.inputFrameRate = 25;  
  40. ipcFramesInDspPrm.baseCreateParams.outputFrameRate = 25;  
  41. ipcFramesInDspPrm.baseCreateParams.notifyNextLink =TRUE;  
  42. ipcFramesInDspPrm.baseCreateParams.notifyPrevLink = TRUE;  
  43. ipcFramesInDspPrm.baseCreateParams.noNotifyMode = FALSE;  
  44. AlgLink_CreateParams_Init(&osdPrm);  
  45. osdPrm.inQueParams.prevLinkId = ipcFramesInDspId;  
  46. osdPrm.inQueParams.prevLinkQueId = 0;  
  47. osdPrm.enableOSDAlg = TRUE;  
  48. osdPrm.enableSCDAlg = FALSE;  
  49. AlgLink_OsdChWinParams *chWinPrm=&osdPrm.osdChCreateParams[0].chDefaultParams;  
  50. osdPrm.osdChCreateParams[0].maxHeight =64;  
  51. osdPrm.osdChCreateParams[0].maxWidth =320;  
  52. chWinPrm->chId =0 ;  
  53. chWinPrm->numWindows =1;  
  54. chWinPrm->colorKey[0]                   = 0xfa; /* Y */           
  55. chWinPrm->colorKey[1]                   = 0x7e; /* U */           
  56. chWinPrm->colorKey[2]                   = 0x7d; /* V */           
  57. chWinPrm->winPrm[0].startX   = CHAINS_OSD_WIN0_STARTX;         chWinPrm->winPrm[0].startY   = CHAINS_OSD_WIN0_STARTY;  
  58. chWinPrm->winPrm[0].format  = SYSTEM_DF_YUV422I_YUYV;               
  59. chWinPrm->winPrm[0].width    = CHAINS_OSD_WIN_WIDTH;               
  60. chWinPrm->winPrm[0].height   = CHAINS_OSD_WIN_HEIGHT;               
  61. chWinPrm->winPrm[0].lineOffset = CHAINS_OSD_WIN_PITCH;               
  62. chWinPrm->winPrm[0].globalAlpha= CHAINS_OSD_GLOBAL_ALPHA;               
  63. chWinPrm->winPrm[0].transperencyEnable = CHAINS_OSD_TRANSPARENCY;               
  64. chWinPrm->winPrm[0].enableWin=CHAINS_OSD_ENABLE_WIN;  
  65.   
  66. displayPrm.inQueParams[0].prevLinkId    = ipcFramesOutVpssId;  
  67. displayPrm.inQueParams[0].prevLinkQueId = 0;  
  68. displayPrm.displayRes   = VSYS_STD_1080P_60;  

4 DSP 图像算法

① 算法添写位置:

打开mcfw/src_bios6/links_c6xdsp/alg_link/swosd/osdLink_alg.c:
第266行:
pSwOsdObj->videoWindowAddr = pFrame->addr[0][0];
pFrame->addr[0][0]指针即为图像的存储位置
使用方法:
[javascript] view plain copy
 
  1. Uint8 *buff=pFrame->addr[0][0];  
  2. for(i=0;i<1080;i++)  
  3. {  
  4. for(j=0;j<1920;j++)  
  5. {  
  6. *(buff+2*j)=128;  
  7. }  
  8. buff=buff+1920*2;  
  9. }  
该例子简单的修改了每个像素点的Y值。

② 效果测试:

 

posted on 2018-01-10 13:49  无网不进  阅读(229)  评论(0)    收藏  举报