From ff0f46d6a3a226608896f730c906ed841e07edb5 Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Sat, 25 May 2024 14:32:07 +0700 Subject: [PATCH] feat: Use coil pipeline if bitmap did not exceed texture max size --- CHANGELOG.md | 2 +- .../tachiyomi/ui/reader/viewer/ReaderPageImageView.kt | 6 ++++-- .../main/java/eu/kanade/tachiyomi/util/system/ImageUtil.kt | 5 +++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cc8cb098a..e827869c20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,5 +24,5 @@ - Update dependency com.github.tachiyomiorg:image-decoder to e08e9be535 - Update dependency com.github.null2264:subsampling-scale-image-view to 338caedb5f - Added Unit Test for version checker -- Use Coil pipeline instead of SSIV for image decode (disabled due to a bug) +- Use Coil pipeline instead of SSIV for image decode whenever possible, might improve webtoon performance - Migrated from Coil2 to Coil3 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 990e9d103e..371aeccdae 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 @@ -36,6 +36,7 @@ import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerConfig import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonSubsamplingImageView import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.GLUtil +import eu.kanade.tachiyomi.util.system.ImageUtil import eu.kanade.tachiyomi.util.system.animatorDurationScale import java.io.InputStream import java.nio.ByteBuffer @@ -224,7 +225,8 @@ open class ReaderPageImageView @JvmOverloads constructor( }, ) - val useCoilPipeline = false // FIXME: "Bitmap too large to be uploaded into a texture" + val useCoilPipeline = isWebtoon && data is InputStream && ImageUtil.isMaxTextureSizeExceeded(data) + if (isWebtoon && useCoilPipeline) { val request = ImageRequest.Builder(context) .data(data) @@ -232,7 +234,7 @@ open class ReaderPageImageView @JvmOverloads constructor( .diskCachePolicy(CachePolicy.DISABLED) .target( onSuccess = { result -> - val image = result as BitmapDrawable + val image = result.asDrawable(context.resources) as BitmapDrawable setImage(ImageSource.bitmap(image.bitmap)) isVisible = true }, 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 d989fdc7b1..1eb337fa95 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 @@ -791,4 +791,9 @@ object ImageUtil { // https://issuetracker.google.com/issues/182703810 "image/jxl" to "jxl", ) + + fun isMaxTextureSizeExceeded(imageStream: InputStream): Boolean { + val opts = extractImageOptions(imageStream) + return opts.outWidth >= GLUtil.maxTextureSize || opts.outHeight >= GLUtil.maxTextureSize + } }