1 /* 2 ** Copyright (c) 2012 The Linux Foundation. All rights reserved. 3 ** 4 ** Not a Contribution, Apache license notifications and license are retained 5 ** for attribution purposes only. 6 ** 7 ** Licensed under the Apache License, Version 2.0 (the "License"); 8 ** you may not use this file except in compliance with the License. 9 ** You may obtain a copy of the License at 10 ** 11 ** http://www.apache.org/licenses/LICENSE-2.0 12 ** 13 ** Unless required by applicable law or agreed to in writing, software 14 ** distributed under the License is distributed on an "AS IS" BASIS, 15 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 ** See the License for the specific language governing permissions and 17 ** limitations under the License. 18 */ 19 20 21 #ifndef __QCAMERAHWI_MEM_H 22 #define __QCAMERAHWI_MEM_H 23 24 #include <binder/MemoryBase.h> 25 #include <binder/MemoryHeapBase.h> 26 #include <utils/threads.h> 27 #include <stdint.h> 28 29 extern "C" { 30 #include <linux/android_pmem.h> 31 #include <linux/msm_ion.h> 32 } 33 34 #define VIDEO_BUFFER_COUNT NUM_RECORDING_BUFFERS 35 #define VIDEO_BUFFER_COUNT_LOW_POWER_CAMCORDER 9 36 37 #define PREVIEW_BUFFER_COUNT 5 38 39 namespace android { 40 41 // This class represents a heap which maintains several contiguous 42 // buffers. The heap may be backed by pmem (when pmem_pool contains 43 // the name of a /dev/pmem* file), or by ashmem (when pmem_pool == NULL). 44 45 struct MemPool : public RefBase { 46 MemPool(int buffer_size, int num_buffers, 47 int frame_size, 48 const char *name); 49 50 virtual ~MemPool() = 0; 51 52 void completeInitialization(); initializedMemPool53 bool initialized() const { 54 return mHeap != NULL && mHeap->base() != MAP_FAILED; 55 } 56 57 virtual status_t dump(int fd, const Vector<String16>& args) const; 58 59 int mBufferSize; 60 int mAlignedBufferSize; 61 int mNumBuffers; 62 int mFrameSize; 63 sp<MemoryHeapBase> mHeap; 64 sp<MemoryBase> *mBuffers; 65 66 const char *mName; 67 }; 68 69 class AshmemPool : public MemPool { 70 public: 71 AshmemPool(int buffer_size, int num_buffers, 72 int frame_size, 73 const char *name); 74 }; 75 76 class PmemPool : public MemPool { 77 public: 78 PmemPool(const char *pmem_pool, 79 int flags, int pmem_type, 80 int buffer_size, int num_buffers, 81 int frame_size, int cbcr_offset, 82 int yoffset, const char *name); 83 virtual ~PmemPool(); 84 int mFd; 85 int mPmemType; 86 int mCbCrOffset; 87 int myOffset; 88 int mCameraControlFd; 89 uint32_t mAlignedSize; 90 struct pmem_region mSize; 91 }; 92 93 class IonPool : public MemPool { 94 public: 95 IonPool( int flags, 96 int buffer_size, int num_buffers, 97 int frame_size, int cbcr_offset, 98 int yoffset, const char *name); 99 virtual ~IonPool(); 100 int mFd; 101 int mCbCrOffset; 102 int myOffset; 103 int mCameraControlFd; 104 uint32_t mAlignedSize; 105 private: 106 static const char mIonDevName[]; 107 }; 108 109 }; 110 #endif 111