diff options
author | Raphaƫl Moll <raphael@google.com> | 2023-09-26 00:31:26 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2023-09-26 00:31:26 +0000 |
commit | 89cb18f549cff18c5aca68afdc382d122adf309f (patch) | |
tree | 558a892e3a07b735cdb4387c74c88074e4232087 | |
parent | 58648a2773457c7b33593b0f3917d51be90fc265 (diff) | |
parent | 2e864a926a870268de84a86b79d48f388444f8e0 (diff) | |
download | base-89cb18f549cff18c5aca68afdc382d122adf309f.tar.gz |
Merge "Add support for ImageReader in RNG." into android12-hostruntime-dev
-rw-r--r-- | core/jni/Android.bp | 14 | ||||
-rw-r--r-- | core/jni/RobolectricNativeRuntime.cpp | 2 | ||||
-rw-r--r-- | media/jni/Android.bp | 8 | ||||
-rw-r--r-- | media/jni/android_media_ImageReader.cpp | 59 | ||||
-rw-r--r-- | media/jni/android_media_Utils.cpp | 8 |
5 files changed, 91 insertions, 0 deletions
diff --git a/core/jni/Android.bp b/core/jni/Android.bp index 6c15945f08f1..b63235d30901 100644 --- a/core/jni/Android.bp +++ b/core/jni/Android.bp @@ -317,6 +317,12 @@ cc_library_shared { cflags: [ "-Wno-unused-const-variable", "-Wno-unused-function", + "-DLOG_ALWAYS_FATAL_IF(cond, ...)=if(cond) LOG_ALWAYS_FATAL(...)", + "-DLOG_ALWAYS_FATAL(...)=__android_log_call_aborter(\"Fatal Error\")", + // Use all declarations in native_window.h in Layoutlib + "-D__INTRODUCED_IN(n)=", + "-D__ANDROID_API__=10000", + "-D__HOST_JVM__", ], srcs: [ "LayoutlibLoader.cpp", @@ -410,6 +416,12 @@ cc_library_shared { }, }, host: { + cflags: [ + "-Wno-unused-const-variable", + "-Wno-unused-function", + // Declarations used in native_window.h + "-D__INTRODUCED_IN(n)=", + ], srcs: [ "android_animation_PropertyValuesHolder.cpp", "libcore_util_NativeAllocationRegistry.cpp", @@ -422,6 +434,8 @@ cc_library_shared { "com_android_internal_util_VirtualRefBasePtr.cpp", "android_view_Surface.cpp", "RobolectricNativeRuntime.cpp", + // Utilized to get rendered result pixels + ":libmedia_host_common", ], static_libs: [ "libnativehelper", diff --git a/core/jni/RobolectricNativeRuntime.cpp b/core/jni/RobolectricNativeRuntime.cpp index b91d83881038..42cf75d68813 100644 --- a/core/jni/RobolectricNativeRuntime.cpp +++ b/core/jni/RobolectricNativeRuntime.cpp @@ -10,6 +10,7 @@ static JavaVM* javaVM; extern int register_libcore_util_NativeAllocationRegistry(JNIEnv* env); +extern int register_android_media_ImageReader(JNIEnv* env); namespace android { @@ -32,6 +33,7 @@ static const RegJNIRec sqliteJNI[] = { static const RegJNIRec graphicsJNI[] = { REG_JNI(register_android_animation_PropertyValuesHolder), + REG_JNI(register_android_media_ImageReader), REG_JNI(register_android_view_Surface), REG_JNI(register_com_android_internal_util_VirtualRefBasePtr), REG_JNI(register_libcore_util_NativeAllocationRegistry), diff --git a/media/jni/Android.bp b/media/jni/Android.bp index bc73f6ad1ad2..cf94dd8dedf1 100644 --- a/media/jni/Android.bp +++ b/media/jni/Android.bp @@ -214,3 +214,11 @@ cc_library_shared { "-Wunreachable-code", ], } + +filegroup { + name: "libmedia_host_common", + srcs: [ + "android_media_ImageReader.cpp", + "android_media_Utils.cpp", + ], +} diff --git a/media/jni/android_media_ImageReader.cpp b/media/jni/android_media_ImageReader.cpp index 5174c0c04dbf..b9deafab588b 100644 --- a/media/jni/android_media_ImageReader.cpp +++ b/media/jni/android_media_ImageReader.cpp @@ -32,9 +32,17 @@ #include <android_runtime/android_view_Surface.h> #include <android_runtime/android_graphics_GraphicBuffer.h> #include <android_runtime/android_hardware_HardwareBuffer.h> +#ifdef __ANDROID__ // Layoutlib does not support Gr #include <grallocusage/GrallocUsageConversion.h> +#else +#define GRALLOC_USAGE_PROTECTED 0 +#define GRALLOC_USAGE_SW_READ_OFTEN 0 +#define GRALLOC_USAGE_SW_WRITE_OFTEN 0 +#endif +#ifdef __ANDROID__ // Layoutlib does not support hardware #include <private/android/AHardwareBufferHelpers.h> +#endif #include <jni.h> #include <nativehelper/JNIHelp.h> @@ -395,7 +403,11 @@ static void ImageReader_init(JNIEnv* env, jobject thiz, jobject weakThiz, jint w width, height, format, maxImages, getpid(), createProcessUniqueId()); uint64_t consumerUsage = +#ifdef __ANDROID__ // Layoutlib does not support hardware android_hardware_HardwareBuffer_convertToGrallocUsageBits(ndkUsage); +#else + 0; +#endif bufferConsumer = new BufferItemConsumer(gbConsumer, consumerUsage, maxImages, /*controlledByApp*/true); @@ -746,6 +758,7 @@ static bool Image_getLockedImageInfo(JNIEnv* env, LockedImage* buffer, int idx, return true; } +#ifdef __ANDROID__ static void ImageReader_unlockGraphicBuffer(JNIEnv* env, jobject /*thiz*/, jobject buffer) { sp<GraphicBuffer> graphicBuffer = @@ -828,6 +841,7 @@ static jobjectArray ImageReader_createImagePlanes(JNIEnv* env, jobject /*thiz*/, return imagePlanes; } +#endif static jobjectArray Image_createSurfacePlanes(JNIEnv* env, jobject thiz, int numPlanes, int readerFormat, uint64_t ndkReaderUsage) @@ -901,6 +915,7 @@ static jint Image_getHeight(JNIEnv* env, jobject thiz) return getBufferHeight(buffer); } +#ifdef __ANDROID__ static jint Image_getFenceFd(JNIEnv* env, jobject thiz) { BufferItem* buffer = Image_getBufferItem(env, thiz); @@ -910,6 +925,7 @@ static jint Image_getFenceFd(JNIEnv* env, jobject thiz) return -1; } +#endif static jint Image_getFormat(JNIEnv* env, jobject thiz, jint readerFormat) { @@ -934,6 +950,7 @@ static jint Image_getFormat(JNIEnv* env, jobject thiz, jint readerFormat) } } +#ifdef __ANDROID__ // Layoutlib does not support hardware static jobject Image_getHardwareBuffer(JNIEnv* env, jobject thiz) { BufferItem* buffer = Image_getBufferItem(env, thiz); AHardwareBuffer* b = AHardwareBuffer_from_GraphicBuffer(buffer->mGraphicBuffer.get()); @@ -941,6 +958,29 @@ static jobject Image_getHardwareBuffer(JNIEnv* env, jobject thiz) { // to link against libandroid.so return android_hardware_HardwareBuffer_createFromAHardwareBuffer(env, b); } +#endif + +#ifndef __ANDROID__ + +static jobjectArray Image_createSurfacePlanes_SurfaceImage(JNIEnv* env, jclass clazz, jobject image, + int numPlanes, int readerFormat, + uint64_t ndkReaderUsage) { + return Image_createSurfacePlanes(env, image, numPlanes, readerFormat, ndkReaderUsage); +} + +static jint Image_getWidth_SurfaceImage(JNIEnv* env, jclass clazz, jobject image) { + return Image_getWidth(env, image); +} + +static jint Image_getHeight_SurfaceImage(JNIEnv* env, jclass clazz, jobject image) { + return Image_getHeight(env, image); +} + +static jint Image_getFormat_SurfaceImage(JNIEnv* env, jclass clazz, jobject image, + jint readerFormat) { + return Image_getFormat(env, image, readerFormat); +} +#endif } // extern "C" @@ -954,23 +994,42 @@ static const JNINativeMethod gImageReaderMethods[] = { {"nativeImageSetup", "(Landroid/media/Image;)I", (void*)ImageReader_imageSetup }, {"nativeGetSurface", "()Landroid/view/Surface;", (void*)ImageReader_getSurface }, {"nativeDetachImage", "(Landroid/media/Image;)I", (void*)ImageReader_detachImage }, +#ifdef __ANDROID__ {"nativeCreateImagePlanes", "(ILandroid/graphics/GraphicBuffer;IIIIII)[Landroid/media/ImageReader$ImagePlane;", (void*)ImageReader_createImagePlanes }, {"nativeUnlockGraphicBuffer", "(Landroid/graphics/GraphicBuffer;)V", (void*)ImageReader_unlockGraphicBuffer }, +#endif {"nativeDiscardFreeBuffers", "()V", (void*)ImageReader_discardFreeBuffers } }; static const JNINativeMethod gImageMethods[] = { +#ifdef __ANDROID__ {"nativeCreatePlanes", "(IIJ)[Landroid/media/ImageReader$SurfaceImage$SurfacePlane;", (void*)Image_createSurfacePlanes }, +#else // No access to ImageReader$SurfaceImage$SurfacePlane in RNG + {"nativeCreatePlanes", "(IIJ)[Ljava/lang/Object;", (void*)Image_createSurfacePlanes }, +#endif {"nativeGetWidth", "()I", (void*)Image_getWidth }, {"nativeGetHeight", "()I", (void*)Image_getHeight }, {"nativeGetFormat", "(I)I", (void*)Image_getFormat }, +#ifdef __ANDROID__ // Layoutlib does not support hardware {"nativeGetFenceFd", "()I", (void*)Image_getFenceFd }, {"nativeGetHardwareBuffer", "()Landroid/hardware/HardwareBuffer;", (void*)Image_getHardwareBuffer }, +#endif + +#ifndef __ANDROID__ + {"nativeSurfaceImageCreatePlanes", "(Ljava/lang/Object;IIJ)[Ljava/lang/Object;", + (void*)Image_createSurfacePlanes_SurfaceImage }, + {"nativeSurfaceImageGetWidth", "(Ljava/lang/Object;)I", + (void*)Image_getWidth_SurfaceImage }, + {"nativeSurfaceImageGetHeight", "(Ljava/lang/Object;)I", + (void*)Image_getHeight_SurfaceImage }, + {"nativeSurfaceImageGetFormat", "(Ljava/lang/Object;I)I", + (void*)Image_getFormat_SurfaceImage }, +#endif }; int register_android_media_ImageReader(JNIEnv *env) { diff --git a/media/jni/android_media_Utils.cpp b/media/jni/android_media_Utils.cpp index ecd9cc1cd098..0a9eaaebf5e3 100644 --- a/media/jni/android_media_Utils.cpp +++ b/media/jni/android_media_Utils.cpp @@ -17,7 +17,9 @@ // #define LOG_NDEBUG 0 #define LOG_TAG "AndroidMediaUtils" +#ifdef __ANDROID__ // Layoutlib does not support hardware #include <hardware/camera3.h> +#endif #include <utils/Log.h> #include "android_media_Utils.h" @@ -80,6 +82,7 @@ bool isPossiblyYUV(PixelFormat format) { } } +#ifdef __ANDROID__ // Layoutlib does not support hardware uint32_t Image_getBlobSize(LockedImage* buffer, bool usingRGBAOverride) { ALOGV("%s", __FUNCTION__); LOG_ALWAYS_FATAL_IF(buffer == NULL, "Input buffer is NULL!!!"); @@ -115,6 +118,11 @@ uint32_t Image_getBlobSize(LockedImage* buffer, bool usingRGBAOverride) { return size; } +#else +uint32_t Image_getBlobSize(LockedImage* buffer, bool usingRGBAOverride) { + return buffer->stride * buffer->height * 4; +} +#endif status_t getLockedImageInfo(LockedImage* buffer, int idx, int32_t containerFormat, uint8_t **base, uint32_t *size, int *pixelStride, int *rowStride) { |