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