移植AAC解码库FAAD2到android

aac是针对音频 进行压缩的一种算法 该编码优点很多。音质好 支持的采样率 声道都很多。在android上使用非常常见


之前使用ffmepeg 1.1的decode_audio4这个函数 解码有误 双声道16位 居然解码成单声道32位 (nb_sample_fm=8) 

没找到好的解决方法 (据说换老版本的ffmpeg0.5可以解决 )

之后有尝试提炼opcore 中的aac decode 发现太复杂

再之后尝试使用OPSLes 但是 居然在源代码里面 有个结构体定义的bug 导致无法编译 不得不移植faad2


整个过程:1:下载源代码

2:使用NDK编译

3:编写JNI测试函数,使用aac文件测试效果。




1:http://www.audiocoding.com/downloads.html 下载2.7

FAAD2 Source Version 2.7 ZIP Package
到一个android工程下新建一个jni目录  解压到此处

目录结构

---jni

    |---faad2

             |-----aacDe

             |----libfaad

            .

            .

            .

    我们之关心libfaad 和include这两个文件夹


2:编写mk脚本

在jni目录下编写Android.mk文件,内容如下

LOCAL_PATH := $(call my-dir)
FAAD2_TOP := $(LOCAL_PATH)/faad2
include $(CLEAR_VARS)
include $(FAAD2_TOP)/libfaad/Android.mk  

LOCAL_C_INCLUDES := 		\
	$(LOCAL_PATH)		\
	$(FAAD2_TOP)/android	\
	$(FAAD2_TOP)/include	\
	$(LOCAL_PATH)/codebook
在/jni/faad2/libfaad/编写Android.mk 内容如下

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:=bits.c  	\
		cfft.c  	\
		decoder.c 	\
		drc.c     	\
	    drm_dec.c 	\
		error.c 	\
		filtbank.c 	\
		ic_predict.c 	\
		is.c 		\
		lt_predict.c 	\
		mdct.c	 	\
		mp4.c 		\
		ms.c 		\
		output.c 	\
		pns.c 		\
		ps_dec.c 	\
		ps_syntax.c 	\
		pulse.c 	\
		specrec.c 	\
		syntax.c 	\
		tns.c 		\
		hcr.c 		\
		huffman.c 	\
		rvlc.c 		\
		ssr.c 		\
		ssr_fb.c 	\
		ssr_ipqf.c 	\
		common.c 	\
		sbr_dct.c 	\
		sbr_e_nf.c 	\
		sbr_fbt.c 	\
		sbr_hfadj.c 	\
		sbr_hfgen.c 	\
		sbr_huff.c 	\
		sbr_qmf.c 	\
		sbr_syntax.c 	\
		sbr_tf_grid.c 	\
		sbr_dec.c 	


LOCAL_MODULE:=faad
LOCAL_C_INCLUDES := 		\
	$(LOCAL_PATH)		\
	$(FAAD2_TOP)/android	\
	$(FAAD2_TOP)/include	\
	$(LOCAL_PATH)/codebook

LOCAL_CFLAGS:=		\
	-DHAVE_CONFIG_H

include $(BUILD_SHARED_LIBRARY)

最后在/jnifaa
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值