- 论坛徽章:
- 0
|
目前在网上存在几种不同的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的多媒体指令做进一步的优化。
|
|