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()