From 201323481b95b2a042ef7675f3e6fe7a9931f05a Mon Sep 17 00:00:00 2001 From: Sally Qi Date: Wed, 19 Oct 2022 21:45:57 -0700 Subject: [PATCH] Fix ExtendedCameraCharacteristicsTest cts failures. Relnote: SurfaceUtils#getSurfaceFormat function should return the the formats of Surface, therefore, no need to convert it to public format. Bug: 254349961 Test: android.hardware.camera2.cts.ImageReaderTest, android.hardware.camera2.cts.ImageWriterTest, android.hardware.camera2.cts.ExtendedCameraCharacteristicsTest Change-Id: I58340f684b4fc9cb2578cee03ef1d65171c9eaed --- ...id_hardware_camera2_utils_SurfaceUtils.cpp | 39 +++++++++---------- media/java/android/media/ImageWriter.java | 7 ++-- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/core/jni/android_hardware_camera2_utils_SurfaceUtils.cpp b/core/jni/android_hardware_camera2_utils_SurfaceUtils.cpp index 09f3a727d16e7..2437a511238cf 100644 --- a/core/jni/android_hardware_camera2_utils_SurfaceUtils.cpp +++ b/core/jni/android_hardware_camera2_utils_SurfaceUtils.cpp @@ -89,6 +89,24 @@ static sp getSurface(JNIEnv* env, jobject surface) { extern "C" { +static jint SurfaceUtils_nativeDetectSurfaceType(JNIEnv* env, jobject thiz, jobject surface) { + ALOGV("nativeDetectSurfaceType"); + sp anw; + if ((anw = getNativeWindow(env, surface)) == NULL) { + ALOGE("%s: Could not retrieve native window from surface.", __FUNCTION__); + return BAD_VALUE; + } + int32_t fmt = 0; + status_t err = anw->query(anw.get(), NATIVE_WINDOW_FORMAT, &fmt); + if (err != NO_ERROR) { + ALOGE("%s: Error while querying surface pixel format %s (%d).", __FUNCTION__, + strerror(-err), err); + OVERRIDE_SURFACE_ERROR(err); + return err; + } + return fmt; +} + static jint SurfaceUtils_nativeDetectSurfaceDataspace(JNIEnv* env, jobject thiz, jobject surface) { ALOGV("nativeDetectSurfaceDataspace"); sp anw; @@ -107,27 +125,6 @@ static jint SurfaceUtils_nativeDetectSurfaceDataspace(JNIEnv* env, jobject thiz, return fmt; } -static jint SurfaceUtils_nativeDetectSurfaceType(JNIEnv* env, jobject thiz, jobject surface) { - ALOGV("nativeDetectSurfaceType"); - sp anw; - if ((anw = getNativeWindow(env, surface)) == NULL) { - ALOGE("%s: Could not retrieve native window from surface.", __FUNCTION__); - return BAD_VALUE; - } - int32_t halFmt = 0; - status_t err = anw->query(anw.get(), NATIVE_WINDOW_FORMAT, &halFmt); - if (err != NO_ERROR) { - ALOGE("%s: Error while querying surface pixel format %s (%d).", __FUNCTION__, - strerror(-err), err); - OVERRIDE_SURFACE_ERROR(err); - return err; - } - int32_t dataspace = SurfaceUtils_nativeDetectSurfaceDataspace(env, thiz, surface); - int32_t fmt = static_cast( - mapHalFormatDataspaceToPublicFormat(halFmt, static_cast(dataspace))); - return fmt; -} - static jint SurfaceUtils_nativeDetectSurfaceDimens(JNIEnv* env, jobject thiz, jobject surface, jintArray dimens) { ALOGV("nativeGetSurfaceDimens"); diff --git a/media/java/android/media/ImageWriter.java b/media/java/android/media/ImageWriter.java index 39b3d0b47a278..0291f64c06408 100644 --- a/media/java/android/media/ImageWriter.java +++ b/media/java/android/media/ImageWriter.java @@ -264,10 +264,9 @@ public class ImageWriter implements AutoCloseable { if (useSurfaceImageFormatInfo) { // nativeInit internally overrides UNKNOWN format. So does surface format query after // nativeInit and before getEstimatedNativeAllocBytes(). - imageFormat = SurfaceUtils.getSurfaceFormat(surface); - mDataSpace = dataSpace = PublicFormatUtils.getHalDataspace(imageFormat); - mHardwareBufferFormat = - hardwareBufferFormat = PublicFormatUtils.getHalFormat(imageFormat); + mHardwareBufferFormat = hardwareBufferFormat = SurfaceUtils.getSurfaceFormat(surface); + mDataSpace = dataSpace = SurfaceUtils.getSurfaceDataspace(surface); + imageFormat = PublicFormatUtils.getPublicFormat(hardwareBufferFormat, dataSpace); } // Estimate the native buffer allocation size and register it so it gets accounted for