1*38e8c45fSAndroid Build Coastguard Worker /*
2*38e8c45fSAndroid Build Coastguard Worker * Copyright (C) 2019 The Android Open Source Project
3*38e8c45fSAndroid Build Coastguard Worker *
4*38e8c45fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*38e8c45fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*38e8c45fSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*38e8c45fSAndroid Build Coastguard Worker *
8*38e8c45fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*38e8c45fSAndroid Build Coastguard Worker *
10*38e8c45fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*38e8c45fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*38e8c45fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*38e8c45fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*38e8c45fSAndroid Build Coastguard Worker * limitations under the License.
15*38e8c45fSAndroid Build Coastguard Worker */
16*38e8c45fSAndroid Build Coastguard Worker
17*38e8c45fSAndroid Build Coastguard Worker #include "aidl/android/hardware/graphics/common/Dataspace.h"
18*38e8c45fSAndroid Build Coastguard Worker #include <ui/PublicFormat.h>
19*38e8c45fSAndroid Build Coastguard Worker
20*38e8c45fSAndroid Build Coastguard Worker
21*38e8c45fSAndroid Build Coastguard Worker // ----------------------------------------------------------------------------
22*38e8c45fSAndroid Build Coastguard Worker namespace android {
23*38e8c45fSAndroid Build Coastguard Worker // ----------------------------------------------------------------------------
24*38e8c45fSAndroid Build Coastguard Worker
25*38e8c45fSAndroid Build Coastguard Worker using ::aidl::android::hardware::graphics::common::Dataspace;
26*38e8c45fSAndroid Build Coastguard Worker
mapPublicFormatToHalFormat(PublicFormat f)27*38e8c45fSAndroid Build Coastguard Worker int mapPublicFormatToHalFormat(PublicFormat f) {
28*38e8c45fSAndroid Build Coastguard Worker switch (f) {
29*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::JPEG:
30*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::DEPTH_POINT_CLOUD:
31*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::DEPTH_JPEG:
32*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::HEIC:
33*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::HEIC_ULTRAHDR:
34*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::JPEG_R:
35*38e8c45fSAndroid Build Coastguard Worker return HAL_PIXEL_FORMAT_BLOB;
36*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::DEPTH16:
37*38e8c45fSAndroid Build Coastguard Worker return HAL_PIXEL_FORMAT_Y16;
38*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::RAW_SENSOR:
39*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::RAW_DEPTH:
40*38e8c45fSAndroid Build Coastguard Worker return HAL_PIXEL_FORMAT_RAW16;
41*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::RAW_DEPTH10:
42*38e8c45fSAndroid Build Coastguard Worker return HAL_PIXEL_FORMAT_RAW10;
43*38e8c45fSAndroid Build Coastguard Worker default:
44*38e8c45fSAndroid Build Coastguard Worker // Most formats map 1:1
45*38e8c45fSAndroid Build Coastguard Worker return static_cast<int>(f);
46*38e8c45fSAndroid Build Coastguard Worker }
47*38e8c45fSAndroid Build Coastguard Worker }
48*38e8c45fSAndroid Build Coastguard Worker
mapPublicFormatToHalDataspace(PublicFormat f)49*38e8c45fSAndroid Build Coastguard Worker android_dataspace mapPublicFormatToHalDataspace(PublicFormat f) {
50*38e8c45fSAndroid Build Coastguard Worker Dataspace dataspace;
51*38e8c45fSAndroid Build Coastguard Worker switch (f) {
52*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::JPEG:
53*38e8c45fSAndroid Build Coastguard Worker dataspace = Dataspace::JFIF;
54*38e8c45fSAndroid Build Coastguard Worker break;
55*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::DEPTH_POINT_CLOUD:
56*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::DEPTH16:
57*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::RAW_DEPTH:
58*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::RAW_DEPTH10:
59*38e8c45fSAndroid Build Coastguard Worker dataspace = Dataspace::DEPTH;
60*38e8c45fSAndroid Build Coastguard Worker break;
61*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::RAW_SENSOR:
62*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::RAW_PRIVATE:
63*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::RAW10:
64*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::RAW12:
65*38e8c45fSAndroid Build Coastguard Worker dataspace = Dataspace::ARBITRARY;
66*38e8c45fSAndroid Build Coastguard Worker break;
67*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::YUV_420_888:
68*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::NV21:
69*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::YV12:
70*38e8c45fSAndroid Build Coastguard Worker dataspace = Dataspace::JFIF;
71*38e8c45fSAndroid Build Coastguard Worker break;
72*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::DEPTH_JPEG:
73*38e8c45fSAndroid Build Coastguard Worker dataspace = Dataspace::DYNAMIC_DEPTH;
74*38e8c45fSAndroid Build Coastguard Worker break;
75*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::HEIC:
76*38e8c45fSAndroid Build Coastguard Worker dataspace = Dataspace::HEIF;
77*38e8c45fSAndroid Build Coastguard Worker break;
78*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::HEIC_ULTRAHDR:
79*38e8c45fSAndroid Build Coastguard Worker dataspace = Dataspace::HEIF_ULTRAHDR;
80*38e8c45fSAndroid Build Coastguard Worker break;
81*38e8c45fSAndroid Build Coastguard Worker case PublicFormat::JPEG_R:
82*38e8c45fSAndroid Build Coastguard Worker dataspace = Dataspace::JPEG_R;
83*38e8c45fSAndroid Build Coastguard Worker break;
84*38e8c45fSAndroid Build Coastguard Worker default:
85*38e8c45fSAndroid Build Coastguard Worker // Most formats map to UNKNOWN
86*38e8c45fSAndroid Build Coastguard Worker dataspace = Dataspace::UNKNOWN;
87*38e8c45fSAndroid Build Coastguard Worker break;
88*38e8c45fSAndroid Build Coastguard Worker }
89*38e8c45fSAndroid Build Coastguard Worker return static_cast<android_dataspace>(dataspace);
90*38e8c45fSAndroid Build Coastguard Worker }
91*38e8c45fSAndroid Build Coastguard Worker
mapHalFormatDataspaceToPublicFormat(int format,android_dataspace dataSpace)92*38e8c45fSAndroid Build Coastguard Worker PublicFormat mapHalFormatDataspaceToPublicFormat(int format, android_dataspace dataSpace) {
93*38e8c45fSAndroid Build Coastguard Worker Dataspace ds = static_cast<Dataspace>(dataSpace);
94*38e8c45fSAndroid Build Coastguard Worker switch (format) {
95*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_RAW10:
96*38e8c45fSAndroid Build Coastguard Worker switch (ds) {
97*38e8c45fSAndroid Build Coastguard Worker case Dataspace::DEPTH:
98*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::RAW_DEPTH10;
99*38e8c45fSAndroid Build Coastguard Worker default:
100*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::RAW10;
101*38e8c45fSAndroid Build Coastguard Worker }
102*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_RGBA_8888:
103*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_RGBX_8888:
104*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_RGBA_FP16:
105*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_RGBA_1010102:
106*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_RGB_888:
107*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_RGB_565:
108*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_Y8:
109*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_RAW12:
110*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_YCbCr_420_888:
111*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_YV12:
112*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_YCBCR_P010:
113*38e8c45fSAndroid Build Coastguard Worker // Enums overlap in both name and value
114*38e8c45fSAndroid Build Coastguard Worker return static_cast<PublicFormat>(format);
115*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_RAW16:
116*38e8c45fSAndroid Build Coastguard Worker switch (ds) {
117*38e8c45fSAndroid Build Coastguard Worker case Dataspace::DEPTH:
118*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::RAW_DEPTH;
119*38e8c45fSAndroid Build Coastguard Worker default:
120*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::RAW_SENSOR;
121*38e8c45fSAndroid Build Coastguard Worker }
122*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_RAW_OPAQUE:
123*38e8c45fSAndroid Build Coastguard Worker // Name differs, though value is the same
124*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::RAW_PRIVATE;
125*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_YCbCr_422_SP:
126*38e8c45fSAndroid Build Coastguard Worker // Name differs, though the value is the same
127*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::NV16;
128*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_YCrCb_420_SP:
129*38e8c45fSAndroid Build Coastguard Worker // Name differs, though the value is the same
130*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::NV21;
131*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_YCbCr_422_I:
132*38e8c45fSAndroid Build Coastguard Worker // Name differs, though the value is the same
133*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::YUY2;
134*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED:
135*38e8c45fSAndroid Build Coastguard Worker // Name differs, though the value is the same
136*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::PRIVATE;
137*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_Y16:
138*38e8c45fSAndroid Build Coastguard Worker // Dataspace-dependent
139*38e8c45fSAndroid Build Coastguard Worker switch (ds) {
140*38e8c45fSAndroid Build Coastguard Worker case Dataspace::DEPTH:
141*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::DEPTH16;
142*38e8c45fSAndroid Build Coastguard Worker default:
143*38e8c45fSAndroid Build Coastguard Worker // Assume non-depth Y16 is just Y16.
144*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::Y16;
145*38e8c45fSAndroid Build Coastguard Worker }
146*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_BLOB:
147*38e8c45fSAndroid Build Coastguard Worker // Dataspace-dependent
148*38e8c45fSAndroid Build Coastguard Worker switch (ds) {
149*38e8c45fSAndroid Build Coastguard Worker case Dataspace::DEPTH:
150*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::DEPTH_POINT_CLOUD;
151*38e8c45fSAndroid Build Coastguard Worker case Dataspace::JFIF:
152*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::JPEG;
153*38e8c45fSAndroid Build Coastguard Worker case Dataspace::HEIF:
154*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::HEIC;
155*38e8c45fSAndroid Build Coastguard Worker default:
156*38e8c45fSAndroid Build Coastguard Worker if (dataSpace == static_cast<android_dataspace>(HAL_DATASPACE_DYNAMIC_DEPTH)) {
157*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::DEPTH_JPEG;
158*38e8c45fSAndroid Build Coastguard Worker } else if (dataSpace == static_cast<android_dataspace>(Dataspace::JPEG_R)) {
159*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::JPEG_R;
160*38e8c45fSAndroid Build Coastguard Worker } else if (dataSpace == static_cast<android_dataspace>(
161*38e8c45fSAndroid Build Coastguard Worker Dataspace::HEIF_ULTRAHDR)) {
162*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::HEIC_ULTRAHDR;
163*38e8c45fSAndroid Build Coastguard Worker }else {
164*38e8c45fSAndroid Build Coastguard Worker // Assume otherwise-marked blobs are also JPEG
165*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::JPEG;
166*38e8c45fSAndroid Build Coastguard Worker }
167*38e8c45fSAndroid Build Coastguard Worker }
168*38e8c45fSAndroid Build Coastguard Worker case HAL_PIXEL_FORMAT_BGRA_8888:
169*38e8c45fSAndroid Build Coastguard Worker // Not defined in public API
170*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::UNKNOWN;
171*38e8c45fSAndroid Build Coastguard Worker
172*38e8c45fSAndroid Build Coastguard Worker default:
173*38e8c45fSAndroid Build Coastguard Worker return PublicFormat::UNKNOWN;
174*38e8c45fSAndroid Build Coastguard Worker }
175*38e8c45fSAndroid Build Coastguard Worker }
176*38e8c45fSAndroid Build Coastguard Worker
177*38e8c45fSAndroid Build Coastguard Worker // ----------------------------------------------------------------------------
178*38e8c45fSAndroid Build Coastguard Worker }; // namespace android
179*38e8c45fSAndroid Build Coastguard Worker // ----------------------------------------------------------------------------
180