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 <Dump.h> 20#include <DataBuffer.h> 21#include <BufferMapper.h> 22#include <BufferCache.h> 23#include <utils/Mutex.h> 24 25namespace android { 26namespace intel { 27 28// Gralloc Buffer Manager 29class BufferManager { 30public: 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(buffer_handle_t handle); 44 void unlockDataBuffer(DataBuffer *buffer); 45 46 // get and put interfaces are deprecated 47 // use lockDataBuffer and unlockDataBuffer instead 48 DataBuffer* get(buffer_handle_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 buffer_handle_t allocFrameBuffer(int width, int height, int *stride); 58 virtual void freeFrameBuffer(buffer_handle_t fbHandle); 59 60 buffer_handle_t allocGrallocBuffer(uint32_t width, uint32_t height, uint32_t format, uint32_t usage); 61 void freeGrallocBuffer(buffer_handle_t handle); 62 virtual bool blit(buffer_handle_t srcHandle, buffer_handle_t destHandle, 63 const crop_t& destRect, bool filter, bool async) = 0; 64protected: 65 virtual DataBuffer* createDataBuffer(buffer_handle_t handle) = 0; 66 virtual BufferMapper* createBufferMapper(DataBuffer& buffer) = 0; 67 68 const hw_device_t* mGralloc; 69private: 70 enum { 71 // make the buffer pool large enough 72 DEFAULT_BUFFER_POOL_SIZE = 128, 73 }; 74 75 alloc_device_t *mAllocDev; 76 KeyedVector<buffer_handle_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