美文网首页
libjpeg-turbo编译

libjpeg-turbo编译

作者: fry_ss | 来源:发表于2018-12-15 18:02 被阅读52次

    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 <<EOF >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编译

          本文链接:https://www.haomeiwen.com/subject/oqvahqtx.html