android 编译libjpeg

摘要:
您需要先将yuv转换为jpg图像。据互联网报道,libjpeg-turbo比libjpeg快2-3倍,但在Android手机上练习需要40-60毫秒。虽然这比之前的300米跑好多了,但仍然不能满足我的要求。在进一步检查在线信息后,libjpeg turbo使用SIMD指令针对x86和x86-64进行了优化,这在手机上不受支持,因此您需要测试libjpeg。

之前需要将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-r8d
PLATFORM=$NDK/platforms/android-8/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86
CC=$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.sh
sh config.sh

5、生成Android.mk文件,内容如下:

LOCAL_PATH := $(my-dir)

include $(CLEAR_VARS)
# From autoconf-generated Makefile
LOCAL_MODULE := libjpeg
LOCAL_ARM_MODE=arm
LOCAL_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.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_CFLAGS :=-O3 -fstrict-aliasing -fprefetch-loop-arrays  -DANDROID \
        -DANDROID_TILE_BASED_DECODE -DENABLE_ANDROID_NULL_CONVERT

include $(BUILD_SHARED_LIBRARY)

6、运行ndk-build,结果如下:

root@zhangjie:/home/jpeg-9/jni# ndk-build
Compile arm    : jpeg <= jaricom.c
Compile arm    : jpeg <= jcapimin.c
Compile arm    : jpeg <= jcapistd.c
Compile arm    : jpeg <= jcarith.c
Compile arm    : jpeg <= jccoefct.c
Compile arm    : jpeg <= jccolor.c
Compile arm    : jpeg <= jcdctmgr.c
Compile arm    : jpeg <= jchuff.c
Compile arm    : jpeg <= jcinit.c
Compile arm    : jpeg <= jcmainct.c
Compile arm    : jpeg <= jcmarker.c
Compile arm    : jpeg <= jcmaster.c
Compile arm    : jpeg <= jcomapi.c
Compile arm    : jpeg <= jcparam.c
Compile arm    : jpeg <= jcprepct.c
Compile arm    : jpeg <= jcsample.c
Compile arm    : jpeg <= jctrans.c
Compile arm    : jpeg <= jdapimin.c
Compile arm    : jpeg <= jdapistd.c
Compile arm    : jpeg <= jdarith.c
Compile arm    : jpeg <= jdatadst.c
Compile arm    : jpeg <= jdatasrc.c
Compile arm    : jpeg <= jdcoefct.c
Compile arm    : jpeg <= jdcolor.c
Compile arm    : jpeg <= jddctmgr.c
Compile arm    : jpeg <= jdhuff.c
Compile arm    : jpeg <= jdinput.c
Compile arm    : jpeg <= jdmainct.c
Compile arm    : jpeg <= jdmarker.c
Compile arm    : jpeg <= jdmaster.c
Compile arm    : jpeg <= jdmerge.c
Compile arm    : jpeg <= jdpostct.c
Compile arm    : jpeg <= jdsample.c
Compile arm    : jpeg <= jdtrans.c
Compile arm    : jpeg <= jerror.c
Compile arm    : jpeg <= jfdctflt.c
Compile arm    : jpeg <= jfdctfst.c
Compile arm    : jpeg <= jfdctint.c
Compile arm    : jpeg <= jidctflt.c
Compile arm    : jpeg <= jidctfst.c
Compile arm    : jpeg <= jidctint.c
Compile arm    : jpeg <= jquant1.c
Compile arm    : jpeg <= jquant2.c
Compile arm    : jpeg <= jutils.c
Compile arm    : jpeg <= jmemmgr.c
Compile arm    : jpeg <= jmemnobs.c
SharedLibrary  : libjpeg.so
Install        : 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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇pycharm 使用网页仿 Office 2003 的工具条下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SpringCloud之Config配置中心+BUS消息总线原理及其配置

一、配置中心作用 在常规的开发中,每个微服务都包含代码和配置。其配置包含服务配置、各类开关和业务配置。如果系统结构中的微服务节点较少,那么常规的代码+配置的开发方式足以解决问题。当系统逐步迭代,其微服务会越来越复杂,慢慢演化成网状依赖结构,这个时候常规的代码+配置的开发方式就并不合适了,因为还要考虑整体系统的扩展性、伸缩性和耦合性等。这些问题中,配置的管理...

【转】 Linux内核升级指南

【转】 Linux内核升级指南 转自:http://blog.csdn.net/xyang81/article/details/7522032 一、升级背景 前 段时间公司有个项目用到了短信收发的业务,采购了两台16口的Wavecom USB短信猫设备,服务器操作系统是ReadHat5.4,内核2.6.18,插上设备后,操作系统无法自动识别该设备,原因是没...

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)

阅读目录 一、配置安装包依赖项 二、自定义dll(测试数据库连接) 三、总结 正文 前言:上篇使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)介绍了下使用Advanced Installer配置IIS和Web.config的过程,操作起来是相对比较简单的,只要知道了博主提供的方法,相信都不是问题,其实...

Win10上启动UICrawler自动遍历时报 "org.openqa.selenium.WebDriverException: An unknown server-side error occur red while processing the command. Original error: Could not sign with default certifi cate."

操作步骤: 1、直接启动 Appium (我用的是 version 1.10.0) 2、打开命令窗口,切换到UICrawler所在路径 3、执行命令java -jar UICrawler-2.23.jar -f config.yml -u deviceSerialNumber 4、执行后不会安装appium所需要特定 apk程序,报错 could not...

jmeter中CSV Data Set Config各项说明

Config the CSV Data Source: 1)Filename:csv文件的名称(包括绝对路径,当csv文件在bin目录下时,只需给出文件名即可) 2)File encoding:csv文件编码,可以不填 3)Variable Names(comma-delimited):csv文件中各列的名字(有多列时,用英文逗号隔开列名),这个变量名称是...

在linux上通过ssh使用github

原文https://www.jianshu.com/p/599ae69b57c5 访问github有两种方式,第一种通过ssh,第二种通过https。通过ssh的方式需要在开发机上面配置ssh key,并把公钥同步到github。第二种方式则每次提交的时候都要输入github的账号密码。选用第二种方式访问github可以跳过步骤1、2 1、在linux...