16a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu/* 2cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Copyright (c) 2014 Intel Corporation 3cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// 4cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Licensed under the Apache License, Version 2.0 (the "License"); 5cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// you may not use this file except in compliance with the License. 6cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// You may obtain a copy of the License at 7cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// 8cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// http://www.apache.org/licenses/LICENSE-2.0 9cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// 10cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Unless required by applicable law or agreed to in writing, software 11cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// distributed under the License is distributed on an "AS IS" BASIS, 12cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// See the License for the specific language governing permissions and 14cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// limitations under the License. 15cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika*/ 166a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#ifndef BUFFERMANAGER_H_ 176a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#define BUFFERMANAGER_H_ 186a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 190594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <common/utils/Dump.h> 206a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <DataBuffer.h> 216a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <BufferMapper.h> 220594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <common/buffers/BufferCache.h> 23eb726af21649d79ed720bdf329e0849270995c45Andy Qiu#include <utils/Mutex.h> 246a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 256a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace android { 266a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace intel { 276a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 286a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu// Gralloc Buffer Manager 296a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuclass BufferManager { 306a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic: 316a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu BufferManager(); 326a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu virtual ~BufferManager(); 336a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 346a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu bool initCheck() const; 35e2ad4c047651d4442f6a0e002290016d45e9201afu jin virtual bool initialize(); 36e2ad4c047651d4442f6a0e002290016d45e9201afu jin virtual void deinitialize(); 376a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 386a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // dump interface 396a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu void dump(Dump& d); 406a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 41eb726af21649d79ed720bdf329e0849270995c45Andy Qiu // lockDataBuffer and unlockDataBuffer must be used in serial 42eb726af21649d79ed720bdf329e0849270995c45Andy Qiu // nested calling of them will cause a deadlock 43eb726af21649d79ed720bdf329e0849270995c45Andy Qiu DataBuffer* lockDataBuffer(uint32_t handle); 44eb726af21649d79ed720bdf329e0849270995c45Andy Qiu void unlockDataBuffer(DataBuffer *buffer); 45eb726af21649d79ed720bdf329e0849270995c45Andy Qiu 46eb726af21649d79ed720bdf329e0849270995c45Andy Qiu // get and put interfaces are deprecated 47eb726af21649d79ed720bdf329e0849270995c45Andy Qiu // use lockDataBuffer and unlockDataBuffer instead 486a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu DataBuffer* get(uint32_t handle); 49eb726af21649d79ed720bdf329e0849270995c45Andy Qiu void put(DataBuffer *buffer); 506a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 516a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu // map/unmap a data buffer into/from display memory 526a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu BufferMapper* map(DataBuffer& buffer); 53eb726af21649d79ed720bdf329e0849270995c45Andy Qiu void unmap(BufferMapper *mapper); 54e2ad4c047651d4442f6a0e002290016d45e9201afu jin 55eb726af21649d79ed720bdf329e0849270995c45Andy Qiu // frame buffer management 56eb726af21649d79ed720bdf329e0849270995c45Andy Qiu //return 0 if allocation fails 57eb726af21649d79ed720bdf329e0849270995c45Andy Qiu virtual uint32_t allocFrameBuffer(int width, int height, int *stride); 58eb726af21649d79ed720bdf329e0849270995c45Andy Qiu virtual void freeFrameBuffer(uint32_t kHandle); 5930c19aca49c615368ae3bce961c431fa901e90b9Andy Qiu 60d248396b4f48861e1e27c5e316c776121ab44938mamatha balguri uint32_t allocGrallocBuffer(uint32_t width, uint32_t height, uint32_t format, uint32_t usage); 61d248396b4f48861e1e27c5e316c776121ab44938mamatha balguri void freeGrallocBuffer(uint32_t handle); 62af3bf2227c951a59e2dcc44ab90790d247225375Andy Qiu virtual bool blitGrallocBuffer(uint32_t srcHandle, uint32_t dstHandle, 63d248396b4f48861e1e27c5e316c776121ab44938mamatha balguri crop_t& srcCrop, uint32_t async) = 0; 646a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprotected: 653413b71d9be6302c07d792b40cb232be5d683420Alistair Strachan virtual DataBuffer* createDataBuffer(uint32_t handle) = 0; 663413b71d9be6302c07d792b40cb232be5d683420Alistair Strachan virtual BufferMapper* createBufferMapper(DataBuffer& buffer) = 0; 67d248396b4f48861e1e27c5e316c776121ab44938mamatha balguri 683413b71d9be6302c07d792b40cb232be5d683420Alistair Strachan gralloc_module_t const* mGrallocModule; 696a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprivate: 70cf69645a7a038ffa3cb5c2fb1e38618219d8f2feJackie Li enum { 71cf69645a7a038ffa3cb5c2fb1e38618219d8f2feJackie Li // make the buffer pool large enough 72cf69645a7a038ffa3cb5c2fb1e38618219d8f2feJackie Li DEFAULT_BUFFER_POOL_SIZE = 128, 73cf69645a7a038ffa3cb5c2fb1e38618219d8f2feJackie Li }; 74e2b2a5fe291662041d1bbec00996c2ba302dc4c9Andy Qiu 7530c19aca49c615368ae3bce961c431fa901e90b9Andy Qiu alloc_device_t *mAllocDev; 7630c19aca49c615368ae3bce961c431fa901e90b9Andy Qiu KeyedVector<uint32_t, BufferMapper*> mFrameBuffers; 776a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu BufferCache *mBufferPool; 78eb726af21649d79ed720bdf329e0849270995c45Andy Qiu DataBuffer *mDataBuffer; 79eb726af21649d79ed720bdf329e0849270995c45Andy Qiu Mutex mDataBufferLock; 801b7d29a3e8fa94e87a803f534701143b519edb6bSandeep Ramankutty Mutex mLock; 816a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu bool mInitialized; 826a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu}; 836a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 846a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} // namespace intel 856a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} // namespace android 866a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu 876a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#endif /* BUFFERMANAGER_H_ */ 88