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