From 0782aab077b32613c6715190135008dbf3dc5d6d Mon Sep 17 00:00:00 2001 From: Chien-Yu Chen Date: Thu, 11 Jun 2015 16:48:13 -0700 Subject: [PATCH] ImageReader: Fix format workarounds for legacy devices Legacy shim overrides HAL_PIXEL_FORMAT_BLOB to HAL_PIXEL_FORMAT_RGBA_8888. Make ImageReader aware of the workaround when returning the format. Remove the workaround in legacy shim that overrides YUV_420_888 to YV12 because allocating YUV_420_888 buffers with SW access is supported on Flo. Bug: 21707937 Change-Id: I84a8610c82ae986a0064873f611e4f257baf1774 --- .../hardware/camera2/legacy/SurfaceTextureRenderer.java | 2 -- media/jni/android_media_ImageReader.cpp | 5 ++++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/core/java/android/hardware/camera2/legacy/SurfaceTextureRenderer.java b/core/java/android/hardware/camera2/legacy/SurfaceTextureRenderer.java index f928a55597da6..bc80fc1147722 100644 --- a/core/java/android/hardware/camera2/legacy/SurfaceTextureRenderer.java +++ b/core/java/android/hardware/camera2/legacy/SurfaceTextureRenderer.java @@ -630,8 +630,6 @@ public class SurfaceTextureRenderer { holder.width = surfaceSize.getWidth(); holder.height = surfaceSize.getHeight(); if (LegacyCameraDevice.needsConversion(s)) { - // Always override to YV12 output for YUV surface formats. - LegacyCameraDevice.setSurfaceFormat(s, ImageFormat.YV12); mConversionSurfaces.add(holder); } else { mSurfaces.add(holder); diff --git a/media/jni/android_media_ImageReader.cpp b/media/jni/android_media_ImageReader.cpp index 49614bdc76fd9..b3393a7265066 100644 --- a/media/jni/android_media_ImageReader.cpp +++ b/media/jni/android_media_ImageReader.cpp @@ -1229,8 +1229,11 @@ static jint Image_getFormat(JNIEnv* env, jobject thiz, jint readerFormat) return static_cast(PublicFormat::PRIVATE); } else { CpuConsumer::LockedBuffer* buffer = Image_getLockedBuffer(env, thiz); + int readerHalFormat = android_view_Surface_mapPublicFormatToHalFormat( + static_cast(readerFormat)); + int32_t fmt = applyFormatOverrides(buffer->flexFormat, readerHalFormat); PublicFormat publicFmt = android_view_Surface_mapHalFormatDataspaceToPublicFormat( - buffer->flexFormat, buffer->dataSpace); + fmt, buffer->dataSpace); return static_cast(publicFmt); } }