Snap for 5582428 from d50251d8439d22605c5abc7ae27473ab3a31f627 to qt-release
Change-Id: I6f0eb3baf4a7e3e85b2f6261c9a9509a6a5f0b3a
diff --git a/shared/OpenglCodecCommon/gralloc_cb.h b/shared/OpenglCodecCommon/gralloc_cb.h
index ee4bd9a..bff33f3 100644
--- a/shared/OpenglCodecCommon/gralloc_cb.h
+++ b/shared/OpenglCodecCommon/gralloc_cb.h
@@ -32,7 +32,6 @@
FRAMEWORK_FORMAT_GL_COMPATIBLE = 0,
FRAMEWORK_FORMAT_YV12 = 1,
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 a83ca96..e9140be 100644
--- a/system/gralloc/gralloc.cpp
+++ b/system/gralloc/gralloc.cpp
@@ -623,13 +623,7 @@
// We are going to use RGB888 on the host
glFormat = GL_RGB;
glType = GL_UNSIGNED_BYTE;
-
- 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;
- }
+ selectedEmuFrameworkFormat = FRAMEWORK_FORMAT_YUV_420_888;
break;
default:
ALOGE("gralloc_alloc: Unknown format %d", format);
@@ -1205,7 +1199,9 @@
return -EBUSY;
}
- if (sw_read) {
+ // camera delivers bits to the buffer directly and does not require
+ // an explicit read, it also writes in YUV_420 (interleaved)
+ if (sw_read & !(usage & GRALLOC_USAGE_HW_CAMERA_MASK)) {
void* rgb_addr = cpu_addr;
char* tmpBuf = 0;
if (cb->frameworkFormat == HAL_PIXEL_FORMAT_YV12 ||
@@ -1329,8 +1325,10 @@
return -EINVAL;
}
+ usage |= (cb->usage & GRALLOC_USAGE_HW_CAMERA_MASK);
+
void *vaddr;
- int ret = gralloc_lock(module, handle, usage | GRALLOC_USAGE_SW_WRITE_MASK, l, t, w, h, &vaddr);
+ int ret = gralloc_lock(module, handle, usage, l, t, w, h, &vaddr);
if (ret) {
return ret;
}
@@ -1367,7 +1365,7 @@
cStep = 1;
break;
case HAL_PIXEL_FORMAT_YCbCr_420_888:
- if (cb->emuFrameworkFormat == FRAMEWORK_FORMAT_YUV_420_888_INTERLEAVED) {
+ if (usage & GRALLOC_USAGE_HW_CAMERA_MASK) {
yStride = cb->width;
cStride = cb->width;
yOffset = 0;