psb_drv_video.h revision c8f70c055a073d0f87a0a63f9f09fd02f230b512
17e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang/*
2f91c8768670386683a281cc39141e21bdda9c97fKun Wang * Copyright (c) 2011 Intel Corporation. All Rights Reserved.
37e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang *
4f91c8768670386683a281cc39141e21bdda9c97fKun Wang * Permission is hereby granted, free of charge, to any person obtaining a
5f91c8768670386683a281cc39141e21bdda9c97fKun Wang * copy of this software and associated documentation files (the
6f91c8768670386683a281cc39141e21bdda9c97fKun Wang * "Software"), to deal in the Software without restriction, including
7f91c8768670386683a281cc39141e21bdda9c97fKun Wang * without limitation the rights to use, copy, modify, merge, publish,
8f91c8768670386683a281cc39141e21bdda9c97fKun Wang * distribute, sub license, and/or sell copies of the Software, and to
9f91c8768670386683a281cc39141e21bdda9c97fKun Wang * permit persons to whom the Software is furnished to do so, subject to
10f91c8768670386683a281cc39141e21bdda9c97fKun Wang * the following conditions:
113f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang *
12f91c8768670386683a281cc39141e21bdda9c97fKun Wang * The above copyright notice and this permission notice (including the
13f91c8768670386683a281cc39141e21bdda9c97fKun Wang * next paragraph) shall be included in all copies or substantial portions
14f91c8768670386683a281cc39141e21bdda9c97fKun Wang * of the Software.
153f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang *
16f91c8768670386683a281cc39141e21bdda9c97fKun Wang * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17f91c8768670386683a281cc39141e21bdda9c97fKun Wang * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18f91c8768670386683a281cc39141e21bdda9c97fKun Wang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19f91c8768670386683a281cc39141e21bdda9c97fKun Wang * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20f91c8768670386683a281cc39141e21bdda9c97fKun Wang * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21f91c8768670386683a281cc39141e21bdda9c97fKun Wang * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22f91c8768670386683a281cc39141e21bdda9c97fKun Wang * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun *
24bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang * Authors:
25bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang *    Waldo Bastian <waldo.bastian@intel.com>
26bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang *
27bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang */
28437b3eda28a4bf098efa80598cab67f190275266Fei Jiang
297e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#ifndef _PSB_DRV_VIDEO_H_
307e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#define _PSB_DRV_VIDEO_H_
317e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
327e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <pthread.h> /* POSIX threads headers */
337e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
347e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <va/va_backend.h>
357e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <va/va.h>
36b7c527a64448cfeedb2fe114b673af667f92faf2hding
3781826d3ab4c9cf28ea853f1545042aa53a0f0abfLi Zeng#include <va/va_vpp.h>
38b7c527a64448cfeedb2fe114b673af667f92faf2hding
397e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include "object_heap.h"
407e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include "psb_def.h"
41c60d5b7bdb5616ca37e0b912c10725bec4320f33Fei Jiang//#include "psb_drv_debug.h"
427e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include "xf86drm.h"
4338d89d625f11c0c3f0ff313cef450252e6467bafhding#ifdef ANDROID
44b7c527a64448cfeedb2fe114b673af667f92faf2hding#ifdef BAYTRAIL
45b7c527a64448cfeedb2fe114b673af667f92faf2hding#include <linux/vxd_drm.h>
46b7c527a64448cfeedb2fe114b673af667f92faf2hding#else
47d03b75a0bb7d76d8d05509f5b581ab3b5d36a20dXiaolin Zhang#include <linux/psb_drm.h>
4838d89d625f11c0c3f0ff313cef450252e6467bafhding#endif
49b7c527a64448cfeedb2fe114b673af667f92faf2hding#endif
502befccec034c13d34746a9e87149889d59ac767bFei Jiang#include "psb_overlay.h"
512befccec034c13d34746a9e87149889d59ac767bFei Jiang#include "psb_texture.h"
527e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <stdint.h>
537e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#ifndef ANDROID
5438d89d625f11c0c3f0ff313cef450252e6467bafhding#include <psb_drm.h>
557e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <X11/Xlibint.h>
567e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <X11/X.h>
577e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <X11/extensions/Xv.h>
587e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <X11/extensions/Xvlib.h>
597e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <X11/Xlib.h>
607e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#else
617e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#define XID unsigned int
62437b3eda28a4bf098efa80598cab67f190275266Fei Jiang#define INT16 unsigned int
633f0344d71a79eccf65858fe5ba8a55f75dc5d7f5Austin Yuan#include <cutils/log.h>
64fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang#include <system/window.h>
6554752e65b02b1a84c491e3f9c964046faeea306eKun Wang#undef  LOG_TAG
663f0344d71a79eccf65858fe5ba8a55f75dc5d7f5Austin Yuan#define LOG_TAG "pvr_drv_video"
677e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#endif
68437b3eda28a4bf098efa80598cab67f190275266Fei Jiang#include "hwdefs/dxva_fw_flags.h"
697e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <wsbm/wsbm_pool.h>
707e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
712befccec034c13d34746a9e87149889d59ac767bFei Jiang#ifndef min
722befccec034c13d34746a9e87149889d59ac767bFei Jiang#define min(a, b) ((a) < (b)) ? (a) : (b)
732befccec034c13d34746a9e87149889d59ac767bFei Jiang#endif
742befccec034c13d34746a9e87149889d59ac767bFei Jiang
752befccec034c13d34746a9e87149889d59ac767bFei Jiang#ifndef max
762befccec034c13d34746a9e87149889d59ac767bFei Jiang#define max(a, b) ((a) > (b)) ? (a) : (b)
772befccec034c13d34746a9e87149889d59ac767bFei Jiang#endif
783f0344d71a79eccf65858fe5ba8a55f75dc5d7f5Austin Yuan
79dd0a0b792078d587a2e266f146ccd287c39a742dedward lin//#define _TOPAZHP_PDUMP_
80eb4e7a2a0d7357995e994c50d2185f966d6f1985pingshix#define TOPAZHP_PIPE_NUM 2
81381e313cd06b652a08bef36b3e9d44ae096e72b2pingshix
82381e313cd06b652a08bef36b3e9d44ae096e72b2pingshix#define _TNG_RELOC_
835dded681fc06f6f765840c45a5e6d57cdf79e561edward lin//#define _TNG_FRAMES_
84f31d5416a60f83e184b0906a7ec77ba021840531hding#define FORCED_REFERENCE 1
85f31d5416a60f83e184b0906a7ec77ba021840531hding#define LTREFHEADER 1
8638d89d625f11c0c3f0ff313cef450252e6467bafhding//#define _TP_DEBUG_MMU_
87430ce5c32361119ed81a62c918be6afbdd053eddhding//#define _TOPAZHP_REC_
88f31d5416a60f83e184b0906a7ec77ba021840531hding
897e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang/*
907e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * WORKAROUND_DMA_OFF_BY_ONE: LLDMA requests may access one additional byte which can cause
917e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * a MMU fault if the next byte after the buffer end is on a different page that isn't mapped.
927e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang */
937e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#define WORKAROUND_DMA_OFF_BY_ONE
947e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#define FOURCC_XVVA     (('A' << 24) + ('V' << 16) + ('V' << 8) + 'X')
957e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
96f31d5416a60f83e184b0906a7ec77ba021840531hding#ifdef PSBVIDEO_MRFL_VPP
97f31d5416a60f83e184b0906a7ec77ba021840531hding#define PSB_MAX_PROFILES			VAProfileMax
98f31d5416a60f83e184b0906a7ec77ba021840531hding#define PSB_MAX_ENTRYPOINTS			VAEntrypointMax
99f31d5416a60f83e184b0906a7ec77ba021840531hding#define PSB_MAX_CONFIG_ATTRIBUTES		VAConfigAttribTypeMax
100f31d5416a60f83e184b0906a7ec77ba021840531hding#define PSB_MAX_BUFFERTYPES			VABufferTypeMax
101f31d5416a60f83e184b0906a7ec77ba021840531hding#else
102f31d5416a60f83e184b0906a7ec77ba021840531hding#define PSB_MAX_PROFILES                        18
10381826d3ab4c9cf28ea853f1545042aa53a0f0abfLi Zeng#define PSB_MAX_ENTRYPOINTS                     VAEntrypointMax
104bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang#define PSB_MAX_CONFIG_ATTRIBUTES               10
10581826d3ab4c9cf28ea853f1545042aa53a0f0abfLi Zeng#define PSB_MAX_BUFFERTYPES                     VABufferTypeMax
106f31d5416a60f83e184b0906a7ec77ba021840531hding#endif
1077e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
1087e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang/* Max # of command submission buffers */
109bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang#define PSB_MAX_CMDBUFS                         10
110bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang#define LNC_MAX_CMDBUFS_ENCODE                  4
111bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang#define PNW_MAX_CMDBUFS_ENCODE                  4
112430ce5c32361119ed81a62c918be6afbdd053eddhding#define TNG_MAX_CMDBUFS_ENCODE                  4
1138e9a21e730449c10cac6e6f69d255611c93f63c2hding#define VSP_MAX_CMDBUFS				10
1147e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
1157e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#define PSB_SURFACE_DISPLAYING_F (0x1U<<0)
1167e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#define PSB_SURFACE_IS_FLAG_SET(flags, mask) (((flags)& PSB_SURFACE_DISPLAYING_F) != 0)
1177e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
118f31d5416a60f83e184b0906a7ec77ba021840531hding#define PSB_CTX_TILING_MASK	0x00FF0000
119f31d5416a60f83e184b0906a7ec77ba021840531hding
120dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun/*xrandr dirty flag*/
121dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun#define PSB_NEW_ROTATION        1
122dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun#define PSB_NEW_EXTVIDEO        2
123dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
12435405e1aaaefd5bb307ba7f7161e138a86880020Kun Wang#define PSB_NEW_VA_ROTATION     1 << 0
12535405e1aaaefd5bb307ba7f7161e138a86880020Kun Wang#define PSB_NEW_WM_ROTATION     1 << 1
12635405e1aaaefd5bb307ba7f7161e138a86880020Kun Wang
127dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun#define MAX_SLICES_PER_PICTURE 72
128dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun#define MAX_MB_ERRORS 72
129dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
13061e067e1c2cfca5234c4a7fa2af351206b543904hding/* Some funtions aren't used but we'd like to keep them as reference code in future */
13161e067e1c2cfca5234c4a7fa2af351206b543904hding#define PSB_MFLD_DUMMY_CODE     0
132f31d5416a60f83e184b0906a7ec77ba021840531hding
1337e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct object_config_s *object_config_p;
1347e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct object_context_s *object_context_p;
1357e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct object_surface_s *object_surface_p;
1367e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct object_buffer_s *object_buffer_p;
1377e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct object_image_s *object_image_p;
1387e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct object_subpic_s *object_subpic_p;
1397e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct format_vtable_s *format_vtable_p;
1407e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct psb_driver_data_s *psb_driver_data_p;
1417e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
142632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hutypedef struct psb_surface_share_info_s psb_surface_share_info_t, *psb_surface_share_info_p;
143dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun/* post-processing data structure */
1442befccec034c13d34746a9e87149889d59ac767bFei Jiangenum psb_output_method_t {
1452befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_NONE = 0,
1462befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_X11,/* use x11 method */
1472befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_TEXTURE,/* texture xvideo */
1482befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_OVERLAY,/* overlay xvideo */
1492befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_COVERLAY,/* client overlay */
1502befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_CTEXTURE,/* client textureblit */
1512befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_TEXSTREAMING,/* texsteaming */
1522befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_FORCE_TEXTURE,/* force texture xvideo */
1532befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_FORCE_OVERLAY,/* force overlay xvideo */
1542befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_FORCE_CTEXTURE,/* force client textureblit */
1552befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_FORCE_COVERLAY,/* force client overlay */
1562befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_FORCE_TEXSTREAMING,/* force texstreaming */
1572befccec034c13d34746a9e87149889d59ac767bFei Jiang};
1587e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
159dc1209519284865899ca8d990b3a2c7dbca8ae08wangkuntypedef struct psb_decode_info {
160dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    uint32_t num_surface;
161dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    uint32_t surface_id;
162dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun} psb_decode_info_t;
163dc1209519284865899ca8d990b3a2c7dbca8ae08wangkuntypedef struct msvdx_decode_info *psb_decode_info_p;
164dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
16567612a448651896b2557796ff98d46c5e0dbbdc6hding#define CSC_MATRIX_X  (3)
16667612a448651896b2557796ff98d46c5e0dbbdc6hding#define CSC_MATRIX_Y  (3)
16767612a448651896b2557796ff98d46c5e0dbbdc6hding
1687e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct psb_driver_data_s {
169bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    struct object_heap_s        config_heap;
170bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    struct object_heap_s        context_heap;
171bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    struct object_heap_s        surface_heap;
172bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    struct object_heap_s        buffer_heap;
173bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    struct object_heap_s        image_heap;
174bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    struct object_heap_s        subpic_heap;
175bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    char *                      bus_id;
1767e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t                    dev_id;
177bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    int                         drm_fd;
178bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    int                         dup_drm_fd;
1793f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang
180e968fbfc452194dd51c12901ffa338c312a5e3c7Fei Jiang    /*  PM_QoS */
181e968fbfc452194dd51c12901ffa338c312a5e3c7Fei Jiang    int                         pm_qos_fd;
182bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    int                         dri2;
183bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    int                         dri_dummy;
184bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    XID                         context_id;
185bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    drm_context_t               drm_context;
186bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    drmLock                     *drm_lock;
187bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    int                         contended_lock;
188bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    pthread_mutex_t             drm_mutex;
189bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    format_vtable_p             profile2Format[PSB_MAX_PROFILES][PSB_MAX_ENTRYPOINTS];
1907a7f243488d6d292901b6afcee37683635fc5a77Wang Kun#ifdef PSBVIDEO_MRFL_VPP
1917a7f243488d6d292901b6afcee37683635fc5a77Wang Kun    format_vtable_p             vpp_profile;
1927a7f243488d6d292901b6afcee37683635fc5a77Wang Kun#endif
19381826d3ab4c9cf28ea853f1545042aa53a0f0abfLi Zeng#ifdef PSBVIDEO_MFLD
19481826d3ab4c9cf28ea853f1545042aa53a0f0abfLi Zeng    format_vtable_p             vpp_profile;
19581826d3ab4c9cf28ea853f1545042aa53a0f0abfLi Zeng#endif
196bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    uint32_t                    msvdx_context_base;
197bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    int                         video_sd_disabled;
198bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    int                         video_hd_disabled;
199f31d5416a60f83e184b0906a7ec77ba021840531hding    unsigned char *             camera_bo;
200bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    uint32_t                    camera_phyaddr;
201bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    uint32_t                    camera_size;
202f31d5416a60f83e184b0906a7ec77ba021840531hding    unsigned char *             rar_bo;
203bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    uint32_t                    rar_phyaddr;
204bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    uint32_t                    rar_size;
2057e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
2067e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int encode_supported;
2077e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int decode_supported;
2087e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int hd_encode_supported;
2097e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int hd_decode_supported;
2107e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
2117e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int execIoctlOffset;
2127e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int getParamIoctlOffset;
213dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
2147e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct _WsbmBufferPool *main_pool;
2157e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct _WsbmFenceMgr *fence_mgr;
2167e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
2172befccec034c13d34746a9e87149889d59ac767bFei Jiang    enum psb_output_method_t output_method;
218dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
2192befccec034c13d34746a9e87149889d59ac767bFei Jiang    /* whether the post-processing use client overlay or not */
2202befccec034c13d34746a9e87149889d59ac767bFei Jiang    int coverlay;
2216e19dd0fd3388e704d0ee5d180bcb9c356aacc44Shuduo Sang    int coverlay_init;
2222befccec034c13d34746a9e87149889d59ac767bFei Jiang    PsbPortPrivRec coverlay_priv;
223dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
224dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
2252befccec034c13d34746a9e87149889d59ac767bFei Jiang    /* whether the post-processing use client textureblit or not */
2262befccec034c13d34746a9e87149889d59ac767bFei Jiang    int ctexture;
227dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    struct psb_texture_s ctexture_priv;
2282befccec034c13d34746a9e87149889d59ac767bFei Jiang
2292befccec034c13d34746a9e87149889d59ac767bFei Jiang    /*
2302befccec034c13d34746a9e87149889d59ac767bFei Jiang    //whether the post-processing use texstreaing or not
2312befccec034c13d34746a9e87149889d59ac767bFei Jiang    int ctexstreaing;
232dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    struct psb_texstreaing ctexstreaing_priv;
2332befccec034c13d34746a9e87149889d59ac767bFei Jiang    */
234dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
235e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    unsigned char *ws_priv; /* window system related data structure */
236dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
2372befccec034c13d34746a9e87149889d59ac767bFei Jiang
2387e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VASurfaceID cur_displaying_surface;
2397e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VASurfaceID last_displaying_surface;
2402befccec034c13d34746a9e87149889d59ac767bFei Jiang
2412befccec034c13d34746a9e87149889d59ac767bFei Jiang    VADisplayAttribute ble_black_mode;
2422befccec034c13d34746a9e87149889d59ac767bFei Jiang    VADisplayAttribute ble_white_mode;
243dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
2442befccec034c13d34746a9e87149889d59ac767bFei Jiang    VADisplayAttribute blueStretch_gain;
2452befccec034c13d34746a9e87149889d59ac767bFei Jiang    VADisplayAttribute skinColorCorrection_gain;
246dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
2472befccec034c13d34746a9e87149889d59ac767bFei Jiang    VADisplayAttribute brightness;
2482befccec034c13d34746a9e87149889d59ac767bFei Jiang    VADisplayAttribute hue;
2492befccec034c13d34746a9e87149889d59ac767bFei Jiang    VADisplayAttribute contrast;
2502befccec034c13d34746a9e87149889d59ac767bFei Jiang    VADisplayAttribute saturation;
251bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    /*Save RenderMode and RenderRect attribute
252bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang     * for medfield android extend video mode.*/
253bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    uint32_t render_device;
254bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    uint32_t render_mode;
255bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    VARectangle  render_rect;
256bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang
2572befccec034c13d34746a9e87149889d59ac767bFei Jiang    unsigned int clear_color;
2582befccec034c13d34746a9e87149889d59ac767bFei Jiang
2592befccec034c13d34746a9e87149889d59ac767bFei Jiang    int  is_oold;
2602befccec034c13d34746a9e87149889d59ac767bFei Jiang
261dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    unsigned int load_csc_matrix;
26267612a448651896b2557796ff98d46c5e0dbbdc6hding    signed int   csc_matrix[CSC_MATRIX_X][CSC_MATRIX_Y];
263dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
2642befccec034c13d34746a9e87149889d59ac767bFei Jiang    /* subpic number current buffers support */
2652befccec034c13d34746a9e87149889d59ac767bFei Jiang    unsigned int max_subpic;
266dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
2672befccec034c13d34746a9e87149889d59ac767bFei Jiang    /* for multi-thread safe */
2682f768e2db3e4074a6e9a3d5f0f6e321233d96e4cFei Jiang    int use_xrandr_thread;
2692befccec034c13d34746a9e87149889d59ac767bFei Jiang    pthread_mutex_t output_mutex;
2702f768e2db3e4074a6e9a3d5f0f6e321233d96e4cFei Jiang    pthread_t xrandr_thread_id;
271dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    int extend_fullscreen;
2722f768e2db3e4074a6e9a3d5f0f6e321233d96e4cFei Jiang
2732befccec034c13d34746a9e87149889d59ac767bFei Jiang    int drawable_info;
2742befccec034c13d34746a9e87149889d59ac767bFei Jiang    int dummy_putsurface;
2752befccec034c13d34746a9e87149889d59ac767bFei Jiang    int fixed_fps;
2762befccec034c13d34746a9e87149889d59ac767bFei Jiang    unsigned int frame_count;
2774b5b72d7dd3fe944d75029ff0ca6db1e74600e59Liu, Shuo
2784b5b72d7dd3fe944d75029ff0ca6db1e74600e59Liu, Shuo    uint32_t blend_mode;
2794b5b72d7dd3fe944d75029ff0ca6db1e74600e59Liu, Shuo    uint32_t blend_color;
280bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    uint32_t overlay_auto_paint_color_key;
2814b5b72d7dd3fe944d75029ff0ca6db1e74600e59Liu, Shuo    uint32_t color_key;
282dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
283dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    /*output rotation info*/
2840da1930627209986e8db220799a690f816494401Austin Yuan    int disable_msvdx_rotate;
285d3e97838845e2486aff54fc1ed9ba8b4af3d36faTianyang Zhu    int disable_msvdx_rotate_backup;
2860da1930627209986e8db220799a690f816494401Austin Yuan    int msvdx_rotate_want; /* msvdx rotate info programed to msvdx */
287ca7d98aa1e54c9ee6ee79eb46ad25e0b897e7c51Austin Yuan    int va_rotate; /* VA rotate passed from APP */
288ca7d98aa1e54c9ee6ee79eb46ad25e0b897e7c51Austin Yuan    int mipi0_rotation; /* window manager rotation */
289ca7d98aa1e54c9ee6ee79eb46ad25e0b897e7c51Austin Yuan    int mipi1_rotation; /* window manager rotation */
290ca7d98aa1e54c9ee6ee79eb46ad25e0b897e7c51Austin Yuan    int hdmi_rotation; /* window manager rotation */
291ca7d98aa1e54c9ee6ee79eb46ad25e0b897e7c51Austin Yuan    int local_rotation; /* final device rotate: VA rotate+wm rotate */
292ca7d98aa1e54c9ee6ee79eb46ad25e0b897e7c51Austin Yuan    int extend_rotation; /* final device rotate: VA rotate+wm rotate */
29335405e1aaaefd5bb307ba7f7161e138a86880020Kun Wang    int rotation_dirty;  /*flag for recaculate final rotation*/
2943f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang
295ca7d98aa1e54c9ee6ee79eb46ad25e0b897e7c51Austin Yuan    unsigned int outputmethod_checkinterval;
2966e19dd0fd3388e704d0ee5d180bcb9c356aacc44Shuduo Sang
297dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    uint32_t xrandr_dirty;
298dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    uint32_t xrandr_update;
299dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    /*only VAProfileH264ConstrainedBaseline profile enable error concealment*/
300dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    uint32_t ec_enabled;
3018b9d488edafa54dce4d1fa4ae99e493ad840517dLi Zeng    uint32_t ved_vpp;
302dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
303dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    uint32_t pre_surfaceid;
304dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    psb_decode_info_t decode_info;
305dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    drm_psb_msvdx_decode_status_t *msvdx_decode_status;
306dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    VASurfaceDecodeMBErrors *surface_mb_error;
307bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang
308e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    unsigned char *hPVR2DContext;
309bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang
310e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    VAGenericID wrapped_surface_id[VIDEO_BUFFER_NUM];
311e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    VAGenericID wrapped_subpic_id[VIDEO_BUFFER_NUM];
312bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    PVR2DMEMINFO *videoBuf[VIDEO_BUFFER_NUM];
313bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    PVR2DMEMINFO *subpicBuf[VIDEO_BUFFER_NUM];
314632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    void *native_window;
3153f0344d71a79eccf65858fe5ba8a55f75dc5d7f5Austin Yuan    int is_android;
316a1756818411b990c978385ae425ea2d4610c7c08Fei Jiang    /* VA_RT_FORMAT_PROTECTED is set to protected for Widevine case */
317a1756818411b990c978385ae425ea2d4610c7c08Fei Jiang    int protected;
3187e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang};
3197e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
320f31d5416a60f83e184b0906a7ec77ba021840531hding
321f31d5416a60f83e184b0906a7ec77ba021840531hding#ifdef _FOR_FPGA_
32260acc53b7127b8fbaec5cc53d695268c13659092Ma, Hongpeng#define IS_CTP(driver_data)  0
3237bb84b457d5658da0c850ed13dff3d212af70771Edward Lin#define IS_MFLD(driver_data) 0
324f31d5416a60f83e184b0906a7ec77ba021840531hding#define IS_MRFL(driver_data) 1
325f31d5416a60f83e184b0906a7ec77ba021840531hding#define IS_MRST(driver_data) 0
326f31d5416a60f83e184b0906a7ec77ba021840531hding#else
32760acc53b7127b8fbaec5cc53d695268c13659092Ma, Hongpeng#define IS_CTP(driver_data) (((driver_data->dev_id & 0xffff) == 0x08c0) ||  \
32860acc53b7127b8fbaec5cc53d695268c13659092Ma, Hongpeng                     ((driver_data->dev_id & 0xffff) == 0x08c7) ||  \
32960acc53b7127b8fbaec5cc53d695268c13659092Ma, Hongpeng                     ((driver_data->dev_id & 0xffff) == 0x08c8))
3307e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#define IS_MRST(driver_data) ((driver_data->dev_id & 0xFFFC) == 0x4100)
331f31d5416a60f83e184b0906a7ec77ba021840531hding#define IS_MFLD(driver_data) (((driver_data->dev_id & 0xFFFC) == 0x0130) || ((driver_data->dev_id & 0xFFFF) == 0x08C0) || ((driver_data->dev_id & 0xFFFF) == 0x08C7) || ((driver_data->dev_id & 0xFFFF) == 0x01FF) || ((driver_data->dev_id & 0xFFFF) == 0x08C8))
332c8f70c055a073d0f87a0a63f9f09fd02f230b512Li Zeng#define IS_MRFL(driver_data) (((driver_data->dev_id & 0xFFFC) == 0x1180) || ((driver_data->dev_id & 0xFFFC) == 0x1480))
333f31d5416a60f83e184b0906a7ec77ba021840531hding#define IS_LEXINGTON(driver_data) ((driver_data->dev_id & 0xFFFF) == 0x01FF)
334b7c527a64448cfeedb2fe114b673af667f92faf2hding#define IS_BAYTRAIL(driver_data) ((driver_data->dev_id & 0xFFFF) == 0x0F31)
335f31d5416a60f83e184b0906a7ec77ba021840531hding#endif
3367e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
3377e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct object_config_s {
3387e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct object_base_s base;
3397e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VAProfile profile;
3407e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VAEntrypoint entrypoint;
3417e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VAConfigAttrib attrib_list[PSB_MAX_CONFIG_ATTRIBUTES];
3427e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int attrib_count;
3437e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    format_vtable_p format_vtable;
3447e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang};
3457e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
3467e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct object_context_s {
3477e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct object_base_s base;
3487e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VAContextID context_id;
3497e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VAConfigID config_id;
3500da1930627209986e8db220799a690f816494401Austin Yuan    VAProfile profile;
351437b3eda28a4bf098efa80598cab67f190275266Fei Jiang    VAEntrypoint entry_point;
3527e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int picture_width;
3537e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int picture_height;
3547e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int num_render_targets;
3557e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VASurfaceID *render_targets;
3567e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int va_flags;
3577e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
3587e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    object_surface_p current_render_target;
359f31d5416a60f83e184b0906a7ec77ba021840531hding    object_surface_p ec_target;
360f31d5416a60f83e184b0906a7ec77ba021840531hding    object_surface_p ec_candidate;
361dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    VASurfaceID current_render_surface_id;
3627e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    psb_driver_data_p driver_data;
3637e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    format_vtable_p format_vtable;
364e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    unsigned char *format_data;
3657e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct psb_cmdbuf_s *cmdbuf_list[PSB_MAX_CMDBUFS];
3667e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct lnc_cmdbuf_s *lnc_cmdbuf_list[LNC_MAX_CMDBUFS_ENCODE];
367437b3eda28a4bf098efa80598cab67f190275266Fei Jiang    struct pnw_cmdbuf_s *pnw_cmdbuf_list[PNW_MAX_CMDBUFS_ENCODE];
368430ce5c32361119ed81a62c918be6afbdd053eddhding    struct tng_cmdbuf_s	*tng_cmdbuf_list[TNG_MAX_CMDBUFS_ENCODE];
369f31d5416a60f83e184b0906a7ec77ba021840531hding#ifdef PSBVIDEO_MRFL_VPP
370f31d5416a60f83e184b0906a7ec77ba021840531hding    struct vsp_cmdbuf_s *vsp_cmdbuf_list[VSP_MAX_CMDBUFS];
371f31d5416a60f83e184b0906a7ec77ba021840531hding#endif
372dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
3737e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct psb_cmdbuf_s *cmdbuf; /* Current cmd buffer */
3747e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct lnc_cmdbuf_s *lnc_cmdbuf;
375437b3eda28a4bf098efa80598cab67f190275266Fei Jiang    struct pnw_cmdbuf_s *pnw_cmdbuf;
376430ce5c32361119ed81a62c918be6afbdd053eddhding    struct tng_cmdbuf_s *tng_cmdbuf;
377f31d5416a60f83e184b0906a7ec77ba021840531hding#ifdef PSBVIDEO_MRFL_VPP
378f31d5416a60f83e184b0906a7ec77ba021840531hding    struct vsp_cmdbuf_s *vsp_cmdbuf;
379f31d5416a60f83e184b0906a7ec77ba021840531hding#endif
380dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
3817e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int cmdbuf_current;
382dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
3837e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    /* Buffers */
3847e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    object_buffer_p buffers_unused[PSB_MAX_BUFFERTYPES]; /* Linked lists (HEAD) of unused buffers for each buffer type */
3857e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int buffers_unused_count[PSB_MAX_BUFFERTYPES]; /* Linked lists (HEAD) of unused buffers for each buffer type */
3867e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    object_buffer_p buffers_unused_tail[PSB_MAX_BUFFERTYPES]; /* Linked lists (TAIL) of unused buffers for each buffer type */
3877e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    object_buffer_p buffers_active[PSB_MAX_BUFFERTYPES]; /* Linked lists of active buffers for each buffer type */
3887e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
389437b3eda28a4bf098efa80598cab67f190275266Fei Jiang    object_buffer_p *buffer_list; /* for vaRenderPicture */
390437b3eda28a4bf098efa80598cab67f190275266Fei Jiang    int num_buffers;
391437b3eda28a4bf098efa80598cab67f190275266Fei Jiang
3927e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    enum {
3937e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        psb_video_none = 0,
3947e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        psb_video_mc,
3957e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        psb_video_vld,
3967e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        psb_video_deblock
3977e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    } video_op;
3987e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
3997e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t operating_mode;
4007e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t flags; /* See render flags below */
4017e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t first_mb;
4027e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t last_mb;
4037e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
404437b3eda28a4bf098efa80598cab67f190275266Fei Jiang    int is_oold;
405ca7d98aa1e54c9ee6ee79eb46ad25e0b897e7c51Austin Yuan    int msvdx_rotate;
406925e65d1ed4a080e83ea5fcaea1c3c802e427e6cpingshix    int msvdx_scaling;
4070da1930627209986e8db220799a690f816494401Austin Yuan    int interlaced_stream;
408f31d5416a60f83e184b0906a7ec77ba021840531hding    unsigned long ctp_type;
409f31d5416a60f83e184b0906a7ec77ba021840531hding    unsigned long msvdx_tile; /* normal tile | (rotate tile << 4) */
410913999933b93af5ec1cc99a28b961fa12834c085Nana GUo#ifdef SLICE_HEADER_PARSING
411913999933b93af5ec1cc99a28b961fa12834c085Nana GUo    int msvdx_frame_end;
412913999933b93af5ec1cc99a28b961fa12834c085Nana GUo#endif
4133f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang
4147e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t msvdx_context;
415dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
4164d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    int scaling_width;
4174d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    int scaling_height;
4184d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    int scaling_update;
4194d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng
4204d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    VARectangle video_crop;
4214d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng
4227e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    /* Debug */
4237e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t frame_count;
4247e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t slice_count;
4257e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang};
4267e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
4270da1930627209986e8db220799a690f816494401Austin Yuan#define ROTATE_VA2MSVDX(va_rotate)  (va_rotate)
4280da1930627209986e8db220799a690f816494401Austin Yuan#define CONTEXT_ROTATE(obj_context) (obj_context->msvdx_rotate != ROTATE_VA2MSVDX(VA_ROTATION_NONE))
4294d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng#define CONTEXT_SCALING(obj_context) (obj_context->msvdx_scaling)
430925e65d1ed4a080e83ea5fcaea1c3c802e427e6cpingshix#define CONTEXT_ALTERNATIVE_OUTPUT(obj_context) (CONTEXT_ROTATE(obj_context) || CONTEXT_SCALING(obj_context))
4310da1930627209986e8db220799a690f816494401Austin Yuan
4329f388f4488bba39eeac0c97ddaa6480362edf952Jason Huenum force_output_method_t {
4339f388f4488bba39eeac0c97ddaa6480362edf952Jason Hu    OUTPUT_FORCE_NULL = 0,
4349f388f4488bba39eeac0c97ddaa6480362edf952Jason Hu    OUTPUT_FORCE_GPU,
4359f388f4488bba39eeac0c97ddaa6480362edf952Jason Hu    OUTPUT_FORCE_OVERLAY,
4369f388f4488bba39eeac0c97ddaa6480362edf952Jason Hu};
4379f388f4488bba39eeac0c97ddaa6480362edf952Jason Hu
438a53f777035596f2f2228b1d689adbdebd192c144ttao#define MAX_SHARE_INFO_KHANDLES 32
439632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hustruct psb_surface_share_info_s {
440632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    //int rotation_sf;                    /*rotaion degree from surface flinger.*/
441632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    int surface_rotate;                 /*rotation degree of current rotation surface*/
442476f382b52ba06226b1ce473b56c388e6718e5e2Jason Hu    int metadata_rotate;                /*rotation degree of meta data*/
443632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    int width_r;
444632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    int height_r;
445632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    int surface_protected;              /*whether this surface need be protected*/
446632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    /*Force render path.
447632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    0 : no fore.
448632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    1 : force gpu render;
449632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    2 : force overlay render.*/
450632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    int force_output_method;
4514d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int out_loop_khandle;
4522ce4449fad0d9c41797472ac686cd39bef75ce81Miguel Verdu    unsigned int renderStatus;
4535218326fef3ee99570e4c9d692d62872052ea219ttao    unsigned int used_by_widi;
4549190b606edae32a87310efe1027cdae8ef772656Fei Jiang    int bob_deinterlace;
455f31d5416a60f83e184b0906a7ec77ba021840531hding    int tiling;
456a53f777035596f2f2228b1d689adbdebd192c144ttao    unsigned int width;
457a53f777035596f2f2228b1d689adbdebd192c144ttao    unsigned int height;
458a53f777035596f2f2228b1d689adbdebd192c144ttao    unsigned int luma_stride;
459a53f777035596f2f2228b1d689adbdebd192c144ttao    unsigned int chroma_u_stride;
460a53f777035596f2f2228b1d689adbdebd192c144ttao    unsigned int chroma_v_stride;
461a53f777035596f2f2228b1d689adbdebd192c144ttao    unsigned int format;
462a53f777035596f2f2228b1d689adbdebd192c144ttao    unsigned int khandle;
463f614fdcfc6d3b9802ab2501dbd84d42a82282fccFei Jiang    long long timestamp;
46498a9f0f7d9fd6f992c9be6750c941ce8723159adttao
4654d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int out_loop_luma_stride;
4664d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int out_loop_chroma_u_stride;
4674d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int out_loop_chroma_v_stride;
468438ce6b6895ee98bc732cc15061eca5c41de8a45Dan Liang
469438ce6b6895ee98bc732cc15061eca5c41de8a45Dan Liang    long long hwc_timestamp;
470438ce6b6895ee98bc732cc15061eca5c41de8a45Dan Liang    unsigned int layer_transform;
471438ce6b6895ee98bc732cc15061eca5c41de8a45Dan Liang
4727c683a316b6623e75c0d2ebe5d6c00c832968375ashish singhi    void *native_window;
4734d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int scaling_khandle;
4744d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int width_s;
4754d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int height_s;
4764d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng
4774d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int scaling_luma_stride;
4784d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int scaling_chroma_u_stride;
4794d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int scaling_chroma_v_stride;
480632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu};
481632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu
4827e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct object_surface_s {
4837e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct object_base_s base;
4847e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VASurfaceID surface_id;
4857e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VAContextID context_id;
4867e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int width;
4877e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int height;
4884b5b72d7dd3fe944d75029ff0ca6db1e74600e59Liu, Shuo    int height_origin;
4892befccec034c13d34746a9e87149889d59ac767bFei Jiang    int width_r;
4902befccec034c13d34746a9e87149889d59ac767bFei Jiang    int height_r;
4914d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    int width_s;
4924d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    int height_s;
4937e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct psb_surface_s *psb_surface;
4944d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    struct psb_surface_s *out_loop_surface; /* Alternative output surface for rotation */
4954d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    struct psb_surface_s *scaling_surface; /* Alternative output surface for scaling */
4967e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    void *subpictures;/* if not NULL, have subpicture information */
4977e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int subpic_count; /* to ensure output have enough space for PDS & RAST */
4987e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int derived_imgcnt; /* is the surface derived by a VAImage? */
4997e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned long display_timestamp; /* record the time point of put surface*/
500632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    void *rotate_vaddr;
501632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    struct psb_surface_share_info_s *share_info;
5027fe83028016237543fd7ffb31036023398dd62b6pingshix    int is_ref_surface; /* If true, vaDeriveImage returns error */
5037e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang};
5047e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
505fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang#define PSB_CODEDBUF_SLICE_NUM_MASK (0xff)
506fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang#define PSB_CODEDBUF_SLICE_NUM_SHIFT (0)
507fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang
508fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang#define PSB_CODEDBUF_NONE_VCL_NUM_MASK (0xff)
509fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang#define PSB_CODEDBUF_NONE_VCL_NUM_SHIFT (8)
510fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang
511fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang#define SET_CODEDBUF_INFO(flag, aux_info, slice_num) \
512fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang    do {\
513fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang	(aux_info) &= ~(PSB_CODEDBUF_##flag##_MASK<<PSB_CODEDBUF_##flag##_SHIFT);\
514fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang	(aux_info) |= ((slice_num) & PSB_CODEDBUF_##flag##_MASK)\
515fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang	<<PSB_CODEDBUF_##flag##_SHIFT;\
516fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang    } while (0)
517fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang
518fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang#define CLEAR_CODEDBUF_INFO(flag, aux_info) \
519fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang    do {\
520fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang	(aux_info) &= ~(PSB_CODEDBUF_##flag##_MASK<<PSB_CODEDBUF_##flag##_SHIFT);\
521fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang    } while (0)
522fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang
523fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang#define GET_CODEDBUF_INFO(flag, aux_info) \
524fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang	(((aux_info)>>PSB_CODEDBUF_##flag##_SHIFT) & PSB_CODEDBUF_##flag##_MASK)
525fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang
526fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang
527ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define PSB_CODEDBUF_SEGMENT_MAX  (9)
528fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang
5297e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct object_buffer_s {
5307e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct object_base_s base;
5317e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    object_buffer_p ptr_next; /* Generic ptr for linked list */
5327e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    object_buffer_p *pptr_prev_next; /* Generic ptr for linked list */
5337e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct psb_buffer_s *psb_buffer;
534e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    unsigned char *buffer_data;
5357e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int size;
5367e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int alloc_size;
537e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    unsigned int max_num_elements;
538e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    unsigned int num_elements;
5397e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    object_context_p context;
5407e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VABufferType type;
5417e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t last_used;
542fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang
543fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang    /* for VAEncCodedBufferType */
544fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang    VACodedBufferSegment codedbuf_mapinfo[PSB_CODEDBUF_SEGMENT_MAX];
545fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang    uint32_t codedbuf_aux_info;
5467e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang};
5477e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
5487e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct object_image_s {
5497e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct object_base_s base;
5507e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VAImage image;
5517e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int palette[16];
5527e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int subpic_ref;
5537e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VASurfaceID derived_surface;
5547e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang};
5557e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
5567e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct object_subpic_s {
5577e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct object_base_s base;
5587e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VASubpictureID subpic_id;
5597e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
5607e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VAImageID image_id;
561dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
5627e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    /* chromakey range */
5637e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int chromakey_min;
5647e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int chromakey_max;
5657e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int chromakey_mask;
5667e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
5677e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    /* global alpha */
5687e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int global_alpha;
5697e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
5707e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    /* flags */
5717e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int flags; /* see below */
5727e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
573e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    unsigned char *surfaces; /* surfaces, associated with this subpicture */
5747e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang};
5757e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
5762befccec034c13d34746a9e87149889d59ac767bFei Jiang#define MEMSET_OBJECT(ptr, data_struct) \
577e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang        memset((unsigned char *)ptr + sizeof(struct object_base_s),\
578bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang                0,                          \
579bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang               sizeof(data_struct) - sizeof(struct object_base_s))
5802befccec034c13d34746a9e87149889d59ac767bFei Jiang
5817e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct format_vtable_s {
582dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    void (*queryConfigAttributes)(
5837e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        VAProfile profile,
5847e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        VAEntrypoint entrypoint,
5857e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        VAConfigAttrib *attrib_list,
5867e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        int num_attribs
587dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    );
588dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    VAStatus(*validateConfig)(
5897e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        object_config_p obj_config
590dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    );
591dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    VAStatus(*createContext)(
5927e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        object_context_p obj_context,
5937e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        object_config_p obj_config
594dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    );
595dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    void (*destroyContext)(
5967e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        object_context_p obj_context
597dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    );
598dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    VAStatus(*beginPicture)(
5997e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        object_context_p obj_context
600dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    );
601dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    VAStatus(*renderPicture)(
6027e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        object_context_p obj_context,
6037e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        object_buffer_p *buffers,
6047e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        int num_buffers
605dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    );
606dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    VAStatus(*endPicture)(
6077e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        object_context_p obj_context
608dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    );
6097e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang};
6107e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
6117e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#define psb__bounds_check(x, max)                                       \
6127e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    do { ASSERT(x < max); if (x >= max) x = max - 1; } while(0);
6137e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
6142befccec034c13d34746a9e87149889d59ac767bFei Jiangstatic inline unsigned long GetTickCount()
6152befccec034c13d34746a9e87149889d59ac767bFei Jiang{
6162befccec034c13d34746a9e87149889d59ac767bFei Jiang    struct timeval tv;
6172befccec034c13d34746a9e87149889d59ac767bFei Jiang    if (gettimeofday(&tv, NULL))
6182befccec034c13d34746a9e87149889d59ac767bFei Jiang        return 0;
619bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    return tv.tv_usec / 1000 + tv.tv_sec * 1000;
6202befccec034c13d34746a9e87149889d59ac767bFei Jiang}
6212befccec034c13d34746a9e87149889d59ac767bFei Jiang
6227e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jianginline static char * buffer_type_to_string(int type)
6237e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang{
6247e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    switch (type) {
625dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAPictureParameterBufferType:
626dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAPictureParameterBufferType";
627dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAIQMatrixBufferType:
628dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAIQMatrixBufferType";
629dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VABitPlaneBufferType:
630dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VABitPlaneBufferType";
631dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VASliceGroupMapBufferType:
632dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VASliceGroupMapBufferType";
633dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VASliceParameterBufferType:
634dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VASliceParameterBufferType";
635dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VASliceDataBufferType:
636dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VASliceDataBufferType";
637dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAProtectedSliceDataBufferType:
638dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAProtectedSliceDataBufferType";
639dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAMacroblockParameterBufferType:
640dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAMacroblockParameterBufferType";
641dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAResidualDataBufferType:
642dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAResidualDataBufferType";
643dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VADeblockingParameterBufferType:
644dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VADeblockingParameterBufferType";
645dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAImageBufferType:
646dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAImageBufferType";
647dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAEncCodedBufferType:
648dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAEncCodedBufferType";
649dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAEncSequenceParameterBufferType:
650dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAEncSequenceParameterBufferType";
651dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAEncPictureParameterBufferType:
652dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAEncPictureParameterBufferType";
653dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAEncSliceParameterBufferType:
654dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAEncSliceParameterBufferType";
655fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang    case VAEncMiscParameterBufferType:
656fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang        return "VAEncMiscParameterBufferType";
657f31d5416a60f83e184b0906a7ec77ba021840531hding    case VAProbabilityBufferType:
658f31d5416a60f83e184b0906a7ec77ba021840531hding	return "VAProbabilityBufferType";
659f31d5416a60f83e184b0906a7ec77ba021840531hding    case VAHuffmanTableBufferType:
660f31d5416a60f83e184b0906a7ec77ba021840531hding        return "VAHuffmanTableBufferType";
6614985c4c7c4894dc1feb6b8d678e2f9b9d2f05543SUN,Jing    case VAQMatrixBufferType:
6624985c4c7c4894dc1feb6b8d678e2f9b9d2f05543SUN,Jing        return "VAQMatrixBufferType";
663dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    default:
664dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "UnknowBuffer";
6657e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    }
6667e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang}
6677e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
6680da1930627209986e8db220799a690f816494401Austin Yuaninline static int Angle2Rotation(int angle)
6690da1930627209986e8db220799a690f816494401Austin Yuan{
6700da1930627209986e8db220799a690f816494401Austin Yuan    angle %= 360;
6710da1930627209986e8db220799a690f816494401Austin Yuan    switch (angle) {
6720da1930627209986e8db220799a690f816494401Austin Yuan    case 0:
6730da1930627209986e8db220799a690f816494401Austin Yuan        return VA_ROTATION_NONE;
6740da1930627209986e8db220799a690f816494401Austin Yuan    case 90:
6750da1930627209986e8db220799a690f816494401Austin Yuan        return VA_ROTATION_90;
6760da1930627209986e8db220799a690f816494401Austin Yuan    case 180:
6770da1930627209986e8db220799a690f816494401Austin Yuan        return VA_ROTATION_180;
6780da1930627209986e8db220799a690f816494401Austin Yuan    case 270:
6790da1930627209986e8db220799a690f816494401Austin Yuan        return VA_ROTATION_270;
6800da1930627209986e8db220799a690f816494401Austin Yuan    default:
6810da1930627209986e8db220799a690f816494401Austin Yuan        return -1;
6820da1930627209986e8db220799a690f816494401Austin Yuan    }
6830da1930627209986e8db220799a690f816494401Austin Yuan}
6840da1930627209986e8db220799a690f816494401Austin Yuan
6850da1930627209986e8db220799a690f816494401Austin Yuaninline static int Rotation2Angle(int rotation)
6860da1930627209986e8db220799a690f816494401Austin Yuan{
6870da1930627209986e8db220799a690f816494401Austin Yuan    switch (rotation) {
6880da1930627209986e8db220799a690f816494401Austin Yuan    case VA_ROTATION_NONE:
6890da1930627209986e8db220799a690f816494401Austin Yuan        return 0;
6900da1930627209986e8db220799a690f816494401Austin Yuan    case VA_ROTATION_90:
6910da1930627209986e8db220799a690f816494401Austin Yuan        return 90;
6920da1930627209986e8db220799a690f816494401Austin Yuan    case VA_ROTATION_180:
6930da1930627209986e8db220799a690f816494401Austin Yuan        return 180;
6940da1930627209986e8db220799a690f816494401Austin Yuan    case VA_ROTATION_270:
6950da1930627209986e8db220799a690f816494401Austin Yuan        return 270;
6960da1930627209986e8db220799a690f816494401Austin Yuan    default:
6970da1930627209986e8db220799a690f816494401Austin Yuan        return -1;
6980da1930627209986e8db220799a690f816494401Austin Yuan    }
6990da1930627209986e8db220799a690f816494401Austin Yuan}
7000da1930627209986e8db220799a690f816494401Austin Yuan
70154752e65b02b1a84c491e3f9c964046faeea306eKun Wangint psb_parse_config(char *env, char *env_value);
702f31d5416a60f83e184b0906a7ec77ba021840531hdingvoid psb__destroy_surface(psb_driver_data_p driver_data, object_surface_p obj_surface);
703f31d5416a60f83e184b0906a7ec77ba021840531hdingunsigned long psb_tile_stride_mode(int w);
70454752e65b02b1a84c491e3f9c964046faeea306eKun Wang
7052befccec034c13d34746a9e87149889d59ac767bFei Jiangint LOCK_HARDWARE(psb_driver_data_p driver_data);
7067e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangint UNLOCK_HARDWARE(psb_driver_data_p driver_data);
7077e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
7086d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_SURFACE(obj_surface) \
7096d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
7106d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (NULL == obj_surface) { \
7116d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            vaStatus = VA_STATUS_ERROR_INVALID_SURFACE; \
7126d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
7136d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
7146d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
7156d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
7166d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
7176d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_CONFIG(obj_config) \
7186d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
7196d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (NULL == obj_config) { \
7206d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            vaStatus = VA_STATUS_ERROR_INVALID_CONFIG; \
7216d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
7226d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
7236d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
7246d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
7256d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
7266d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_CONTEXT(obj_context) \
7276d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
7286d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (NULL == obj_context) { \
7296d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            vaStatus = VA_STATUS_ERROR_INVALID_CONTEXT; \
7306d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
7316d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
7326d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
7336d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
7346d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
7356d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_BUFFER(obj_buffer) \
7366d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
7376d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (NULL == obj_buffer) { \
7386d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            vaStatus = VA_STATUS_ERROR_INVALID_BUFFER; \
7396d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
7406d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
7416d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
7426d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
7436d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
7446d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_IMAGE(obj_image) \
7456d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
7466d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (NULL == obj_image) { \
7476d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            vaStatus = VA_STATUS_ERROR_INVALID_IMAGE; \
7486d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
7496d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
7506d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
7516d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
7526d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
7536d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_SUBPICTURE(obj_subpic) \
7546d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
7556d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (NULL == obj_subpic) { \
7566d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            vaStatus = VA_STATUS_ERROR_INVALID_SUBPICTURE; \
7576d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
7586d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
7596d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
7606d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
7616d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
7626d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_ALLOCATION(buf) \
7636d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
7646d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (buf == NULL) { \
7656d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; \
7666d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
7676d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
7686d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
7696d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
7706d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
7716d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_VASTATUS() \
7726d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
7736d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (VA_STATUS_SUCCESS != vaStatus) { \
7746d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
7756d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
7766d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
7776d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
7786d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
7796d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_INVALID_PARAM(param) \
7806d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
7816d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (param) { \
7826d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; \
7836d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
7846d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
7856d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
7866d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
7876d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
7887e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#endif /* _PSB_DRV_VIDEO_H_ */
789