Skip to content

Commit 326b429

Browse files
committed
Change hardware buffers flags
1 parent c341c51 commit 326b429

File tree

5 files changed

+76
-58
lines changed

5 files changed

+76
-58
lines changed

app/src/main/java/com/awxkee/jxlcoder/MainActivity.kt

+63-42
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@ class MainActivity : ComponentActivity() {
125125
var imagesArray = remember {
126126
mutableStateListOf<Bitmap>()
127127
}
128+
var drawablesArray = remember {
129+
mutableStateListOf<Drawable>()
130+
}
128131
LaunchedEffect(key1 = Unit, block = {
129132
lifecycleScope.launch(Dispatchers.IO) {
130133
val buffer5 =
@@ -183,59 +186,66 @@ class MainActivity : ComponentActivity() {
183186
// lifecycleScope.launch {
184187
// drawables.add(BitmapDrawable(resources, bitmap))
185188
// }
186-
val space = bitmap.copy(Bitmap.Config.ARGB_8888, true)
187-
val encoded =
188-
JxlCoder.encode(
189-
space,
190-
channelsConfiguration = JxlChannelsConfiguration.RGB,
191-
effort = JxlEffort.LIGHTNING,
192-
compressionOption = JxlCompressionOption.LOSSLESS,
193-
quality = 100,
194-
)
195-
val decoded = JxlCoder.decodeSampled(
196-
encoded,
197-
preferredColorConfig = PreferredColorConfig.RGBA_8888, width = 1305,
198-
height = 1295
199-
)
200-
lifecycleScope.launch {
201-
imagesArray.add(decoded)
202-
}
189+
// val space = bitmap.copy(Bitmap.Config.ARGB_8888, true)
190+
// val encoded =
191+
// JxlCoder.encode(
192+
// space,
193+
// channelsConfiguration = JxlChannelsConfiguration.RGB,
194+
// effort = JxlEffort.LIGHTNING,
195+
// compressionOption = JxlCompressionOption.LOSSLESS,
196+
// quality = 100,
197+
// )
198+
// val decoded = JxlCoder.decodeSampled(
199+
// encoded,
200+
// preferredColorConfig = PreferredColorConfig.HARDWARE, width = 1305,
201+
// height = 1295
202+
// )
203+
// lifecycleScope.launch {
204+
// imagesArray.add(decoded)
205+
// }
203206

204-
// var assets =
205-
// (this@MainActivity.assets.list("") ?: return@launch).toList()
206-
//// assets = assets.filter { it.contains("20181110_213419__MMC1561-HDR.jxl") }
207-
// for (asset in assets) {
208-
// try {
209-
// val buffer4 =
210-
// this@MainActivity.assets.open(asset).source().buffer()
211-
// .readByteArray()
212-
//
213-
// val largeImageSize = JxlCoder.getSize(buffer4)
214-
// if (largeImageSize != null) {
215-
// val time = measureTimeMillis {
207+
var assets =
208+
(this@MainActivity.assets.list("") ?: return@launch).toList()
209+
assets = assets.filter { it.contains("20181110_213419__MMC1561-HDR.jxl") }
210+
for (asset in assets) {
211+
try {
212+
val buffer4 =
213+
this@MainActivity.assets.open(asset).source().buffer()
214+
.readByteArray()
215+
216+
val largeImageSize = JxlCoder.getSize(buffer4)
217+
if (largeImageSize != null) {
218+
val time = measureTimeMillis {
216219
// val srcImage = JxlCoder.decodeSampled(
217220
// buffer4,
218221
// largeImageSize.width / 2,
219222
// largeImageSize.height / 2,
220-
// preferredColorConfig = PreferredColorConfig.RGBA_8888,
223+
// preferredColorConfig = PreferredColorConfig.HARDWARE,
221224
// com.awxkee.jxlcoder.ScaleMode.FIT,
222225
// toneMapper = JxlToneMapper.REC2408,
223226
// )
224-
//// val srcImage = JxlCoder.decode(buffer4,
225-
//// preferredColorConfig = PreferredColorConfig.RGB_565,
226-
//// toneMapper = JxlToneMapper.REC2408)
227+
val animatedImage = JxlAnimatedImage(
228+
buffer4,
229+
preferredColorConfig = PreferredColorConfig.HARDWARE,
230+
scaleMode = ScaleMode.FIT,
231+
toneMapper = JxlToneMapper.REC2408,
232+
)
233+
drawablesArray.add(animatedImage.animatedDrawable)
234+
// val srcImage = JxlCoder.decode(buffer4,
235+
// preferredColorConfig = PreferredColorConfig.RGB_565,
236+
// toneMapper = JxlToneMapper.REC2408)
227237
// lifecycleScope.launch {
228238
// imagesArray.add(srcImage)
229239
// }
230-
// }
231-
// Log.d("JXLCoder", "Decoding done in ${time}ms")
232-
// }
233-
// } catch (e: Exception) {
234-
// if (e !is FileNotFoundException) {
235-
// throw e
236-
// }
237-
// }
238-
// }
240+
}
241+
Log.d("JXLCoder", "Decoding done in ${time}ms")
242+
}
243+
} catch (e: Exception) {
244+
if (e !is FileNotFoundException) {
245+
throw e
246+
}
247+
}
248+
}
239249
}
240250
})
241251
// A surface container using the 'background' color from the theme
@@ -276,6 +286,17 @@ class MainActivity : ComponentActivity() {
276286
contentDescription = "ok"
277287
)
278288
}
289+
290+
// items(drawablesArray.count(), key = {
291+
// return@items UUID.randomUUID().toString()
292+
// }) {
293+
// Image(
294+
// rememberDrawablePainter(drawable = drawablesArray[it]),
295+
// modifier = Modifier.fillMaxWidth(),
296+
// contentScale = ContentScale.FillWidth,
297+
// contentDescription = "ok"
298+
// )
299+
// }
279300
}
280301
}
281302
}

