4package org.qtproject.qt.android.multimedia.qffmpeg;
6import android.app.Activity;
7import android.hardware.camera2.CameraManager;
8import android.os.Handler;
9import android.os.HandlerThread;
10import android.util.Log;
12import org.qtproject.qt.android.UsedFromNativeCode;
14import java.util.concurrent.CountDownLatch;
20class QtCameraAvailabilityListener
extends CameraManager.AvailabilityCallback {
22 static final String LOG_TAG =
"QtCameraAvailabilityListener";
24 CameraManager mCameraManager =
null;
27 long mVideoDevicesNativePtr = 0;
29 HandlerThread mHandlerThread =
null;
30 Handler mAvailabilityCallbackHandler =
null;
34 QtCameraAvailabilityListener(Activity activity,
long videoDevicesNativePtr) {
35 mCameraManager = (CameraManager)
activity.getSystemService(Activity.CAMERA_SERVICE);
36 mVideoDevicesNativePtr = videoDevicesNativePtr;
38 assert(mHandlerThread ==
null);
39 mHandlerThread =
new HandlerThread(
"QtCameraAvailabilityCallbacks");
40 mHandlerThread.start();
41 mAvailabilityCallbackHandler =
new Handler(mHandlerThread.getLooper());
52 mCameraManager.registerAvailabilityCallback(
this, mAvailabilityCallbackHandler);
61 assert(!mAvailabilityCallbackHandler.getLooper().isCurrentThread());
65 final CountDownLatch latch =
new CountDownLatch(1);
66 final boolean postSuccess = mAvailabilityCallbackHandler.post(() -> {
67 mCameraManager.unregisterAvailabilityCallback(
this);
68 assert(mVideoDevicesNativePtr != 0);
69 mVideoDevicesNativePtr = 0;
76 "Unable to post cleanup job to corresponding thread during " +
77 "QAndroidVideoDevices cleanup.");
83 }
catch (Exception e) {
86 "Unable to wait for cleanup job to finish on corresponding thread during" +
87 "QAndroidVideoDevices cleanup.");
90 mHandlerThread.quitSafely();
91 mHandlerThread =
null;
92 mAvailabilityCallbackHandler =
null;
95 native
void onCameraAvailableNative(
long videoDevicesNativePtr);
100 public void onCameraAvailable(
String cameraId) {
101 assert(mAvailabilityCallbackHandler.getLooper().isCurrentThread());
102 assert(mVideoDevicesNativePtr != 0);
103 onCameraAvailableNative(mVideoDevicesNativePtr);
106 native
void onCameraUnavailableNative(
long videoDevicesNativePtr);
109 public void onCameraUnavailable(
String cameraId) {
110 assert(mAvailabilityCallbackHandler.getLooper().isCurrentThread());
111 assert(mVideoDevicesNativePtr != 0);
112 onCameraUnavailableNative(mVideoDevicesNativePtr);
116 public void onCameraAccessPrioritiesChanged() {
Q_CORE_EXPORT QtJniTypes::Activity activity()