12ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/*
26cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
32ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
42ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Redistribution and use in source and binary forms, with or without
52ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * modification, are permitted provided that the following conditions are
62ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * met:
72ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel *   * Redistributions of source code must retain the above copyright
82ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel *     notice, this list of conditions and the following disclaimer.
92ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel *   * Redistributions in binary form must reproduce the above
102ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel *     copyright notice, this list of conditions and the following
112ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel *     disclaimer in the documentation and/or other materials provided
122ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel *     with the distribution.
132ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel *   * Neither the name of The Linux Foundation nor the names of its
142ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel *     contributors may be used to endorse or promote products derived
152ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel *     from this software without specific prior written permission.
162ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel *
172ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
182ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
192ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
202ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
212ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
222ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
232ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
242ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
252ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
262ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
272ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
282ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel */
292ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
302ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#ifndef __GR_BUF_DESCRIPTOR_H__
312ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define __GR_BUF_DESCRIPTOR_H__
322ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
332ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#include <hardware/gralloc1.h>
342ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
356cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudelnamespace gralloc1 {
362ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelclass BufferDescriptor {
372ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel public:
386cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel  BufferDescriptor() : id_(next_id_++) {}
392ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
402ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  BufferDescriptor(int w, int h, int f)
412ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel      : width_(w),
422ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel        height_(h),
432ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel        format_(f),
442ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel        producer_usage_(GRALLOC1_PRODUCER_USAGE_NONE),
456cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel        consumer_usage_(GRALLOC1_CONSUMER_USAGE_NONE),
466cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel        id_(next_id_++) {}
472ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
482ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  BufferDescriptor(int w, int h, int f, gralloc1_producer_usage_t prod_usage,
492ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel                   gralloc1_consumer_usage_t cons_usage)
502ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel      : width_(w),
512ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel        height_(h),
522ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel        format_(f),
532ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel        producer_usage_(prod_usage),
546cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel        consumer_usage_(cons_usage),
556cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel        id_(next_id_++) {}
562ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
572ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  void SetConsumerUsage(gralloc1_consumer_usage_t usage) { consumer_usage_ = usage; }
582ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
592ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  void SetProducerUsage(gralloc1_producer_usage_t usage) { producer_usage_ = usage; }
602ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
612ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  void SetDimensions(int w, int h) {
622ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    width_ = w;
632ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    height_ = h;
642ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  }
652ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
662ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  void SetColorFormat(int format) { format_ = format; }
672ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
68cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel  void SetLayerCount(uint32_t layer_count) { layer_count_ = layer_count; }
69cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel
702ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  gralloc1_consumer_usage_t GetConsumerUsage() const { return consumer_usage_; }
712ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
722ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  gralloc1_producer_usage_t GetProducerUsage() const { return producer_usage_; }
732ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
742ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  int GetWidth() const { return width_; }
752ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
762ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  int GetHeight() const { return height_; }
772ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
782ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  int GetFormat() const { return format_; }
792ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
80cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel  uint32_t GetLayerCount() const { return layer_count_; }
81cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel
826cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel  gralloc1_buffer_descriptor_t GetId() const { return id_; }
832ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
846cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel private:
852ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  int width_ = -1;
862ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  int height_ = -1;
872ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  int format_ = -1;
88cd66324640d3290ee75bf5bf41826fbcbc55a13aThierry Strudel  uint32_t layer_count_ = 1;
892ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  gralloc1_producer_usage_t producer_usage_ = GRALLOC1_PRODUCER_USAGE_NONE;
902ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  gralloc1_consumer_usage_t consumer_usage_ = GRALLOC1_CONSUMER_USAGE_NONE;
916cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel  const gralloc1_buffer_descriptor_t id_;
926cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel  static std::atomic<gralloc1_buffer_descriptor_t> next_id_;
932ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel};
946cfbcfa35e4da3a5975d9904a8caae9968acc768Thierry Strudel};  // namespace gralloc1
952ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#endif  // __GR_BUF_DESCRIPTOR_H__
96