本文根据“How to integrate audio/voice in RPE in EZSDK.pdf”整理,建议读者直接下载,参考原文件。原文件下载链接:

http://download.csdn.net/detail/guo8113/8122945

ps:本文只是参考文档进行定制补充,但目前笔者没有完成移植,仅供参考。

转载请注明:http://blog.csdn.net/guo8113/article/details/40820897

DVR_RDK RPE添加其他音频编码

DM8168中音频算法(DVR-RDK中已经集成了aac的enc、dec)采用RPE(远程程序调用)的机制,该机制的介绍可以参考ti_tools/rpe中的文档,或者参考笔者的博客与论文。

1.更新构建环境变量

/remote-processor-execute/makerules/env.mk

L42:

#####################################################

# Codecs Paths

#####################################################

# AACDEC - AAC Decoder

aaclcdec_PATH =$(EXTERNAL_SW_ROOT)/c674x-aaclcdec_01_41_00_00_elf

aaclcdec_INCLUDE =$(aaclcdec_PATH)/packages

# AACENC - AAC Encoder

aaclcenc_PATH =$(EXTERNAL_SW_ROOT)/c674x_aaclcenc_01_00_01_00_elf

aaclcenc_INCLUDE =$(aaclcenc_PATH)/packages

#

# <Integrator>: Add more codec pathshere.

#

2.添加codec到编译列表:

ti_tools/rpe/remote-processor-execute/src/config/codecs.mk

INCLUDE_CODEC_INTERFACES = aaclcdecaaclcenc

3.更新client配置文件

ti_tools/rpe/remote-processor-execute/src/config/client_config.c

/* Get structure definitions for AACLCAudio Decoder Interface */

#include<ti/sdo/codecs/aaclcdec/iaacdec.h>

#include<ti/sdo/codecs/aaclcenc/imp4aacenc.h>

由于已经集成AAC enc和dec所以使用XDM接口的类已经定义了各一个,如果要同时运行其他codec,可能还需要进行添加。

4.更新server配置文件

ti_tools/rpe/remote-processor-execute/src/config/server_config_c67x.c

(1)模仿const XdmServer_ServerConfig TI_AACDEC_serverConfig{}编写自己的classconfigratiion

(2)更新:

const Rpe_ServerConfig*Rpe_serverConfigArray[] =

{

(const Rpe_ServerConfig *) & TI_AACDEC_serverConfig,

(const Rpe_ServerConfig *) & TI_AACENC_serverConfig,

& Rpe_endServerConfig

};

当然也要包含必要的头文件。

5.修改/dvr_rdk/rules.make

L101行:

# Audio framework (RPE) and Codecs

rpe_PATH        :=$(TI_SW_ROOT)/rpe/remote-processor-execute

aaclcdec_PATH    :=$(TI_SW_ROOT)/codecs/c674x_aaclcdec_01_41_00_00_elf

aaclcenc_PATH    :=$(TI_SW_ROOT)/codecs/c674x_aaclcenc_01_00_01_00_elf_patched

L301:

RPE_BUILD_VARS =ipc_PATH="${ipc_PATH}" \

bios_PATH="${bios_PATH}"\

xdc_PATH="${xdc_PATH}"\

xdais_PATH="${xdais_PATH}"\

syslink_PATH="${syslink_PATH}"\

kernel_PATH="${KERNELDIR}"\

CODESOURCERY_PATH="${CODEGEN_PATH_A8}"\

CGT_ARM_PREFIX="${CSTOOL_PREFIX}"\

CODEGEN_PATH_DSP="${CODEGEN_PATH_DSP}"\

CODEGEN_PATH_DSPELF="${CODEGEN_PATH_DSP}"\

ROOTDIR="${rpe_PATH}"\

aaclcdec_PATH="${aaclcdec_PATH}"\

aaclcenc_PATH="${aaclcenc_PATH}"

L373:

export aaclcdec_PATH

export aaclcenc_PATH

6.添加库

dvr_rdk/makerules/rules_c674.mk

L192:

