NDK编译Libyuv
先来段介绍:libyuv是Google开源的实现各种YUV与RGB之间相互转换、旋转、缩放的库。它是跨平台的,可在Windows、Linux、Mac、Android等操作系统,x86、x64、arm架构上进行编译运行,支持SSE、AVX、NEON等SIMD指令加速。git下载地址:git clone https://chromium.googlesource.com/external/lib
先来段介绍:
libyuv是Google开源的实现各种YUV与RGB之间相互转换、旋转、缩放的库。它是跨平台的,可在Windows、Linux、Mac、Android等操作系统,x86、x64、arm架构上进行编译运行,支持SSE、AVX、NEON等SIMD指令加速。
git下载地址:
git clone https://chromium.googlesource.com/external/libyuv
安装git后只要在命令行里输入这条命令就会下载到本地
另附google开源代码网址
https://chromium.googlesource.com/?format=HTML
下载后目录结构如图所示:
里面有很多平台的编译脚本
这里我们只看android的android.mk 代码如下
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CPP_EXTENSION := .cc
LOCAL_SRC_FILES := \
source/compare.cc \
source/compare_common.cc \
source/compare_neon64.cc \
source/compare_gcc.cc \
source/convert.cc \
source/convert_argb.cc \
source/convert_from.cc \
source/convert_from_argb.cc \
source/convert_to_argb.cc \
source/convert_to_i420.cc \
source/cpu_id.cc \
source/planar_functions.cc \
source/rotate.cc \
source/rotate_argb.cc \
source/rotate_mips.cc \
source/rotate_neon64.cc \
source/row_any.cc \
source/row_common.cc \
source/row_mips.cc \
source/row_neon64.cc \
source/row_gcc.cc \
source/scale.cc \
source/scale_any.cc \
source/scale_argb.cc \
source/scale_common.cc \
source/scale_mips.cc \
source/scale_neon64.cc \
source/scale_gcc.cc \
source/video_common.cc
# TODO(fbarchard): Enable mjpeg encoder.
# source/mjpeg_decoder.cc
# source/convert_jpeg.cc
# source/mjpeg_validate.cc
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_CFLAGS += -DLIBYUV_NEON
LOCAL_SRC_FILES += \
source/compare_neon.cc.neon \
source/rotate_neon.cc.neon \
source/row_neon.cc.neon \
source/scale_neon.cc.neon
endif
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include
LOCAL_MODULE := libyuv_static
LOCAL_MODULE_TAGS := optional
include $(BUILD_STATIC_LIBRARY)
基本上不用改,只有最后一句
如果要编译出.a的静态库不用改
如果要编译出.so的动态链接库改为:include $(BUILD_SHARED_LIBRARY)
添加在android.mk同级目录下新建application.mk 内容如下
#APP_ABI是用于指定编译哪个平台的库 , 可以写多个 用空格隔开 (libyuv默认吧所有平台都编了)
APP_ABI := armeabi armeabi-v7a mips
#APP_PLATFORM为指定android平台版本 差不多相当于SDK里面的targetSDKVersion
APP_PLATFORM := android-14
#APP_STL 是使用哪种STL
#system --> 系统默认的最小支持的C++运行时库
#stlport_static --> 以静态链接的方式使用stlport版本的STL
#stlport_shared --> 以动态链接的方式使用stlport版本的STL
#gnustl_static --> 以静态链接的方式使用gnu版本的STL
APP_STL := stlport_static
#APP_CPPFLAGS 为C++编译参数 这个有很多 需要自己一个个看
APP_CPPFLAGS += -fno-rtti
我一般习惯用脚本启动编译
新建jni目录 将libyuv下的所有文件/文件夹 移到jni文件夹中(jni目录名字不能随便取 这是默认ndk-build命令默认指定的文件夹)
创建build.bat(名字随便) 里面写上一句话就行了 其他参数自己加
ndk-build -D
如图
双击bat
看到这里就成功了
好的 编译完成后就开始写jni
高能警告:前方有一大波坑
更多推荐
所有评论(0)