DSP

CCS调试XDAIS算法

2019-07-13 15:04发布

1        使用eXpressDSP Component Wizard生成算法

为了简化xDAIS算法的开发步骤,我们可以使用eXpressDSP Component Wizard这个工具,在安装之后,它会出现在CCS的Tool菜单栏中,使用非常方便。eXpressDSPComponent Wizard通过图形化的配置界面引导用户一步一步地完成一个xDAIS算法模块的设计。在配置完成之后,eXpressDSP Component Wizard会生成所有的源文件、头文件以及测试文件,在用户添加上自己的算法代码之后可以很方便地进行测试。 使用eXpressDSPComponent Wizard可以使用户不用过多关注xDAIS算法标准而专注于自己的算法开发,几乎所有与算法标准相关的问题都有eXpressDSP Component Wizard自动完成了,所以,使用eXpressDSPComponent Wizard会大大缩短算法开发时间。

1.1  安装eXpressDSPComponent Wizard

1,首先,需要下载eXpressDSPComponent Wizard这个软件,下载的地址为https://www-a.ti.com/downloads/sds_support/targetcontent/XDAIS/xdais_4_0/ti_xdais_v4.0d_setup.exe(需要使用TI账户)。 2, eXpressDSPComponent Wizard的默认的安装地址为c: xdaisxdais_4.0d,安装完成之后,需要修改安装目录下的config.gmk文件,将其中的CCS安装路径和BIOS安装路径修改为自己的安装路径。修改时需要注意的是这里使用左斜杠,而不是windows系统中使用的右斜杠。   # Define the full path of the root directory in which DSP/BIOS was installed. # For BIOS 4.90 users, the CCS installation directory is the value needed # by the build system. For BIOS 5.20 users, the BIOS installation directory # is the required value. # BIOS_INSTALL_DIR = C:/CCStudio_v3.1/ # BIOS_INSTALL_DIR = C:/bios_5_20/ BIOS_INSTALL_DIR = C:/CCStudio_v3.3/bios_5_31_02   # Define the full path of the CCS installation # CCS_INSTALL_DIR = C:/CCStudio_v3.1/ CCS_INSTALL_DIR = C:/CCStudio_v3.3   3,如果eXpressDSPComponent Wizard安装路径不是使用默认路径,那么,还需要修改config.gmk文件中的XDAIS_INSTALL_DIR变量为自己所使用的安装路径。   # Define the full path of the xdais installation directory XDAIS_INSTALL_DIR = C:/xdais/xdais_4.0d/ XDAIS_INSTALL_DIR = C:/CCStudio_v3.3/xdais_4.0d   4, 完成以上步骤之后,启动CCS,就可以在菜单栏中看到相关选项。   

1.2  配置eXpressDSPComponent Wizard

1, 在菜单栏中启动ComponentWizard Control,出现图形配置界面,我们需要新建xDAIS算法,所以选择 New。   2,接下来,选择CPU架构。DM6467的CPU架构是C64x,字节顺序为小端模式。   3,设置算法模块的名字,提供者以及相关备注信息。   4,设置算法的输入输出参数,暂时我们的算法没有使用任何参数,设置为0。   5,设置算法的内存需求,需要将其中的Space属性修改为IALG_EXTERNAL。
6,设置用户函数和相关参数。   7,点击图中的“Add”按钮,设置函数名为process,返回值为XDAS_Int32,参数个数为4,。   8,设置四个参数的名称依次分别为inBufs,outBufs,inArgs和outArgs,数据类型都为XDAS_Int32 *。   9,下一步点击“next”,然后设置合适路径并点击图中的“Generate Code”。   至此,一个xDAIS算法模块就已经生成了,下一步就是添加自定义的算法,然后进行测试。  
 

2        添加EMCV

接下来,将预先已经修改好的EMCV文件添加到生成的工程中,并修改process函数,加入自定义的算法。修改过后的process函数为:   XDAS_Int32 VIDENCCOPY_TI_process(IVIDENCCOPY_Handle handle, XDAS_Int32 * inBufs, XDAS_Int32 * outBufs, XDAS_Int32 * inArgs, XDAS_Int32 * outArgs) {     VIDENCCOPY_TI_Obj *VIDENCCOPY = (Void *)handle;          CvSize size; // pal frame, 422, YUV422 semi-planar          CvPoint point1, point2; // draw a rectangle in the middle of an image          XDAS_UInt8 * pYUV = (XDAS_UInt8 *) inBufs;          XDAS_UInt8 * pRGB = (XDAS_UInt8 *)outBufs;          IplImage* img;          CvScalar color = CV_RGB(0, 255, 0); // green            size.height = 576;          size.width = 720;          point1.x = 0;//size.width / 2 - 50;          point1.y = 0;//size.height / 2 - 50;          point2.x = size.width / 2 + 50;          point2.y = size.height / 2 + 50;                   YUV422_C_RGB(pYUV, pRGB, size.height, size.width);          img = cvCreateImage(size, IPL_DEPTH_8U, 3);          cvSetData(img, pRGB, size.width * 3);          cvRectangle(img, point1, point2, color, CV_AA, 8, 0);          RGB_C_YUV422((unsigned char *)img->imageData, pYUV, size.height, size.width);          pRGB = pYUV;            cvReleaseImageHeader(&img);          cvReleaseImage(&img);     return((XDAS_Int32)0); }   接下来,修改测试程序的main函数。   #include #include #include "videnccopy.h" #include "videnccopy_ti.h"   void main(){     VIDENCCOPY_Handle  handle;     IVIDENCCOPY_Fxns   fxns;     VIDENCCOPY_Params  params;            unsigned char * inBufs, * outBufs;       fxns = VIDENCCOPY_TI_IVIDENCCOPY;     params = VIDENCCOPY_PARAMS;            if((inBufs = (unsigned char *)calloc(720 * 576 * 2, sizeof(unsigned char))) == NULL) printf("No enough memory to allocate buffer. ");            if((outBufs = (unsigned char *)calloc(720 * 576 * 3, sizeof(unsigned char))) == NULL) printf("No enough memory to allocate buffer. ");       VIDENCCOPY_init();     if((handle = VIDENCCOPY_create(&fxns, ¶ms)) != NULL){       VIDENCCOPY_process(handle, (XDAS_Int32 *)inBufs, (XDAS_Int32 *)outBufs, NULL, NULL);       VIDENCCOPY_delete(handle);     }     VIDENCCOPY_exit(); }