Snap for 5476769 from 76835be663b5a1723d7134bfb9fca58b0ed2a4e8 to qt-release
Change-Id: I2363f0efbebbf5dee02557e94125510bea9ce6c4
diff --git a/shared/OpenglCodecCommon/gralloc_cb.h b/shared/OpenglCodecCommon/gralloc_cb.h
index 927c820..ee4bd9a 100644
--- a/shared/OpenglCodecCommon/gralloc_cb.h
+++ b/shared/OpenglCodecCommon/gralloc_cb.h
@@ -31,7 +31,8 @@
enum EmulatorFrameworkFormat {
FRAMEWORK_FORMAT_GL_COMPATIBLE = 0,
FRAMEWORK_FORMAT_YV12 = 1,
- FRAMEWORK_FORMAT_YUV_420_888 = 2,
+ FRAMEWORK_FORMAT_YUV_420_888 = 2, // (Y+)(U+)(V+)
+ FRAMEWORK_FORMAT_YUV_420_888_INTERLEAVED = 3, // (Y+)(UV)+
};
//
diff --git a/system/gralloc/gralloc.cpp b/system/gralloc/gralloc.cpp
index 3706bc6..aace8e3 100644
--- a/system/gralloc/gralloc.cpp
+++ b/system/gralloc/gralloc.cpp
@@ -622,7 +622,13 @@
// We are going to use RGB888 on the host
glFormat = GL_RGB;
glType = GL_UNSIGNED_BYTE;
- selectedEmuFrameworkFormat = FRAMEWORK_FORMAT_YUV_420_888;
+
+ if (usage & (GRALLOC_USAGE_HW_CAMERA_READ | GRALLOC_USAGE_HW_CAMERA_WRITE)) {
+ // EmulatedFakeCamera3.cpp assumes it is NV21
+ selectedEmuFrameworkFormat = FRAMEWORK_FORMAT_YUV_420_888_INTERLEAVED;
+ } else {
+ selectedEmuFrameworkFormat = FRAMEWORK_FORMAT_YUV_420_888;
+ }
break;
default:
ALOGE("gralloc_alloc: Unknown format %d", format);
@@ -1360,12 +1366,21 @@
cStep = 1;
break;
case HAL_PIXEL_FORMAT_YCbCr_420_888:
- yStride = cb->width;
- cStride = yStride / 2;
- yOffset = 0;
- uOffset = cb->height * yStride;
- vOffset = uOffset + cStride * cb->height / 2;
- cStep = 1;
+ if (cb->emuFrameworkFormat == FRAMEWORK_FORMAT_YUV_420_888_INTERLEAVED) {
+ yStride = cb->width;
+ cStride = cb->width;
+ yOffset = 0;
+ vOffset = yStride * cb->height;
+ uOffset = vOffset + 1;
+ cStep = 2;
+ } else {
+ yStride = cb->width;
+ cStride = yStride / 2;
+ yOffset = 0;
+ uOffset = cb->height * yStride;
+ vOffset = uOffset + cStride * cb->height / 2;
+ cStep = 1;
+ }
break;
default:
ALOGE("gralloc_lock_ycbcr unexpected internal format %x",