diff --git a/app/src/main/cpp/CMakeLists.txt b/app/src/main/cpp/CMakeLists.txt index 42cb3e2ef..e76f6ad97 100644 --- a/app/src/main/cpp/CMakeLists.txt +++ b/app/src/main/cpp/CMakeLists.txt @@ -45,6 +45,6 @@ SET(LIBARCHIVE_CUSTOM_LIBS "liblzma" "nettle") add_subdirectory(libarchive) # Build and link our app's native lib -add_library(${PROJECT_NAME} SHARED archive.c fdutils.c) +add_library(${PROJECT_NAME} SHARED archive.c fdutils.c gifutils.c) target_include_directories(${PROJECT_NAME} PUBLIC libarchive/libarchive) target_link_libraries(${PROJECT_NAME} archive_static log -Wl,--gc-sections) diff --git a/app/src/main/cpp/gifutils.c b/app/src/main/cpp/gifutils.c new file mode 100644 index 000000000..e8ef2a660 --- /dev/null +++ b/app/src/main/cpp/gifutils.c @@ -0,0 +1,15 @@ +#include + +#include + +#define LOG_TAG "gifUtils" + +#include "ehviewer.h" + +JNIEXPORT void JNICALL +Java_com_hippo_image_Image_rewriteGifSource(JNIEnv *env, jclass clazz, jobject buffer) { + void *addr = (*env)->GetDirectBufferAddress(env, buffer); + size_t size = (*env)->GetDirectBufferCapacity(env, buffer); + EH_UNUSED(addr); + EH_UNUSED(size); +} diff --git a/app/src/main/java/com/hippo/image/Image.kt b/app/src/main/java/com/hippo/image/Image.kt index d6344275d..279119fc3 100644 --- a/app/src/main/java/com/hippo/image/Image.kt +++ b/app/src/main/java/com/hippo/image/Image.kt @@ -80,6 +80,7 @@ class Image private constructor(source: Source, private var releaseCall: (() -> fun decode(src: ByteBufferSource): Image? { val directBuffer = src.getByteBuffer() check(directBuffer.isDirect) + rewriteGifSource(directBuffer) return runCatching { Image(ImageDecoder.createSource(directBuffer)) { src.close() @@ -89,6 +90,9 @@ class Image private constructor(source: Source, private var releaseCall: (() -> it.printStackTrace() }.getOrNull() } + + @JvmStatic + private external fun rewriteGifSource(buffer: ByteBuffer) } interface ByteBufferSource : AutoCloseable {