Home | History | Annotate | Download | only in hwc2
      1 /*
      2 * Copyright (c) 2015-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 #ifdef USE_GRALLOC1
     30 #ifndef __HWC_BUFFER_ALLOCATOR_H__
     31 #define __HWC_BUFFER_ALLOCATOR_H__
     32 
     33 #include <fcntl.h>
     34 #include <sys/mman.h>
     35 
     36 #include <hardware/gralloc1.h>
     37 #include "gralloc_priv.h"
     38 
     39 namespace sdm {
     40 
     41 template <class Type>
     42 inline Type ALIGN(Type x, Type align) {
     43   return (x + align - 1) & ~(align - 1);
     44 }
     45 
     46 class HWCBufferAllocator : public BufferAllocator {
     47  public:
     48   DisplayError Init();
     49   DisplayError Deinit();
     50   DisplayError AllocateBuffer(BufferInfo *buffer_info);
     51   DisplayError FreeBuffer(BufferInfo *buffer_info);
     52   uint32_t GetBufferSize(BufferInfo *buffer_info);
     53 
     54   void GetCustomWidthAndHeight(const private_handle_t *handle, int *width, int *height);
     55   void GetAlignedWidthAndHeight(int width, int height, int format, uint32_t alloc_type,
     56                                 int *aligned_width, int *aligned_height);
     57   DisplayError GetAllocatedBufferInfo(const BufferConfig &buffer_config,
     58                                       AllocatedBufferInfo *allocated_buffer_info);
     59   DisplayError GetBufferLayout(const AllocatedBufferInfo &buf_info,
     60                                uint32_t stride[4], uint32_t offset[4],
     61                                uint32_t *num_planes);
     62   int SetBufferInfo(LayerBufferFormat format, int *target, uint64_t *flags);
     63   DisplayError MapBuffer(const private_handle_t *handle, int acquire_fence);
     64   DisplayError UnmapBuffer(const private_handle_t *handle, int* release_fence);
     65 
     66  private:
     67   gralloc1_device_t *gralloc_device_ = nullptr;
     68   const hw_module_t *module_;
     69   GRALLOC1_PFN_RELEASE ReleaseBuffer_ = nullptr;
     70   GRALLOC1_PFN_PERFORM Perform_ = nullptr;
     71   GRALLOC1_PFN_LOCK Lock_ = nullptr;
     72   GRALLOC1_PFN_UNLOCK Unlock_ = nullptr;
     73 };
     74 
     75 }  // namespace sdm
     76 #endif  // __HWC_BUFFER_ALLOCATOR_H__
     77 #else
     78 #include "../hwc/hwc_buffer_allocator.h"
     79 #endif  // __HWC_BUFFER_ALLOCATOR_H__
     80 
     81