From d8877a259c3539859d1a7af97b375e9edb2ae8e5 Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Fri, 14 Mar 2025 09:40:30 +0200 Subject: [PATCH] initialize capture library in service thread, fix sigsegv fault --- build.gradle | 2 +- .../sparrowwallet/sparrow/control/WebcamService.java | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 8a1f6985..bebb0bd8 100644 --- a/build.gradle +++ b/build.gradle @@ -87,7 +87,7 @@ dependencies { implementation('com.fasterxml.jackson.core:jackson-databind:2.17.2') implementation('com.sparrowwallet:hummingbird:1.7.4') implementation('co.nstant.in:cbor:0.9') - implementation('org.openpnp:openpnp-capture-java:0.0.28-3') + implementation('org.openpnp:openpnp-capture-java:0.0.28-4') implementation("io.matthewnelson.kotlin-components:kmp-tor:${vTor}-${vKmpTor}") { exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-common' } diff --git a/src/main/java/com/sparrowwallet/sparrow/control/WebcamService.java b/src/main/java/com/sparrowwallet/sparrow/control/WebcamService.java index 6ae03ce7..425aa2e9 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/WebcamService.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/WebcamService.java @@ -45,7 +45,7 @@ public class WebcamService extends ScheduledService { private static final int QR_SAMPLE_PERIOD_MILLIS = 200; - private final OpenPnpCapture capture; + private OpenPnpCapture capture; private CaptureStream stream; private PropertyLimits zoomLimits; private long lastQrSampleTime; @@ -82,7 +82,6 @@ public class WebcamService extends ScheduledService { } public WebcamService(WebcamResolution requestedResolution, CaptureDevice requestedDevice) { - this.capture = new OpenPnpCapture(); this.resolution = requestedResolution; this.device = requestedDevice; this.lastQrSampleTime = System.currentTimeMillis(); @@ -96,6 +95,8 @@ public class WebcamService extends ScheduledService { @Override protected Image call() throws Exception { try { + createCapture(); + if(stream == null) { devices = capture.getDevices(); @@ -178,6 +179,12 @@ public class WebcamService extends ScheduledService { }; } + private synchronized void createCapture() { + if(capture == null) { + capture = new OpenPnpCapture(); + } + } + @Override public void reset() { stream = null;