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