You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
3.7 KiB
109 lines
3.7 KiB
/*
|
|
* Copyright (C) 2016-2017 Intel Corporation
|
|
* Copyright (c) 2017, Fuzhou Rockchip Electronics Co., Ltd
|
|
*
|
|
* 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_DECLARATION {
|
|
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_DECLARATION_END
|
|
|
|
#endif // _CAMERA3_HAL_COMMON_BUFFER_H_
|