jxlcoder/src/main/cpp/HardwareBuffersCompat.cpp

+7-11
Original file line numberDiff line numberDiff line change
@@ -61,48 +61,44 @@ bool loadAHardwareBuffersAPI() {
6161
&& AHardwareBuffer_describe_compat != nullptr;
6262
}
6363
alreadyHdBuffersLoaded = true;
64-
void *hhl = dlopen("libandroid.so", RTLD_NOW);
65-
if (!hhl) {
66-
return false;
67-
}
6864

69-
AHardwareBuffer_allocate_compat = (AHardwareBufferAllocateFunc) dlsym(hhl,
65+
AHardwareBuffer_allocate_compat = (AHardwareBufferAllocateFunc) dlsym(RTLD_DEFAULT,
7066
"AHardwareBuffer_allocate");
7167
if (AHardwareBuffer_allocate_compat == nullptr) {
7268
return false;
7369
}
7470

75-
AHardwareBuffer_isSupported_compat = (AHardwareBufferIsSupportedFunc) dlsym(hhl,
71+
AHardwareBuffer_isSupported_compat = (AHardwareBufferIsSupportedFunc) dlsym(RTLD_DEFAULT,
7672
"AHardwareBuffer_isSupported");
7773
if (AHardwareBuffer_isSupported_compat == nullptr) {
7874
return false;
7975
}
8076

81-
AHardwareBuffer_unlock_compat = (AHardwareBufferUnlockFunc) dlsym(hhl,
77+
AHardwareBuffer_unlock_compat = (AHardwareBufferUnlockFunc) dlsym(RTLD_DEFAULT,
8278
"AHardwareBuffer_unlock");
8379
if (AHardwareBuffer_unlock_compat == nullptr) {
8480
return false;
8581
}
8682

87-
AHardwareBuffer_release_compat = (AHardwareBufferReleaseFunc) dlsym(hhl,
83+
AHardwareBuffer_release_compat = (AHardwareBufferReleaseFunc) dlsym(RTLD_DEFAULT,
8884
"AHardwareBuffer_release");
8985
if (AHardwareBuffer_release_compat == nullptr) {
9086
return false;
9187
}
9288

93-
AHardwareBuffer_lock_compat = (AHardwareBufferLockFunc) dlsym(hhl,
89+
AHardwareBuffer_lock_compat = (AHardwareBufferLockFunc) dlsym(RTLD_DEFAULT,
9490
"AHardwareBuffer_lock");
9591
if (AHardwareBuffer_lock_compat == nullptr) {
9692
return false;
9793
}
9894

99-
AHardwareBuffer_toHardwareBuffer_compat = (AHardwareBufferToHardwareBufferFunc) dlsym(hhl,
95+
AHardwareBuffer_toHardwareBuffer_compat = (AHardwareBufferToHardwareBufferFunc) dlsym(RTLD_DEFAULT,
10096
"AHardwareBuffer_toHardwareBuffer");
10197
if (AHardwareBuffer_toHardwareBuffer_compat == nullptr) {
10298
return false;
10399
}
104100

105-
AHardwareBuffer_describe_compat = (AHardwareBufferDescribeFunc) dlsym(hhl,
101+
AHardwareBuffer_describe_compat = (AHardwareBufferDescribeFunc) dlsym(RTLD_DEFAULT,
106102
"AHardwareBuffer_describe");
107103
if (AHardwareBuffer_describe_compat == nullptr) {
108104
return false;

jxlcoder/src/main/cpp/HardwareBuffersCompat.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ typedef int (*_Nullable AHardwareBufferIsSupportedFunc)(
4343
const AHardwareBuffer_Desc *_Nonnull desc
4444
);
4545

46-
typedef int (*_Nullable AHardwareBufferReleaseFunc)(
46+
typedef void (*_Nullable AHardwareBufferReleaseFunc)(
4747
AHardwareBuffer *_Nonnull buffer
4848
);
4949

jxlcoder/src/main/cpp/ReformatBitmap.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@ ReformatColorConfig(JNIEnv *env, std::vector<uint8_t> &imageData, std::string &i
203203
bufferDesc.format = (*useFloats) ? AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT
204204
: AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM;
205205

206-
bufferDesc.usage = AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE;
206+
bufferDesc.usage = AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN | AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN |
207+
AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE | AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT;
207208

208209
AHardwareBuffer *hardwareBuffer = nullptr;
209210

@@ -216,7 +217,7 @@ ReformatColorConfig(JNIEnv *env, std::vector<uint8_t> &imageData, std::string &i
216217
uint8_t *buffer = nullptr;
217218

218219
status = AHardwareBuffer_lock_compat(hardwareBuffer,
219-
AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN, -1,
220+
AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN | AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN, -1,
220221
&rect, reinterpret_cast<void **>(&buffer));
221222
if (status != 0) {
222223
AHardwareBuffer_release_compat(hardwareBuffer);

jxlcoder/src/main/java/com/awxkee/jxlcoder/animation/AnimatedDrawable.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -228,11 +228,11 @@ public class AnimatedDrawable(
228228
}
229229

230230
override fun getIntrinsicHeight(): Int {
231-
return bounds.height()
231+
return frameStore.height
232232
}
233233

234234
override fun getIntrinsicWidth(): Int {
235-
return bounds.width()
235+
return frameStore.width
236236
}
237237

238238
override fun setColorFilter(colorFilter: ColorFilter?) {

0 commit comments

Comments
 (0)