Fix camera black screen/bufferqueue abandonment and bump to v23.01.63

This commit is contained in:
Jannik committed 2026-08-23 20:08:40 +02:00
1 parent 23c1e3c78f
commit a9c689185a
11 files changed
+76 -50

No files matched your search

@@ -106,15 +106,17 @@ class UsbCameraView(context: Context, appContext: AppContext) : ExpoView(context
private var permissionReceiver: android.content.BroadcastReceiver? = null
private var registeredContext: Context? = null
private var safeContext: UsbContextWrapperJava? = null
init {
val activityContext = appContext.currentActivity ?: context
if (activityContext !is androidx.lifecycle.LifecycleOwner) {
throw IllegalStateException("Cannot initialize UsbCameraView because activityContext is not a LifecycleOwner!")
}
val safeContext = UsbContextWrapperJava(activityContext)
val safeContextVal = UsbContextWrapperJava(activityContext)
safeContext = safeContextVal
textureView = AspectRatioTextureView(safeContext)
textureView = AspectRatioTextureView(safeContextVal)
addView(textureView, LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT))
try {
@@ -173,8 +175,8 @@ class UsbCameraView(context: Context, appContext: AppContext) : ExpoView(context
activityContext.registerReceiver(permissionReceiver, filter)
}
cameraClient = CameraClient.newBuilder(safeContext)
.setCameraStrategy(CameraUvcStrategy(safeContext))
cameraClient = CameraClient.newBuilder(safeContextVal)
.setCameraStrategy(CameraUvcStrategy(safeContextVal))
.setCameraRequest(cameraRequest)
.setEnableGLES(false)
.build()
@@ -277,5 +279,12 @@ class UsbCameraView(context: Context, appContext: AppContext) : ExpoView(context
e.printStackTrace()
}
cameraClient = null
try {
safeContext?.destroy()
} catch (e: Exception) {
e.printStackTrace()
}
safeContext = null
}
}
@@ -10,18 +10,28 @@ import android.os.Build;
import android.os.Handler;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LifecycleRegistry;
public class UsbContextWrapperJava extends ContextWrapper implements LifecycleOwner {
private final LifecycleOwner mLifecycleOwner;
private final LifecycleRegistry mLifecycleRegistry;
public UsbContextWrapperJava(Context base) {
super(base);
this.mLifecycleOwner = (LifecycleOwner) base;
this.mLifecycleRegistry = new LifecycleRegistry(this);
this.mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);
this.mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
this.mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME);
}
@Override
public Lifecycle getLifecycle() {
return mLifecycleOwner.getLifecycle();
return mLifecycleRegistry;
}
public void destroy() {
this.mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE);
this.mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP);
this.mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY);
}
@Override