summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Nien <scottnien@google.com>2023-09-20 07:47:56 +0000
committerScott Nien <scottnien@google.com>2023-09-20 07:47:56 +0000
commit80c5eaad25cb4d604513ac3457f16005cf169ee0 (patch)
tree359178931e0acb19a9db5a326e9609efdbbcc99a
parent0d0c6731430f3f230e25d6fde6e69c5acca5769b (diff)
downloadex-80c5eaad25cb4d604513ac3457f16005cf169ee0.tar.gz
Fixed the black preview on the apps that uses older version of camerax that
didn't invoke InitializerImpl.init() Some app uses older version of CameraX that didn't invoke InitializerImpl.init() which causes the ServiceManager unable to initialize properly and cause the black preview. This CL fixed the issues and will makes isExtensionAvailable returns false on these apps. Bug: 301204044 Test: manual test Change-Id: I6a736218a5df4d82338c86e6c43c39566ab38481
-rw-r--r--camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ForwardAdvancedExtender.java31
-rw-r--r--camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ForwardImageCaptureExtender.java56
-rw-r--r--camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ForwardPreviewExtender.java40
-rw-r--r--camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ServiceManager.java30
4 files changed, 151 insertions, 6 deletions
diff --git a/camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ForwardAdvancedExtender.java b/camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ForwardAdvancedExtender.java
index dc57590a..058c0ac3 100644
--- a/camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ForwardAdvancedExtender.java
+++ b/camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ForwardAdvancedExtender.java
@@ -65,6 +65,9 @@ public class ForwardAdvancedExtender implements AdvancedExtenderImpl {
@Override
public boolean isExtensionAvailable(@NonNull String cameraId,
@NonNull Map<String, CameraCharacteristics> characteristicsMap) {
+ if (mIAdvancedExtender == null) {
+ return false;
+ }
try {
return mIAdvancedExtender.isExtensionAvailable(cameraId);
} catch (RemoteException e) {
@@ -76,6 +79,10 @@ public class ForwardAdvancedExtender implements AdvancedExtenderImpl {
@Override
public void init(@NonNull String cameraId,
@NonNull Map<String, CameraCharacteristics> characteristicsMap) {
+ if (mIAdvancedExtender == null) {
+ return;
+ }
+
try {
mCameraId = cameraId;
mIAdvancedExtender.init(cameraId);
@@ -89,6 +96,10 @@ public class ForwardAdvancedExtender implements AdvancedExtenderImpl {
public Range<Long> getEstimatedCaptureLatencyRange(@NonNull String cameraId,
@Nullable Size captureOutputSize,
int imageFormat) {
+ if (mIAdvancedExtender == null) {
+ return null;
+ }
+
try {
androidx.camera.extensions.impl.service.Size size = null;
if (captureOutputSize != null) {
@@ -108,6 +119,10 @@ public class ForwardAdvancedExtender implements AdvancedExtenderImpl {
@Override
public Map<Integer, List<Size>> getSupportedPreviewOutputResolutions(String cameraId) {
+ if (mIAdvancedExtender == null) {
+ return null;
+ }
+
try {
List<SizeList> sizeLists = mIAdvancedExtender.getSupportedPreviewOutputResolutions(
cameraId);
@@ -124,6 +139,10 @@ public class ForwardAdvancedExtender implements AdvancedExtenderImpl {
@Override
public Map<Integer, List<Size>> getSupportedCaptureOutputResolutions(String cameraId) {
+ if (mIAdvancedExtender == null) {
+ return null;
+ }
+
try {
List<SizeList> sizeLists = mIAdvancedExtender.getSupportedCaptureOutputResolutions(
cameraId);
@@ -140,6 +159,10 @@ public class ForwardAdvancedExtender implements AdvancedExtenderImpl {
@Override
public List<Size> getSupportedYuvAnalysisResolutions(String cameraId) {
+ if (mIAdvancedExtender == null) {
+ return null;
+ }
+
try {
List<SizeList> sizeLists = mIAdvancedExtender.getSupportedYuvAnalysisResolutions(
cameraId);
@@ -208,6 +231,10 @@ public class ForwardAdvancedExtender implements AdvancedExtenderImpl {
@Override
@Nullable
public List<CaptureRequest.Key> getAvailableCaptureRequestKeys() {
+ if (mIAdvancedExtender == null) {
+ return null;
+ }
+
try {
CameraMetadataWrapper cameraMetadataWrapper
= mIAdvancedExtender.getAvailableCaptureRequestKeys();
@@ -228,6 +255,10 @@ public class ForwardAdvancedExtender implements AdvancedExtenderImpl {
@Override
@Nullable
public List<CaptureResult.Key> getAvailableCaptureResultKeys() {
+ if (mIAdvancedExtender == null) {
+ return null;
+ }
+
try {
CameraMetadataWrapper cameraMetadataWrapper
= mIAdvancedExtender.getAvailableCaptureResultKeys();
diff --git a/camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ForwardImageCaptureExtender.java b/camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ForwardImageCaptureExtender.java
index 03de94bf..cd6ef3eb 100644
--- a/camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ForwardImageCaptureExtender.java
+++ b/camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ForwardImageCaptureExtender.java
@@ -75,6 +75,10 @@ public class ForwardImageCaptureExtender implements ImageCaptureExtenderImpl {
@Override
public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
Context context) {
+ if (mIImageCaptureExtender == null) {
+ return;
+ }
+
try {
mIImageCaptureExtender.onInit(cameraId);
} catch (RemoteException e) {
@@ -85,6 +89,10 @@ public class ForwardImageCaptureExtender implements ImageCaptureExtenderImpl {
@Override
public void onDeInit() {
+ if (mIImageCaptureExtender == null) {
+ return;
+ }
+
try {
mIImageCaptureExtender.onDeInit();
} catch (RemoteException e) {
@@ -95,6 +103,10 @@ public class ForwardImageCaptureExtender implements ImageCaptureExtenderImpl {
@Override
public CaptureStageImpl onPresetSession() {
+ if (mIImageCaptureExtender == null) {
+ return null;
+ }
+
try {
return convertToCaptureStageImpl(mIImageCaptureExtender.onPresetSession());
} catch (RemoteException e) {
@@ -105,6 +117,10 @@ public class ForwardImageCaptureExtender implements ImageCaptureExtenderImpl {
@Override
public CaptureStageImpl onEnableSession() {
+ if (mIImageCaptureExtender == null) {
+ return null;
+ }
+
try {
return convertToCaptureStageImpl(mIImageCaptureExtender.onEnableSession());
} catch (RemoteException e) {
@@ -115,6 +131,10 @@ public class ForwardImageCaptureExtender implements ImageCaptureExtenderImpl {
@Override
public CaptureStageImpl onDisableSession() {
+ if (mIImageCaptureExtender == null) {
+ return null;
+ }
+
try {
return convertToCaptureStageImpl(mIImageCaptureExtender.onDisableSession());
} catch (RemoteException e) {
@@ -126,6 +146,10 @@ public class ForwardImageCaptureExtender implements ImageCaptureExtenderImpl {
@Override
public boolean isExtensionAvailable(String cameraId,
CameraCharacteristics cameraCharacteristics) {
+ if (mIImageCaptureExtender == null) {
+ return false;
+ }
+
try {
return mIImageCaptureExtender.isExtensionAvailable(cameraId);
} catch (RemoteException e) {
@@ -136,6 +160,10 @@ public class ForwardImageCaptureExtender implements ImageCaptureExtenderImpl {
@Override
public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ if (mIImageCaptureExtender == null) {
+ return;
+ }
+
try {
mIImageCaptureExtender.init(cameraId);
} catch (RemoteException e) {
@@ -146,6 +174,10 @@ public class ForwardImageCaptureExtender implements ImageCaptureExtenderImpl {
@Override
public CaptureProcessorImpl getCaptureProcessor() {
+ if (mIImageCaptureExtender == null) {
+ return null;
+ }
+
try {
ICaptureProcessorImpl captureProcessor = mIImageCaptureExtender.getCaptureProcessor();
if (captureProcessor == null) {
@@ -160,6 +192,10 @@ public class ForwardImageCaptureExtender implements ImageCaptureExtenderImpl {
@Override
public List<CaptureStageImpl> getCaptureStages() {
+ if (mIImageCaptureExtender == null) {
+ return null;
+ }
+
try {
List<CaptureStageImpl> results = new ArrayList<>();
for (CaptureStageImplWrapper wrapper : mIImageCaptureExtender.getCaptureStages()) {
@@ -174,6 +210,10 @@ public class ForwardImageCaptureExtender implements ImageCaptureExtenderImpl {
@Override
public int getMaxCaptureStage() {
+ if (mIImageCaptureExtender == null) {
+ return 0;
+ }
+
try {
return mIImageCaptureExtender.getMaxCaptureStage();
} catch (RemoteException e) {
@@ -184,6 +224,10 @@ public class ForwardImageCaptureExtender implements ImageCaptureExtenderImpl {
@Override
public List<Pair<Integer, Size[]>> getSupportedResolutions() {
+ if (mIImageCaptureExtender == null) {
+ return null;
+ }
+
try {
List<SizeList> sizes = mIImageCaptureExtender.getSupportedResolutions();
if (sizes == null) {
@@ -208,6 +252,10 @@ public class ForwardImageCaptureExtender implements ImageCaptureExtenderImpl {
@Override
public Range<Long> getEstimatedCaptureLatencyRange(Size captureOutputSize) {
+ if (mIImageCaptureExtender == null) {
+ return null;
+ }
+
try {
androidx.camera.extensions.impl.service.Size size = null;
if (captureOutputSize != null) {
@@ -230,6 +278,10 @@ public class ForwardImageCaptureExtender implements ImageCaptureExtenderImpl {
@Override
public List<CaptureRequest.Key> getAvailableCaptureRequestKeys() {
+ if (mIImageCaptureExtender == null) {
+ return null;
+ }
+
try {
CameraMetadataWrapper cameraMetadataWrapper
= mIImageCaptureExtender.getAvailableCaptureRequestKeys();
@@ -251,6 +303,10 @@ public class ForwardImageCaptureExtender implements ImageCaptureExtenderImpl {
@Override
public List<CaptureResult.Key> getAvailableCaptureResultKeys() {
+ if (mIImageCaptureExtender == null) {
+ return null;
+ }
+
try {
CameraMetadataWrapper cameraMetadataWrapper
= mIImageCaptureExtender.getAvailableCaptureResultKeys();
diff --git a/camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ForwardPreviewExtender.java b/camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ForwardPreviewExtender.java
index 81969ca4..2b278990 100644
--- a/camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ForwardPreviewExtender.java
+++ b/camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ForwardPreviewExtender.java
@@ -71,6 +71,10 @@ public class ForwardPreviewExtender implements PreviewExtenderImpl {
@Override
public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
Context context) {
+ if (mIPreviewExtender == null) {
+ return;
+ }
+
try {
mIPreviewExtender.onInit(cameraId);
} catch (RemoteException e) {
@@ -81,6 +85,10 @@ public class ForwardPreviewExtender implements PreviewExtenderImpl {
@Override
public void onDeInit() {
+ if (mIPreviewExtender == null) {
+ return;
+ }
+
try {
mIPreviewExtender.onDeInit();
} catch (RemoteException e) {
@@ -91,6 +99,10 @@ public class ForwardPreviewExtender implements PreviewExtenderImpl {
@Override
public CaptureStageImpl onPresetSession() {
+ if (mIPreviewExtender == null) {
+ return null;
+ }
+
try {
return convertToCaptureStageImpl(mIPreviewExtender.onPresetSession());
} catch (RemoteException e) {
@@ -101,6 +113,10 @@ public class ForwardPreviewExtender implements PreviewExtenderImpl {
@Override
public CaptureStageImpl onEnableSession() {
+ if (mIPreviewExtender == null) {
+ return null;
+ }
+
try {
return convertToCaptureStageImpl(mIPreviewExtender.onEnableSession());
} catch (RemoteException e) {
@@ -111,6 +127,10 @@ public class ForwardPreviewExtender implements PreviewExtenderImpl {
@Override
public CaptureStageImpl onDisableSession() {
+ if (mIPreviewExtender == null) {
+ return null;
+ }
+
try {
return convertToCaptureStageImpl(mIPreviewExtender.onDisableSession());
} catch (RemoteException e) {
@@ -122,6 +142,10 @@ public class ForwardPreviewExtender implements PreviewExtenderImpl {
@Override
public boolean isExtensionAvailable(String cameraId,
CameraCharacteristics cameraCharacteristics) {
+ if (mIPreviewExtender == null) {
+ return false;
+ }
+
try {
return mIPreviewExtender.isExtensionAvailable(cameraId);
} catch (RemoteException e) {
@@ -132,6 +156,10 @@ public class ForwardPreviewExtender implements PreviewExtenderImpl {
@Override
public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ if (mIPreviewExtender == null) {
+ return;
+ }
+
try {
mIPreviewExtender.init(cameraId);
} catch (RemoteException e) {
@@ -142,6 +170,10 @@ public class ForwardPreviewExtender implements PreviewExtenderImpl {
@Override
public CaptureStageImpl getCaptureStage() {
+ if (mIPreviewExtender == null) {
+ return null;
+ }
+
try {
return convertToCaptureStageImpl(mIPreviewExtender.getCaptureStage());
} catch (RemoteException e) {
@@ -152,6 +184,10 @@ public class ForwardPreviewExtender implements PreviewExtenderImpl {
@Override
public ProcessorType getProcessorType() {
+ if (mIPreviewExtender == null) {
+ return ProcessorType.PROCESSOR_TYPE_NONE;
+ }
+
try {
switch (mIPreviewExtender.getProcessorType()) {
case IPreviewExtenderImpl.PROCESSOR_TYPE_REQUEST_UPDATE_ONLY:
@@ -170,6 +206,10 @@ public class ForwardPreviewExtender implements PreviewExtenderImpl {
@Override
public ProcessorImpl getProcessor() {
+ if (mIPreviewExtender == null) {
+ return null;
+ }
+
try {
switch (getProcessorType()) {
case PROCESSOR_TYPE_REQUEST_UPDATE_ONLY:
diff --git a/camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ServiceManager.java b/camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ServiceManager.java
index 76de1c92..90e2a7ca 100644
--- a/camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ServiceManager.java
+++ b/camera2/extensions/service_based_sample/oem_library/src/java/androidx/camera/extensions/impl/serviceforward/ServiceManager.java
@@ -46,15 +46,17 @@ public class ServiceManager {
private static final String SERVICE_SERVICE_NAME =
"com.android.oemextensions.ExtensionsService";
- private static ServiceManager sServiceManager;
+ private static ServiceManager sServiceManager = new ServiceManager();
private static final Object mLock = new Object();
+ private static boolean sInitialized = false;
public static void init(@Nullable Context context, @NonNull String version,
@Nullable InitializerImpl.OnExtensionsInitializedCallback callback,
@Nullable Executor executor) {
synchronized (mLock) {
- if (sServiceManager == null) {
+ if (!sInitialized) {
sServiceManager = new ServiceManager(context, version);
+ sInitialized = true;
}
sServiceManager.bindServiceSync(context);
}
@@ -90,11 +92,16 @@ public class ServiceManager {
}
}
- @NonNull
+ @Nullable
public static ServiceManager getInstance() {
return sServiceManager;
}
+ public ServiceManager() {
+ mContext = null;
+ mVersion = null;
+ }
+
public ServiceManager(@NonNull Context context, @NonNull String version) {
mContext = context;
mVersion = version;
@@ -166,8 +173,12 @@ public class ServiceManager {
}
}
- @NonNull
+ @Nullable
public IAdvancedExtenderImpl createAdvancedExtenderImpl(int extensionType) {
+ if (mContext == null) {
+ return null;
+ }
+
try {
synchronized (mLock) {
if (mExtensionService == null) {
@@ -181,8 +192,12 @@ public class ServiceManager {
}
}
- @NonNull
+ @Nullable
public IImageCaptureExtenderImpl createImageCaptureExtenderImpl(int extensionType) {
+ if (mContext == null) {
+ return null;
+ }
+
try {
synchronized (mLock) {
if (mExtensionService == null) {
@@ -196,8 +211,11 @@ public class ServiceManager {
}
}
- @NonNull
+ @Nullable
public IPreviewExtenderImpl createPreviewExtenderImpl(int extensionType) {
+ if (mContext == null) {
+ return null;
+ }
try {
synchronized (mLock) {
if (mExtensionService == null) {