16a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu/* 2cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Copyright (c) 2014 Intel Corporation 3cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// 4cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Licensed under the Apache License, Version 2.0 (the "License"); 5cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// you may not use this file except in compliance with the License. 6cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// You may obtain a copy of the License at 7cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// 8cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// http://www.apache.org/licenses/LICENSE-2.0 9cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// 10cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Unless required by applicable law or agreed to in writing, software 11cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// distributed under the License is distributed on an "AS IS" BASIS, 12cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// See the License for the specific language governing permissions and 14cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// limitations under the License. 15cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika*/ 166a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#ifndef DATABUFFER_H__ 176a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#define DATABUFFER_H__ 186a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 196a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <hardware/hwcomposer.h> 206a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 216a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace android { 226a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace intel { 236a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 246a6081a46a83da606cf21548879b37695adc7e1fAndy Qiutypedef struct crop { 25e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li // align with android, using 'int' here 266a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int x; 276a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int y; 286a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int w; 296a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu int h; 306a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} crop_t; 316a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 326a6081a46a83da606cf21548879b37695adc7e1fAndy Qiutypedef struct stride { 336a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu union { 346a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu struct { 356a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu uint32_t stride; 366a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu } rgb; 376a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu struct { 386a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu uint32_t yStride; 396a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu uint32_t uvStride; 406a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu } yuv; 416a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu }; 426a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu}stride_t; 436a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 446a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuclass DataBuffer { 456a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 466a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu enum { 476a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu FORMAT_INVALID = 0xffffffff, 486a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu }; 496a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 506a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DataBuffer(uint32_t handle) 516a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu { 52eb726af21649d79ed720bdf329e0849270995c45Andy Qiu initBuffer(handle); 536a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu } 543f4f1078eb04a244ad391375ce1b6e30ae0ef6dfAndy Qiu virtual ~DataBuffer() {} 55eb726af21649d79ed720bdf329e0849270995c45Andy Qiu 566a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 57eb726af21649d79ed720bdf329e0849270995c45Andy Qiu virtual void resetBuffer(uint32_t handle) { 58eb726af21649d79ed720bdf329e0849270995c45Andy Qiu // nothing to reset, just do initialization 59eb726af21649d79ed720bdf329e0849270995c45Andy Qiu initBuffer(handle); 60eb726af21649d79ed720bdf329e0849270995c45Andy Qiu } 61eb726af21649d79ed720bdf329e0849270995c45Andy Qiu 626a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu uint32_t getHandle() const { return mHandle; } 636a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 646a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu void setStride(stride_t& stride) { mStride = stride; } 656a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu stride_t& getStride() { return mStride; } 666a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 676a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu void setWidth(uint32_t width) { mWidth = width; } 686a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu uint32_t getWidth() const { return mWidth; } 696a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 706a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu void setHeight(uint32_t height) { mHeight = height; } 716a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu uint32_t getHeight() const { return mHeight; } 726a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 736a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu void setCrop(int x, int y, int w, int h) { 746a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu mCrop.x = x; mCrop.y = y; mCrop.w = w; mCrop.h = h; } 756a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu crop_t& getCrop() { return mCrop; } 766a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 776a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu void setFormat(uint32_t format) { mFormat = format; } 786a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu uint32_t getFormat() const { return mFormat; } 796a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 806a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu uint64_t getKey() const { return mKey; } 81eb726af21649d79ed720bdf329e0849270995c45Andy Qiu 829f379685f09ddd7c4d98b23121487e8ac4b4dd40Jackie Li void setIsCompression(bool isCompressed) { mIsCompression = isCompressed; } 839f379685f09ddd7c4d98b23121487e8ac4b4dd40Jackie Li bool isCompression() { return mIsCompression; } 849f379685f09ddd7c4d98b23121487e8ac4b4dd40Jackie Li 85eb726af21649d79ed720bdf329e0849270995c45Andy Qiuprivate: 86eb726af21649d79ed720bdf329e0849270995c45Andy Qiu void initBuffer(uint32_t handle) { 87eb726af21649d79ed720bdf329e0849270995c45Andy Qiu mHandle = handle; 88eb726af21649d79ed720bdf329e0849270995c45Andy Qiu mFormat = 0; 89eb726af21649d79ed720bdf329e0849270995c45Andy Qiu mWidth = 0; 90eb726af21649d79ed720bdf329e0849270995c45Andy Qiu mHeight = 0; 91eb726af21649d79ed720bdf329e0849270995c45Andy Qiu mKey = handle; 92eb726af21649d79ed720bdf329e0849270995c45Andy Qiu memset(&mStride, 0, sizeof(stride_t)); 93eb726af21649d79ed720bdf329e0849270995c45Andy Qiu memset(&mCrop, 0, sizeof(crop_t)); 94eb726af21649d79ed720bdf329e0849270995c45Andy Qiu } 956a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected: 966a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu uint32_t mHandle; 976a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu stride_t mStride; 986a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu crop_t mCrop; 996a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu uint32_t mFormat; 1006a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu uint32_t mWidth; 1016a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu uint32_t mHeight; 1026a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu uint64_t mKey; 1039f379685f09ddd7c4d98b23121487e8ac4b4dd40Jackie Li bool mIsCompression; 1046a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu}; 1056a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 106e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Listatic inline uint32_t align_to(uint32_t arg, uint32_t align) 107e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li{ 108e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li return ((arg + (align - 1)) & (~(align - 1))); 109e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li} 110e6ecdadd57e79c2218b3e6ae407f12599f33bd22Jackie Li 1116a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} // namespace intel 1126a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} // namespace android 1136a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 1146a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#endif /* DATABUFFER_H__ */ 115