hwc/copybit: Handle "R/B swap" for RGBA and RGBX color formats.
1.Framework notifies HAL with "HWC_FORMAT_RB_SWAP" layer flag to handle
a limitation where R and B components were swapped in Rendering phase.
2.Add "R/B swap" in hwc query to enable framework to query for support
in display HAL, at run-time.
Change-Id: I3b44d15b51b4f24939048fee9d1bac2b9009c97c
diff --git a/libhwcomposer/hwc_copybit.cpp b/libhwcomposer/hwc_copybit.cpp
index 8f2cf55..ba40db5 100644
--- a/libhwcomposer/hwc_copybit.cpp
+++ b/libhwcomposer/hwc_copybit.cpp
@@ -350,6 +350,16 @@
src.w = hnd->width;
src.h = hnd->height;
src.format = hnd->format;
+
+ // Handle R/B swap
+ if ((layer->flags & HWC_FORMAT_RB_SWAP)) {
+ if (src.format == HAL_PIXEL_FORMAT_RGBA_8888) {
+ src.format = HAL_PIXEL_FORMAT_BGRA_8888;
+ } else if (src.format == HAL_PIXEL_FORMAT_RGBX_8888) {
+ src.format = HAL_PIXEL_FORMAT_BGRX_8888;
+ }
+ }
+
src.base = (void *)hnd->base;
src.handle = (native_handle_t *)layer->handle;
src.horiz_padding = src.w - hnd->width;