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