移植EMCV到DM6467(3)——CCS调试XDAIS算法

 

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:\ xdais\xdais_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,就可以在菜单栏中看到相关选项。

 移植EMCV到DM6467(3)——CCS调试XDAIS算法_第1张图片 

1.2  配置eXpressDSPComponent Wizard

1, 在菜单栏中启动ComponentWizard Control,出现图形配置界面,我们需要新建xDAIS算法,所以选择 New。

 移植EMCV到DM6467(3)——CCS调试XDAIS算法_第2张图片

2,接下来,选择CPU架构。DM6467的CPU架构是C64x,字节顺序为小端模式。

 移植EMCV到DM6467(3)——CCS调试XDAIS算法_第3张图片

3,设置算法模块的名字,提供者以及相关备注信息。

 移植EMCV到DM6467(3)——CCS调试XDAIS算法_第4张图片

4,设置算法的输入输出参数,暂时我们的算法没有使用任何参数,设置为0。

 移植EMCV到DM6467(3)——CCS调试XDAIS算法_第5张图片

5,设置算法的内存需求,需要将其中的Space属性修改为IALG_EXTERNAL。

移植EMCV到DM6467(3)——CCS调试XDAIS算法_第6张图片

6,设置用户函数和相关参数。

 移植EMCV到DM6467(3)——CCS调试XDAIS算法_第7张图片

7,点击图中的“Add”按钮,设置函数名为process,返回值为XDAS_Int32,参数个数为4,。

 移植EMCV到DM6467(3)——CCS调试XDAIS算法_第8张图片

8,设置四个参数的名称依次分别为inBufs,outBufs,inArgs和outArgs,数据类型都为XDAS_Int32 *。

 移植EMCV到DM6467(3)——CCS调试XDAIS算法_第9张图片

9,下一步点击“next”,然后设置合适路径并点击图中的“Generate Code”。

 移植EMCV到DM6467(3)——CCS调试XDAIS算法_第10张图片

至此,一个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.\n");

 

         if((outBufs = (unsigned char *)calloc(720 * 576 * 3, sizeof(unsigned char))) == NULL)

printf("No enough memory to allocate buffer.\n");

 

    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();

}

 

添加完成之后,编译运行,正常。

你可能感兴趣的:(DaVinci,OpenCV)