diff options
author | Scott Nien <scottnien@google.com> | 2023-09-20 07:47:56 +0000 |
---|---|---|
committer | Scott Nien <scottnien@google.com> | 2023-09-20 07:47:56 +0000 |
commit | 80c5eaad25cb4d604513ac3457f16005cf169ee0 (patch) | |
tree | 359178931e0acb19a9db5a326e9609efdbbcc99a | |
parent | 0d0c6731430f3f230e25d6fde6e69c5acca5769b (diff) | |
download | ex-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
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) { |