免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2750 | 回复: 1
打印 上一主题 下一主题

移植g723.1到android ndk [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-20 09:44 |只看该作者 |倒序浏览
   目前在网上存在几种不同的g723.1源码。我从同事肖建林那里拿到了一个可以直接在vc下编译使用的源码包,但是该源码是针对x86使用xmmi优化的。不能用于android的arm平台。后来在网上下载了一个g723的源码和文档包,该文档号称可以在vc和g723下编译通过,网址为:http://www.hackchina.com/cont/136371
   具体步骤:
1、下载该rar压缩包,在windows解压。将解压后文件夹中的.H和.C文件复制到jni/g723子目录中。
2、修改 jni/Android.mk 文件,增加加如下内容:

   LOCAL_C_INCLUDES += $(LOCAL_PATH)/g723/

  
LOCAL_SRC_FILES += g723/lbccodec.c \
                   g723/coder.c \
                   g723/decod.c \
                   g723/lpc.c \
                   g723/exc_lbc.c \
                   g723/lsp.c \
                   g723/tab_lbc.c \
                   g723/util_lbc.c \
                   g723/basop.c \
                   g723/vad.c \
                   g723/cod_cng.c \
                   g723/dec_cng.c \
                   g723/util_cng.c \
                   g723/tame.c

3、编译,发现出错,提示:

In file included from /opt/crystax-ndk-r4/apps/jtmedia/project/jni/g723/lbccodec.c:27:
/opt/crystax-ndk-r4/apps/jtmedia/project/jni/g723/basop.h:13: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Overflow'
/opt/crystax-ndk-r4/apps/jtmedia/project/jni/g723/basop.h:14: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Carry'

   baseop.h 的第 13、14行代码如下:

extern Flag Overflow;
extern Flag Carry;

   分析,这应该是标识符 Flag 未定义的原因。在项目文件中搜索了一下 Flag 的定义,发现在 typedef.h 文件中,针对不同的操作系统和编译器分别给出了不同的 Flag 定义。但是没有给出linux和android操作系统下的 Flag 定义。既然如此,我们自己为android 和 Linux 操作系统增加相应的定义。修改 typedef.h 文件,在

    #elif defined( __sun)

    这一行之前增加如下代码:

//4 lines added by hjx
#elif defined(__GNUC__)
typedef short  Word16;
typedef long  Word32;
typedef int   Flag;

   再次编译,通过。

【注意】
1、__GNUC__ 是 gnu c编译器集的宏定义。但是,不能确定是不是 gnu c 的所有版本中类型都满足上面的定义。这个以后需要进一步确认一下。
关于__GNUC__  的定义,如下:
__GNUC__
__GNUC_MINOR__
__GNUC_PATCHLEVEL__
These macros are defined by all GNU compilers that use the C preprocessor: C, C++, and Objective-C. Their values are the major version, minor version, and patch level of the compiler, as integer constants. For example, GCC 3.2.1 will define __GNUC__ to 3, __GNUC_MINOR__ to 2, and __GNUC_PATCHLEVEL__ to 1. They are defined only when the entire compiler is in use; if you invoke the preprocessor directly, they are not defined.
   http://www.cnblogs.com/sevencat/archive/2004/06/10/14872.html
   也可参考gcc文档。
2、目前所使用的这个g723.1版本,是完全使用整数运算实现的。没有使用到任何浮点运算,这样一来,运算效率一定很低。需要针对arm的多媒体指令做进一步的优化。
  

论坛徽章:
0
2 [报告]
发表于 2011-12-30 17:01 |只看该作者
你好,能否给我发个x86使用xmmi优化的G723.1源码,邮箱:lintclr@126.com,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP