RotationBufferProvider.h revision fa92afb1e8276eefc983bd8e209a1e1b098d5b95
1fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian/* 2fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * Copyright © 2012 Intel Corporation 3fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * All rights reserved. 4fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * 5fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * Permission is hereby granted, free of charge, to any person obtaining a 6fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * copy of this software and associated documentation files (the "Software"), 7fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * to deal in the Software without restriction, including without limitation 8fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * and/or sell copies of the Software, and to permit persons to whom the 10fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * Software is furnished to do so, subject to the following conditions: 11fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * 12fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * The above copyright notice and this permission notice (including the next 13fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * paragraph) shall be included in all copies or substantial portions of the 14fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * Software. 15fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * 16fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 22fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * IN THE SOFTWARE. 23fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * 24fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * Authors: 25fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * Li Zeng <li.zeng@intel.com> 26fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian * Jian Sun <jianx.sun@intel.com> 27fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian */ 28fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 29fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#ifndef __ROTATIONO_BUFFER_PROVIDER_H__ 30fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#define __ROTATIONO_BUFFER_PROVIDER_H__ 31fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 32fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#include <va/va.h> 33fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#include <sys/time.h> 34fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#include <va/va_tpi.h> 35fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#include <va/va_vpp.h> 36fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#include <common/Wsbm.h> 37fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#include <utils/Timers.h> 38fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#include <va/va_android.h> 39fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#include <common/VideoPayloadBuffer.h> 40fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 41fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jiannamespace android { 42fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jiannamespace intel { 43fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 44fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#define Display unsigned int 45fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jiantypedef void* VADisplay; 46fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jiantypedef int VAStatus; 47fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 48fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jianclass RotationBufferProvider { 49fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 50fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jianpublic: 51fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian RotationBufferProvider(Wsbm* wsbm); 52fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian ~RotationBufferProvider(); 53fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 54fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian bool initialize(); 55fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian void deinitialize(); 56fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian bool setupRotationBuffer(VideoPayloadBuffer *payload, int transform); 57fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 58fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jianprivate: 59fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian bool startVA(VideoPayloadBuffer *payload, int transform); 60fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian void stopVA(); 61fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian bool isContextChanged(int width, int height, int transform); 62fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int transFromHalToVa(int transform); 63fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian uint32_t createWsbmBuffer(int width, int height, void **buf); 64fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int getStride(bool isTarget, int width); 65fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian bool createVaSurface(VideoPayloadBuffer *payload, int transform, bool isTarget); 66fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian void freeVaSurfaces(); 67fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian inline uint32_t getMilliseconds(); 68fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 69fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jianprivate: 70fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian enum { 71fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian MAX_SURFACE_NUM = 4 72fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian }; 73fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 74fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian Wsbm* mWsbm; 75fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 76fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian bool mVaInitialized; 77fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian VADisplay mVaDpy; 78fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian VAConfigID mVaCfg; 79fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian VAContextID mVaCtx; 80fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian VABufferID mVaBufFilter; 81fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian VASurfaceID mSourceSurface; 82fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian Display mDisplay; 83fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 84fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian // rotation config variables 85fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int mWidth; 86fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int mHeight; 87fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int mTransform; 88fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 89fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int mRotatedWidth; 90fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int mRotatedHeight; 91fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int mRotatedStride; 92fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 93fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int mTargetIndex; 94fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian int mKhandles[MAX_SURFACE_NUM]; 95fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian VASurfaceID mRotatedSurfaces[MAX_SURFACE_NUM]; 96fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian void *mDrmBuf[MAX_SURFACE_NUM]; 97fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian}; 98fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 99fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian} // name space intel 100fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian} // name space android 101fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian 102fa92afb1e8276eefc983bd8e209a1e1b098d5b95Sun, Jian#endif 103