12ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/* 22ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* Copyright (c) 2016, The Linux Foundation. All rights reserved. 32ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* 42ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* Redistribution and use in source and binary forms, with or without 52ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* modification, are permitted provided that the following conditions are 62ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* met: 72ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* * Redistributions of source code must retain the above copyright 82ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* notice, this list of conditions and the following disclaimer. 92ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* * Redistributions in binary form must reproduce the above 102ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* copyright notice, this list of conditions and the following 112ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* disclaimer in the documentation and/or other materials provided 122ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* with the distribution. 132ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* * Neither the name of The Linux Foundation nor the names of its 142ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* contributors may be used to endorse or promote products derived 152ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* from this software without specific prior written permission. 162ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* 172ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 182ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 192ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 202ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 212ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 222ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 232ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 242ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 252ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 262ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 272ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 282ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel*/ 292ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 302ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#include <utils/formats.h> 312ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 322ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define __CLASS__ "FormatsUtils" 332ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 342ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelnamespace sdm { 352ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 362ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelbool IsUBWCFormat(LayerBufferFormat format) { 372ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel switch (format) { 382ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBA8888Ubwc: 392ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBX8888Ubwc: 402ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatBGR565Ubwc: 412ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCbCr420SPVenusUbwc: 422ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBA1010102Ubwc: 432ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBX1010102Ubwc: 442ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCbCr420TP10Ubwc: 452ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel return true; 462ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel default: 472ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel return false; 482ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel } 492ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} 502ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 512ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelbool Is10BitFormat(LayerBufferFormat format) { 522ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel switch (format) { 532ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBA1010102: 542ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatARGB2101010: 552ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBX1010102: 562ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatXRGB2101010: 572ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatBGRA1010102: 582ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatABGR2101010: 592ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatBGRX1010102: 602ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatXBGR2101010: 612ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBA1010102Ubwc: 622ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBX1010102Ubwc: 632ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCbCr420P010: 642ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCbCr420TP10Ubwc: 652ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel return true; 662ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel default: 672ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel return false; 682ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel } 692ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} 702ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 712ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelconst char *GetFormatString(const LayerBufferFormat &format) { 722ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel switch (format) { 732ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatARGB8888: return "ARGB_8888"; 742ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBA8888: return "RGBA_8888"; 752ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatBGRA8888: return "BGRA_8888"; 762ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatXRGB8888: return "XRGB_8888"; 772ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBX8888: return "RGBX_8888"; 782ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatBGRX8888: return "BGRX_8888"; 792ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBA5551: return "RGBA_5551"; 802ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBA4444: return "RGBA_4444"; 812ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGB888: return "RGB_888"; 822ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatBGR888: return "BGR_888"; 832ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGB565: return "RGB_565"; 842ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatBGR565: return "BGR_565"; 852ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBA8888Ubwc: return "RGBA_8888_UBWC"; 862ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBX8888Ubwc: return "RGBX_8888_UBWC"; 872ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatBGR565Ubwc: return "BGR_565_UBWC"; 882ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCbCr420Planar: return "Y_CB_CR_420"; 892ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCrCb420Planar: return "Y_CR_CB_420"; 902ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCrCb420PlanarStride16: return "Y_CR_CB_420_STRIDE16"; 912ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCbCr420SemiPlanar: return "Y_CBCR_420"; 922ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCrCb420SemiPlanar: return "Y_CRCB_420"; 932ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCbCr420SemiPlanarVenus: return "Y_CBCR_420_VENUS"; 942ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCrCb420SemiPlanarVenus: return "Y_CRCB_420_VENUS"; 952ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCbCr422H1V2SemiPlanar: return "Y_CBCR_422_H1V2"; 962ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCrCb422H1V2SemiPlanar: return "Y_CRCB_422_H1V2"; 972ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCbCr422H2V1SemiPlanar: return "Y_CBCR_422_H2V1"; 982ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCrCb422H2V1SemiPlanar: return "Y_CRCB_422_H2V2"; 992ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCbCr420SPVenusUbwc: return "Y_CBCR_420_VENUS_UBWC"; 1002ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCbCr422H2V1Packed: return "YCBYCR_422_H2V1"; 1016e71b7f95e9fdc03147c5f235060dd4ed4f23b86Thierry Strudel case kFormatCbYCrY422H2V1Packed: return "CBYCRY_422_H2V1"; 1022ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBA1010102: return "RGBA_1010102"; 1032ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatARGB2101010: return "ARGB_2101010"; 1042ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBX1010102: return "RGBX_1010102"; 1052ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatXRGB2101010: return "XRGB_2101010"; 1062ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatBGRA1010102: return "BGRA_1010102"; 1072ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatABGR2101010: return "ABGR_2101010"; 1082ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatBGRX1010102: return "BGRX_1010102"; 1092ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatXBGR2101010: return "XBGR_2101010"; 1102ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBA1010102Ubwc: return "RGBA_1010102_UBWC"; 1112ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatRGBX1010102Ubwc: return "RGBX_1010102_UBWC"; 1122ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCbCr420P010: return "Y_CBCR_420_P010"; 1132ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel case kFormatYCbCr420TP10Ubwc: return "Y_CBCR_420_TP10_UBWC"; 1142ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel default: return "UNKNOWN"; 1152ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel } 1162ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} 1172ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 118051dfd82677c3ad0bb124eb403b75e243650234eThierry StrudelBufferLayout GetBufferLayout(LayerBufferFormat format) { 119051dfd82677c3ad0bb124eb403b75e243650234eThierry Strudel switch (format) { 120051dfd82677c3ad0bb124eb403b75e243650234eThierry Strudel case kFormatYCbCr420TP10Ubwc: 121051dfd82677c3ad0bb124eb403b75e243650234eThierry Strudel return kTPTiled; 122051dfd82677c3ad0bb124eb403b75e243650234eThierry Strudel default: 123051dfd82677c3ad0bb124eb403b75e243650234eThierry Strudel return (IsUBWCFormat(format) ? kUBWC : kLinear); 124051dfd82677c3ad0bb124eb403b75e243650234eThierry Strudel } 125051dfd82677c3ad0bb124eb403b75e243650234eThierry Strudel} 126051dfd82677c3ad0bb124eb403b75e243650234eThierry Strudel 1272ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel} // namespace sdm 1282ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel 129