1fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian/* 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*/ 16fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 17fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#ifndef __ROTATIONO_BUFFER_PROVIDER_H__ 18fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#define __ROTATIONO_BUFFER_PROVIDER_H__ 19fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 20fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#include <va/va.h> 21fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#include <sys/time.h> 22fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#include <va/va_tpi.h> 23fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#include <va/va_vpp.h> 240594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <ips/common/Wsbm.h> 25fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#include <utils/Timers.h> 2606e1408f5638265d5bf9c1b1d3662de1390b870fThierry Strudel#include <utils/KeyedVector.h> 27fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#include <va/va_android.h> 280594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <ips/common/VideoPayloadBuffer.h> 29fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 30fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jiannamespace android { 31fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jiannamespace intel { 32fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 33fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#define Display unsigned int 34fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jiantypedef void* VADisplay; 35fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jiantypedef int VAStatus; 36fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 37fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jianclass RotationBufferProvider { 38fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 39fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jianpublic: 40fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian RotationBufferProvider(Wsbm* wsbm); 41fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian ~RotationBufferProvider(); 42fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 43fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian bool initialize(); 44fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian void deinitialize(); 45c0529447ae16f023dfab2978ea2b245f368e893bAndy Qiu void reset(); 46fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian bool setupRotationBuffer(VideoPayloadBuffer *payload, int transform); 47ffaa9065cde35b7e8394788565db987f4d2705f2Li Zeng bool prepareBufferInfo(int, int, int, VideoPayloadBuffer *, void *); 48fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 49fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jianprivate: 50c0529447ae16f023dfab2978ea2b245f368e893bAndy Qiu void invalidateCaches(); 51fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian bool startVA(VideoPayloadBuffer *payload, int transform); 52fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian void stopVA(); 53fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian bool isContextChanged(int width, int height, int transform); 54fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int transFromHalToVa(int transform); 55fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian uint32_t createWsbmBuffer(int width, int height, void **buf); 56fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int getStride(bool isTarget, int width); 57fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian bool createVaSurface(VideoPayloadBuffer *payload, int transform, bool isTarget); 58fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian void freeVaSurfaces(); 59fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian inline uint32_t getMilliseconds(); 60fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 61fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jianprivate: 62fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian enum { 63fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian MAX_SURFACE_NUM = 4 64fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian }; 65fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 66fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian Wsbm* mWsbm; 67fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 68fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian bool mVaInitialized; 69fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian VADisplay mVaDpy; 70fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian VAConfigID mVaCfg; 71fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian VAContextID mVaCtx; 72fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian VABufferID mVaBufFilter; 73fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian VASurfaceID mSourceSurface; 74fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian Display mDisplay; 75fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 76fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian // rotation config variables 77fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int mWidth; 78fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int mHeight; 79fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int mTransform; 80fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 81fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int mRotatedWidth; 82fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int mRotatedHeight; 83fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int mRotatedStride; 84fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 85fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int mTargetIndex; 86fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int mKhandles[MAX_SURFACE_NUM]; 87fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian VASurfaceID mRotatedSurfaces[MAX_SURFACE_NUM]; 88fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian void *mDrmBuf[MAX_SURFACE_NUM]; 89ffaa9065cde35b7e8394788565db987f4d2705f2Li Zeng 90ffaa9065cde35b7e8394788565db987f4d2705f2Li Zeng enum { 91ffaa9065cde35b7e8394788565db987f4d2705f2Li Zeng TTM_WRAPPER_COUNT = 10, 92ffaa9065cde35b7e8394788565db987f4d2705f2Li Zeng }; 93ffaa9065cde35b7e8394788565db987f4d2705f2Li Zeng 94ffaa9065cde35b7e8394788565db987f4d2705f2Li Zeng KeyedVector<uint64_t, void*> mTTMWrappers; /* userPt/wsbmBuffer */ 9547a5b9f1fa94dd1c1f4d820658d6bfaa3dd02252Gu, Wangyi 9647a5b9f1fa94dd1c1f4d820658d6bfaa3dd02252Gu, Wangyi int mBobDeinterlace; 97fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian}; 98fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 99fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian} // name space intel 100fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian} // name space android 101fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 102fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#endif 103