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