[go: nahoru, domu]

Fix a potential NullPointerException when exploring EncoderProfiles

Bug: N/A
Test: QualityExploredEncoderProfilesProviderTest#canNotExploreQualities_whenCannotFindEncoderInfo
Change-Id: I81165dfb452b340217e085e68f3ea1b451f52e4a
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/QualityExploredEncoderProfilesProvider.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/QualityExploredEncoderProfilesProvider.java
index 31d838b..84faba9 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/QualityExploredEncoderProfilesProvider.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/QualityExploredEncoderProfilesProvider.java
@@ -160,7 +160,8 @@
                 VideoEncoderConfig encoderConfig = toVideoEncoderConfig(baseVideoProfile);
                 VideoEncoderInfo encoderInfo = mVideoEncoderInfoFinder.apply(encoderConfig);
                 // Check if size is valid for the Encoder.
-                if (!encoderInfo.isSizeSupported(size.getWidth(), size.getHeight())) {
+                if (encoderInfo == null
+                        || !encoderInfo.isSizeSupported(size.getWidth(), size.getHeight())) {
                     continue;
                 }
                 // Add the encoderProfiles to the candidates of base EncoderProfiles.
diff --git a/camera/camera-video/src/test/java/androidx/camera/video/internal/QualityExploredEncoderProfilesProviderTest.kt b/camera/camera-video/src/test/java/androidx/camera/video/internal/QualityExploredEncoderProfilesProviderTest.kt
index d607079..75cbe8d 100644
--- a/camera/camera-video/src/test/java/androidx/camera/video/internal/QualityExploredEncoderProfilesProviderTest.kt
+++ b/camera/camera-video/src/test/java/androidx/camera/video/internal/QualityExploredEncoderProfilesProviderTest.kt
@@ -96,6 +96,23 @@
     }
 
     @Test
+    fun canNotExploreQualities_whenCannotFindEncoderInfo() {
+        // Arrange: SD is not a target quality.
+        val targetQualities = setOf(UHD, FHD, HD)
+
+        // Act: EncoderFinder always return null
+        val provider = QualityExploredEncoderProfilesProvider(
+            providerSupportOnlySdrFhd,
+            targetQualities,
+            setOf(SDR),
+            defaultCameraResolutions,
+        ) { null }
+
+        // Assert.
+        verifyQualitiesAreNotSupported(provider, SDR, QUALITY_2160P, QUALITY_720P)
+    }
+
+    @Test
     fun canNotExploreQualities_whenNoBaseProfile() {
         // Arrange: a provider doesn't have any supported qualities.
         val emptyProvider = FakeEncoderProfilesProvider.Builder().build()