12ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel/*
22ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel * Copyright (c) 2016, 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
352ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#define BUF_DESCRIPTOR(exp) reinterpret_cast<BufferDescriptor *>(exp)
362ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
372ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudelclass BufferDescriptor {
382ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel public:
392ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  BufferDescriptor() {}
402ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
412ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  BufferDescriptor(int w, int h, int f)
422ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel      : width_(w),
432ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel        height_(h),
442ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel        format_(f),
452ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel        producer_usage_(GRALLOC1_PRODUCER_USAGE_NONE),
462ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel        consumer_usage_(GRALLOC1_CONSUMER_USAGE_NONE) {}
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),
542ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel        consumer_usage_(cons_usage) {}
552ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
562ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  bool IsValid() { return (magic == kMagic); }
572ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
582ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  void SetConsumerUsage(gralloc1_consumer_usage_t usage) { consumer_usage_ = usage; }
592ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
602ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  void SetProducerUsage(gralloc1_producer_usage_t usage) { producer_usage_ = usage; }
612ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
622ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  void SetDimensions(int w, int h) {
632ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    width_ = w;
642ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel    height_ = h;
652ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  }
662ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
672ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  void SetColorFormat(int format) { format_ = format; }
682ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
692ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  gralloc1_consumer_usage_t GetConsumerUsage() const { return consumer_usage_; }
702ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
712ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  gralloc1_producer_usage_t GetProducerUsage() const { return producer_usage_; }
722ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
732ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  int GetWidth() const { return width_; }
742ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
752ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  int GetHeight() const { return height_; }
762ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
772ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  int GetFormat() const { return format_; }
782ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
792ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel private:
802ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  static const int kMagic = 'gr1d';
812ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
822ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  int magic = kMagic;
832ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  int width_ = -1;
842ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  int height_ = -1;
852ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  int format_ = -1;
862ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  gralloc1_producer_usage_t producer_usage_ = GRALLOC1_PRODUCER_USAGE_NONE;
872ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel  gralloc1_consumer_usage_t consumer_usage_ = GRALLOC1_CONSUMER_USAGE_NONE;
882ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel};
892ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel
902ebc25b87caae537b8cd97beb8a86a7ff5f0cdf4Thierry Strudel#endif  // __GR_BUF_DESCRIPTOR_H__
91