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/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
高能警告:前方有一大波坑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章