1 /* 2 // Copyright (c) 2014 Intel Corporation 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 */ 16 #ifndef BUFFERMANAGER_H_ 17 #define BUFFERMANAGER_H_ 18 19 #include <common/utils/Dump.h> 20 #include <DataBuffer.h> 21 #include <BufferMapper.h> 22 #include <common/buffers/BufferCache.h> 23 #include <utils/Mutex.h> 24 25 namespace android { 26 namespace intel { 27 28 // Gralloc Buffer Manager 29 class BufferManager { 30 public: 31 BufferManager(); 32 virtual ~BufferManager(); 33 34 bool initCheck() const; 35 virtual bool initialize(); 36 virtual void deinitialize(); 37 38 // dump interface 39 void dump(Dump& d); 40 41 // lockDataBuffer and unlockDataBuffer must be used in serial 42 // nested calling of them will cause a deadlock 43 DataBuffer* lockDataBuffer(uint32_t handle); 44 void unlockDataBuffer(DataBuffer *buffer); 45 46 // get and put interfaces are deprecated 47 // use lockDataBuffer and unlockDataBuffer instead 48 DataBuffer* get(uint32_t handle); 49 void put(DataBuffer *buffer); 50 51 // map/unmap a data buffer into/from display memory 52 BufferMapper* map(DataBuffer& buffer); 53 void unmap(BufferMapper *mapper); 54 55 // frame buffer management 56 //return 0 if allocation fails 57 virtual uint32_t allocFrameBuffer(int width, int height, int *stride); 58 virtual void freeFrameBuffer(uint32_t kHandle); 59 60 uint32_t allocGrallocBuffer(uint32_t width, uint32_t height, uint32_t format, uint32_t usage); 61 void freeGrallocBuffer(uint32_t handle); 62 virtual bool blitGrallocBuffer(uint32_t srcHandle, uint32_t dstHandle, 63 crop_t& srcCrop, uint32_t async) = 0; 64 protected: 65 virtual DataBuffer* createDataBuffer(uint32_t handle) = 0; 66 virtual BufferMapper* createBufferMapper(DataBuffer& buffer) = 0; 67 68 gralloc_module_t const* mGrallocModule; 69 private: 70 enum { 71 // make the buffer pool large enough 72 DEFAULT_BUFFER_POOL_SIZE = 128, 73 }; 74 75 alloc_device_t *mAllocDev; 76 KeyedVector<uint32_t, BufferMapper*> mFrameBuffers; 77 BufferCache *mBufferPool; 78 DataBuffer *mDataBuffer; 79 Mutex mDataBufferLock; 80 Mutex mLock; 81 bool mInitialized; 82 }; 83 84 } // namespace intel 85 } // namespace android 86 87 #endif /* BUFFERMANAGER_H_ */ 88