Add fence support in ImageWriter class.
- Add SyncFence class that include FileDescriptor and related functions
- expose fence file descriptor setter/getter in the Image class
Bug: 210919185
Test: android.hardware.camera2.cts.ImageWriterTest
Change-Id: I7428db26e3e6ca84675d2ce2ef4def46ed0b1397
diff --git a/media/jni/android_media_ImageWriter.cpp b/media/jni/android_media_ImageWriter.cpp
index eca26dc..8f5c9da 100644
--- a/media/jni/android_media_ImageWriter.cpp
+++ b/media/jni/android_media_ImageWriter.cpp
@@ -42,7 +42,6 @@
#include <deque>
#define IMAGE_BUFFER_JNI_ID "mNativeBuffer"
-#define IMAGE_FORMAT_UNKNOWN 0 // This is the same value as ImageFormat#UNKNOWN.
// ----------------------------------------------------------------------------
using namespace android;
@@ -991,6 +990,11 @@
static void Image_setFenceFd(JNIEnv* env, jobject thiz, int fenceFd) {
ALOGV("%s:", __FUNCTION__);
+ int curtFenceFd = reinterpret_cast<jint>(
+ env->GetIntField(thiz,gSurfaceImageClassInfo.mNativeFenceFd));
+ if (curtFenceFd != -1) {
+ close(curtFenceFd);
+ }
env->SetIntField(thiz, gSurfaceImageClassInfo.mNativeFenceFd, reinterpret_cast<jint>(fenceFd));
}
@@ -1120,6 +1124,7 @@
{"nativeGetWidth", "()I", (void*)Image_getWidth },
{"nativeGetHeight", "()I", (void*)Image_getHeight },
{"nativeGetFormat", "(J)I", (void*)Image_getFormat },
+ {"nativeSetFenceFd", "(I)V", (void*)Image_setFenceFd },
{"nativeGetHardwareBuffer", "()Landroid/hardware/HardwareBuffer;",
(void*)Image_getHardwareBuffer },
};