| /* |
| // 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 __ROTATIONO_BUFFER_PROVIDER_H__ |
| #define __ROTATIONO_BUFFER_PROVIDER_H__ |
| |
| #include <va/va.h> |
| #include <sys/time.h> |
| #include <va/va_tpi.h> |
| #include <va/va_vpp.h> |
| #include <ips/common/Wsbm.h> |
| #include <utils/Timers.h> |
| #include <va/va_android.h> |
| #include <ips/common/VideoPayloadBuffer.h> |
| |
| namespace android { |
| namespace intel { |
| |
| #define Display unsigned int |
| typedef void* VADisplay; |
| typedef int VAStatus; |
| |
| class RotationBufferProvider { |
| |
| public: |
| RotationBufferProvider(Wsbm* wsbm); |
| ~RotationBufferProvider(); |
| |
| bool initialize(); |
| void deinitialize(); |
| void reset(); |
| bool setupRotationBuffer(VideoPayloadBuffer *payload, int transform); |
| bool prepareBufferInfo(int, int, int, VideoPayloadBuffer *, void *); |
| |
| private: |
| void invalidateCaches(); |
| bool startVA(VideoPayloadBuffer *payload, int transform); |
| void stopVA(); |
| bool isContextChanged(int width, int height, int transform); |
| int transFromHalToVa(int transform); |
| uint32_t createWsbmBuffer(int width, int height, void **buf); |
| int getStride(bool isTarget, int width); |
| bool createVaSurface(VideoPayloadBuffer *payload, int transform, bool isTarget); |
| void freeVaSurfaces(); |
| inline uint32_t getMilliseconds(); |
| |
| private: |
| enum { |
| MAX_SURFACE_NUM = 4 |
| }; |
| |
| Wsbm* mWsbm; |
| |
| bool mVaInitialized; |
| VADisplay mVaDpy; |
| VAConfigID mVaCfg; |
| VAContextID mVaCtx; |
| VABufferID mVaBufFilter; |
| VASurfaceID mSourceSurface; |
| Display mDisplay; |
| |
| // rotation config variables |
| int mWidth; |
| int mHeight; |
| int mTransform; |
| |
| int mRotatedWidth; |
| int mRotatedHeight; |
| int mRotatedStride; |
| |
| int mTargetIndex; |
| int mKhandles[MAX_SURFACE_NUM]; |
| VASurfaceID mRotatedSurfaces[MAX_SURFACE_NUM]; |
| void *mDrmBuf[MAX_SURFACE_NUM]; |
| |
| enum { |
| TTM_WRAPPER_COUNT = 10, |
| }; |
| |
| KeyedVector<uint64_t, void*> mTTMWrappers; /* userPt/wsbmBuffer */ |
| |
| int mBobDeinterlace; |
| }; |
| |
| } // name space intel |
| } // name space android |
| |
| #endif |