diff options
| author | 2024-09-24 11:32:28 +0800 | |
|---|---|---|
| committer | 2024-09-29 14:50:10 +0800 | |
| commit | bb99f50224b529b34402bc4fa4d58f4c4f7799ac (patch) | |
| tree | 23f60ba5da66a9bb553d96b07fca2c58826c9be6 | |
| parent | d52e734a2ec8935e4f246a7521e3b4f3f8e89701 (diff) | |
Improve the use of pointer
BUG: 369257140
Test: atest android.hardware.camera2.cts.ImageWriterTest
Change-Id: I617ddaeb60d633e694a21b81e406e4c23094a02f
Signed-off-by: guochuang <guochuang@xiaomi.corp-partner.google.com>
| -rw-r--r-- | media/jni/android_media_ImageWriter.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/media/jni/android_media_ImageWriter.cpp b/media/jni/android_media_ImageWriter.cpp index 2c498e5bb4ef..1216ae25a0ef 100644 --- a/media/jni/android_media_ImageWriter.cpp +++ b/media/jni/android_media_ImageWriter.cpp @@ -1023,16 +1023,19 @@ static void Image_getLockedImage(JNIEnv* env, jobject thiz, LockedImage *image) return; } + // Maintain a StrongPointer so that the GraphicBuffer isn't destroyed when the + // StrongPointer in lockImageFromBuffer goes out of scope. + sp<GraphicBuffer> bufferSp(buffer); // ImageWriter doesn't use crop by itself, app sets it, use the no crop version. - const Rect noCrop(buffer->width, buffer->height); + const Rect noCrop(bufferSp->width, bufferSp->height); status_t res = lockImageFromBuffer( - buffer, GRALLOC_USAGE_SW_WRITE_OFTEN, noCrop, fenceFd, image); + bufferSp, GRALLOC_USAGE_SW_WRITE_OFTEN, noCrop, fenceFd, image); // Clear the fenceFd as it is already consumed by lock call. Image_setFenceFd(env, thiz, /*fenceFd*/-1); if (res != OK) { jniThrowExceptionFmt(env, "java/lang/RuntimeException", "lock buffer failed for format 0x%x", - buffer->getPixelFormat()); + bufferSp->getPixelFormat()); return; } |