Skip to content

Commit b9736f6

Browse files
authored
feat: Support toArrayBuffer() if it's a GPU image with zero copy (#6)
* feat: Support `toArrayBuffer()` if it's a GPU image with zero copy * Update HybridImage.kt
1 parent a750288 commit b9736f6

4 files changed

Lines changed: 19 additions & 9 deletions

File tree

android/src/main/java/com/margelo/nitro/image/HybridImage.kt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,14 @@ class HybridImage: HybridImageSpec {
3030
this.bitmap = bitmap
3131
}
3232

33+
private val isGPU: Boolean
34+
get() {
35+
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O &&
36+
bitmap.config == Bitmap.Config.HARDWARE
37+
}
3338
private fun toByteBuffer(): ByteBuffer {
3439
var bitmap = bitmap
35-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O &&
36-
bitmap.config == Bitmap.Config.HARDWARE) {
40+
if (isGPU) {
3741
// It's a GPU Bitmap - we need to copy it to CPU memory first.
3842
bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, false)
3943
}
@@ -44,8 +48,12 @@ class HybridImage: HybridImageSpec {
4448
}
4549

4650
override fun toArrayBuffer(): ArrayBuffer {
47-
val buffer = toByteBuffer()
48-
return ArrayBuffer.wrap(buffer)
51+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && isGPU) {
52+
return ArrayBuffer.wrap(bitmap.hardwareBuffer)
53+
} else {
54+
val buffer = toByteBuffer()
55+
return ArrayBuffer.wrap(buffer)
56+
}
4957
}
5058

5159
override fun toArrayBufferAsync(): Promise<ArrayBuffer> {

bun.lock

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/ios/Podfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ PODS:
4747
- ReactCommon/turbomodule/core
4848
- SDWebImage
4949
- Yoga
50-
- NitroModules (0.26.2):
50+
- NitroModules (0.26.3):
5151
- DoubleConversion
5252
- glog
5353
- hermes-engine
@@ -2107,7 +2107,7 @@ SPEC CHECKSUMS:
21072107
hermes-engine: 94ed01537bdeccaab1adbf94b040d115d6fa1a7f
21082108
libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8
21092109
NitroImage: 97d130b01c525a52743248ce649c7fe27a55f710
2110-
NitroModules: ccf2db518daf271800221ef472938a324672ff71
2110+
NitroModules: f36b94e48ff1705fc6b84bc1953f40e2da4196c2
21112111
RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82
21122112
RCTDeprecation: c3e3f5b4ea83e7ff3bc86ce09e2a54b7affd687d
21132113
RCTRequired: ee438439880dffc9425930d1dd1a3c883ee6879c

example/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"react-native": "0.79.3",
1717
"react-native-fast-image": "^8.6.3",
1818
"react-native-nitro-image": "..",
19-
"react-native-nitro-modules": "^0.26.2",
19+
"react-native-nitro-modules": "^0.26.3",
2020
"react-native-safe-area-context": "^5.4.1",
2121
"react-native-screens": "^4.11.1"
2222
},

0 commit comments

Comments
 (0)