LIB_PATHS += $(RTSLIB_PATH)  \

$(aaclcdec_PATH)/packages/ti/sdo/codecs/aaclcdec/lib/aacdec_tii_lc_elf.l64P\

$(aaclcenc_PATH)/packages/ti/sdo/codecs/aaclcenc/lib/mp4aacenc_tij_lc_elf.l67

添加包含目录:dvr_rdk/makerules/env.mk

aaclcdec_INCLUDE =$(aaclcdec_PATH)/packages

aaclcenc_INCLUDE =$(aaclcenc_PATH)/packages

7.在ARM侧指定RPE的编译包含路径

dvr_rdk/makerules/includes_a8.mk

L18:

RPE_INC=-I$(rpe_PATH)/include-I$(rpe_PATH)/src/include -I$(aaclcdec_PATH)/packages-I$(aaclcenc_PATH)/packages -I$(xdais_PATH)/packages

8. DVRRDK_03.00.00.00/dvr_rdk/mcfw/src_bios6/cfg/BIOS_c6xdsp.cfg

Program.sectMap["aacEncProgram"]              = "DSP_CODE_MEM";

9.dm8168的DSP和ARM添加库与调用

在DSP里面调用elf格式的lib库

注:lib库需是elf格式的,用ccs5.2可编译elf格式lib库,lib库如何生成具体见1.1.2

1>把Jupitercar.lib拷贝到

/home/DVRRDK/DVRRDK_04.00.00.03/dvr_rdk/mcfw/src_bios6/alg/va/lib

2>rules_c674.mk里添加imglib2_elf.lib所在的路径

在/home/DVRRDK/DVRRDK_04.00.00.03/dvr_rdk/makerules
下打开rules_c674.mk在里面添加:
LIB_PATHS += $(RTSLIB_PATH)  \
             $(fc_INCLUDE)/ti/sdo/fc/ecpy/lib/debug/ecpy.ae674 \
             $(dvr_rdk_PATH)/mcfw/src_bios6/alg/scd/lib/scd.ae674\
             $(dvr_rdk_PATH)/mcfw/src_bios6/alg/va/lib/vlib.ae674\
             $(dvr_rdk_PATH)/mcfw/src_bios6/alg/va/lib/Jupitercar.lib\           
最后一个$(dvr_rdk_PATH)/mcfw/src_bios6/alg/va/lib/Jupitercar.lib\是我添加进去的。

在ARM里面加linux的动态库.so库

注:这个库可以放任意目录中,只要路径加的正确就ok,(dvr_rdk_PATH)=DVRRDK_03.50.00.05\dvr_rdk,(LIB_DIR)=DVRRDK_03.50.00.05\dvr_rdk\lib\ti816x-evm
example:

1>把libcarview.so拷贝到Z:\duth\DVRRDK_03.50.00.05\dvr_rdk\UnitCheck\src

2>看看Z:\duth\DVRRDK_03.50.00.05\dvr_rdk\UnitCheck\src目录下的makefile

include $(dvr_rdk_PATH)/makerules/includes_a8.mk $(dvr_rdk_PATH)/makerules/common_header_a8.mk
includes_a8.mk是添加库的文件
  LIBS= $(LIB_DIR)/dvr_rdk_demo_mcfw_api.a $(MCFW_LIBS) $(AUDIO_LIBS) 
LIBS= $(LIB_DIR)/UnitCheck.a $(MCFW_LIBS) $(AUDIO_LIBS) $(RPE_LIBS) 
看到生成静态库dvr_rdk_demo_mcfw_api.a需要$(MCFW_LIBS) $(AUDIO_LIBS)这2个库
看到生成我们要运行代码的静态库需要$(AUDIO_LIBS) $(RPE_LIBS)这2个库

3>进入includes_a8.mk看到

AUDIO_LIBS=$(linuxdevkit_PATH)/usr/lib/libasound.so.2
MCFW_LIBS=$(LIB_DIR)/dvr_rdk_mcfw_api.a $(LIB_DIR)/dvr_rdk_link_api.a $(LIB_DIR)/dvr_rdk_osa.a $(SYSLINK_LIBS) 
RPE_LIBS=$(rpe_PATH)/lib/lib/a8/debug/rpe.av5T

