react-native-rectangle-doc-scanner 3.230.0 → 3.231.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -25,6 +25,7 @@ import androidx.core.content.ContextCompat
25
25
  import java.io.File
26
26
  import java.io.FileOutputStream
27
27
  import java.util.concurrent.atomic.AtomicReference
28
+ import java.util.concurrent.atomic.AtomicBoolean
28
29
  import kotlin.math.abs
29
30
  import kotlin.math.max
30
31
 
@@ -55,6 +56,7 @@ class CameraController(
55
56
  private var torchEnabled = false
56
57
 
57
58
  private val pendingCapture = AtomicReference<PendingCapture?>()
59
+ private val analysisInFlight = AtomicBoolean(false)
58
60
 
59
61
  var onFrameAnalyzed: ((Rectangle?, Int, Int) -> Unit)? = null
60
62
 
@@ -245,10 +247,32 @@ class CameraController(
245
247
  yuvReader = ImageReader.newInstance(analysis.width, analysis.height, ImageFormat.YUV_420_888, 2).apply {
246
248
  setOnImageAvailableListener({ reader ->
247
249
  if (!detectionEnabled || onFrameAnalyzed == null) {
248
- reader.acquireLatestImage()?.close()
250
+ try {
251
+ reader.acquireLatestImage()?.close()
252
+ } catch (e: Exception) {
253
+ Log.w(TAG, "[CAMERA2] Failed to drain analysis image", e)
254
+ }
255
+ return@setOnImageAvailableListener
256
+ }
257
+ if (!analysisInFlight.compareAndSet(false, true)) {
258
+ try {
259
+ reader.acquireLatestImage()?.close()
260
+ } catch (e: Exception) {
261
+ Log.w(TAG, "[CAMERA2] Failed to drop analysis image", e)
262
+ }
263
+ return@setOnImageAvailableListener
264
+ }
265
+ val image = try {
266
+ reader.acquireLatestImage()
267
+ } catch (e: Exception) {
268
+ analysisInFlight.set(false)
269
+ Log.w(TAG, "[CAMERA2] acquireLatestImage failed", e)
270
+ null
271
+ }
272
+ if (image == null) {
273
+ analysisInFlight.set(false)
249
274
  return@setOnImageAvailableListener
250
275
  }
251
- val image = reader.acquireLatestImage() ?: return@setOnImageAvailableListener
252
276
  analysisHandler.post { analyzeImage(image) }
253
277
  }, cameraHandler)
254
278
  }
@@ -340,6 +364,7 @@ class CameraController(
340
364
  Log.e(TAG, "[CAMERA2] Error analyzing frame", e)
341
365
  } finally {
342
366
  image.close()
367
+ analysisInFlight.set(false)
343
368
  }
344
369
  }
345
370
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-rectangle-doc-scanner",
3
- "version": "3.230.0",
3
+ "version": "3.231.0",
4
4
  "description": "Native-backed document scanner for React Native with customizable overlays.",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",