summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/jni/android_window_ScreenCapture.cpp28
1 files changed, 15 insertions, 13 deletions
diff --git a/core/jni/android_window_ScreenCapture.cpp b/core/jni/android_window_ScreenCapture.cpp
index 7b085b16d24b..ba74b0e8cce5 100644
--- a/core/jni/android_window_ScreenCapture.cpp
+++ b/core/jni/android_window_ScreenCapture.cpp
@@ -109,27 +109,29 @@ public:
return binder::Status::ok();
}
captureResults.fenceResult.value()->waitForever(LOG_TAG);
- jobject jhardwareBuffer = android_hardware_HardwareBuffer_createFromAHardwareBuffer(
- env, captureResults.buffer->toAHardwareBuffer());
- jobject jGainmap = nullptr;
+ auto jhardwareBuffer = ScopedLocalRef<jobject>(
+ env, android_hardware_HardwareBuffer_createFromAHardwareBuffer(
+ env, captureResults.buffer->toAHardwareBuffer()));
+ auto jGainmap = ScopedLocalRef<jobject>(env);
if (captureResults.optionalGainMap) {
- jGainmap = android_hardware_HardwareBuffer_createFromAHardwareBuffer(
- env, captureResults.optionalGainMap->toAHardwareBuffer());
+ jGainmap = ScopedLocalRef<jobject>(
+ env, android_hardware_HardwareBuffer_createFromAHardwareBuffer(
+ env, captureResults.optionalGainMap->toAHardwareBuffer()));
}
- jobject screenshotHardwareBuffer =
- env->CallStaticObjectMethod(gScreenshotHardwareBufferClassInfo.clazz,
+ auto screenshotHardwareBuffer =
+ ScopedLocalRef<jobject>(env, env->CallStaticObjectMethod(
+ gScreenshotHardwareBufferClassInfo.clazz,
gScreenshotHardwareBufferClassInfo.builder,
- jhardwareBuffer,
+ jhardwareBuffer.get(),
static_cast<jint>(captureResults.capturedDataspace),
captureResults.capturedSecureLayers,
- captureResults.capturedHdrLayers, jGainmap,
- captureResults.hdrSdrRatio);
+ captureResults.capturedHdrLayers, jGainmap.get(),
+ captureResults.hdrSdrRatio));
checkAndClearException(env, "builder");
- env->CallVoidMethod(consumer.get(), gConsumerClassInfo.accept, screenshotHardwareBuffer,
+ env->CallVoidMethod(consumer.get(), gConsumerClassInfo.accept,
+ screenshotHardwareBuffer.get(),
fenceStatus(captureResults.fenceResult));
checkAndClearException(env, "accept");
- env->DeleteLocalRef(jhardwareBuffer);
- env->DeleteLocalRef(screenshotHardwareBuffer);
return binder::Status::ok();
}