From 332f3f7ee6ffec42c6688d47f70afc8e7de2359c Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Thu, 5 Dec 2024 14:49:14 +0700 Subject: [PATCH] refactor: Separate isHardwareThresholdExceeded from isMaxTextureSizeExceeded --- .../data/coil/TachiyomiImageDecoder.kt | 2 +- .../ui/reader/viewer/ReaderPageImageView.kt | 2 +- .../kanade/tachiyomi/util/system/ImageUtil.kt | 28 ++++++++++++++----- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/coil/TachiyomiImageDecoder.kt b/app/src/main/java/eu/kanade/tachiyomi/data/coil/TachiyomiImageDecoder.kt index bd0fb6619e..acadf2ce5f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/coil/TachiyomiImageDecoder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/coil/TachiyomiImageDecoder.kt @@ -50,7 +50,7 @@ class TachiyomiImageDecoder(private val resources: ImageSource, private val opti if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && options.bitmapConfig == Bitmap.Config.HARDWARE && - !ImageUtil.isMaxTextureSizeExceeded(bitmap) + !ImageUtil.isHardwareThresholdExceeded(bitmap) ) { val hwBitmap = bitmap.copy(Bitmap.Config.HARDWARE, false) if (hwBitmap != null) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderPageImageView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderPageImageView.kt index 4589e07a05..9f1aa9cb56 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderPageImageView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderPageImageView.kt @@ -234,7 +234,7 @@ open class ReaderPageImageView @JvmOverloads constructor( is BufferedSource -> { // SSIV doesn't tile bitmaps, so if the image exceeded max texture size it won't load regardless. if (!isWebtoon || ImageUtil.isMaxTextureSizeExceeded(data)) { - setHardwareConfig(!ImageUtil.isMaxTextureSizeExceeded(data)) + setHardwareConfig(!ImageUtil.isHardwareThresholdExceeded(data)) setImage(ImageSource.inputStream(data.inputStream())) isVisible = true return@apply diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/ImageUtil.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/ImageUtil.kt index 823af81bef..88a9202234 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/ImageUtil.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/ImageUtil.kt @@ -776,20 +776,34 @@ object ImageUtil { return options } - fun isMaxTextureSizeExceeded(source: BufferedSource): Boolean = - extractImageOptions(source).let { opts -> isMaxTextureSizeExceeded(opts.outWidth, opts.outHeight) } + fun isHardwareThresholdExceeded(source: BufferedSource): Boolean = extractImageOptions(source).let { opts -> + isHardwareThresholdExceeded(opts.outWidth, opts.outHeight) + } - fun isMaxTextureSizeExceeded(drawable: BitmapDrawable): Boolean = - isMaxTextureSizeExceeded(drawable.bitmap) + fun isHardwareThresholdExceeded(drawable: BitmapDrawable): Boolean = + isHardwareThresholdExceeded(drawable.bitmap) - fun isMaxTextureSizeExceeded(bitmap: Bitmap): Boolean = - isMaxTextureSizeExceeded(bitmap.width, bitmap.height) + fun isHardwareThresholdExceeded(bitmap: Bitmap): Boolean = + isHardwareThresholdExceeded(bitmap.width, bitmap.height) var hardwareBitmapThreshold: Int = GLUtil.SAFE_TEXTURE_LIMIT - private fun isMaxTextureSizeExceeded(width: Int, height: Int): Boolean { + private fun isHardwareThresholdExceeded(width: Int, height: Int): Boolean { if (minOf(width, height) <= 0) return false return maxOf(width, height) > hardwareBitmapThreshold } + + fun isMaxTextureSizeExceeded(source: BufferedSource): Boolean = extractImageOptions(source).let { opts -> + isMaxTextureSizeExceeded(opts.outWidth, opts.outHeight) + } + + fun isMaxTextureSizeExceeded(bitmap: Bitmap): Boolean = + isMaxTextureSizeExceeded(bitmap.width, bitmap.height) + + private fun isMaxTextureSizeExceeded(width: Int, height: Int): Boolean { + if (minOf(width, height) <= 0) return false + + return maxOf(width, height) > GLUtil.DEVICE_TEXTURE_LIMIT + } }