feat: Use coil pipeline if bitmap did not exceed texture max size

This commit is contained in:
Ahmad Ansori Palembani 2024-05-25 14:32:07 +07:00
parent adc513bbd9
commit ff0f46d6a3
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
3 changed files with 10 additions and 3 deletions

View file

@ -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

View file

@ -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
},

View file

@ -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
}
}