1d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema/* 2d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. 3d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* 4d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* Redistribution and use in source and binary forms, with or without 5d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* modification, are permitted provided that the following conditions are 6d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* met: 7d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* * Redistributions of source code must retain the above copyright 8d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* notice, this list of conditions and the following disclaimer. 9d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* * Redistributions in binary form must reproduce the above 10d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* copyright notice, this list of conditions and the following 11d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* disclaimer in the documentation and/or other materials provided 12d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* with the distribution. 13d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* * Neither the name of The Linux Foundation nor the names of its 14d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* contributors may be used to endorse or promote products derived 15d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* from this software without specific prior written permission. 16d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* 17d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema*/ 29d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 30d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#include <utils/formats.h> 31d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 32d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#define __CLASS__ "FormatsUtils" 33d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 34d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemanamespace sdm { 35d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 36d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemabool IsUBWCFormat(LayerBufferFormat format) { 37d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema switch (format) { 38d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBA8888Ubwc: 39d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBX8888Ubwc: 40d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatBGR565Ubwc: 41d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr420SPVenusUbwc: 42d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBA1010102Ubwc: 43d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBX1010102Ubwc: 44d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr420TP10Ubwc: 45d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr420P010Ubwc: 46d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return true; 47d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema default: 48d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return false; 49d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } 50d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema} 51d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 52d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemabool Is10BitFormat(LayerBufferFormat format) { 53d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema switch (format) { 54d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBA1010102: 55d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatARGB2101010: 56d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBX1010102: 57d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatXRGB2101010: 58d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatBGRA1010102: 59d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatABGR2101010: 60d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatBGRX1010102: 61d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatXBGR2101010: 62d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBA1010102Ubwc: 63d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBX1010102Ubwc: 64d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr420P010: 65d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr420TP10Ubwc: 66d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr420P010Ubwc: 67d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return true; 68d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema default: 69d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return false; 70d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } 71d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema} 72d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 73d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemaconst char *GetFormatString(const LayerBufferFormat &format) { 74d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema switch (format) { 75d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatARGB8888: return "ARGB_8888"; 76d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBA8888: return "RGBA_8888"; 77d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatBGRA8888: return "BGRA_8888"; 78d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatXRGB8888: return "XRGB_8888"; 79d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBX8888: return "RGBX_8888"; 80d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatBGRX8888: return "BGRX_8888"; 81d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBA5551: return "RGBA_5551"; 82d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBA4444: return "RGBA_4444"; 83d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGB888: return "RGB_888"; 84d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatBGR888: return "BGR_888"; 85d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGB565: return "RGB_565"; 86d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatBGR565: return "BGR_565"; 87d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBA8888Ubwc: return "RGBA_8888_UBWC"; 88d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBX8888Ubwc: return "RGBX_8888_UBWC"; 89d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatBGR565Ubwc: return "BGR_565_UBWC"; 90d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr420Planar: return "Y_CB_CR_420"; 91d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCrCb420Planar: return "Y_CR_CB_420"; 92d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCrCb420PlanarStride16: return "Y_CR_CB_420_STRIDE16"; 93d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr420SemiPlanar: return "Y_CBCR_420"; 94d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCrCb420SemiPlanar: return "Y_CRCB_420"; 95d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr420SemiPlanarVenus: return "Y_CBCR_420_VENUS"; 96d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCrCb420SemiPlanarVenus: return "Y_CRCB_420_VENUS"; 97d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr422H1V2SemiPlanar: return "Y_CBCR_422_H1V2"; 98d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCrCb422H1V2SemiPlanar: return "Y_CRCB_422_H1V2"; 99d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr422H2V1SemiPlanar: return "Y_CBCR_422_H2V1"; 100d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCrCb422H2V1SemiPlanar: return "Y_CRCB_422_H2V2"; 101d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr420SPVenusUbwc: return "Y_CBCR_420_VENUS_UBWC"; 102d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr422H2V1Packed: return "YCBYCR_422_H2V1"; 103d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatCbYCrY422H2V1Packed: return "CBYCRY_422_H2V1"; 104d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBA1010102: return "RGBA_1010102"; 105d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatARGB2101010: return "ARGB_2101010"; 106d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBX1010102: return "RGBX_1010102"; 107d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatXRGB2101010: return "XRGB_2101010"; 108d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatBGRA1010102: return "BGRA_1010102"; 109d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatABGR2101010: return "ABGR_2101010"; 110d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatBGRX1010102: return "BGRX_1010102"; 111d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatXBGR2101010: return "XBGR_2101010"; 112d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBA1010102Ubwc: return "RGBA_1010102_UBWC"; 113d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatRGBX1010102Ubwc: return "RGBX_1010102_UBWC"; 114d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr420P010: return "Y_CBCR_420_P010"; 115d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr420TP10Ubwc: return "Y_CBCR_420_TP10_UBWC"; 116d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr420P010Ubwc: return "Y_CBCR_420_P010_UBWC"; 117d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema default: return "UNKNOWN"; 118d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } 119d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema} 120d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 121d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben FennemaBufferLayout GetBufferLayout(LayerBufferFormat format) { 122d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema switch (format) { 123d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema case kFormatYCbCr420TP10Ubwc: 124d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return kTPTiled; 125d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema default: 126d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema return (IsUBWCFormat(format) ? kUBWC : kLinear); 127d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } 128d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema} 129d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 130d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema} // namespace sdm 131d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 132