【转】DM8168添加DSP音频编解码算法--集成现有voice或audio codec
本文根据“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的更多相关文章
- [总结]FFMPEG视音频编解码零基础学习方法--转
ffmpeg编解码学习 目录(?)[-] ffmpeg程序的使用ffmpegexeffplayexeffprobeexe 1 ffmpegexe 2 ffplayexe 3 ffprobeexe ...
- FFMPEG视音频编解码零基础学习方法
在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...
- FFMPEG视音频编解码零基础学习方法-b
感谢大神分享,虽然现在还看不懂,留着大家一起看啦 PS:有不少人不清楚“FFmpeg”应该怎么读.它读作“ef ef em peg” 0. 背景知识 本章主要介绍一下FFMPEG都用在了哪里(在这里仅 ...
- [总结]FFMPEG视音频编解码零基础学习方法
在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...
- 【转】[总结]FFMPEG视音频编解码零基础学习方法
在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...
- 视音频编解码学习工程:AAC格式分析器
=====================================================视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习工 ...
- 视音频编解码学习工程:FLV封装格式分析器
===================================================== 视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习 ...
- FFMPEG视音频编解码零基础学习方法 【荐】
在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频 编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在 ...
- [转载] FFMPEG视音频编解码零基础学习方法
在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...
随机推荐
- hdu 5072 Coprime (容斥)
Problem Description There are n people standing in a line. Each of them has a unique id number. Now ...
- 禁用menu键
发现很多应用中基本不再使用menu键来显示菜单了,而在android studio中创建一个activity时,默认使用了actionBar,就是在右上角会显示三个点的内容,点击会出现Settings ...
- (转)iOS Wow体验 - 第六章 - 交互模型与创新的产品概念(2)
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第六章译文精选的第二部分,其余章节将陆续放出.上一 ...
- 我所理解的设计模式(C++实现)——中介者模式(Mediator Pattern)
概述: 假设我们开发一个图片处理软件,里面肯定包括很多相关功能,比如说剪切,旋转,滤镜,美化等等,而我们这些功能所要处理的对象是固定的,就是我们所显示的那张图片.但是我们不能把所有的功能罗列到一个ta ...
- [转]使用Composer管理PHP依赖关系
简介 现在软件规模越来越大,PHP项目的开发模式和许多年前已经有了很大变化.记得初学PHP那会儿,boblog是一个很好的例子,几乎可以代表 PHP项目的开发模式.当时PHP 5.x以上的版本刚开始流 ...
- the process cannot access the file because it is being used by another process
当在IIS中改动绑定的port号后启动时遇到例如以下错误,表明你的port号已经被占用了 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdmljMDIyOA ...
- [CSAPP笔记][第六章存储器层次结构]
第六章 存储器层次结构 在简单模型中,存储器系统是一个线性的字节数组,CPU能够在一个常数访问每个存储器位置. 虽然是一个行之有效的模型,但没有反应现代系统实际工作方式. 实际上,存储器系统(memo ...
- 英文长单词断行 word-break VS word-wrap
你真的了解word-wrap和word-break的区别吗? 这两个东西是什么,我相信至今还有很多人搞不清,只会死记硬背的写一个word-wrap:break-word;word-break:brea ...
- ASP.NET批量下载服务器端指定目录文件
//遍历服务器指定文件夹下的所有文件 string path = "uploads/Image/"; string serverPath = Server.MapPath(path ...
- 将 varchar 值转换为 JDBC 数据类型 DATE 时发生错误。
问题是: 我是这样解决的 : 网上的 转型方法 并不好使 ,我想了想 可能是由于返回值是String 我 就成功的解决错误了 ..下面是关于原理的讲解肯定方法不唯一 至于错误,的产生,这个肯 ...