/* // Copyright (c) 2014 Intel Corporation // // 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 BUFFERMANAGER_H_ #define BUFFERMANAGER_H_ #include <Dump.h> #include <DataBuffer.h> #include <BufferMapper.h> #include <BufferCache.h> #include <utils/Mutex.h> namespace android { namespace intel { // Gralloc Buffer Manager class BufferManager { public: BufferManager(); virtual ~BufferManager(); bool initCheck() const; virtual bool initialize(); virtual void deinitialize(); // dump interface void dump(Dump& d); // lockDataBuffer and unlockDataBuffer must be used in serial // nested calling of them will cause a deadlock DataBuffer* lockDataBuffer(buffer_handle_t handle); void unlockDataBuffer(DataBuffer *buffer); // get and put interfaces are deprecated // use lockDataBuffer and unlockDataBuffer instead DataBuffer* get(buffer_handle_t handle); void put(DataBuffer *buffer); // map/unmap a data buffer into/from display memory BufferMapper* map(DataBuffer& buffer); void unmap(BufferMapper *mapper); // frame buffer management //return 0 if allocation fails virtual buffer_handle_t allocFrameBuffer(int width, int height, int *stride); virtual void freeFrameBuffer(buffer_handle_t fbHandle); buffer_handle_t allocGrallocBuffer(uint32_t width, uint32_t height, uint32_t format, uint32_t usage); void freeGrallocBuffer(buffer_handle_t handle); virtual bool blit(buffer_handle_t srcHandle, buffer_handle_t destHandle, const crop_t& destRect, bool filter, bool async) = 0; protected: virtual DataBuffer* createDataBuffer(buffer_handle_t handle) = 0; virtual BufferMapper* createBufferMapper(DataBuffer& buffer) = 0; const hw_device_t* mGralloc; private: enum { // make the buffer pool large enough DEFAULT_BUFFER_POOL_SIZE = 128, }; alloc_device_t *mAllocDev; KeyedVector<buffer_handle_t, BufferMapper*> mFrameBuffers; BufferCache *mBufferPool; DataBuffer *mDataBuffer; Mutex mDataBufferLock; Mutex mLock; bool mInitialized; }; } // namespace intel } // namespace android #endif /* BUFFERMANAGER_H_ */