/* ** Copyright (c) 2011-2012 The Linux Foundation. All rights reserved. ** ** 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 __QCAMERAHWI_MEM_H #define __QCAMERAHWI_MEM_H #include <binder/MemoryBase.h> #include <binder/MemoryHeapBase.h> #include <utils/threads.h> #include <stdint.h> #include "QCamera_Intf.h" extern "C" { #include <linux/android_pmem.h> #include <linux/msm_ion.h> } #define VIDEO_BUFFER_COUNT 5 #define VIDEO_BUFFER_COUNT_LOW_POWER_CAMCORDER 9 #define PREVIEW_BUFFER_COUNT 5 namespace android { // This class represents a heap which maintains several contiguous // buffers. The heap may be backed by pmem (when pmem_pool contains // the name of a /dev/pmem* file), or by ashmem (when pmem_pool == NULL). struct MemPool : public RefBase { MemPool(int buffer_size, int num_buffers, int frame_size, const char *name); virtual ~MemPool() = 0; void completeInitialization(); bool initialized() const { return mHeap != NULL && mHeap->base() != MAP_FAILED; } virtual status_t dump(int fd, const Vector<String16>& args) const; int mBufferSize; int mAlignedBufferSize; int mNumBuffers; int mFrameSize; sp<MemoryHeapBase> mHeap; sp<MemoryBase> *mBuffers; const char *mName; }; class AshmemPool : public MemPool { public: AshmemPool(int buffer_size, int num_buffers, int frame_size, const char *name); }; class PmemPool : public MemPool { public: PmemPool(const char *pmem_pool, int flags, int pmem_type, int buffer_size, int num_buffers, int frame_size, int cbcr_offset, int yoffset, const char *name); virtual ~PmemPool(); int mFd; int mPmemType; int mCbCrOffset; int myOffset; int mCameraControlFd; uint32_t mAlignedSize; struct pmem_region mSize; }; class IonPool : public MemPool { public: IonPool( int flags, int buffer_size, int num_buffers, int frame_size, int cbcr_offset, int yoffset, const char *name); virtual ~IonPool(); int mFd; int mCbCrOffset; int myOffset; int mCameraControlFd; uint32_t mAlignedSize; private: static const char mIonDevName[]; }; }; #endif