| /* |
| * Copyright (C) 2016-2017 Intel Corporation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef _CAMERA3_HAL_COMMON_BUFFER_H_ |
| #define _CAMERA3_HAL_COMMON_BUFFER_H_ |
| |
| #include <stdio.h> |
| #include <string.h> |
| #include <utils/Errors.h> |
| |
| /** |
| * \class CommonBuffer |
| * |
| * Buffer abstraction for all platform independent camera HAL buffer types |
| * |
| * CommonBuffer provides common interface for all HAL buffer types |
| * Inlcudes: |
| * 1. HALBuffer (PSL buffer, going to inherit from this class and extend) |
| * 2. The buffer type that is needed for ImgEncoder and ImgProcessor |
| * 3. Statistic buffer (taken as height 1, width/stride = data size) |
| * 4. ...Possible others |
| * |
| * By using this, buffer can be shared directly between HAL modules without |
| * conversion, such as: PSL buffer can be directly passed to ImgEncoder or |
| * ImgProcessor. |
| * |
| * The CommonBuffer can be just a shell or a memory self-owned buffer |
| * Free memory is needed when the data memory of this buffer is allocated |
| * by itself (allocMemory is called) |
| */ |
| |
| namespace cros { |
| namespace intel { |
| enum BufferMemoryType { |
| BMT_HEAP, /* normal heap memory buffer */ |
| BMT_GFX, /* graphic memory buffer */ |
| BMT_MMAP, /* memory is mapped from kernel */ |
| }; |
| |
| struct BufferProps { |
| BufferProps(): |
| width(0), |
| height(0), |
| stride(0), |
| format(0), |
| size(0), |
| fd(-1), |
| offset(0), |
| type(BMT_HEAP){} |
| int width; |
| int height; |
| int stride; |
| int format; /* V4l2 Format */ |
| int size; /* override the size if user provide valid value(>0) */ |
| int fd; /* for MMAP buffer only, device fd */ |
| int offset; /* for MMAP buffer only, offset to device memory start */ |
| BufferMemoryType type; |
| }; |
| |
| class CommonBuffer { |
| public: |
| CommonBuffer(); |
| explicit CommonBuffer(const BufferProps &props, void* data = nullptr); |
| virtual ~CommonBuffer(); |
| |
| virtual status_t init(const BufferProps &props, void* data = nullptr); |
| virtual status_t allocMemory(); |
| virtual status_t freeMemory(); |
| |
| virtual void* data() const { return mDataPtr; } |
| virtual void* gfxHandle() const { return mHandle; } |
| virtual int width() const {return mWidth; } |
| virtual int height() const {return mHeight; } |
| virtual int stride() const {return mStride; } |
| virtual int type() const { return mType; } |
| virtual unsigned int size() const {return mSize; } |
| virtual int v4l2Fmt() const {return mV4L2Fmt; } |
| |
| protected: |
| int mWidth; |
| int mHeight; |
| int mStride; |
| BufferMemoryType mType; |
| unsigned int mSize; /*!< size in bytes */ |
| void* mDataPtr; /*!< the vaddr */ |
| void* mHandle; /*!< the graphic handle, valid for a GFX type buffer */ |
| int mFd; /*!< the device fd, valid for a MMAP type buffer */ |
| int mOffset; /*!< offset to device memory start, valid for MMAP type only */ |
| int mV4L2Fmt; /*!< V4L2 fourcc format code */ |
| bool mInit; /*!< Boolean to check the integrity */ |
| bool mIsOwner; /*!< Boolean to check if self-owned buffer memory */ |
| }; |
| |
| } /* namespace intel */ |
| } /* namespace cros */ |
| #endif // _CAMERA3_HAL_COMMON_BUFFER_H_ |