diff options
| -rw-r--r-- | core/jni/android_window_ScreenCapture.cpp | 28 |
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(); } |