android 编译libjpeg
来源:互联网 发布:mysql 自定义函数 编辑:程序博客网 时间:2024/06/05 03:53
之前需要将yuv转换为jpg图像,查看网上说libjpeg-turbo比libjpeg快2-3倍,但是在android手机上实践了一下,需要40-60个ms,这个虽然比以前的300ms好多了,但是还是不能满足我的要求,进一步查看了网上信息,libjpeg-turbo是为x86和x86-64进行优化的使用了SIMD指令,而手机上不支持,所以需要在试验一下libjpeg的需要。下面是我的编译步骤:
1、先到官网上下载源码http://www.ijg.org/files/jpegsr9.zip 最新的是jpegsr9
2、然后加压,生成jpeg-9,进入并创建jni目录,将里面的内容都拷贝到jni里面
3、生成配置文件,在jni目录下面创建config.sh文件,然后在里面添加:
NDK=/opt/android-ndk-r8dPLATFORM=$NDK/platforms/android-8/arch-arm/PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86CC=$PREBUILT/bin/arm-linux-androideabi-gcc./configure --prefix=/home/jpeg-9/jni/dist --host=arm CC="$CC --sysroot=$PLATFORM"4、然后改变config.sh的权限,并执行,得到配置文件:
chmod 775 config.shsh config.sh
5、生成Android.mk文件,内容如下:
LOCAL_PATH := $(my-dir)include $(CLEAR_VARS)# From autoconf-generated MakefileLOCAL_MODULE := libjpegLOCAL_ARM_MODE=armLOCAL_SRC_FILES := \ jaricom.c \ jcapimin.c \ jcapistd.c \ jcarith.c \ jccoefct.c \ jccolor.c \ jcdctmgr.c \ jchuff.c \ jcinit.c \ jcmainct.c \ jcmarker.c \ jcmaster.c \ jcomapi.c \ jcparam.c \ jcprepct.c \ jcsample.c \ jctrans.c \ jdapimin.c \ jdapistd.c \ jdarith.c \ jdatadst.c \ jdatasrc.c \ jdcoefct.c \ jdcolor.c \ jddctmgr.c \ jdhuff.c \ jdinput.c \ jdmainct.c \ jdmarker.c \ jdmaster.c \ jdmerge.c \ jdpostct.c \ jdsample.c \ jdtrans.c \ jerror.c \ jfdctflt.c \ jfdctfst.c \ jfdctint.c \ jidctflt.c \ jidctfst.c \ jidctint.c \ jquant1.c \ jquant2.c \ jutils.c \ jmemmgr.c \ jmemnobs.cLOCAL_C_INCLUDES := $(LOCAL_PATH)LOCAL_CFLAGS :=-O3 -fstrict-aliasing -fprefetch-loop-arrays -DANDROID \ -DANDROID_TILE_BASED_DECODE -DENABLE_ANDROID_NULL_CONVERTinclude $(BUILD_SHARED_LIBRARY)
6、运行ndk-build,结果如下:
root@zhangjie:/home/jpeg-9/jni# ndk-buildCompile arm : jpeg <= jaricom.cCompile arm : jpeg <= jcapimin.cCompile arm : jpeg <= jcapistd.cCompile arm : jpeg <= jcarith.cCompile arm : jpeg <= jccoefct.cCompile arm : jpeg <= jccolor.cCompile arm : jpeg <= jcdctmgr.cCompile arm : jpeg <= jchuff.cCompile arm : jpeg <= jcinit.cCompile arm : jpeg <= jcmainct.cCompile arm : jpeg <= jcmarker.cCompile arm : jpeg <= jcmaster.cCompile arm : jpeg <= jcomapi.cCompile arm : jpeg <= jcparam.cCompile arm : jpeg <= jcprepct.cCompile arm : jpeg <= jcsample.cCompile arm : jpeg <= jctrans.cCompile arm : jpeg <= jdapimin.cCompile arm : jpeg <= jdapistd.cCompile arm : jpeg <= jdarith.cCompile arm : jpeg <= jdatadst.cCompile arm : jpeg <= jdatasrc.cCompile arm : jpeg <= jdcoefct.cCompile arm : jpeg <= jdcolor.cCompile arm : jpeg <= jddctmgr.cCompile arm : jpeg <= jdhuff.cCompile arm : jpeg <= jdinput.cCompile arm : jpeg <= jdmainct.cCompile arm : jpeg <= jdmarker.cCompile arm : jpeg <= jdmaster.cCompile arm : jpeg <= jdmerge.cCompile arm : jpeg <= jdpostct.cCompile arm : jpeg <= jdsample.cCompile arm : jpeg <= jdtrans.cCompile arm : jpeg <= jerror.cCompile arm : jpeg <= jfdctflt.cCompile arm : jpeg <= jfdctfst.cCompile arm : jpeg <= jfdctint.cCompile arm : jpeg <= jidctflt.cCompile arm : jpeg <= jidctfst.cCompile arm : jpeg <= jidctint.cCompile arm : jpeg <= jquant1.cCompile arm : jpeg <= jquant2.cCompile arm : jpeg <= jutils.cCompile arm : jpeg <= jmemmgr.cCompile arm : jpeg <= jmemnobs.cSharedLibrary : libjpeg.soInstall : libjpeg.so => libs/armeabi/libjpeg.so
7、由于我只想要编码所以精简了代码,将编译出的库只包含编码,不包含解码库,下面的代码如下,只需要替换Android.mk文件相同部分就可以:
LOCAL_SRC_FILES := jniffmpeg/AppDecodeH264.c \ jniffmpeg/yuv420rgb565.s \ jniffmpeg/yuv2jpg.c \ jpeg-9/jaricom.c \ jpeg-9/jcapimin.c \ jpeg-9/jcapistd.c \ jpeg-9/jcarith.c \ jpeg-9/jccoefct.c \ jpeg-9/jccolor.c \ jpeg-9/jcdctmgr.c \ jpeg-9/jchuff.c \ jpeg-9/jcinit.c \ jpeg-9/jcmainct.c \ jpeg-9/jcmarker.c \ jpeg-9/jcmaster.c \ jpeg-9/jcomapi.c \ jpeg-9/jcparam.c \ jpeg-9/jcprepct.c \ jpeg-9/jcsample.c \ jpeg-9/jctrans.c \ jpeg-9/jdatadst.c \ jpeg-9/jerror.c \ jpeg-9/jfdctflt.c \ jpeg-9/jfdctfst.c \ jpeg-9/jfdctint.c \ jpeg-9/jidctflt.c \ jpeg-9/jidctfst.c \ jpeg-9/jidctint.c \ jpeg-9/jquant1.c \ jpeg-9/jquant2.c \ jpeg-9/jutils.c \ jpeg-9/jmemmgr.c \ jpeg-9/jmemnobs.c
- android 编译libjpeg-turbo
- android 编译libjpeg
- android 编译libjpeg-turbo
- LibJpeg编译
- 【Android】通过NDK编译libjpeg库
- ndk编译android可用的libjpeg.so
- Android图片压缩,自己编译libjpeg
- Android图片压缩,自己编译libjpeg
- 编译Android环境的libjpeg-turbo
- ubuntu 下编译android libjpeg-turbo-1.5.2
- vc编译libjpeg
- Libjpeg开放源代码编译
- 编译libjpeg和libpng
- Libjpeg开放源代码编译
- LibJpeg编译过程
- libjpeg的交叉编译
- libjpeg的交叉编译
- 编译libjpeg-turbo
- c++交换数据所用的两种方法
- vc6.0+DDK(xp-2600)游戏手柄按键信息获取程序出现的编译错误
- Spring 实现两种设计模式
- 补间动画基础备忘(1)
- linux 内核线程
- android 编译libjpeg
- 解决windows连接不上solaris上的ftp服务问题
- 关于daemonize()
- jQuery知识总结
- ubuntu 恢复bash的自动补全
- javascript小技巧总结
- 软件开发思考
- android 两张图片合并作背景图
- Eclipse重构——Separate Query from Modify