xref: /aosp_15_r20/frameworks/native/libs/ui/GraphicBufferMapper.cpp (revision 38e8c45f13ce32b0dcecb25141ffecaf386fa17f)
1*38e8c45fSAndroid Build Coastguard Worker /*
2*38e8c45fSAndroid Build Coastguard Worker  * Copyright (C) 2007 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 #define LOG_TAG "GraphicBufferMapper"
18*38e8c45fSAndroid Build Coastguard Worker #define ATRACE_TAG ATRACE_TAG_GRAPHICS
19*38e8c45fSAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
20*38e8c45fSAndroid Build Coastguard Worker 
21*38e8c45fSAndroid Build Coastguard Worker #include <ui/GraphicBufferMapper.h>
22*38e8c45fSAndroid Build Coastguard Worker 
23*38e8c45fSAndroid Build Coastguard Worker #include <grallocusage/GrallocUsageConversion.h>
24*38e8c45fSAndroid Build Coastguard Worker 
25*38e8c45fSAndroid Build Coastguard Worker // We would eliminate the non-conforming zero-length array, but we can't since
26*38e8c45fSAndroid Build Coastguard Worker // this is effectively included from the Linux kernel
27*38e8c45fSAndroid Build Coastguard Worker #pragma clang diagnostic push
28*38e8c45fSAndroid Build Coastguard Worker #pragma clang diagnostic ignored "-Wzero-length-array"
29*38e8c45fSAndroid Build Coastguard Worker #include <sync/sync.h>
30*38e8c45fSAndroid Build Coastguard Worker #pragma clang diagnostic pop
31*38e8c45fSAndroid Build Coastguard Worker 
32*38e8c45fSAndroid Build Coastguard Worker #include <utils/Log.h>
33*38e8c45fSAndroid Build Coastguard Worker #include <utils/Trace.h>
34*38e8c45fSAndroid Build Coastguard Worker 
35*38e8c45fSAndroid Build Coastguard Worker #include <ui/Gralloc.h>
36*38e8c45fSAndroid Build Coastguard Worker #include <ui/Gralloc2.h>
37*38e8c45fSAndroid Build Coastguard Worker #include <ui/Gralloc3.h>
38*38e8c45fSAndroid Build Coastguard Worker #include <ui/Gralloc4.h>
39*38e8c45fSAndroid Build Coastguard Worker #include <ui/Gralloc5.h>
40*38e8c45fSAndroid Build Coastguard Worker #include <ui/GraphicBuffer.h>
41*38e8c45fSAndroid Build Coastguard Worker 
42*38e8c45fSAndroid Build Coastguard Worker #include <system/graphics.h>
43*38e8c45fSAndroid Build Coastguard Worker 
44*38e8c45fSAndroid Build Coastguard Worker using unique_fd = ::android::base::unique_fd;
45*38e8c45fSAndroid Build Coastguard Worker 
46*38e8c45fSAndroid Build Coastguard Worker namespace android {
47*38e8c45fSAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
48*38e8c45fSAndroid Build Coastguard Worker 
49*38e8c45fSAndroid Build Coastguard Worker using LockResult = GraphicBufferMapper::LockResult;
50*38e8c45fSAndroid Build Coastguard Worker 
ANDROID_SINGLETON_STATIC_INSTANCE(GraphicBufferMapper)51*38e8c45fSAndroid Build Coastguard Worker ANDROID_SINGLETON_STATIC_INSTANCE( GraphicBufferMapper )
52*38e8c45fSAndroid Build Coastguard Worker 
53*38e8c45fSAndroid Build Coastguard Worker void GraphicBufferMapper::preloadHal() {
54*38e8c45fSAndroid Build Coastguard Worker     Gralloc2Mapper::preload();
55*38e8c45fSAndroid Build Coastguard Worker     Gralloc3Mapper::preload();
56*38e8c45fSAndroid Build Coastguard Worker     Gralloc4Mapper::preload();
57*38e8c45fSAndroid Build Coastguard Worker     Gralloc5Mapper::preload();
58*38e8c45fSAndroid Build Coastguard Worker }
59*38e8c45fSAndroid Build Coastguard Worker 
GraphicBufferMapper()60*38e8c45fSAndroid Build Coastguard Worker GraphicBufferMapper::GraphicBufferMapper() {
61*38e8c45fSAndroid Build Coastguard Worker     mMapper = std::make_unique<const Gralloc5Mapper>();
62*38e8c45fSAndroid Build Coastguard Worker     if (mMapper->isLoaded()) {
63*38e8c45fSAndroid Build Coastguard Worker         mMapperVersion = Version::GRALLOC_5;
64*38e8c45fSAndroid Build Coastguard Worker         return;
65*38e8c45fSAndroid Build Coastguard Worker     }
66*38e8c45fSAndroid Build Coastguard Worker     mMapper = std::make_unique<const Gralloc4Mapper>();
67*38e8c45fSAndroid Build Coastguard Worker     if (mMapper->isLoaded()) {
68*38e8c45fSAndroid Build Coastguard Worker         mMapperVersion = Version::GRALLOC_4;
69*38e8c45fSAndroid Build Coastguard Worker         return;
70*38e8c45fSAndroid Build Coastguard Worker     }
71*38e8c45fSAndroid Build Coastguard Worker     mMapper = std::make_unique<const Gralloc3Mapper>();
72*38e8c45fSAndroid Build Coastguard Worker     if (mMapper->isLoaded()) {
73*38e8c45fSAndroid Build Coastguard Worker         mMapperVersion = Version::GRALLOC_3;
74*38e8c45fSAndroid Build Coastguard Worker         return;
75*38e8c45fSAndroid Build Coastguard Worker     }
76*38e8c45fSAndroid Build Coastguard Worker     mMapper = std::make_unique<const Gralloc2Mapper>();
77*38e8c45fSAndroid Build Coastguard Worker     if (mMapper->isLoaded()) {
78*38e8c45fSAndroid Build Coastguard Worker         mMapperVersion = Version::GRALLOC_2;
79*38e8c45fSAndroid Build Coastguard Worker         return;
80*38e8c45fSAndroid Build Coastguard Worker     }
81*38e8c45fSAndroid Build Coastguard Worker 
82*38e8c45fSAndroid Build Coastguard Worker     LOG_ALWAYS_FATAL("gralloc-mapper is missing");
83*38e8c45fSAndroid Build Coastguard Worker }
84*38e8c45fSAndroid Build Coastguard Worker 
dumpBuffer(buffer_handle_t bufferHandle,std::string & result,bool less) const85*38e8c45fSAndroid Build Coastguard Worker void GraphicBufferMapper::dumpBuffer(buffer_handle_t bufferHandle, std::string& result,
86*38e8c45fSAndroid Build Coastguard Worker                                      bool less) const {
87*38e8c45fSAndroid Build Coastguard Worker     result.append(mMapper->dumpBuffer(bufferHandle, less));
88*38e8c45fSAndroid Build Coastguard Worker }
89*38e8c45fSAndroid Build Coastguard Worker 
dumpBufferToSystemLog(buffer_handle_t bufferHandle,bool less)90*38e8c45fSAndroid Build Coastguard Worker void GraphicBufferMapper::dumpBufferToSystemLog(buffer_handle_t bufferHandle, bool less) {
91*38e8c45fSAndroid Build Coastguard Worker     std::string s;
92*38e8c45fSAndroid Build Coastguard Worker     GraphicBufferMapper::getInstance().dumpBuffer(bufferHandle, s, less);
93*38e8c45fSAndroid Build Coastguard Worker     ALOGD("%s", s.c_str());
94*38e8c45fSAndroid Build Coastguard Worker }
95*38e8c45fSAndroid Build Coastguard Worker 
importBuffer(const native_handle_t * rawHandle,uint32_t width,uint32_t height,uint32_t layerCount,PixelFormat format,uint64_t usage,uint32_t stride,buffer_handle_t * outHandle)96*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::importBuffer(const native_handle_t* rawHandle, uint32_t width,
97*38e8c45fSAndroid Build Coastguard Worker                                            uint32_t height, uint32_t layerCount, PixelFormat format,
98*38e8c45fSAndroid Build Coastguard Worker                                            uint64_t usage, uint32_t stride,
99*38e8c45fSAndroid Build Coastguard Worker                                            buffer_handle_t* outHandle) {
100*38e8c45fSAndroid Build Coastguard Worker     ATRACE_CALL();
101*38e8c45fSAndroid Build Coastguard Worker 
102*38e8c45fSAndroid Build Coastguard Worker     buffer_handle_t bufferHandle;
103*38e8c45fSAndroid Build Coastguard Worker     status_t error = mMapper->importBuffer(rawHandle, &bufferHandle);
104*38e8c45fSAndroid Build Coastguard Worker     if (error != NO_ERROR) {
105*38e8c45fSAndroid Build Coastguard Worker         ALOGW("importBuffer(%p) failed: %d", rawHandle, error);
106*38e8c45fSAndroid Build Coastguard Worker         return error;
107*38e8c45fSAndroid Build Coastguard Worker     }
108*38e8c45fSAndroid Build Coastguard Worker 
109*38e8c45fSAndroid Build Coastguard Worker     error = mMapper->validateBufferSize(bufferHandle, width, height, format, layerCount, usage,
110*38e8c45fSAndroid Build Coastguard Worker                                         stride);
111*38e8c45fSAndroid Build Coastguard Worker     if (error != NO_ERROR) {
112*38e8c45fSAndroid Build Coastguard Worker         ALOGE("validateBufferSize(%p) failed: %d", rawHandle, error);
113*38e8c45fSAndroid Build Coastguard Worker         freeBuffer(bufferHandle);
114*38e8c45fSAndroid Build Coastguard Worker         return static_cast<status_t>(error);
115*38e8c45fSAndroid Build Coastguard Worker     }
116*38e8c45fSAndroid Build Coastguard Worker 
117*38e8c45fSAndroid Build Coastguard Worker     *outHandle = bufferHandle;
118*38e8c45fSAndroid Build Coastguard Worker 
119*38e8c45fSAndroid Build Coastguard Worker     return NO_ERROR;
120*38e8c45fSAndroid Build Coastguard Worker }
121*38e8c45fSAndroid Build Coastguard Worker 
importBufferNoValidate(const native_handle_t * rawHandle,buffer_handle_t * outHandle)122*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::importBufferNoValidate(const native_handle_t* rawHandle,
123*38e8c45fSAndroid Build Coastguard Worker                                                      buffer_handle_t* outHandle) {
124*38e8c45fSAndroid Build Coastguard Worker     return mMapper->importBuffer(rawHandle, outHandle);
125*38e8c45fSAndroid Build Coastguard Worker }
126*38e8c45fSAndroid Build Coastguard Worker 
getTransportSize(buffer_handle_t handle,uint32_t * outTransportNumFds,uint32_t * outTransportNumInts)127*38e8c45fSAndroid Build Coastguard Worker void GraphicBufferMapper::getTransportSize(buffer_handle_t handle,
128*38e8c45fSAndroid Build Coastguard Worker             uint32_t* outTransportNumFds, uint32_t* outTransportNumInts)
129*38e8c45fSAndroid Build Coastguard Worker {
130*38e8c45fSAndroid Build Coastguard Worker     mMapper->getTransportSize(handle, outTransportNumFds, outTransportNumInts);
131*38e8c45fSAndroid Build Coastguard Worker }
132*38e8c45fSAndroid Build Coastguard Worker 
freeBuffer(buffer_handle_t handle)133*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::freeBuffer(buffer_handle_t handle)
134*38e8c45fSAndroid Build Coastguard Worker {
135*38e8c45fSAndroid Build Coastguard Worker     ATRACE_CALL();
136*38e8c45fSAndroid Build Coastguard Worker 
137*38e8c45fSAndroid Build Coastguard Worker     mMapper->freeBuffer(handle);
138*38e8c45fSAndroid Build Coastguard Worker 
139*38e8c45fSAndroid Build Coastguard Worker     return NO_ERROR;
140*38e8c45fSAndroid Build Coastguard Worker }
141*38e8c45fSAndroid Build Coastguard Worker 
lock(buffer_handle_t handle,int64_t usage,const Rect & bounds,unique_fd && acquireFence)142*38e8c45fSAndroid Build Coastguard Worker ui::Result<LockResult> GraphicBufferMapper::lock(buffer_handle_t handle, int64_t usage,
143*38e8c45fSAndroid Build Coastguard Worker                                                  const Rect& bounds, unique_fd&& acquireFence) {
144*38e8c45fSAndroid Build Coastguard Worker     ATRACE_CALL();
145*38e8c45fSAndroid Build Coastguard Worker 
146*38e8c45fSAndroid Build Coastguard Worker     LockResult result;
147*38e8c45fSAndroid Build Coastguard Worker     status_t status = mMapper->lock(handle, usage, bounds, acquireFence.release(), &result.address,
148*38e8c45fSAndroid Build Coastguard Worker                                     &result.bytesPerPixel, &result.bytesPerStride);
149*38e8c45fSAndroid Build Coastguard Worker     if (status != OK) {
150*38e8c45fSAndroid Build Coastguard Worker         return base::unexpected(ui::Error::statusToCode(status));
151*38e8c45fSAndroid Build Coastguard Worker     } else {
152*38e8c45fSAndroid Build Coastguard Worker         return result;
153*38e8c45fSAndroid Build Coastguard Worker     }
154*38e8c45fSAndroid Build Coastguard Worker }
155*38e8c45fSAndroid Build Coastguard Worker 
lockYCbCr(buffer_handle_t handle,int64_t usage,const Rect & bounds,base::unique_fd && acquireFence)156*38e8c45fSAndroid Build Coastguard Worker ui::Result<android_ycbcr> GraphicBufferMapper::lockYCbCr(buffer_handle_t handle, int64_t usage,
157*38e8c45fSAndroid Build Coastguard Worker                                                          const Rect& bounds,
158*38e8c45fSAndroid Build Coastguard Worker                                                          base::unique_fd&& acquireFence) {
159*38e8c45fSAndroid Build Coastguard Worker     ATRACE_CALL();
160*38e8c45fSAndroid Build Coastguard Worker 
161*38e8c45fSAndroid Build Coastguard Worker     android_ycbcr result = {};
162*38e8c45fSAndroid Build Coastguard Worker     status_t status = mMapper->lock(handle, usage, bounds, acquireFence.release(), &result);
163*38e8c45fSAndroid Build Coastguard Worker     if (status != OK) {
164*38e8c45fSAndroid Build Coastguard Worker         return base::unexpected(ui::Error::statusToCode(status));
165*38e8c45fSAndroid Build Coastguard Worker     } else {
166*38e8c45fSAndroid Build Coastguard Worker         return result;
167*38e8c45fSAndroid Build Coastguard Worker     }
168*38e8c45fSAndroid Build Coastguard Worker }
169*38e8c45fSAndroid Build Coastguard Worker 
unlock(buffer_handle_t handle,base::unique_fd * outFence)170*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::unlock(buffer_handle_t handle, base::unique_fd* outFence) {
171*38e8c45fSAndroid Build Coastguard Worker     ATRACE_CALL();
172*38e8c45fSAndroid Build Coastguard Worker     int fence = mMapper->unlock(handle);
173*38e8c45fSAndroid Build Coastguard Worker     if (outFence) {
174*38e8c45fSAndroid Build Coastguard Worker         *outFence = unique_fd{fence};
175*38e8c45fSAndroid Build Coastguard Worker     } else {
176*38e8c45fSAndroid Build Coastguard Worker         sync_wait(fence, -1);
177*38e8c45fSAndroid Build Coastguard Worker         close(fence);
178*38e8c45fSAndroid Build Coastguard Worker     }
179*38e8c45fSAndroid Build Coastguard Worker     return OK;
180*38e8c45fSAndroid Build Coastguard Worker }
181*38e8c45fSAndroid Build Coastguard Worker 
lock(buffer_handle_t handle,uint32_t usage,const Rect & bounds,void ** vaddr)182*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::lock(buffer_handle_t handle, uint32_t usage, const Rect& bounds,
183*38e8c45fSAndroid Build Coastguard Worker                                    void** vaddr) {
184*38e8c45fSAndroid Build Coastguard Worker     auto result = lock(handle, static_cast<int64_t>(usage), bounds);
185*38e8c45fSAndroid Build Coastguard Worker     if (!result.has_value()) return result.asStatus();
186*38e8c45fSAndroid Build Coastguard Worker     auto val = result.value();
187*38e8c45fSAndroid Build Coastguard Worker     *vaddr = val.address;
188*38e8c45fSAndroid Build Coastguard Worker     return OK;
189*38e8c45fSAndroid Build Coastguard Worker }
190*38e8c45fSAndroid Build Coastguard Worker 
lockYCbCr(buffer_handle_t handle,uint32_t usage,const Rect & bounds,android_ycbcr * ycbcr)191*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::lockYCbCr(buffer_handle_t handle, uint32_t usage, const Rect& bounds,
192*38e8c45fSAndroid Build Coastguard Worker                                         android_ycbcr* ycbcr) {
193*38e8c45fSAndroid Build Coastguard Worker     auto result = lockYCbCr(handle, static_cast<int64_t>(usage), bounds);
194*38e8c45fSAndroid Build Coastguard Worker     if (!result.has_value()) return result.asStatus();
195*38e8c45fSAndroid Build Coastguard Worker     *ycbcr = result.value();
196*38e8c45fSAndroid Build Coastguard Worker     return OK;
197*38e8c45fSAndroid Build Coastguard Worker }
198*38e8c45fSAndroid Build Coastguard Worker 
lockAsync(buffer_handle_t handle,uint32_t usage,const Rect & bounds,void ** vaddr,int fenceFd)199*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::lockAsync(buffer_handle_t handle, uint32_t usage, const Rect& bounds,
200*38e8c45fSAndroid Build Coastguard Worker                                         void** vaddr, int fenceFd) {
201*38e8c45fSAndroid Build Coastguard Worker     auto result = lock(handle, static_cast<int64_t>(usage), bounds, unique_fd{fenceFd});
202*38e8c45fSAndroid Build Coastguard Worker     if (!result.has_value()) return result.asStatus();
203*38e8c45fSAndroid Build Coastguard Worker     auto val = result.value();
204*38e8c45fSAndroid Build Coastguard Worker     *vaddr = val.address;
205*38e8c45fSAndroid Build Coastguard Worker     return OK;
206*38e8c45fSAndroid Build Coastguard Worker }
207*38e8c45fSAndroid Build Coastguard Worker 
lockAsync(buffer_handle_t handle,uint64_t producerUsage,uint64_t consumerUsage,const Rect & bounds,void ** vaddr,int fenceFd)208*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::lockAsync(buffer_handle_t handle, uint64_t producerUsage,
209*38e8c45fSAndroid Build Coastguard Worker                                         uint64_t consumerUsage, const Rect& bounds, void** vaddr,
210*38e8c45fSAndroid Build Coastguard Worker                                         int fenceFd) {
211*38e8c45fSAndroid Build Coastguard Worker     return lockAsync(handle,
212*38e8c45fSAndroid Build Coastguard Worker                      ANDROID_NATIVE_UNSIGNED_CAST(
213*38e8c45fSAndroid Build Coastguard Worker                              android_convertGralloc1To0Usage(producerUsage, consumerUsage)),
214*38e8c45fSAndroid Build Coastguard Worker                      bounds, vaddr, fenceFd);
215*38e8c45fSAndroid Build Coastguard Worker }
216*38e8c45fSAndroid Build Coastguard Worker 
lockAsyncYCbCr(buffer_handle_t handle,uint32_t usage,const Rect & bounds,android_ycbcr * ycbcr,int fenceFd)217*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::lockAsyncYCbCr(buffer_handle_t handle, uint32_t usage,
218*38e8c45fSAndroid Build Coastguard Worker                                              const Rect& bounds, android_ycbcr* ycbcr,
219*38e8c45fSAndroid Build Coastguard Worker                                              int fenceFd) {
220*38e8c45fSAndroid Build Coastguard Worker     auto result = lockYCbCr(handle, static_cast<int64_t>(usage), bounds, unique_fd{fenceFd});
221*38e8c45fSAndroid Build Coastguard Worker     if (!result.has_value()) return result.asStatus();
222*38e8c45fSAndroid Build Coastguard Worker     *ycbcr = result.value();
223*38e8c45fSAndroid Build Coastguard Worker     return OK;
224*38e8c45fSAndroid Build Coastguard Worker }
225*38e8c45fSAndroid Build Coastguard Worker 
isSupported(uint32_t width,uint32_t height,android::PixelFormat format,uint32_t layerCount,uint64_t usage,bool * outSupported)226*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::isSupported(uint32_t width, uint32_t height,
227*38e8c45fSAndroid Build Coastguard Worker                                           android::PixelFormat format, uint32_t layerCount,
228*38e8c45fSAndroid Build Coastguard Worker                                           uint64_t usage, bool* outSupported) {
229*38e8c45fSAndroid Build Coastguard Worker     return mMapper->isSupported(width, height, format, layerCount, usage, outSupported);
230*38e8c45fSAndroid Build Coastguard Worker }
231*38e8c45fSAndroid Build Coastguard Worker 
getBufferId(buffer_handle_t bufferHandle,uint64_t * outBufferId)232*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getBufferId(buffer_handle_t bufferHandle, uint64_t* outBufferId) {
233*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getBufferId(bufferHandle, outBufferId);
234*38e8c45fSAndroid Build Coastguard Worker }
235*38e8c45fSAndroid Build Coastguard Worker 
getName(buffer_handle_t bufferHandle,std::string * outName)236*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getName(buffer_handle_t bufferHandle, std::string* outName) {
237*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getName(bufferHandle, outName);
238*38e8c45fSAndroid Build Coastguard Worker }
239*38e8c45fSAndroid Build Coastguard Worker 
getWidth(buffer_handle_t bufferHandle,uint64_t * outWidth)240*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getWidth(buffer_handle_t bufferHandle, uint64_t* outWidth) {
241*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getWidth(bufferHandle, outWidth);
242*38e8c45fSAndroid Build Coastguard Worker }
243*38e8c45fSAndroid Build Coastguard Worker 
getHeight(buffer_handle_t bufferHandle,uint64_t * outHeight)244*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getHeight(buffer_handle_t bufferHandle, uint64_t* outHeight) {
245*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getHeight(bufferHandle, outHeight);
246*38e8c45fSAndroid Build Coastguard Worker }
247*38e8c45fSAndroid Build Coastguard Worker 
getLayerCount(buffer_handle_t bufferHandle,uint64_t * outLayerCount)248*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getLayerCount(buffer_handle_t bufferHandle, uint64_t* outLayerCount) {
249*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getLayerCount(bufferHandle, outLayerCount);
250*38e8c45fSAndroid Build Coastguard Worker }
251*38e8c45fSAndroid Build Coastguard Worker 
getPixelFormatRequested(buffer_handle_t bufferHandle,ui::PixelFormat * outPixelFormatRequested)252*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getPixelFormatRequested(buffer_handle_t bufferHandle,
253*38e8c45fSAndroid Build Coastguard Worker                                                       ui::PixelFormat* outPixelFormatRequested) {
254*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getPixelFormatRequested(bufferHandle, outPixelFormatRequested);
255*38e8c45fSAndroid Build Coastguard Worker }
256*38e8c45fSAndroid Build Coastguard Worker 
getPixelFormatFourCC(buffer_handle_t bufferHandle,uint32_t * outPixelFormatFourCC)257*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getPixelFormatFourCC(buffer_handle_t bufferHandle,
258*38e8c45fSAndroid Build Coastguard Worker                                                    uint32_t* outPixelFormatFourCC) {
259*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getPixelFormatFourCC(bufferHandle, outPixelFormatFourCC);
260*38e8c45fSAndroid Build Coastguard Worker }
261*38e8c45fSAndroid Build Coastguard Worker 
getPixelFormatModifier(buffer_handle_t bufferHandle,uint64_t * outPixelFormatModifier)262*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getPixelFormatModifier(buffer_handle_t bufferHandle,
263*38e8c45fSAndroid Build Coastguard Worker                                                      uint64_t* outPixelFormatModifier) {
264*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getPixelFormatModifier(bufferHandle, outPixelFormatModifier);
265*38e8c45fSAndroid Build Coastguard Worker }
266*38e8c45fSAndroid Build Coastguard Worker 
getUsage(buffer_handle_t bufferHandle,uint64_t * outUsage)267*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getUsage(buffer_handle_t bufferHandle, uint64_t* outUsage) {
268*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getUsage(bufferHandle, outUsage);
269*38e8c45fSAndroid Build Coastguard Worker }
270*38e8c45fSAndroid Build Coastguard Worker 
getAllocationSize(buffer_handle_t bufferHandle,uint64_t * outAllocationSize)271*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getAllocationSize(buffer_handle_t bufferHandle,
272*38e8c45fSAndroid Build Coastguard Worker                                                 uint64_t* outAllocationSize) {
273*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getAllocationSize(bufferHandle, outAllocationSize);
274*38e8c45fSAndroid Build Coastguard Worker }
275*38e8c45fSAndroid Build Coastguard Worker 
getProtectedContent(buffer_handle_t bufferHandle,uint64_t * outProtectedContent)276*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getProtectedContent(buffer_handle_t bufferHandle,
277*38e8c45fSAndroid Build Coastguard Worker                                                   uint64_t* outProtectedContent) {
278*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getProtectedContent(bufferHandle, outProtectedContent);
279*38e8c45fSAndroid Build Coastguard Worker }
280*38e8c45fSAndroid Build Coastguard Worker 
getCompression(buffer_handle_t bufferHandle,aidl::android::hardware::graphics::common::ExtendableType * outCompression)281*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getCompression(
282*38e8c45fSAndroid Build Coastguard Worker         buffer_handle_t bufferHandle,
283*38e8c45fSAndroid Build Coastguard Worker         aidl::android::hardware::graphics::common::ExtendableType* outCompression) {
284*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getCompression(bufferHandle, outCompression);
285*38e8c45fSAndroid Build Coastguard Worker }
286*38e8c45fSAndroid Build Coastguard Worker 
getCompression(buffer_handle_t bufferHandle,ui::Compression * outCompression)287*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getCompression(buffer_handle_t bufferHandle,
288*38e8c45fSAndroid Build Coastguard Worker                                              ui::Compression* outCompression) {
289*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getCompression(bufferHandle, outCompression);
290*38e8c45fSAndroid Build Coastguard Worker }
291*38e8c45fSAndroid Build Coastguard Worker 
getInterlaced(buffer_handle_t bufferHandle,aidl::android::hardware::graphics::common::ExtendableType * outInterlaced)292*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getInterlaced(
293*38e8c45fSAndroid Build Coastguard Worker         buffer_handle_t bufferHandle,
294*38e8c45fSAndroid Build Coastguard Worker         aidl::android::hardware::graphics::common::ExtendableType* outInterlaced) {
295*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getInterlaced(bufferHandle, outInterlaced);
296*38e8c45fSAndroid Build Coastguard Worker }
297*38e8c45fSAndroid Build Coastguard Worker 
getInterlaced(buffer_handle_t bufferHandle,ui::Interlaced * outInterlaced)298*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getInterlaced(buffer_handle_t bufferHandle,
299*38e8c45fSAndroid Build Coastguard Worker                                             ui::Interlaced* outInterlaced) {
300*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getInterlaced(bufferHandle, outInterlaced);
301*38e8c45fSAndroid Build Coastguard Worker }
302*38e8c45fSAndroid Build Coastguard Worker 
getChromaSiting(buffer_handle_t bufferHandle,aidl::android::hardware::graphics::common::ExtendableType * outChromaSiting)303*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getChromaSiting(
304*38e8c45fSAndroid Build Coastguard Worker         buffer_handle_t bufferHandle,
305*38e8c45fSAndroid Build Coastguard Worker         aidl::android::hardware::graphics::common::ExtendableType* outChromaSiting) {
306*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getChromaSiting(bufferHandle, outChromaSiting);
307*38e8c45fSAndroid Build Coastguard Worker }
308*38e8c45fSAndroid Build Coastguard Worker 
getChromaSiting(buffer_handle_t bufferHandle,ui::ChromaSiting * outChromaSiting)309*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getChromaSiting(buffer_handle_t bufferHandle,
310*38e8c45fSAndroid Build Coastguard Worker                                               ui::ChromaSiting* outChromaSiting) {
311*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getChromaSiting(bufferHandle, outChromaSiting);
312*38e8c45fSAndroid Build Coastguard Worker }
313*38e8c45fSAndroid Build Coastguard Worker 
getPlaneLayouts(buffer_handle_t bufferHandle,std::vector<ui::PlaneLayout> * outPlaneLayouts)314*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getPlaneLayouts(buffer_handle_t bufferHandle,
315*38e8c45fSAndroid Build Coastguard Worker                                               std::vector<ui::PlaneLayout>* outPlaneLayouts) {
316*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getPlaneLayouts(bufferHandle, outPlaneLayouts);
317*38e8c45fSAndroid Build Coastguard Worker }
318*38e8c45fSAndroid Build Coastguard Worker 
getPlaneLayouts(buffer_handle_t bufferHandle)319*38e8c45fSAndroid Build Coastguard Worker ui::Result<std::vector<ui::PlaneLayout>> GraphicBufferMapper::getPlaneLayouts(
320*38e8c45fSAndroid Build Coastguard Worker         buffer_handle_t bufferHandle) {
321*38e8c45fSAndroid Build Coastguard Worker     std::vector<ui::PlaneLayout> temp;
322*38e8c45fSAndroid Build Coastguard Worker     status_t status = mMapper->getPlaneLayouts(bufferHandle, &temp);
323*38e8c45fSAndroid Build Coastguard Worker     if (status == OK) {
324*38e8c45fSAndroid Build Coastguard Worker         return std::move(temp);
325*38e8c45fSAndroid Build Coastguard Worker     } else {
326*38e8c45fSAndroid Build Coastguard Worker         return base::unexpected(ui::Error::statusToCode(status));
327*38e8c45fSAndroid Build Coastguard Worker     }
328*38e8c45fSAndroid Build Coastguard Worker }
329*38e8c45fSAndroid Build Coastguard Worker 
getDataspace(buffer_handle_t bufferHandle,ui::Dataspace * outDataspace)330*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getDataspace(buffer_handle_t bufferHandle,
331*38e8c45fSAndroid Build Coastguard Worker                                            ui::Dataspace* outDataspace) {
332*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getDataspace(bufferHandle, outDataspace);
333*38e8c45fSAndroid Build Coastguard Worker }
334*38e8c45fSAndroid Build Coastguard Worker 
setDataspace(buffer_handle_t bufferHandle,ui::Dataspace dataspace)335*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::setDataspace(buffer_handle_t bufferHandle, ui::Dataspace dataspace) {
336*38e8c45fSAndroid Build Coastguard Worker     return mMapper->setDataspace(bufferHandle, dataspace);
337*38e8c45fSAndroid Build Coastguard Worker }
338*38e8c45fSAndroid Build Coastguard Worker 
getBlendMode(buffer_handle_t bufferHandle,ui::BlendMode * outBlendMode)339*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getBlendMode(buffer_handle_t bufferHandle,
340*38e8c45fSAndroid Build Coastguard Worker                                            ui::BlendMode* outBlendMode) {
341*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getBlendMode(bufferHandle, outBlendMode);
342*38e8c45fSAndroid Build Coastguard Worker }
343*38e8c45fSAndroid Build Coastguard Worker 
getSmpte2086(buffer_handle_t bufferHandle,std::optional<ui::Smpte2086> * outSmpte2086)344*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getSmpte2086(buffer_handle_t bufferHandle,
345*38e8c45fSAndroid Build Coastguard Worker                                            std::optional<ui::Smpte2086>* outSmpte2086) {
346*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getSmpte2086(bufferHandle, outSmpte2086);
347*38e8c45fSAndroid Build Coastguard Worker }
348*38e8c45fSAndroid Build Coastguard Worker 
setSmpte2086(buffer_handle_t bufferHandle,std::optional<ui::Smpte2086> smpte2086)349*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::setSmpte2086(buffer_handle_t bufferHandle,
350*38e8c45fSAndroid Build Coastguard Worker                                            std::optional<ui::Smpte2086> smpte2086) {
351*38e8c45fSAndroid Build Coastguard Worker     return mMapper->setSmpte2086(bufferHandle, smpte2086);
352*38e8c45fSAndroid Build Coastguard Worker }
353*38e8c45fSAndroid Build Coastguard Worker 
getCta861_3(buffer_handle_t bufferHandle,std::optional<ui::Cta861_3> * outCta861_3)354*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getCta861_3(buffer_handle_t bufferHandle,
355*38e8c45fSAndroid Build Coastguard Worker                                           std::optional<ui::Cta861_3>* outCta861_3) {
356*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getCta861_3(bufferHandle, outCta861_3);
357*38e8c45fSAndroid Build Coastguard Worker }
358*38e8c45fSAndroid Build Coastguard Worker 
setCta861_3(buffer_handle_t bufferHandle,std::optional<ui::Cta861_3> cta861_3)359*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::setCta861_3(buffer_handle_t bufferHandle,
360*38e8c45fSAndroid Build Coastguard Worker                                           std::optional<ui::Cta861_3> cta861_3) {
361*38e8c45fSAndroid Build Coastguard Worker     return mMapper->setCta861_3(bufferHandle, cta861_3);
362*38e8c45fSAndroid Build Coastguard Worker }
363*38e8c45fSAndroid Build Coastguard Worker 
getSmpte2094_40(buffer_handle_t bufferHandle,std::optional<std::vector<uint8_t>> * outSmpte2094_40)364*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getSmpte2094_40(
365*38e8c45fSAndroid Build Coastguard Worker         buffer_handle_t bufferHandle, std::optional<std::vector<uint8_t>>* outSmpte2094_40) {
366*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getSmpte2094_40(bufferHandle, outSmpte2094_40);
367*38e8c45fSAndroid Build Coastguard Worker }
368*38e8c45fSAndroid Build Coastguard Worker 
setSmpte2094_40(buffer_handle_t bufferHandle,std::optional<std::vector<uint8_t>> smpte2094_40)369*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::setSmpte2094_40(buffer_handle_t bufferHandle,
370*38e8c45fSAndroid Build Coastguard Worker                                               std::optional<std::vector<uint8_t>> smpte2094_40) {
371*38e8c45fSAndroid Build Coastguard Worker     return mMapper->setSmpte2094_40(bufferHandle, smpte2094_40);
372*38e8c45fSAndroid Build Coastguard Worker }
373*38e8c45fSAndroid Build Coastguard Worker 
getSmpte2094_10(buffer_handle_t bufferHandle,std::optional<std::vector<uint8_t>> * outSmpte2094_10)374*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::getSmpte2094_10(
375*38e8c45fSAndroid Build Coastguard Worker         buffer_handle_t bufferHandle, std::optional<std::vector<uint8_t>>* outSmpte2094_10) {
376*38e8c45fSAndroid Build Coastguard Worker     return mMapper->getSmpte2094_10(bufferHandle, outSmpte2094_10);
377*38e8c45fSAndroid Build Coastguard Worker }
378*38e8c45fSAndroid Build Coastguard Worker 
setSmpte2094_10(buffer_handle_t bufferHandle,std::optional<std::vector<uint8_t>> smpte2094_10)379*38e8c45fSAndroid Build Coastguard Worker status_t GraphicBufferMapper::setSmpte2094_10(buffer_handle_t bufferHandle,
380*38e8c45fSAndroid Build Coastguard Worker                                               std::optional<std::vector<uint8_t>> smpte2094_10) {
381*38e8c45fSAndroid Build Coastguard Worker     return mMapper->setSmpte2094_10(bufferHandle, smpte2094_10);
382*38e8c45fSAndroid Build Coastguard Worker }
383*38e8c45fSAndroid Build Coastguard Worker 
384*38e8c45fSAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
385*38e8c45fSAndroid Build Coastguard Worker }; // namespace android
386