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