Merge "gralloc: Default flexible YUV format to NV21_ZSL"
diff --git a/libgralloc/alloc_controller.cpp b/libgralloc/alloc_controller.cpp
index e6693c9..1b59fde 100644
--- a/libgralloc/alloc_controller.cpp
+++ b/libgralloc/alloc_controller.cpp
@@ -183,6 +183,7 @@
case HAL_PIXEL_FORMAT_RGBX_8888:
case HAL_PIXEL_FORMAT_RGB_888:
case HAL_PIXEL_FORMAT_RGB_565:
+ case HAL_PIXEL_FORMAT_BGR_565:
case HAL_PIXEL_FORMAT_BGRA_8888:
case HAL_PIXEL_FORMAT_RGBA_5551:
case HAL_PIXEL_FORMAT_RGBA_4444:
@@ -330,6 +331,7 @@
bpp = 3;
break;
case HAL_PIXEL_FORMAT_RGB_565:
+ case HAL_PIXEL_FORMAT_BGR_565:
case HAL_PIXEL_FORMAT_RGBA_5551:
case HAL_PIXEL_FORMAT_RGBA_4444:
bpp = 2;
@@ -382,6 +384,8 @@
return ADRENO_PIXELFORMAT_R8G8B8X8;
case HAL_PIXEL_FORMAT_RGB_565:
return ADRENO_PIXELFORMAT_B5G6R5;
+ case HAL_PIXEL_FORMAT_BGR_565:
+ return ADRENO_PIXELFORMAT_R5G6B5;
case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
return ADRENO_PIXELFORMAT_NV12;
case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
@@ -511,6 +515,7 @@
case HAL_PIXEL_FORMAT_RGBX_8888:
case HAL_PIXEL_FORMAT_BGRA_8888:
case HAL_PIXEL_FORMAT_RGB_565:
+ case HAL_PIXEL_FORMAT_BGR_565:
{
tileEnabled = true;
// check the usage flags
@@ -547,6 +552,7 @@
size = alignedw * alignedh * 3;
break;
case HAL_PIXEL_FORMAT_RGB_565:
+ case HAL_PIXEL_FORMAT_BGR_565:
case HAL_PIXEL_FORMAT_RGBA_5551:
case HAL_PIXEL_FORMAT_RGBA_4444:
case HAL_PIXEL_FORMAT_RAW16:
@@ -879,7 +885,7 @@
// Existing HAL formats with UBWC support
switch(format)
{
- case HAL_PIXEL_FORMAT_RGB_565:
+ case HAL_PIXEL_FORMAT_BGR_565:
case HAL_PIXEL_FORMAT_RGBA_8888:
case HAL_PIXEL_FORMAT_RGBX_8888:
case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
@@ -988,7 +994,7 @@
unsigned int size = 0;
switch (format) {
- case HAL_PIXEL_FORMAT_RGB_565:
+ case HAL_PIXEL_FORMAT_BGR_565:
size = alignedw * alignedh * 2;
size += getUBwcMetaBufferSize(width, height, 2);
break;
@@ -1014,7 +1020,7 @@
int err = 0;
// This api is for RGB* formats
- if (hnd->format > HAL_PIXEL_FORMAT_BGRA_8888) {
+ if (!isUncompressedRgbFormat(hnd->format)) {
return -EINVAL;
}
@@ -1026,7 +1032,7 @@
unsigned int meta_size = 0;
switch (hnd->format) {
- case HAL_PIXEL_FORMAT_RGB_565:
+ case HAL_PIXEL_FORMAT_BGR_565:
meta_size = getUBwcMetaBufferSize(hnd->width, hnd->height, 2);
break;
case HAL_PIXEL_FORMAT_RGBA_8888:
diff --git a/libgralloc/gpu.cpp b/libgralloc/gpu.cpp
index 71c7bba..8b512bf 100644
--- a/libgralloc/gpu.cpp
+++ b/libgralloc/gpu.cpp
@@ -95,6 +95,9 @@
if (usage & GRALLOC_USAGE_PRIVATE_EXTERNAL_ONLY) {
flags |= private_handle_t::PRIV_FLAGS_EXTERNAL_ONLY;
}
+ if (usage & GRALLOC_USAGE_PRIVATE_INTERNAL_ONLY) {
+ flags |= private_handle_t::PRIV_FLAGS_INTERNAL_ONLY;
+ }
ColorSpace_t colorSpace = ITU_R_601;
flags |= private_handle_t::PRIV_FLAGS_ITU_R_601;
diff --git a/libgralloc/gralloc_priv.h b/libgralloc/gralloc_priv.h
index 2601953..1438546 100755
--- a/libgralloc/gralloc_priv.h
+++ b/libgralloc/gralloc_priv.h
@@ -105,6 +105,7 @@
#define HAL_PIXEL_FORMAT_BGRX_8888 0x112
#define HAL_PIXEL_FORMAT_NV21_ZSL 0x113
#define HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS 0x114
+#define HAL_PIXEL_FORMAT_BGR_565 0x115
#define HAL_PIXEL_FORMAT_INTERLACE 0x180
//v4l2_fourcc('Y', 'U', 'Y', 'L'). 24 bpp YUYV 4:2:2 10 bit per component
@@ -172,6 +173,7 @@
PRIV_FLAGS_USES_ION = 0x00000008,
PRIV_FLAGS_USES_ASHMEM = 0x00000010,
PRIV_FLAGS_NEEDS_FLUSH = 0x00000020,
+ PRIV_FLAGS_INTERNAL_ONLY = 0x00000040,
PRIV_FLAGS_NON_CPU_WRITER = 0x00000080,
PRIV_FLAGS_NONCONTIGUOUS_MEM = 0x00000100,
PRIV_FLAGS_CACHED = 0x00000200,
diff --git a/sdm/include/core/layer_buffer.h b/sdm/include/core/layer_buffer.h
index 524a84b..5d48a04 100644
--- a/sdm/include/core/layer_buffer.h
+++ b/sdm/include/core/layer_buffer.h
@@ -54,9 +54,10 @@
kFormatRGB888, //!< 8-bits Red, Green, Blue interleaved in RGB order. No Alpha.
kFormatBGR888, //!< 8-bits Blue, Green, Red interleaved in BGR order. No Alpha.
kFormatRGB565, //!< 5-bit Red, 6-bit Green, 5-bit Blue interleaved in RGB order. No Alpha.
+ kFormatBGR565, //!< 5-bit Blue, 6-bit Green, 5-bit Red interleaved in BGR order. No Alpha.
kFormatRGBA8888Ubwc, //!< UBWC aligned RGBA8888 format
kFormatRGBX8888Ubwc, //!< UBWC aligned RGBX8888 format
- kFormatRGB565Ubwc, //!< UBWC aligned RGB565 format
+ kFormatBGR565Ubwc, //!< UBWC aligned BGR565 format
/* All YUV-Planar formats, Any new format will be added towards end of this group to maintain
backward compatibility.
diff --git a/sdm/include/utils/sys.h b/sdm/include/utils/sys.h
index 0a90fc1..dc45696 100644
--- a/sdm/include/utils/sys.h
+++ b/sdm/include/utils/sys.h
@@ -45,6 +45,7 @@
typedef int (*fclose)(FILE* fileptr);
typedef ssize_t (*getline)(char **lineptr, size_t *linelen, FILE *stream);
typedef int (*pthread_cancel)(pthread_t thread);
+ typedef int (*dup)(int fd);
static ioctl ioctl_;
static open open_;
@@ -56,6 +57,7 @@
static fclose fclose_;
static getline getline_;
static pthread_cancel pthread_cancel_;
+ static dup dup_;
};
} // namespace sdm
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index 4046ce5..ad67dd0 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -620,9 +620,10 @@
case kFormatRGB888: return "RGB_888";
case kFormatBGR888: return "BGR_888";
case kFormatRGB565: return "RGB_565";
+ case kFormatBGR565: return "BGR_565";
case kFormatRGBA8888Ubwc: return "RGBA_8888_UBWC";
case kFormatRGBX8888Ubwc: return "RGBX_8888_UBWC";
- case kFormatRGB565Ubwc: return "RGB_565_UBWC";
+ case kFormatBGR565Ubwc: return "BGR_565_UBWC";
case kFormatYCbCr420Planar: return "Y_CB_CR_420";
case kFormatYCrCb420Planar: return "Y_CR_CB_420";
case kFormatYCrCb420PlanarStride16: return "Y_CR_CB_420_STRIDE16";
diff --git a/sdm/libs/core/fb/hw_device.cpp b/sdm/libs/core/fb/hw_device.cpp
index 881460e..3ebd202 100644
--- a/sdm/libs/core/fb/hw_device.cpp
+++ b/sdm/libs/core/fb/hw_device.cpp
@@ -273,6 +273,9 @@
mdp_out_layer_.writeback_ndx = 2;
mdp_out_layer_.buffer.width = output_buffer->width;
mdp_out_layer_.buffer.height = output_buffer->height;
+ if (output_buffer->flags.secure) {
+ mdp_out_layer_.flags |= MDP_LAYER_SECURE_SESSION;
+ }
mdp_out_layer_.buffer.comp_ratio.denom = 1000;
mdp_out_layer_.buffer.comp_ratio.numer = UINT32(hw_layers->output_compression * 1000);
SetFormat(output_buffer->format, &mdp_out_layer_.buffer.format);
@@ -430,10 +433,10 @@
input_buffer = &hw_rotator_session->output_buffer;
}
- input_buffer->release_fence_fd = dup(mdp_commit.release_fence);
+ input_buffer->release_fence_fd = Sys::dup_(mdp_commit.release_fence);
}
- hw_layer_info.sync_handle = dup(mdp_commit.release_fence);
+ hw_layer_info.sync_handle = Sys::dup_(mdp_commit.release_fence);
DLOGI_IF(kTagDriverConfig, "*************************** %s Commit Input ************************",
device_name_);
@@ -485,6 +488,7 @@
case kFormatRGB888: *target = MDP_RGB_888; break;
case kFormatBGR888: *target = MDP_BGR_888; break;
case kFormatRGB565: *target = MDP_RGB_565; break;
+ case kFormatBGR565: *target = MDP_BGR_565; break;
case kFormatYCbCr420Planar: *target = MDP_Y_CB_CR_H2V2; break;
case kFormatYCrCb420Planar: *target = MDP_Y_CR_CB_H2V2; break;
case kFormatYCrCb420PlanarStride16: *target = MDP_Y_CR_CB_GH2V2; break;
@@ -498,7 +502,7 @@
case kFormatYCbCr420SemiPlanarVenus: *target = MDP_Y_CBCR_H2V2_VENUS; break;
case kFormatRGBA8888Ubwc: *target = MDP_RGBA_8888_UBWC; break;
case kFormatRGBX8888Ubwc: *target = MDP_RGBX_8888_UBWC; break;
- case kFormatRGB565Ubwc: *target = MDP_RGB_565_UBWC; break;
+ case kFormatBGR565Ubwc: *target = MDP_RGB_565_UBWC; break;
case kFormatYCbCr420SPVenusUbwc: *target = MDP_Y_CBCR_H2V2_UBWC; break;
default:
DLOGE("Unsupported format type %d", source);
@@ -532,7 +536,8 @@
*target = width * 3;
break;
case kFormatRGB565:
- case kFormatRGB565Ubwc:
+ case kFormatBGR565:
+ case kFormatBGR565Ubwc:
*target = width * 2;
break;
case kFormatYCbCr420SemiPlanarVenus:
diff --git a/sdm/libs/core/resource_default.cpp b/sdm/libs/core/resource_default.cpp
index 5034bac..e421961 100644
--- a/sdm/libs/core/resource_default.cpp
+++ b/sdm/libs/core/resource_default.cpp
@@ -918,7 +918,7 @@
switch (format) {
case kFormatRGBA8888Ubwc:
case kFormatRGBX8888Ubwc:
- case kFormatRGB565Ubwc:
+ case kFormatBGR565Ubwc:
case kFormatYCbCr420SPVenusUbwc:
return true;
default:
diff --git a/sdm/libs/hwc/blit_engine_c2d.cpp b/sdm/libs/hwc/blit_engine_c2d.cpp
index b34662a..e85e28c 100644
--- a/sdm/libs/hwc/blit_engine_c2d.cpp
+++ b/sdm/libs/hwc/blit_engine_c2d.cpp
@@ -523,7 +523,7 @@
switch (format) {
case kFormatRGBA8888Ubwc:
case kFormatRGBX8888Ubwc:
- case kFormatRGB565Ubwc:
+ case kFormatBGR565Ubwc:
case kFormatYCbCr420SPVenusUbwc:
return true;
default:
diff --git a/sdm/libs/hwc/cpuhint.h b/sdm/libs/hwc/cpuhint.h
index 14ecd93..a4a7758 100644
--- a/sdm/libs/hwc/cpuhint.h
+++ b/sdm/libs/hwc/cpuhint.h
@@ -44,7 +44,7 @@
void Reset();
private:
- enum { HINT = 0x4701 /* 47-display layer hint, 01-Enable */ };
+ enum { HINT = 0x4501 /* 45-display layer hint, 01-Enable */ };
bool enabled_ = false;
// frames to wait before setting this hint
int pre_enable_window_ = 0;
diff --git a/sdm/libs/hwc/hwc_buffer_allocator.cpp b/sdm/libs/hwc/hwc_buffer_allocator.cpp
index 556780f..1ea2915 100644
--- a/sdm/libs/hwc/hwc_buffer_allocator.cpp
+++ b/sdm/libs/hwc/hwc_buffer_allocator.cpp
@@ -155,6 +155,7 @@
case kFormatRGBX8888: *target = HAL_PIXEL_FORMAT_RGBX_8888; break;
case kFormatRGB888: *target = HAL_PIXEL_FORMAT_RGB_888; break;
case kFormatRGB565: *target = HAL_PIXEL_FORMAT_RGB_565; break;
+ case kFormatBGR565: *target = HAL_PIXEL_FORMAT_BGR_565; break;
case kFormatBGRA8888: *target = HAL_PIXEL_FORMAT_BGRA_8888; break;
case kFormatYCrCb420PlanarStride16: *target = HAL_PIXEL_FORMAT_YV12; break;
case kFormatYCrCb420SemiPlanar: *target = HAL_PIXEL_FORMAT_YCrCb_420_SP; break;
@@ -173,8 +174,8 @@
*target = HAL_PIXEL_FORMAT_RGBX_8888;
*flags |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
break;
- case kFormatRGB565Ubwc:
- *target = HAL_PIXEL_FORMAT_RGB_565;
+ case kFormatBGR565Ubwc:
+ *target = HAL_PIXEL_FORMAT_BGR_565;
*flags |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
break;
default:
diff --git a/sdm/libs/hwc/hwc_display.cpp b/sdm/libs/hwc/hwc_display.cpp
index 78025ea..3245eb6 100644
--- a/sdm/libs/hwc/hwc_display.cpp
+++ b/sdm/libs/hwc/hwc_display.cpp
@@ -474,10 +474,6 @@
}
size_t num_hw_layers = content_list->numHwLayers;
- if (num_hw_layers <= 1) {
- flush_ = true;
- return 0;
- }
use_blit_comp_ = false;
metadata_refresh_rate_ = 0;
@@ -900,7 +896,7 @@
switch (source) {
case HAL_PIXEL_FORMAT_RGBA_8888: format = kFormatRGBA8888Ubwc; break;
case HAL_PIXEL_FORMAT_RGBX_8888: format = kFormatRGBX8888Ubwc; break;
- case HAL_PIXEL_FORMAT_RGB_565: format = kFormatRGB565Ubwc; break;
+ case HAL_PIXEL_FORMAT_BGR_565: format = kFormatBGR565Ubwc; break;
case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
case HAL_PIXEL_FORMAT_NV12_ENCODEABLE: format = kFormatYCbCr420SPVenusUbwc; break;
@@ -920,6 +916,7 @@
case HAL_PIXEL_FORMAT_BGRX_8888: format = kFormatBGRX8888; break;
case HAL_PIXEL_FORMAT_RGB_888: format = kFormatRGB888; break;
case HAL_PIXEL_FORMAT_RGB_565: format = kFormatRGB565; break;
+ case HAL_PIXEL_FORMAT_BGR_565: format = kFormatBGR565; break;
case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS: format = kFormatYCbCr420SemiPlanarVenus; break;
case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC: format = kFormatYCbCr420SPVenusUbwc; break;
@@ -997,6 +994,8 @@
return "RGB_888";
case HAL_PIXEL_FORMAT_RGB_565:
return "RGB_565";
+ case HAL_PIXEL_FORMAT_BGR_565:
+ return "BGR_565";
case HAL_PIXEL_FORMAT_BGRA_8888:
return "BGRA_8888";
case HAL_PIXEL_FORMAT_RGBA_5551:
diff --git a/sdm/libs/hwc/hwc_display_external.cpp b/sdm/libs/hwc/hwc_display_external.cpp
index 2e91750..9053b42 100644
--- a/sdm/libs/hwc/hwc_display_external.cpp
+++ b/sdm/libs/hwc/hwc_display_external.cpp
@@ -91,6 +91,12 @@
return status;
}
+ size_t num_hw_layers = content_list->numHwLayers;
+ if (num_hw_layers <= 1) {
+ flush_ = true;
+ return 0;
+ }
+
status = PrepareLayerStack(content_list);
if (status) {
return status;
diff --git a/sdm/libs/hwc/hwc_display_primary.cpp b/sdm/libs/hwc/hwc_display_primary.cpp
index 115af3e..d12bd1d 100644
--- a/sdm/libs/hwc/hwc_display_primary.cpp
+++ b/sdm/libs/hwc/hwc_display_primary.cpp
@@ -126,6 +126,12 @@
return status;
}
+ size_t num_hw_layers = content_list->numHwLayers;
+ if (num_hw_layers <= 1) {
+ flush_ = true;
+ return 0;
+ }
+
status = PrepareLayerStack(content_list);
if (status) {
return status;
diff --git a/sdm/libs/hwc/hwc_display_virtual.cpp b/sdm/libs/hwc/hwc_display_virtual.cpp
index 4dfa1ee..116c36d 100644
--- a/sdm/libs/hwc/hwc_display_virtual.cpp
+++ b/sdm/libs/hwc/hwc_display_virtual.cpp
@@ -200,7 +200,12 @@
int status = 0;
if (output_handle) {
- LayerBufferFormat format = GetSDMFormat(output_handle->format, output_handle->flags);
+ int output_handle_format = output_handle->format;
+ if (output_handle_format == HAL_PIXEL_FORMAT_RGBA_8888) {
+ output_handle_format = HAL_PIXEL_FORMAT_RGBX_8888;
+ }
+
+ LayerBufferFormat format = GetSDMFormat(output_handle_format, output_handle->flags);
if (format == kFormatInvalid) {
return -EINVAL;
}
@@ -245,7 +250,14 @@
output_buffer_->acquire_fence_fd = content_list->outbufAcquireFenceFd;
if (output_handle) {
- output_buffer_->format = GetSDMFormat(output_handle->format, output_handle->flags);
+ int output_handle_format = output_handle->format;
+
+ if (output_handle_format == HAL_PIXEL_FORMAT_RGBA_8888) {
+ output_handle_format = HAL_PIXEL_FORMAT_RGBX_8888;
+ }
+
+ output_buffer_->format = GetSDMFormat(output_handle_format, output_handle->flags);
+
if (output_buffer_->format == kFormatInvalid) {
return -EINVAL;
}
@@ -259,6 +271,11 @@
output_buffer_->flags.secure = 0;
output_buffer_->flags.video = 0;
+ // TZ Protected Buffer - L1
+ if (output_handle->flags & private_handle_t::PRIV_FLAGS_SECURE_BUFFER) {
+ output_buffer_->flags.secure = 1;
+ }
+
// ToDo: Need to extend for non-RGB formats
output_buffer_->planes[0].fd = output_handle->fd;
output_buffer_->planes[0].offset = output_handle->offset;
diff --git a/sdm/libs/utils/sys.cpp b/sdm/libs/utils/sys.cpp
index 03310ff..ff66fcf 100644
--- a/sdm/libs/utils/sys.cpp
+++ b/sdm/libs/utils/sys.cpp
@@ -53,6 +53,7 @@
Sys::fclose Sys::fclose_ = ::fclose;
Sys::getline Sys::getline_ = ::getline;
Sys::pthread_cancel Sys::pthread_cancel_ = PthreadCancel;
+Sys::dup Sys::dup_ = ::dup;
#else
@@ -66,6 +67,7 @@
extern FILE* virtual_fopen(const char *fname, const char *mode);
extern int virtual_fclose(FILE* fileptr);
extern ssize_t virtual_getline(char **lineptr, size_t *linelen, FILE *stream);
+extern int virtual_dup(int fd);
Sys::ioctl Sys::ioctl_ = virtual_ioctl;
Sys::open Sys::open_ = virtual_open;
@@ -77,6 +79,7 @@
Sys::fclose Sys::fclose_ = virtual_fclose;
Sys::getline Sys::getline_ = virtual_getline;
Sys::pthread_cancel Sys::pthread_cancel_ = ::pthread_cancel;
+Sys::dup Sys::dup_ = virtual_dup;
#endif // SDM_VIRTUAL_DRIVER