16d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev/* 26d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev** Copyright (c) 2011-2012 The Linux Foundation. All rights reserved. 36d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev** 46d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev** Licensed under the Apache License, Version 2.0 (the "License"); 56d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev** you may not use this file except in compliance with the License. 66d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev** You may obtain a copy of the License at 76d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev** 86d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev** http://www.apache.org/licenses/LICENSE-2.0 96d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev** 106d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev** Unless required by applicable law or agreed to in writing, software 116d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev** distributed under the License is distributed on an "AS IS" BASIS, 126d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev** See the License for the specific language governing permissions and 146d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev** limitations under the License. 156d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev*/ 166d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 176d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 186d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev#ifndef __QCAMERAHWI_MEM_H 196d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev#define __QCAMERAHWI_MEM_H 206d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 216d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev#include <binder/MemoryBase.h> 226d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev#include <binder/MemoryHeapBase.h> 236d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev#include <utils/threads.h> 246d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev#include <stdint.h> 256d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 266d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchevextern "C" { 276d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev#include <linux/ion.h> 286d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev#include <camera_defs_i.h> 296d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 306d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev} 316d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 326d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 336d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev#define VIDEO_BUFFER_COUNT 5 346d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev#define VIDEO_BUFFER_COUNT_LOW_POWER_CAMCORDER 9 356d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 366d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev#define PREVIEW_BUFFER_COUNT 5 376d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 386d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchevnamespace android { 396d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 406d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev// This class represents a heap which maintains several contiguous 416d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev// buffers. The heap may be backed by pmem (when pmem_pool contains 426d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev// the name of a /dev/pmem* file), or by ashmem (when pmem_pool == NULL). 436d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 446d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchevstruct MemPool : public RefBase { 456d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev MemPool(int buffer_size, int num_buffers, 466d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int frame_size, 476d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev const char *name); 486d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 496d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev virtual ~MemPool() = 0; 506d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 516d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev void completeInitialization(); 526d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev bool initialized() const { 536d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev return mHeap != NULL && mHeap->base() != MAP_FAILED; 546d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev } 556d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 566d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev virtual status_t dump(int fd, const Vector<String16>& args) const; 576d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 586d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int mBufferSize; 596d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int mAlignedBufferSize; 606d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int mNumBuffers; 616d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int mFrameSize; 626d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev sp<MemoryHeapBase> mHeap; 636d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev sp<MemoryBase> *mBuffers; 646d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 656d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev const char *mName; 666d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev}; 676d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 686d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchevclass AshmemPool : public MemPool { 696d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchevpublic: 706d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev AshmemPool(int buffer_size, int num_buffers, 716d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int frame_size, 726d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev const char *name); 736d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev}; 746d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 756d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchevclass PmemPool : public MemPool { 766d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchevpublic: 776d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev PmemPool(const char *pmem_pool, 786d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int flags, int pmem_type, 796d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int buffer_size, int num_buffers, 806d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int frame_size, int cbcr_offset, 816d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int yoffset, const char *name); 826d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev virtual ~PmemPool(); 836d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int mFd; 846d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int mPmemType; 856d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int mCbCrOffset; 866d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int myOffset; 876d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int mCameraControlFd; 886d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev uint32_t mAlignedSize; 896d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev struct pmem_region mSize; 906d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev}; 916d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 926d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchevclass IonPool : public MemPool { 936d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchevpublic: 946d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev IonPool( int flags, 956d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int buffer_size, int num_buffers, 966d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int frame_size, int cbcr_offset, 976d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int yoffset, const char *name); 986d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev virtual ~IonPool(); 996d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int mFd; 1006d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int mCbCrOffset; 1016d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int myOffset; 1026d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev int mCameraControlFd; 1036d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev uint32_t mAlignedSize; 1046d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchevprivate: 1056d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev static const char mIonDevName[]; 1066d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev}; 1076d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev 1086d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev}; 1096d01645739c75116d8940772b80d5b7aba5c39d6Iliyan Malchev#endif 110