Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d9d3ccf authored by Alec Mouri's avatar Alec Mouri
Browse files

Pass return value of jni HardwareBuffer to ScopedLocalRef

This also fixes a leak in the screen capture code, when there is a gainmap.

Bug: 402307467
Flag: EXEMPT bug fix
Test: builds
Change-Id: I0826a22093fe83415806fcc716f6580506819f44
parent 14a2512c
Loading
Loading
Loading
Loading
+15 −13
Original line number Diff line number Diff line
@@ -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();
    }