Fix camera black screen/bufferqueue abandonment and bump to v23.01.63
This commit is contained in:
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
|
||||
}
|
||||
}
|
||||
+13
-3
@@ -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
|
||||
|
||||
Reference in new issue
Block a user