Home | History | Annotate | Download | only in hwc
      1 /*
      2 * Copyright (c) 2015-2016, 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 
     31 #ifndef __HWC_BUFFER_ALLOCATOR_H__
     32 #define __HWC_BUFFER_ALLOCATOR_H__
     33 
     34 #include <sys/mman.h>
     35 #include <fcntl.h>
     36 
     37 namespace gralloc {
     38 
     39 class IAllocController;
     40 
     41 }  // namespace gralloc
     42 
     43 namespace sdm {
     44 
     45 class HWCBufferAllocator : public BufferAllocator {
     46  public:
     47   HWCBufferAllocator();
     48 
     49   DisplayError AllocateBuffer(BufferInfo *buffer_info);
     50   DisplayError FreeBuffer(BufferInfo *buffer_info);
     51   uint32_t GetBufferSize(BufferInfo *buffer_info);
     52   DisplayError GetAllocatedBufferInfo(const BufferConfig &buffer_config,
     53                                       AllocatedBufferInfo *allocated_buffer_info);
     54   DisplayError GetBufferLayout(const AllocatedBufferInfo &buf_info,
     55                                uint32_t stride[4], uint32_t offset[4],
     56                                uint32_t *num_planes);
     57   int SetBufferInfo(LayerBufferFormat format, int *target, int *flags);
     58 
     59  private:
     60   struct MetaBufferInfo {
     61     int alloc_type;              //!< Specifies allocation type set by the buffer allocator.
     62     void *base_addr;             //!< Specifies the base address of the allocated output buffer.
     63   };
     64 
     65   gralloc::IAllocController *alloc_controller_;
     66 };
     67 
     68 }  // namespace sdm
     69 #endif  // __HWC_BUFFER_ALLOCATOR_H__
     70 
     71