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