libjpeg-turbo编译

libjpeg-turbo

libjpeg是专门处理Jpeg解码、编码、转码的自由软件库。libjpeg-turbo是其fork版本,还有一个基于libjpeg-turbo的fork的版本是MozJpeg。

个人理解,3者的区别和优势:

libjpeg 功能全面强大持续更新特性
libjpeg-turbo 基于精简指令集优化,以及编码算法优化,速度号称可以达到2-4x的libjpeg的编解码速度。Android机型实际测试速度基本在2x,图像质量持平。
MozJpeg 基于libjpeg-turbo,长于编码文件能达到10%的优化。但是编码耗时长。4k图片在vivo NEX S上编码在5s+。

编译

目前libjpeg-turbo最新版本在2.0.1。编译方式也不同于之前的1.5.x版本。官方在BUILDING.md有具体说明。比如 Android armv7a版本如下:

    # Set these variables to suit your needs
    NDK_PATH={full path to the "ndk" directory-- for example, /opt/android/sdk/ndk-bundle}
    BUILD_PLATFORM={the platform name for the NDK package you installed--
      for example, "windows-x86" or "linux-x86_64" or "darwin-x86_64"}
    TOOLCHAIN_VERSION={"4.8", "4.9", "clang3.5", etc.  This corresponds to a
      toolchain directory under ${NDK_PATH}/toolchains/.}
    ANDROID_VERSION={The minimum version of Android to support-- for example,
      "16", "19", etc.}

    # It should not be necessary to modify the rest
    HOST=arm-linux-androideabi
    SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-arm
    export CFLAGS="-march=armv7-a -mfloat-abi=softfp -fprefetch-loop-arrays \
      -D__ANDROID_API__=${ANDROID_VERSION} --sysroot=${SYSROOT} \
      -isystem ${NDK_PATH}/sysroot/usr/include \
      -isystem ${NDK_PATH}/sysroot/usr/include/${HOST}"
    export LDFLAGS=-pie
    TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}

    cd {build_directory}

    cat <toolchain.cmake
    set(CMAKE_SYSTEM_NAME Linux)
    set(CMAKE_SYSTEM_PROCESSOR arm)
    set(CMAKE_C_COMPILER ${TOOLCHAIN}/bin/${HOST}-gcc)
    set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/${HOST})
    EOF

    cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
      -DCMAKE_POSITION_INDEPENDENT_CODE=1 \
      [additional CMake flags] {source_directory}
    make

按照上面的模板其实就可以编译。但是要注意点是cmake得配cmake官方下载的版本,而不是Android 编译NDK下载的cmake。看网上有人用android的cmake编译,实际试过只有x86_64版本成功了,其他版本有各种的问题。

实际可运行的脚本可以参考,然后再根据自己需要再行更改就好了。
https://blog.csdn.net/zy_zhangyuan88/article/details/82701681
其中获取MAC的cmake地址可以参考
https://blog.csdn.net/baimafujinji/article/details/78588488

你可能感兴趣的:(libjpeg-turbo编译)