Home | History | Annotate | Download | only in ui
      1 /*
      2  * Copyright (C) 2007 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef ANDROID_UI_BUFFER_MAPPER_H
     18 #define ANDROID_UI_BUFFER_MAPPER_H
     19 
     20 #include <stdint.h>
     21 #include <sys/types.h>
     22 
     23 #include <memory>
     24 
     25 #include <ui/PixelFormat.h>
     26 #include <utils/Singleton.h>
     27 
     28 
     29 // Needed by code that still uses the GRALLOC_USAGE_* constants.
     30 // when/if we get rid of gralloc, we should provide aliases or fix call sites.
     31 #include <hardware/gralloc.h>
     32 
     33 
     34 namespace android {
     35 
     36 // ---------------------------------------------------------------------------
     37 
     38 class GrallocMapper;
     39 class Rect;
     40 
     41 class GraphicBufferMapper : public Singleton<GraphicBufferMapper>
     42 {
     43 public:
     44     enum Version {
     45         GRALLOC_2,
     46         GRALLOC_3,
     47     };
     48     static void preloadHal();
     49     static inline GraphicBufferMapper& get() { return getInstance(); }
     50 
     51     // The imported outHandle must be freed with freeBuffer when no longer
     52     // needed. rawHandle is owned by the caller.
     53     status_t importBuffer(buffer_handle_t rawHandle,
     54             uint32_t width, uint32_t height, uint32_t layerCount,
     55             PixelFormat format, uint64_t usage, uint32_t stride,
     56             buffer_handle_t* outHandle);
     57 
     58     status_t freeBuffer(buffer_handle_t handle);
     59 
     60     void getTransportSize(buffer_handle_t handle,
     61             uint32_t* outTransportNumFds, uint32_t* outTransportNumInts);
     62 
     63     status_t lock(buffer_handle_t handle, uint32_t usage, const Rect& bounds, void** vaddr,
     64                   int32_t* outBytesPerPixel = nullptr, int32_t* outBytesPerStride = nullptr);
     65 
     66     status_t lockYCbCr(buffer_handle_t handle,
     67             uint32_t usage, const Rect& bounds, android_ycbcr *ycbcr);
     68 
     69     status_t unlock(buffer_handle_t handle);
     70 
     71     status_t lockAsync(buffer_handle_t handle, uint32_t usage, const Rect& bounds, void** vaddr,
     72                        int fenceFd, int32_t* outBytesPerPixel = nullptr,
     73                        int32_t* outBytesPerStride = nullptr);
     74 
     75     status_t lockAsync(buffer_handle_t handle, uint64_t producerUsage, uint64_t consumerUsage,
     76                        const Rect& bounds, void** vaddr, int fenceFd,
     77                        int32_t* outBytesPerPixel = nullptr, int32_t* outBytesPerStride = nullptr);
     78 
     79     status_t lockAsyncYCbCr(buffer_handle_t handle,
     80             uint32_t usage, const Rect& bounds, android_ycbcr *ycbcr,
     81             int fenceFd);
     82 
     83     status_t unlockAsync(buffer_handle_t handle, int *fenceFd);
     84 
     85     status_t isSupported(uint32_t width, uint32_t height, android::PixelFormat format,
     86                          uint32_t layerCount, uint64_t usage, bool* outSupported);
     87 
     88     const GrallocMapper& getGrallocMapper() const {
     89         return reinterpret_cast<const GrallocMapper&>(*mMapper);
     90     }
     91 
     92     Version getMapperVersion() const { return mMapperVersion; }
     93 
     94 private:
     95     friend class Singleton<GraphicBufferMapper>;
     96 
     97     GraphicBufferMapper();
     98 
     99     std::unique_ptr<const GrallocMapper> mMapper;
    100 
    101     Version mMapperVersion;
    102 };
    103 
    104 // ---------------------------------------------------------------------------
    105 
    106 }; // namespace android
    107 
    108 #endif // ANDROID_UI_BUFFER_MAPPER_H
    109 
    110