接下来加自己的库(仿造上面写)
CAR_LIBS=$(dvr_rdk_PATH)/UnitCheck/src/libcarview.so
然后加到自己要生成文件后面

LIBS= $(LIB_DIR)/UnitCheck.a $(MCFW_LIBS) $(AUDIO_LIBS) $(RPE_LIBS) $(CAR_LIBS)

库只有链接的时候才会验证函数的定义。

转自:http://blog.csdn.net/mianhuantang848989/article/details/27224383

【转】DM8168添加DSP音频编解码算法--集成现有voice或audio codec的更多相关文章

  1. [总结]FFMPEG视音频编解码零基础学习方法--转

    ffmpeg编解码学习   目录(?)[-] ffmpeg程序的使用ffmpegexeffplayexeffprobeexe 1 ffmpegexe 2 ffplayexe 3 ffprobeexe ...

  2. FFMPEG视音频编解码零基础学习方法

    在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...

  3. FFMPEG视音频编解码零基础学习方法-b

    感谢大神分享,虽然现在还看不懂,留着大家一起看啦 PS:有不少人不清楚“FFmpeg”应该怎么读.它读作“ef ef em peg” 0. 背景知识 本章主要介绍一下FFMPEG都用在了哪里(在这里仅 ...

  4. [总结]FFMPEG视音频编解码零基础学习方法

    在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...

  5. 【转】[总结]FFMPEG视音频编解码零基础学习方法

    在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...

  6. 视音频编解码学习工程:AAC格式分析器

    =====================================================视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习工 ...

  7. 视音频编解码学习工程:FLV封装格式分析器

    ===================================================== 视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习 ...

  8. FFMPEG视音频编解码零基础学习方法 【荐】

    在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频 编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在 ...

  9. [转载] FFMPEG视音频编解码零基础学习方法

    在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...

随机推荐

  1. java_抽象类应用

    本例子通过一个实例来具体阐述抽象类的应用,首先一个抽象类Person2,里面定义了一些人的共有属性(年龄,姓名),和抽象方法want(),want()方法来具体实现不同的人的需求(学生想要成绩,工人想 ...

  2. poj 1274 The Perfect Stall(二分图匹配)

    Description Farmer John completed his new barn just last week, complete with all the latest milking ...

  3. js获取url传递参数(转的,原作不详)

    这里是一个获取URL带QUESTRING参数的JAVASCRIPT客户端解决方案,相当于asp的request.querystring,PHP的$_GET 函数: <Script languag ...

  4. Collections.sort()

    Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f, ...

  5. ffmpeg + sdl -03 简单音频播放器实现

    没办法,工作中遇到了问题. 目前NEC EMMA的架构如下: 从USB读入文件 -> 文件分析并提取Packet中的Payload Data   -> NEC HANDLE AVTrans ...

  6. [CSAPP笔记][第八章异常控制流][呕心沥血千行笔记]

    异常控制流 控制转移 控制流 系统必须能对系统状态的变化做出反应,这些系统状态不是被内部程序变量捕获,也不一定和程序的执行相关. 现代系统通过使控制流 发生突变对这些情况做出反应.我们称这种突变为异常 ...

  7. KVO的概述的使用

    一,概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知.简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应 ...

  8. WebDAV被启用(转)

    WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1协议的通信协议.它扩展了HTTP 1.1,在GET.POST. ...

  9. .net 判断日期格式yyyy-MM-dd hh:MM:ss的正则表达式

    加上引用: using System.Text.RegularExpressions; /// <summary> /// 检查字符串是否是日期格式        /// </sum ...

  10. Bootstrap新手常见问题

    题记 bootstrap这个开源的UI库确实很方便,用了两日,觉得不错,但也有些问题比较头疼! 主题 1.怎么使用?怎么定制?下面是一个范例,修改了navbar的颜色,重新设置了select控件的默认 ...