diff --git a/app/src/main/java/com/awxkee/jxlcoder/MainActivity.kt b/app/src/main/java/com/awxkee/jxlcoder/MainActivity.kt index da559c6..620e3a8 100644 --- a/app/src/main/java/com/awxkee/jxlcoder/MainActivity.kt +++ b/app/src/main/java/com/awxkee/jxlcoder/MainActivity.kt @@ -107,91 +107,12 @@ class MainActivity : ComponentActivity() { lifecycleScope.launch(Dispatchers.IO) { val buffer5 = assets.open("test_image_1.jpg").source().buffer().readByteArray() - val bitmap = BitmapFactory.decodeByteArray(buffer5, 0, buffer5.size) - .scale(1305, 1295) -// val encoder = JxlAnimatedEncoder( -// bitmap.width, -// bitmap.height, -// dataPixelFormat = JxlEncodingDataPixelFormat.BINARY_16 -// ) -// repeat(4) { -// encoder.addFrame(bitmap, 24) -// } -// val encoded = encoder.encode() - -// val animated = JxlCoder.decode(encoded) -// lifecycleScope.launch { -// imagesArray.add(animated) -// } -// -// fun simpleRoundTrip(image: String) { -// val bufferPng = assets.open(image).source().buffer().readByteArray() -// val bitmap = BitmapFactory.decodeByteArray(bufferPng, 0, bufferPng.size) -// .copy(Bitmap.Config.RGBA_1010102,true) -// lifecycleScope.launch { -// imagesArray.add(bitmap) -// } -// val jxlBuffer = JxlCoder.encode(bitmap, -// channelsConfiguration = JxlChannelsConfiguration.RGB, -// compressionOption = JxlCompressionOption.LOSSY, -// effort = JxlEffort.LIGHTNING, -// decodingSpeed = JxlDecodingSpeed.SLOW) -//// val decodedEncoded = JxlCoder.decode(jxlBuffer, -//// preferredColorConfig = PreferredColorConfig.RGBA_1010102) -// val decodedEncoded = JxlAnimatedImage(jxlBuffer).getFrame(0, bitmap.width /2 , bitmap.height / 2) -// lifecycleScope.launch { -// imagesArray.add(decodedEncoded) -// } -// val fos = FileOutputStream(File(cacheDir, image)) -// fos.sink().buffer().use { -// it.writeAll(ByteArrayInputStream(jxlBuffer).source().buffer()) -// it.flush() -// } -// } -// -// simpleRoundTrip("screenshot_discord_5.png") -// simpleRoundTrip("screen_discord.png") -// simpleRoundTrip("screen_discord_2.png") -// -// val buffer5 = assets.open("elephant.png").source().buffer().readByteArray() -// val jxlBufferPNG = JxlCoder.Convenience.apng2JXL(buffer5, quality = 55) -// val buffer = assets.open("abstract_alpha.png").source().buffer().readByteArray() -// val bitmap = BitmapFactory.decodeByteArray(buffer, 0, buffer.size) -// .copy(Bitmap.Config.ARGB_8888, true) -// lifecycleScope.launch { -// drawables.add(BitmapDrawable(resources, bitmap)) -// } -// val space = bitmap.copy(Bitmap.Config.ARGB_8888, true) -// val encoded = -// JxlCoder.encode( -// space, -// channelsConfiguration = JxlChannelsConfiguration.RGB, -// effort = JxlEffort.LIGHTNING, -// compressionOption = JxlCompressionOption.LOSSLESS, -// quality = 100, -// ) -// val decoded = JxlCoder.decodeSampled( -// encoded, -// preferredColorConfig = PreferredColorConfig.HARDWARE, width = 1305, -// height = 1295 -// ) -// lifecycleScope.launch { -// imagesArray.add(decoded) -// } - - val display: Display = this@MainActivity.windowManager.defaultDisplay - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - val hdrCapabilities = display.hdrCapabilities - val maxNits = hdrCapabilities.desiredMaxLuminance - val whitePoint = hdrCapabilities.desiredMaxAverageLuminance - Log.d("Max HDR value", "$maxNits whitePoint $whitePoint") - } var assets = (this@MainActivity.assets.list("") ?: return@launch).toList() // assets = assets.filter { it.contains("20181110_213419__MMC1561-HDR.jxl") } // assets = assets.take(15) -// assets = assets.filter { it.contains("test_f32_image.jxl") } +// assets = assets.filter { it.contains("test_img_q80.jxl") } for (asset in assets) { try { val buffer4 = @@ -201,13 +122,6 @@ class MainActivity : ComponentActivity() { val largeImageSize = JxlCoder.getSize(buffer4) if (largeImageSize != null) { val decodingTime = measureTimeMillis { -// val srcImage = JxlCoder.decode( -// buffer4, -// preferredColorConfig = PreferredColorConfig.HARDWARE, -// com.awxkee.jxlcoder.ScaleMode.FIT, -// toneMapper = JxlToneMapper.REC2408, -// ) - // Resizable version val srcImage = JxlCoder.decodeSampled( buffer4, diff --git a/build_jxl.sh b/build_jxl.sh index ab044f4..03244e5 100644 --- a/build_jxl.sh +++ b/build_jxl.sh @@ -10,9 +10,6 @@ else echo "Destination directory '$destination_directory' already exists. Cloning skipped." fi -rm -rf ./libjxl/deps.sh -cp deps.sh ./libjxl/deps.sh - ABI_LIST="armeabi-v7a arm64-v8a x86 x86_64" cd libjxl @@ -36,6 +33,8 @@ for abi in ${ABI_LIST}; do -DANDROID_NDK=${NDK} \ -DSJPEG_ANDROID_NDK_PATH=${NDK} \ -DANDROID_PLATFORM=android-21 \ + -DCMAKE_C_FLAGS="-DJXL_HIGH_PRECISION=0" \ + -DCMAKE_CXX_FLAGS="-DJXL_HIGH_PRECISION=0" \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=ON \ -DCMAKE_SYSTEM_NAME=Generic \ @@ -79,6 +78,8 @@ for abi in ${ABI_LIST}; do -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake -DANDROID_ABI=${abi} -DCMAKE_ANDROID_ARCH_ABI=${abi} \ -DANDROID_NDK=${NDK} \ -DSJPEG_ANDROID_NDK_PATH=${NDK} \ + -DCMAKE_C_FLAGS="-DJXL_HIGH_PRECISION=0" \ + -DCMAKE_CXX_FLAGS="-DJXL_HIGH_PRECISION=0" \ -DANDROID_PLATFORM=android-21 \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=ON \ @@ -86,12 +87,12 @@ for abi in ${ABI_LIST}; do -DCMAKE_ANDROID_STL_TYPE=c++_shared \ -DCMAKE_SYSTEM_NAME=Android \ -DCMAKE_THREAD_PREFER_PTHREAD=TRUE \ + -DJPEGXL_ENABLE_SKCMS=true \ -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-z,max-page-size=16384" \ -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ -DTHREADS_PREFER_PTHREAD_FLAG=TRUE \ -DJPEGXL_ENABLE_TOOLS=OFF \ -DBUILD_TESTING=OFF \ - -DJPEGXL_ENABLE_SKCMS=true \ -DJPEGXL_ENABLE_JPEGLI_LIBJPEG=OFF \ -DJPEGXL_ENABLE_JPEGLI=OFF \ -DJPEGXL_ENABLE_SJPEG=OFF \ @@ -115,9 +116,12 @@ for abi in ${ABI_LIST}; do -Wno-dev -Wno-policy \ -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake -DANDROID_ABI=${abi} -DCMAKE_ANDROID_ARCH_ABI=${abi} \ -DANDROID_NDK=${NDK} \ + -DCMAKE_C_FLAGS="-DJXL_HIGH_PRECISION=0" \ + -DCMAKE_CXX_FLAGS="-DJXL_HIGH_PRECISION=0" \ -DSJPEG_ANDROID_NDK_PATH=${NDK} \ -DANDROID_PLATFORM=android-21 \ -DCMAKE_BUILD_TYPE=Release \ + -DJPEGXL_ENABLE_SKCMS=true \ -DBUILD_SHARED_LIBS=ON \ -DCMAKE_SYSTEM_NAME=Generic \ -DCMAKE_ANDROID_STL_TYPE=c++_shared \ @@ -128,7 +132,6 @@ for abi in ${ABI_LIST}; do -DTHREADS_PREFER_PTHREAD_FLAG=TRUE \ -DJPEGXL_ENABLE_TOOLS=OFF \ -DBUILD_TESTING=OFF \ - -DJPEGXL_ENABLE_SKCMS=true \ -DJPEGXL_ENABLE_JPEGLI_LIBJPEG=OFF \ -DJPEGXL_ENABLE_JPEGLI=OFF \ -DJPEGXL_ENABLE_SJPEG=OFF \ @@ -154,6 +157,11 @@ done for abi in ${ABI_LIST}; do mkdir -p "../jxlcoder/src/main/cpp/lib/${abi}" - cp -r "build-${abi}/*" "../jxlcoder/src/main/cpp/lib/${abi}/" + cp -r "build-${abi}/lib/libjxl_cms.so" "../jxlcoder/src/main/cpp/lib/${abi}/libjxl_cms.so" + cp -r "build-${abi}/lib/libjxl.so" "../jxlcoder/src/main/cpp/lib/${abi}/libjxl.so" + cp -r "build-${abi}/lib/libjxl_threads.so" "../jxlcoder/src/main/cpp/lib/${abi}/libjxl_threads.so" + cp -r "build-${abi}/third_party/brotli/libbrotlicommon.so" "../jxlcoder/src/main/cpp/lib/${abi}/libbrotlicommon.so" + cp -r "build-${abi}/third_party/brotli/libbrotlidec.so" "../jxlcoder/src/main/cpp/lib/${abi}/libbrotlidec.so" + cp -r "build-${abi}/third_party/brotli/libbrotlienc.so" "../jxlcoder/src/main/cpp/lib/${abi}/libbrotlienc.so" echo "build-${abi}/* was successfully copied to ../jxlcoder/src/main/cpp/lib/${abi}/" done diff --git a/deps.sh b/deps.sh deleted file mode 100755 index 52f4ccb..0000000 --- a/deps.sh +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env bash -# Copyright (c) the JPEG XL Project Authors. All rights reserved. -# -# Use of this source code is governed by a BSD-style -# license that can be found in the LICENSE file. - -# This file downloads the dependencies needed to build JPEG XL into third_party. -# These dependencies are normally pulled by gtest. - -set -eu - -MYDIR=./ - -# Git revisions we use for the given submodules. Update these whenever you -# update a git submodule. -THIRD_PARTY_BROTLI="36533a866ed1ca4b75cf049f4521e4ec5fe24727" -THIRD_PARTY_HIGHWAY="591ad359a5aa6c320951ebd35f839604c87abe6c" -THIRD_PARTY_SKCMS="b25b07b4b07990811de121c0356155b2ba0f4318" -THIRD_PARTY_SJPEG="e5ab13008bb214deb66d5f3e17ca2f8dbff150bf" -THIRD_PARTY_ZLIB="cacf7f1d4e3d44d871b605da3b647f07d718623f" -THIRD_PARTY_LIBPNG="a40189cf881e9f0db80511c382292a5604c3c3d1" -THIRD_PARTY_LIBJPEG_TURBO="8ecba3647edb6dd940463fedf38ca33a8e2a73d1" # 2.1.5.1 - -# Download the target revision from GitHub. -download_github() { - local path="$1" - local project="$2" - - local varname=`echo "$path" | tr '[:lower:]' '[:upper:]'` - varname="${varname//[\/-]/_}" - local sha - eval "sha=\${${varname}}" - - local down_dir="${MYDIR}/downloads" - local local_fn="${down_dir}/${sha}.tar.gz" - if [[ -e "${local_fn}" && -d "${MYDIR}/${path}" ]]; then - echo "${path} already up to date." >&2 - return 0 - fi - - local url - local strip_components=0 - if [[ "${project:0:4}" == "http" ]]; then - # "project" is a googlesource.com base url. - url="${project}${sha}.tar.gz" - else - # GitHub files have a top-level directory - strip_components=1 - url="https://github.com/${project}/tarball/${sha}" - fi - - echo "Downloading ${path} version ${sha}..." >&2 - mkdir -p "${down_dir}" - curl -L --show-error -o "${local_fn}.tmp" "${url}" - mkdir -p "${MYDIR}/${path}" - tar -zxf "${local_fn}.tmp" -C "${MYDIR}/${path}" \ - --strip-components="${strip_components}" - mv "${local_fn}.tmp" "${local_fn}" -} - -is_git_repository() { - local dir="$1" - local toplevel=$(git rev-parse --show-toplevel) - - [[ "${dir}" == "${toplevel}" ]] -} - - -main() { - if is_git_repository "${MYDIR}"; then - cat >&2 <