maomao194313

始学习DavinciDM6446,首先就要知道Davinci软件是如何架构的。

    三个--codecs,servers,apps
         算法,算法服务器,应用
  codecs就是处理各种数据信号的算法程序,是不能单独成为程序的,它是以库的形式提供给,servers,apps。
  servers是dsp可以运行的程序(包括操作系统,就是算法的dsp端的执行体包括dsp/bios)
  Apps是arm端linux操作系统下的一个应用程序,也就是使用算法的应用。

    还有一些其他的模块,如底层还有dsplink(dsp,arm多核通信模块),VISA(算法调用接口模块)CMEM模块(连续块内存分配模块),LPM(电源管理模块)。

 

    架构流程:

1.算法工程师负责编写符合XDAIS的算法,并将算法封装成库如*.a64P相当于lib。

2.服务器集成工程师整合不同的组件(如DSP/BIOS,框架结构,Link驱动,Codec引擎等)生成一个称为Codec Server的DSP端可执行代码*.64P相当于.out,支持远端的Codec引擎。

3.引擎集成工程师定义各种引擎配置。

4.应用程序创建者使用Codec引擎API编写应用程序。

 

    运行机制:

    当程序编译完成后,应该要有两个程序,一个是在arm端运行的程序比如*.x470MV,dsp端运行程序*.x64p.

    然后还要有各种驱动dsplinkk.ko(多核通信驱动),CMEM.ko(连续内存分配驱动,因为dsp要和arm共享一段内存来通信,而arm端一般跑linux,是虚拟内存,必须要一个机制分配连续的一致性内存),LPM.ko(电源管理模块)。

    当我们在linux执行./*.x470MV时,linux加载这个程序并运行,这个应用程序会调用engine_create创建一个算法引擎,这个函数的实际效果是将*.x64p下载到内存指定地址,然后给dsp发相关命令,从指定地址启动,从而dsp程序运行起来,当arm应用程序要和arm端通信时就直接操作dsplink驱动文件,即可达到通信的目的,不过一般程序员只需使用标准的VISA Api来操作,这些api会帮你和dsp端通信。

 

Davinci软件架构——Codecs

  

 一.Codecs

进入
  jerry@jerry-laptop:~/dvsdk_3_00_01_42/codec_engine _2_24/examples/ti/sdo/ce/examples/codecs$ ls
  auddec1_copy imgdec1_copy package.xdc universal_copy videnc1_copy
  auddec1_ires imgdec_copy scale vidanalytics_copy videnc_copy
  auddec_copy imgenc1_copy sphdec1_copy viddec1_copy vidtranscode_copy
  audenc1_copy imgenc_copy sphdec_copy viddec2_copy
  audenc_copy makefile sphenc1_copy viddec2split_copy
  g711 package sphenc_copy viddec_copy
  我们可以看到已经有很多算法了
  我们看其中一个:
  jerry@jerry-laptop:~/dvsdk_3_00_01_42/codec_engine _2_24/examples/ti/sdo/ce/examples/codecs/viddec_cop y$ ls
  lib package.bld viddec_copy.c VIDDEC_COPY.xdc
  makefile package.xdc viddec_copy_ti.h VIDDEC_COPY.xs
  package package.xs viddec_copy_ti_priv.h
  可以看出,一个算法有
  1.makefile文件,我们编译算法执行make的时候就是使用的makefile.
  2.viddec_copy_ti_priv.h,viddec_copy_ti.h,viddec_copy_ti.h是算法的源代码
  3.Lib目录是编译后生成的库放在这个文件夹里
  jerry@jerry-laptop:~/dvsdk_3_00_01_42/codec_engine _2_24/examples/ti/sdo/ce/examples/codecs/viddec_cop y/lib$ ls
  viddec_copy.a470uC viddec_copy.a64P viddec_copy.a674 viddec_copy.a86U viddec_copy.av4TCE viddec_copy.av5T
  可以看到有各个平台的库文件
  4.package文件夹是存放编译过程的中间文件
5.package.bld,package.xdc ,package.xs,*.xs,*.xdc     是配置文件,xdc能够识别的配置文件

 package.bld   bld就是build的意思,所以这个文件是和编译配置相关的,比如是debug,还是release版本,源文件包包含哪些,以及要编译的目标平台版本,x86,linux,C64P,还是 MVARM9

这个目标平台的配置来自config.bld文件,这个文件位于CE_INSTALL_DIR/examples下,你可以修改来达到定制,这里面默认是从xdcpath.mak文件里配置读取的
  var SRCS = ["viddec_copy"];
  for (var i = 0; i < Build.targets.length; i++) {
  var targ = Build.targets[i];
  print("building for target " + targ.name + " ...");
   Pkg.addLibrary("lib/viddec_copy", targ).addObjects(SRCS); } 这个就是生成各个平台的库 
 
package.xdc.
  就是静态属性配置文件,比如算法的名称,依赖项--包和配置等文件
  requires ti.sdo.ce.video;
  依赖这个包
  package ti.sdo.ce.examples.codecs.viddec_copy {
  module VIDDEC_COPY;
  }
  上面这个语句说明这个算法的包所在路径是"ti.sdo.ce.examples.codecs.viddec_copy” 它包含唯一的一个模块"VIDDEC_COPY",这个其实想当于告诉xdc会包含module的xdc,xs,这里是VIDDEC_COPY.xdc,VIDDEC_COPY.xs配置文件.

VIDDEC_COPY.xdc.

 

     具体算法的静态配置文件,这个文件名字必须匹配package.xdc中module的名字。

             包括这个算法的接口类型,实现。

           metaonly module VIDDEC_COPY inherits ti.sdo.ce.video.IVIDDEC

         {

             override readonly config String ialgFxns = "VIDDECCOPY_TI_VIDDECCOPY";

         }

 

inherits ti.sdo.ce.video.IVIDDEC,这个表明这个算法是一个VSIA中的视频解码算法。

ialgFxns = "VIDDECCOPY_TI_VIDDECCOPY";

表明这个算法的在代码的变量名称是 "VIDDECCOPY_TI_VIDDECCOPY",用来向外面导出算法实现函数集变量。

VIDDEC_COPY.xs.

 

这个定义了这个算法

的一些动态属性,必须实现.xdc中接口的方法。比如堆栈的大小。

function getStackSize(prog)

{

    if (verbose) {

        print("getting stack size for " + this.$name

            + " built for the target " + prog.build.target.$name

            + ", running on platform " + prog.platformName);

    }

 

    return (1024);

}

 

 

function getDaramScratchSize(prog)

{

    if (verbose) {

        print("getting DARAM scratch size for " + this.$name

            + " built for the target " + prog.build.target.$name

            + ", running on platform " + prog.platformName);

    }

 

    return (0);

}

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-03
  • 2021-12-28
  • 2021-09-06
  • 2021-11-01
  • 2021-08-08
猜你喜欢
  • 2021-08-05
  • 2021-06-11
  • 2022-12-23
  • 2022-12-23
  • 2021-05-16
  • 2021-05-02
  • 2021-04-11
相关资源
相似解决方案