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>
36c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen#include <va/va_tpi.h>
37b7c527a64448cfeedb2fe114b673af667f92faf2hding
3881826d3ab4c9cf28ea853f1545042aa53a0f0abfLi Zeng#include <va/va_vpp.h>
39b7c527a64448cfeedb2fe114b673af667f92faf2hding
407e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include "object_heap.h"
417e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include "psb_def.h"
42c60d5b7bdb5616ca37e0b912c10725bec4320f33Fei Jiang//#include "psb_drv_debug.h"
437e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include "xf86drm.h"
4438d89d625f11c0c3f0ff313cef450252e6467bafhding#ifdef ANDROID
45b7c527a64448cfeedb2fe114b673af667f92faf2hding#ifdef BAYTRAIL
46b7c527a64448cfeedb2fe114b673af667f92faf2hding#include <linux/vxd_drm.h>
47b7c527a64448cfeedb2fe114b673af667f92faf2hding#else
48d03b75a0bb7d76d8d05509f5b581ab3b5d36a20dXiaolin Zhang#include <linux/psb_drm.h>
4938d89d625f11c0c3f0ff313cef450252e6467bafhding#endif
50b7c527a64448cfeedb2fe114b673af667f92faf2hding#endif
512befccec034c13d34746a9e87149889d59ac767bFei Jiang#include "psb_overlay.h"
522befccec034c13d34746a9e87149889d59ac767bFei Jiang#include "psb_texture.h"
537e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <stdint.h>
547e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#ifndef ANDROID
5538d89d625f11c0c3f0ff313cef450252e6467bafhding#include <psb_drm.h>
567e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <X11/Xlibint.h>
577e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <X11/X.h>
587e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <X11/extensions/Xv.h>
597e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <X11/extensions/Xvlib.h>
607e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <X11/Xlib.h>
617e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#else
627e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#define XID unsigned int
63437b3eda28a4bf098efa80598cab67f190275266Fei Jiang#define INT16 unsigned int
643f0344d71a79eccf65858fe5ba8a55f75dc5d7f5Austin Yuan#include <cutils/log.h>
65fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang#include <system/window.h>
6654752e65b02b1a84c491e3f9c964046faeea306eKun Wang#undef  LOG_TAG
673f0344d71a79eccf65858fe5ba8a55f75dc5d7f5Austin Yuan#define LOG_TAG "pvr_drv_video"
687e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#endif
69437b3eda28a4bf098efa80598cab67f190275266Fei Jiang#include "hwdefs/dxva_fw_flags.h"
707e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#include <wsbm/wsbm_pool.h>
717e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
72cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan#ifdef __GNUC__
73cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan# define __maybe_unused __attribute__((__unused__))
74cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan#else
75cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan# define __maybe_unused
76cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan#endif
77cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan
782befccec034c13d34746a9e87149889d59ac767bFei Jiang#ifndef min
792befccec034c13d34746a9e87149889d59ac767bFei Jiang#define min(a, b) ((a) < (b)) ? (a) : (b)
802befccec034c13d34746a9e87149889d59ac767bFei Jiang#endif
812befccec034c13d34746a9e87149889d59ac767bFei Jiang
822befccec034c13d34746a9e87149889d59ac767bFei Jiang#ifndef max
832befccec034c13d34746a9e87149889d59ac767bFei Jiang#define max(a, b) ((a) > (b)) ? (a) : (b)
842befccec034c13d34746a9e87149889d59ac767bFei Jiang#endif
853f0344d71a79eccf65858fe5ba8a55f75dc5d7f5Austin Yuan
86dd0a0b792078d587a2e266f146ccd287c39a742dedward lin//#define _TOPAZHP_PDUMP_
87eb4e7a2a0d7357995e994c50d2185f966d6f1985pingshix#define TOPAZHP_PIPE_NUM 2
88381e313cd06b652a08bef36b3e9d44ae096e72b2pingshix
89381e313cd06b652a08bef36b3e9d44ae096e72b2pingshix#define _TNG_RELOC_
905dded681fc06f6f765840c45a5e6d57cdf79e561edward lin//#define _TNG_FRAMES_
91f31d5416a60f83e184b0906a7ec77ba021840531hding#define FORCED_REFERENCE 1
92f31d5416a60f83e184b0906a7ec77ba021840531hding#define LTREFHEADER 1
9338d89d625f11c0c3f0ff313cef450252e6467bafhding//#define _TP_DEBUG_MMU_
94430ce5c32361119ed81a62c918be6afbdd053eddhding//#define _TOPAZHP_REC_
95f31d5416a60f83e184b0906a7ec77ba021840531hding
967e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang/*
977e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * WORKAROUND_DMA_OFF_BY_ONE: LLDMA requests may access one additional byte which can cause
987e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang * a MMU fault if the next byte after the buffer end is on a different page that isn't mapped.
997e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang */
1007e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#define WORKAROUND_DMA_OFF_BY_ONE
1017e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#define FOURCC_XVVA     (('A' << 24) + ('V' << 16) + ('V' << 8) + 'X')
1027e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
103c1796c63c15e70e237ed3227fcd785feb8f86623Yuan, Shengquan#define PSB_MAX_PROFILES			32
104c1796c63c15e70e237ed3227fcd785feb8f86623Yuan, Shengquan#define PSB_MAX_ENTRYPOINTS			32
105f31d5416a60f83e184b0906a7ec77ba021840531hding#define PSB_MAX_CONFIG_ATTRIBUTES		VAConfigAttribTypeMax
10680512b077abec95c25376542d58e1ee4cb1a34eeElaine Wang
10780512b077abec95c25376542d58e1ee4cb1a34eeElaine Wang/* VABufferTypeMax is large(1000+) because there is big blank space between common libva buffer
10880512b077abec95c25376542d58e1ee4cb1a34eeElaine Wang * type and Intel specific buffer types(for GEN usage only). If use VABufferTypeMax as
10980512b077abec95c25376542d58e1ee4cb1a34eeElaine Wang * PSB_MAX_BUFFERTYPES to define the size of buffer type related arrays in context object,
11080512b077abec95c25376542d58e1ee4cb1a34eeElaine Wang * we will waste about 16K memory. Currently, the max value of buffer type used in psb_video is
11180512b077abec95c25376542d58e1ee4cb1a34eeElaine Wang * VAParseSliceHeaderGroupBufferType(44).
11280512b077abec95c25376542d58e1ee4cb1a34eeElaine Wang */
11380512b077abec95c25376542d58e1ee4cb1a34eeElaine Wang#define PSB_MAX_BUFFERTYPES			64
1147e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
1157e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang/* Max # of command submission buffers */
116bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang#define PSB_MAX_CMDBUFS                         10
117bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang#define LNC_MAX_CMDBUFS_ENCODE                  4
118bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang#define PNW_MAX_CMDBUFS_ENCODE                  4
119430ce5c32361119ed81a62c918be6afbdd053eddhding#define TNG_MAX_CMDBUFS_ENCODE                  4
1208e9a21e730449c10cac6e6f69d255611c93f63c2hding#define VSP_MAX_CMDBUFS				10
1217e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
1227e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#define PSB_SURFACE_DISPLAYING_F (0x1U<<0)
1237e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#define PSB_SURFACE_IS_FLAG_SET(flags, mask) (((flags)& PSB_SURFACE_DISPLAYING_F) != 0)
1247e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
125f31d5416a60f83e184b0906a7ec77ba021840531hding#define PSB_CTX_TILING_MASK	0x00FF0000
126f31d5416a60f83e184b0906a7ec77ba021840531hding
127dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun/*xrandr dirty flag*/
128dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun#define PSB_NEW_ROTATION        1
129dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun#define PSB_NEW_EXTVIDEO        2
130dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
13135405e1aaaefd5bb307ba7f7161e138a86880020Kun Wang#define PSB_NEW_VA_ROTATION     1 << 0
13235405e1aaaefd5bb307ba7f7161e138a86880020Kun Wang#define PSB_NEW_WM_ROTATION     1 << 1
13335405e1aaaefd5bb307ba7f7161e138a86880020Kun Wang
134dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun#define MAX_SLICES_PER_PICTURE 72
135dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun#define MAX_MB_ERRORS 72
136dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
13761e067e1c2cfca5234c4a7fa2af351206b543904hding/* Some funtions aren't used but we'd like to keep them as reference code in future */
13861e067e1c2cfca5234c4a7fa2af351206b543904hding#define PSB_MFLD_DUMMY_CODE     0
139f31d5416a60f83e184b0906a7ec77ba021840531hding
14094ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding/*
14194ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding * ITU-R BT.601 and BT.709 transfer matrices from VA 2.0
14294ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding * Video Color Field definitions Design Spec(Version 0.03).
14394ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding * [R', G', B'] values are in the range [0, 1], Y' is in the range [0,1]
14494ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding * and [Pb, Pr] components are in the range [-0.5, 0.5].
14594ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding */
14694ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Dingstatic float s601[9] = {
14794ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding    1, -0.000001, 1.402,
14894ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding    1, -0.344136, -0.714136,
14994ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding    1, 1.772, 0
15094ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding};
15194ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding
15294ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Dingstatic float s709[9] = {
15394ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding    1, 0, 1.5748,
15494ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding    1, -0.187324, -0.468124,
15594ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding    1, 1.8556, 0
15694ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding};
15794ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding
1587e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct object_config_s *object_config_p;
1597e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct object_context_s *object_context_p;
1607e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct object_surface_s *object_surface_p;
1617e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct object_buffer_s *object_buffer_p;
1627e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct object_image_s *object_image_p;
1637e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct object_subpic_s *object_subpic_p;
1647e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct format_vtable_s *format_vtable_p;
1657e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangtypedef struct psb_driver_data_s *psb_driver_data_p;
1667e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
167632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hutypedef struct psb_surface_share_info_s psb_surface_share_info_t, *psb_surface_share_info_p;
168dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun/* post-processing data structure */
1692befccec034c13d34746a9e87149889d59ac767bFei Jiangenum psb_output_method_t {
1702befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_NONE = 0,
1712befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_X11,/* use x11 method */
1722befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_TEXTURE,/* texture xvideo */
1732befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_OVERLAY,/* overlay xvideo */
1742befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_COVERLAY,/* client overlay */
1752befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_CTEXTURE,/* client textureblit */
1762befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_TEXSTREAMING,/* texsteaming */
1772befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_FORCE_TEXTURE,/* force texture xvideo */
1782befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_FORCE_OVERLAY,/* force overlay xvideo */
1792befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_FORCE_CTEXTURE,/* force client textureblit */
1802befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_FORCE_COVERLAY,/* force client overlay */
1812befccec034c13d34746a9e87149889d59ac767bFei Jiang    PSB_PUTSURFACE_FORCE_TEXSTREAMING,/* force texstreaming */
1822befccec034c13d34746a9e87149889d59ac767bFei Jiang};
1837e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
184dc1209519284865899ca8d990b3a2c7dbca8ae08wangkuntypedef struct psb_decode_info {
185dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    uint32_t num_surface;
186dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    uint32_t surface_id;
187dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun} psb_decode_info_t;
188dc1209519284865899ca8d990b3a2c7dbca8ae08wangkuntypedef struct msvdx_decode_info *psb_decode_info_p;
189dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
19067612a448651896b2557796ff98d46c5e0dbbdc6hding#define CSC_MATRIX_X  (3)
19167612a448651896b2557796ff98d46c5e0dbbdc6hding#define CSC_MATRIX_Y  (3)
19267612a448651896b2557796ff98d46c5e0dbbdc6hding
1937e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct psb_driver_data_s {
194bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    struct object_heap_s        config_heap;
195bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    struct object_heap_s        context_heap;
196bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    struct object_heap_s        surface_heap;
197bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    struct object_heap_s        buffer_heap;
198bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    struct object_heap_s        image_heap;
199bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    struct object_heap_s        subpic_heap;
200bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    char *                      bus_id;
2017e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t                    dev_id;
202bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    int                         drm_fd;
203bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    int                         dup_drm_fd;
2043f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang
205e968fbfc452194dd51c12901ffa338c312a5e3c7Fei Jiang    /*  PM_QoS */
206e968fbfc452194dd51c12901ffa338c312a5e3c7Fei Jiang    int                         pm_qos_fd;
207bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    int                         dri2;
208bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    int                         dri_dummy;
209bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    XID                         context_id;
210bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    drm_context_t               drm_context;
211bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    drmLock                     *drm_lock;
212bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    int                         contended_lock;
213bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    pthread_mutex_t             drm_mutex;
214bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    format_vtable_p             profile2Format[PSB_MAX_PROFILES][PSB_MAX_ENTRYPOINTS];
2157a7f243488d6d292901b6afcee37683635fc5a77Wang Kun#ifdef PSBVIDEO_MRFL_VPP
2167a7f243488d6d292901b6afcee37683635fc5a77Wang Kun    format_vtable_p             vpp_profile;
2177a7f243488d6d292901b6afcee37683635fc5a77Wang Kun#endif
21881826d3ab4c9cf28ea853f1545042aa53a0f0abfLi Zeng#ifdef PSBVIDEO_MFLD
21981826d3ab4c9cf28ea853f1545042aa53a0f0abfLi Zeng    format_vtable_p             vpp_profile;
22081826d3ab4c9cf28ea853f1545042aa53a0f0abfLi Zeng#endif
221bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    uint32_t                    msvdx_context_base;
222bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    int                         video_sd_disabled;
223bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    int                         video_hd_disabled;
224f31d5416a60f83e184b0906a7ec77ba021840531hding    unsigned char *             camera_bo;
225bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    uint32_t                    camera_phyaddr;
226bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    uint32_t                    camera_size;
227f31d5416a60f83e184b0906a7ec77ba021840531hding    unsigned char *             rar_bo;
228bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    uint32_t                    rar_phyaddr;
229bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    uint32_t                    rar_size;
2307e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
2317e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int encode_supported;
2327e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int decode_supported;
2337e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int hd_encode_supported;
2347e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int hd_decode_supported;
2357e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
2367e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int execIoctlOffset;
2377e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int getParamIoctlOffset;
238dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
2397e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct _WsbmBufferPool *main_pool;
2407e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct _WsbmFenceMgr *fence_mgr;
2417e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
2422befccec034c13d34746a9e87149889d59ac767bFei Jiang    enum psb_output_method_t output_method;
243dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
2442befccec034c13d34746a9e87149889d59ac767bFei Jiang    /* whether the post-processing use client overlay or not */
2452befccec034c13d34746a9e87149889d59ac767bFei Jiang    int coverlay;
2466e19dd0fd3388e704d0ee5d180bcb9c356aacc44Shuduo Sang    int coverlay_init;
2472befccec034c13d34746a9e87149889d59ac767bFei Jiang    PsbPortPrivRec coverlay_priv;
248dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
249dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
2502befccec034c13d34746a9e87149889d59ac767bFei Jiang    /* whether the post-processing use client textureblit or not */
2512befccec034c13d34746a9e87149889d59ac767bFei Jiang    int ctexture;
252dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    struct psb_texture_s ctexture_priv;
2532befccec034c13d34746a9e87149889d59ac767bFei Jiang
2542befccec034c13d34746a9e87149889d59ac767bFei Jiang    /*
2552befccec034c13d34746a9e87149889d59ac767bFei Jiang    //whether the post-processing use texstreaing or not
2562befccec034c13d34746a9e87149889d59ac767bFei Jiang    int ctexstreaing;
257dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    struct psb_texstreaing ctexstreaing_priv;
2582befccec034c13d34746a9e87149889d59ac767bFei Jiang    */
259dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
260e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    unsigned char *ws_priv; /* window system related data structure */
261dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
2622befccec034c13d34746a9e87149889d59ac767bFei Jiang
2637e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VASurfaceID cur_displaying_surface;
2647e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VASurfaceID last_displaying_surface;
2652befccec034c13d34746a9e87149889d59ac767bFei Jiang
2662befccec034c13d34746a9e87149889d59ac767bFei Jiang    VADisplayAttribute ble_black_mode;
2672befccec034c13d34746a9e87149889d59ac767bFei Jiang    VADisplayAttribute ble_white_mode;
268dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
2692befccec034c13d34746a9e87149889d59ac767bFei Jiang    VADisplayAttribute blueStretch_gain;
2702befccec034c13d34746a9e87149889d59ac767bFei Jiang    VADisplayAttribute skinColorCorrection_gain;
271dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
2722befccec034c13d34746a9e87149889d59ac767bFei Jiang    VADisplayAttribute brightness;
2732befccec034c13d34746a9e87149889d59ac767bFei Jiang    VADisplayAttribute hue;
2742befccec034c13d34746a9e87149889d59ac767bFei Jiang    VADisplayAttribute contrast;
2752befccec034c13d34746a9e87149889d59ac767bFei Jiang    VADisplayAttribute saturation;
276bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    /*Save RenderMode and RenderRect attribute
277bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang     * for medfield android extend video mode.*/
278bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    uint32_t render_device;
279bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    uint32_t render_mode;
280bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    VARectangle  render_rect;
281bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang
2822befccec034c13d34746a9e87149889d59ac767bFei Jiang    unsigned int clear_color;
2832befccec034c13d34746a9e87149889d59ac767bFei Jiang
2842befccec034c13d34746a9e87149889d59ac767bFei Jiang    int  is_oold;
2852befccec034c13d34746a9e87149889d59ac767bFei Jiang
286dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    unsigned int load_csc_matrix;
28794ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding    float   csc_matrix[CSC_MATRIX_X][CSC_MATRIX_Y];
28894ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding    int  is_BT601;
28994ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding
29094ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding    unsigned int set_video_range;
29194ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding    unsigned int video_range;
292dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
2932befccec034c13d34746a9e87149889d59ac767bFei Jiang    /* subpic number current buffers support */
2942befccec034c13d34746a9e87149889d59ac767bFei Jiang    unsigned int max_subpic;
295dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
2962befccec034c13d34746a9e87149889d59ac767bFei Jiang    /* for multi-thread safe */
2972f768e2db3e4074a6e9a3d5f0f6e321233d96e4cFei Jiang    int use_xrandr_thread;
2982befccec034c13d34746a9e87149889d59ac767bFei Jiang    pthread_mutex_t output_mutex;
2992f768e2db3e4074a6e9a3d5f0f6e321233d96e4cFei Jiang    pthread_t xrandr_thread_id;
300dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    int extend_fullscreen;
3012f768e2db3e4074a6e9a3d5f0f6e321233d96e4cFei Jiang
3022befccec034c13d34746a9e87149889d59ac767bFei Jiang    int drawable_info;
3032befccec034c13d34746a9e87149889d59ac767bFei Jiang    int dummy_putsurface;
3042befccec034c13d34746a9e87149889d59ac767bFei Jiang    int fixed_fps;
3052befccec034c13d34746a9e87149889d59ac767bFei Jiang    unsigned int frame_count;
3064b5b72d7dd3fe944d75029ff0ca6db1e74600e59Liu, Shuo
3074b5b72d7dd3fe944d75029ff0ca6db1e74600e59Liu, Shuo    uint32_t blend_mode;
3084b5b72d7dd3fe944d75029ff0ca6db1e74600e59Liu, Shuo    uint32_t blend_color;
309bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    uint32_t overlay_auto_paint_color_key;
3104b5b72d7dd3fe944d75029ff0ca6db1e74600e59Liu, Shuo    uint32_t color_key;
311dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
312dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    /*output rotation info*/
3130da1930627209986e8db220799a690f816494401Austin Yuan    int disable_msvdx_rotate;
314d3e97838845e2486aff54fc1ed9ba8b4af3d36faTianyang Zhu    int disable_msvdx_rotate_backup;
3150da1930627209986e8db220799a690f816494401Austin Yuan    int msvdx_rotate_want; /* msvdx rotate info programed to msvdx */
316ca7d98aa1e54c9ee6ee79eb46ad25e0b897e7c51Austin Yuan    int va_rotate; /* VA rotate passed from APP */
317ca7d98aa1e54c9ee6ee79eb46ad25e0b897e7c51Austin Yuan    int mipi0_rotation; /* window manager rotation */
318ca7d98aa1e54c9ee6ee79eb46ad25e0b897e7c51Austin Yuan    int mipi1_rotation; /* window manager rotation */
319ca7d98aa1e54c9ee6ee79eb46ad25e0b897e7c51Austin Yuan    int hdmi_rotation; /* window manager rotation */
320ca7d98aa1e54c9ee6ee79eb46ad25e0b897e7c51Austin Yuan    int local_rotation; /* final device rotate: VA rotate+wm rotate */
321ca7d98aa1e54c9ee6ee79eb46ad25e0b897e7c51Austin Yuan    int extend_rotation; /* final device rotate: VA rotate+wm rotate */
32235405e1aaaefd5bb307ba7f7161e138a86880020Kun Wang    int rotation_dirty;  /*flag for recaculate final rotation*/
3233f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang
324ca7d98aa1e54c9ee6ee79eb46ad25e0b897e7c51Austin Yuan    unsigned int outputmethod_checkinterval;
3256e19dd0fd3388e704d0ee5d180bcb9c356aacc44Shuduo Sang
326dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    uint32_t xrandr_dirty;
327dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    uint32_t xrandr_update;
328dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    /*only VAProfileH264ConstrainedBaseline profile enable error concealment*/
329dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    uint32_t ec_enabled;
3308b9d488edafa54dce4d1fa4ae99e493ad840517dLi Zeng    uint32_t ved_vpp;
331dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
332208fdf0dfa4973738828afe4c0fee995d1c5079cWang Kun    /* vpp is on or off */
333208fdf0dfa4973738828afe4c0fee995d1c5079cWang Kun    int vpp_on;
334208fdf0dfa4973738828afe4c0fee995d1c5079cWang Kun
335dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    uint32_t pre_surfaceid;
336dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    psb_decode_info_t decode_info;
337dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    drm_psb_msvdx_decode_status_t *msvdx_decode_status;
338dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    VASurfaceDecodeMBErrors *surface_mb_error;
339bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang
340e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    unsigned char *hPVR2DContext;
341bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang
342e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    VAGenericID wrapped_surface_id[VIDEO_BUFFER_NUM];
343e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    VAGenericID wrapped_subpic_id[VIDEO_BUFFER_NUM];
344bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    PVR2DMEMINFO *videoBuf[VIDEO_BUFFER_NUM];
345bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    PVR2DMEMINFO *subpicBuf[VIDEO_BUFFER_NUM];
346632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    void *native_window;
3473f0344d71a79eccf65858fe5ba8a55f75dc5d7f5Austin Yuan    int is_android;
348a1756818411b990c978385ae425ea2d4610c7c08Fei Jiang    /* VA_RT_FORMAT_PROTECTED is set to protected for Widevine case */
349a1756818411b990c978385ae425ea2d4610c7c08Fei Jiang    int protected;
3507e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang};
3517e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
352f31d5416a60f83e184b0906a7ec77ba021840531hding
353f31d5416a60f83e184b0906a7ec77ba021840531hding#ifdef _FOR_FPGA_
35460acc53b7127b8fbaec5cc53d695268c13659092Ma, Hongpeng#define IS_CTP(driver_data)  0
3557bb84b457d5658da0c850ed13dff3d212af70771Edward Lin#define IS_MFLD(driver_data) 0
356f31d5416a60f83e184b0906a7ec77ba021840531hding#define IS_MRFL(driver_data) 1
357f31d5416a60f83e184b0906a7ec77ba021840531hding#define IS_MRST(driver_data) 0
358f31d5416a60f83e184b0906a7ec77ba021840531hding#else
35960acc53b7127b8fbaec5cc53d695268c13659092Ma, Hongpeng#define IS_CTP(driver_data) (((driver_data->dev_id & 0xffff) == 0x08c0) ||  \
36060acc53b7127b8fbaec5cc53d695268c13659092Ma, Hongpeng                     ((driver_data->dev_id & 0xffff) == 0x08c7) ||  \
36160acc53b7127b8fbaec5cc53d695268c13659092Ma, Hongpeng                     ((driver_data->dev_id & 0xffff) == 0x08c8))
3627e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#define IS_MRST(driver_data) ((driver_data->dev_id & 0xFFFC) == 0x4100)
363f31d5416a60f83e184b0906a7ec77ba021840531hding#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))
364c8f70c055a073d0f87a0a63f9f09fd02f230b512Li Zeng#define IS_MRFL(driver_data) (((driver_data->dev_id & 0xFFFC) == 0x1180) || ((driver_data->dev_id & 0xFFFC) == 0x1480))
365c1b2b79d09021bd55c39f38b8d08b4f17e65a18cLi Zeng#define IS_MOFD(driver_data) ((driver_data->dev_id & 0xFFFC) == 0x1480)
366f31d5416a60f83e184b0906a7ec77ba021840531hding#define IS_LEXINGTON(driver_data) ((driver_data->dev_id & 0xFFFF) == 0x01FF)
367b7c527a64448cfeedb2fe114b673af667f92faf2hding#define IS_BAYTRAIL(driver_data) ((driver_data->dev_id & 0xFFFF) == 0x0F31)
368f31d5416a60f83e184b0906a7ec77ba021840531hding#endif
3697e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
3707e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct object_config_s {
3717e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct object_base_s base;
3727e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VAProfile profile;
3737e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VAEntrypoint entrypoint;
3747e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VAConfigAttrib attrib_list[PSB_MAX_CONFIG_ATTRIBUTES];
3757e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int attrib_count;
3767e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    format_vtable_p format_vtable;
3777e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang};
3787e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
3797e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct object_context_s {
3807e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct object_base_s base;
3817e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VAContextID context_id;
3827e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VAConfigID config_id;
3830da1930627209986e8db220799a690f816494401Austin Yuan    VAProfile profile;
384437b3eda28a4bf098efa80598cab67f190275266Fei Jiang    VAEntrypoint entry_point;
3857e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int picture_width;
3867e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int picture_height;
3877e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int num_render_targets;
3887e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VASurfaceID *render_targets;
3897e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int va_flags;
3907e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
3917e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    object_surface_p current_render_target;
392f31d5416a60f83e184b0906a7ec77ba021840531hding    object_surface_p ec_target;
393f31d5416a60f83e184b0906a7ec77ba021840531hding    object_surface_p ec_candidate;
394dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    VASurfaceID current_render_surface_id;
3957e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    psb_driver_data_p driver_data;
3967e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    format_vtable_p format_vtable;
397e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    unsigned char *format_data;
3987e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct psb_cmdbuf_s *cmdbuf_list[PSB_MAX_CMDBUFS];
3997e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct lnc_cmdbuf_s *lnc_cmdbuf_list[LNC_MAX_CMDBUFS_ENCODE];
400437b3eda28a4bf098efa80598cab67f190275266Fei Jiang    struct pnw_cmdbuf_s *pnw_cmdbuf_list[PNW_MAX_CMDBUFS_ENCODE];
401430ce5c32361119ed81a62c918be6afbdd053eddhding    struct tng_cmdbuf_s	*tng_cmdbuf_list[TNG_MAX_CMDBUFS_ENCODE];
402f31d5416a60f83e184b0906a7ec77ba021840531hding    struct vsp_cmdbuf_s *vsp_cmdbuf_list[VSP_MAX_CMDBUFS];
403dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
4047e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct psb_cmdbuf_s *cmdbuf; /* Current cmd buffer */
4057e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct lnc_cmdbuf_s *lnc_cmdbuf;
406437b3eda28a4bf098efa80598cab67f190275266Fei Jiang    struct pnw_cmdbuf_s *pnw_cmdbuf;
407430ce5c32361119ed81a62c918be6afbdd053eddhding    struct tng_cmdbuf_s *tng_cmdbuf;
408f31d5416a60f83e184b0906a7ec77ba021840531hding    struct vsp_cmdbuf_s *vsp_cmdbuf;
409dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
4107e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int cmdbuf_current;
411dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
4127e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    /* Buffers */
4137e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    object_buffer_p buffers_unused[PSB_MAX_BUFFERTYPES]; /* Linked lists (HEAD) of unused buffers for each buffer type */
4147e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int buffers_unused_count[PSB_MAX_BUFFERTYPES]; /* Linked lists (HEAD) of unused buffers for each buffer type */
4157e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    object_buffer_p buffers_unused_tail[PSB_MAX_BUFFERTYPES]; /* Linked lists (TAIL) of unused buffers for each buffer type */
4167e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    object_buffer_p buffers_active[PSB_MAX_BUFFERTYPES]; /* Linked lists of active buffers for each buffer type */
4177e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
418437b3eda28a4bf098efa80598cab67f190275266Fei Jiang    object_buffer_p *buffer_list; /* for vaRenderPicture */
419437b3eda28a4bf098efa80598cab67f190275266Fei Jiang    int num_buffers;
420437b3eda28a4bf098efa80598cab67f190275266Fei Jiang
4217e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    enum {
4227e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        psb_video_none = 0,
4237e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        psb_video_mc,
4247e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        psb_video_vld,
4257e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        psb_video_deblock
4267e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    } video_op;
4277e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
4287e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t operating_mode;
4297e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t flags; /* See render flags below */
4307e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t first_mb;
4317e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t last_mb;
4327e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
433437b3eda28a4bf098efa80598cab67f190275266Fei Jiang    int is_oold;
434ca7d98aa1e54c9ee6ee79eb46ad25e0b897e7c51Austin Yuan    int msvdx_rotate;
435925e65d1ed4a080e83ea5fcaea1c3c802e427e6cpingshix    int msvdx_scaling;
4360da1930627209986e8db220799a690f816494401Austin Yuan    int interlaced_stream;
437ea19f5543d17793f6a03e37e27a9b4f1fbc781bcSun, Jian
438ea19f5543d17793f6a03e37e27a9b4f1fbc781bcSun, Jian    /* value is 64bits value, consist of 8 bytes
439ea19f5543d17793f6a03e37e27a9b4f1fbc781bcSun, Jian     * bytes[0]: entrypoint
440ea19f5543d17793f6a03e37e27a9b4f1fbc781bcSun, Jian     * bytes[1]: profile
441ea19f5543d17793f6a03e37e27a9b4f1fbc781bcSun, Jian     * bytes[2]: tile stride | rotated tile stride
442ea19f5543d17793f6a03e37e27a9b4f1fbc781bcSun, Jian     * bytes[3]: driver_data->protected
443ea19f5543d17793f6a03e37e27a9b4f1fbc781bcSun, Jian     * bytes[4]: width_in_mb; pass width kernel for VC1 workaround
444ea19f5543d17793f6a03e37e27a9b4f1fbc781bcSun, Jian     */
445ea19f5543d17793f6a03e37e27a9b4f1fbc781bcSun, Jian    uint64_t ctp_type;
446ea19f5543d17793f6a03e37e27a9b4f1fbc781bcSun, Jian
447f31d5416a60f83e184b0906a7ec77ba021840531hding    unsigned long msvdx_tile; /* normal tile | (rotate tile << 4) */
448913999933b93af5ec1cc99a28b961fa12834c085Nana GUo#ifdef SLICE_HEADER_PARSING
449913999933b93af5ec1cc99a28b961fa12834c085Nana GUo    int msvdx_frame_end;
450bc222733c95473a832014871bbc7572198ca6b8cmahongpe    int modular_drm;
451913999933b93af5ec1cc99a28b961fa12834c085Nana GUo#endif
4523f3d1e8746d2b793c982ac19a73061e006b1b178Kun Wang
4537e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t msvdx_context;
454dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
4554d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    int scaling_width;
4564d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    int scaling_height;
457a7634d944fe745c4061b4b5c0d425cc585b923a2mahongpe    int scaling_buffer_width;
458a7634d944fe745c4061b4b5c0d425cc585b923a2mahongpe    int scaling_buffer_height;
459a7634d944fe745c4061b4b5c0d425cc585b923a2mahongpe    int scaling_offset_x;
460a7634d944fe745c4061b4b5c0d425cc585b923a2mahongpe    int scaling_offset_y;
4614d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    int scaling_update;
4624d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng
4637e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    /* Debug */
4647e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t frame_count;
4657e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t slice_count;
4667e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang};
4677e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
4680da1930627209986e8db220799a690f816494401Austin Yuan#define ROTATE_VA2MSVDX(va_rotate)  (va_rotate)
4690da1930627209986e8db220799a690f816494401Austin Yuan#define CONTEXT_ROTATE(obj_context) (obj_context->msvdx_rotate != ROTATE_VA2MSVDX(VA_ROTATION_NONE))
4704d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng#define CONTEXT_SCALING(obj_context) (obj_context->msvdx_scaling)
471925e65d1ed4a080e83ea5fcaea1c3c802e427e6cpingshix#define CONTEXT_ALTERNATIVE_OUTPUT(obj_context) (CONTEXT_ROTATE(obj_context) || CONTEXT_SCALING(obj_context))
4720da1930627209986e8db220799a690f816494401Austin Yuan
4739f388f4488bba39eeac0c97ddaa6480362edf952Jason Huenum force_output_method_t {
4749f388f4488bba39eeac0c97ddaa6480362edf952Jason Hu    OUTPUT_FORCE_NULL = 0,
4759f388f4488bba39eeac0c97ddaa6480362edf952Jason Hu    OUTPUT_FORCE_GPU,
4769f388f4488bba39eeac0c97ddaa6480362edf952Jason Hu    OUTPUT_FORCE_OVERLAY,
477dbf2ee864763f6da009b5455943917c72e31e9ecGu, Wangyi    OUTPUT_FORCE_OVERLAY_FOR_SW_DECODE,
4789f388f4488bba39eeac0c97ddaa6480362edf952Jason Hu};
4799f388f4488bba39eeac0c97ddaa6480362edf952Jason Hu
480a53f777035596f2f2228b1d689adbdebd192c144ttao#define MAX_SHARE_INFO_KHANDLES 32
481632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hustruct psb_surface_share_info_s {
482632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    //int rotation_sf;                    /*rotaion degree from surface flinger.*/
483632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    int surface_rotate;                 /*rotation degree of current rotation surface*/
484476f382b52ba06226b1ce473b56c388e6718e5e2Jason Hu    int metadata_rotate;                /*rotation degree of meta data*/
485632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    int width_r;
486632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    int height_r;
487632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    int surface_protected;              /*whether this surface need be protected*/
488632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    /*Force render path.
489632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    0 : no fore.
490632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    1 : force gpu render;
491632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    2 : force overlay render.*/
492632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    int force_output_method;
4934d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int out_loop_khandle;
4942ce4449fad0d9c41797472ac686cd39bef75ce81Miguel Verdu    unsigned int renderStatus;
4955218326fef3ee99570e4c9d692d62872052ea219ttao    unsigned int used_by_widi;
4969190b606edae32a87310efe1027cdae8ef772656Fei Jiang    int bob_deinterlace;
497f31d5416a60f83e184b0906a7ec77ba021840531hding    int tiling;
498a53f777035596f2f2228b1d689adbdebd192c144ttao    unsigned int width;
499a53f777035596f2f2228b1d689adbdebd192c144ttao    unsigned int height;
500a53f777035596f2f2228b1d689adbdebd192c144ttao    unsigned int luma_stride;
501a53f777035596f2f2228b1d689adbdebd192c144ttao    unsigned int chroma_u_stride;
502a53f777035596f2f2228b1d689adbdebd192c144ttao    unsigned int chroma_v_stride;
503a53f777035596f2f2228b1d689adbdebd192c144ttao    unsigned int format;
504a53f777035596f2f2228b1d689adbdebd192c144ttao    unsigned int khandle;
505f614fdcfc6d3b9802ab2501dbd84d42a82282fccFei Jiang    long long timestamp;
50698a9f0f7d9fd6f992c9be6750c941ce8723159adttao
5074d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int out_loop_luma_stride;
5084d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int out_loop_chroma_u_stride;
5094d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int out_loop_chroma_v_stride;
510438ce6b6895ee98bc732cc15061eca5c41de8a45Dan Liang
511438ce6b6895ee98bc732cc15061eca5c41de8a45Dan Liang    long long hwc_timestamp;
512438ce6b6895ee98bc732cc15061eca5c41de8a45Dan Liang    unsigned int layer_transform;
513438ce6b6895ee98bc732cc15061eca5c41de8a45Dan Liang
5147c683a316b6623e75c0d2ebe5d6c00c832968375ashish singhi    void *native_window;
5154d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int scaling_khandle;
5164d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int width_s;
5174d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int height_s;
5184d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng
5194d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int scaling_luma_stride;
5204d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int scaling_chroma_u_stride;
5214d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    unsigned int scaling_chroma_v_stride;
522539a49d14f466d64394588b7d080a7f027f13f71Li Zeng
523539a49d14f466d64394588b7d080a7f027f13f71Li Zeng    unsigned int crop_width;
524539a49d14f466d64394588b7d080a7f027f13f71Li Zeng    unsigned int crop_height;
52555dbfaffb153fbec01e82c471b7ea5bf7bcac5femahongpe
52655dbfaffb153fbec01e82c471b7ea5bf7bcac5femahongpe    unsigned int coded_width;
52720f2ef257b798a174166858314731050410e31f4mahongpe    unsigned int coded_height;
528d640886ce44885e2a70f4d31187d17f4ce08d52dXigui Wang    unsigned int initialized;
52994ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding
53094ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding    unsigned int csc_mode;
53194ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding    unsigned int video_range;
53294ef7ebe0b0f58b76bf652ce74d09673c8918936Haitao Ding
533632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu};
534632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu
5357e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct object_surface_s {
5367e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct object_base_s base;
5377e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VASurfaceID surface_id;
5387e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VAContextID context_id;
5397e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int width;
5407e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int height;
5414b5b72d7dd3fe944d75029ff0ca6db1e74600e59Liu, Shuo    int height_origin;
5422befccec034c13d34746a9e87149889d59ac767bFei Jiang    int width_r;
5432befccec034c13d34746a9e87149889d59ac767bFei Jiang    int height_r;
5444d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    int width_s;
5454d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    int height_s;
546a7634d944fe745c4061b4b5c0d425cc585b923a2mahongpe    int buffer_width_s;
547a7634d944fe745c4061b4b5c0d425cc585b923a2mahongpe    int buffer_height_s;
548a7634d944fe745c4061b4b5c0d425cc585b923a2mahongpe    int offset_x_s;
549a7634d944fe745c4061b4b5c0d425cc585b923a2mahongpe    int offset_y_s;
550a7634d944fe745c4061b4b5c0d425cc585b923a2mahongpe
5517e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct psb_surface_s *psb_surface;
5524d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    struct psb_surface_s *out_loop_surface; /* Alternative output surface for rotation */
5534d06c1febaa800c6a9efb9908a2c6233472c7464Li Zeng    struct psb_surface_s *scaling_surface; /* Alternative output surface for scaling */
5547e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    void *subpictures;/* if not NULL, have subpicture information */
5557e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int subpic_count; /* to ensure output have enough space for PDS & RAST */
5567e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int derived_imgcnt; /* is the surface derived by a VAImage? */
5577e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned long display_timestamp; /* record the time point of put surface*/
558632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    void *rotate_vaddr;
559632959e77cf0fbcf6a6e2f9bad2d9032b9ac18f2Jason Hu    struct psb_surface_share_info_s *share_info;
5607fe83028016237543fd7ffb31036023398dd62b6pingshix    int is_ref_surface; /* If true, vaDeriveImage returns error */
5617e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang};
5627e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
563fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang#define PSB_CODEDBUF_SLICE_NUM_MASK (0xff)
564fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang#define PSB_CODEDBUF_SLICE_NUM_SHIFT (0)
565fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang
566fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang#define PSB_CODEDBUF_NONE_VCL_NUM_MASK (0xff)
567fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang#define PSB_CODEDBUF_NONE_VCL_NUM_SHIFT (8)
568fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang
569fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang#define SET_CODEDBUF_INFO(flag, aux_info, slice_num) \
570fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang    do {\
571d50cf45fbdb02245b8d45b14935fc5f2f4575653Thierry Strudel        (aux_info) &= ~(PSB_CODEDBUF_##flag##_MASK<<PSB_CODEDBUF_##flag##_SHIFT);\
572d50cf45fbdb02245b8d45b14935fc5f2f4575653Thierry Strudel        (aux_info) |= ((slice_num) & PSB_CODEDBUF_##flag##_MASK)\
573d50cf45fbdb02245b8d45b14935fc5f2f4575653Thierry Strudel        <<PSB_CODEDBUF_##flag##_SHIFT;\
574fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang    } while (0)
575fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang
576fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang#define CLEAR_CODEDBUF_INFO(flag, aux_info) \
577fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang    do {\
578d50cf45fbdb02245b8d45b14935fc5f2f4575653Thierry Strudel        (aux_info) &= ~(PSB_CODEDBUF_##flag##_MASK<<PSB_CODEDBUF_##flag##_SHIFT);\
579fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang    } while (0)
580fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang
581fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang#define GET_CODEDBUF_INFO(flag, aux_info) \
582d50cf45fbdb02245b8d45b14935fc5f2f4575653Thierry Strudel        (((aux_info)>>PSB_CODEDBUF_##flag##_SHIFT) & PSB_CODEDBUF_##flag##_MASK)
583fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang
584fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang
585ea2c7216b1b3a8b7a00ffd63ef4ae46c5e8f9fe5Sun, Mingruo#define PSB_CODEDBUF_SEGMENT_MAX  (9)
586fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang
5877e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct object_buffer_s {
5887e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct object_base_s base;
5897e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    object_buffer_p ptr_next; /* Generic ptr for linked list */
5907e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    object_buffer_p *pptr_prev_next; /* Generic ptr for linked list */
5917e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct psb_buffer_s *psb_buffer;
592e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    unsigned char *buffer_data;
5937e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int size;
5947e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int alloc_size;
595e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    unsigned int max_num_elements;
596e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    unsigned int num_elements;
5977e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    object_context_p context;
5987e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VABufferType type;
5997e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    uint32_t last_used;
600fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang
601fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang    /* for VAEncCodedBufferType */
602fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang    VACodedBufferSegment codedbuf_mapinfo[PSB_CODEDBUF_SEGMENT_MAX];
603fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang    uint32_t codedbuf_aux_info;
6047e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang};
6057e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
6067e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct object_image_s {
6077e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct object_base_s base;
6087e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VAImage image;
6097e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int palette[16];
6107e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    int subpic_ref;
6117e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VASurfaceID derived_surface;
6127e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang};
6137e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
6147e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct object_subpic_s {
6157e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    struct object_base_s base;
6167e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VASubpictureID subpic_id;
6177e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
6187e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    VAImageID image_id;
619dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun
6207e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    /* chromakey range */
6217e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int chromakey_min;
6227e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int chromakey_max;
6237e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int chromakey_mask;
6247e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
6257e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    /* global alpha */
6267e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int global_alpha;
6277e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
6287e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    /* flags */
6297e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    unsigned int flags; /* see below */
6307e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
631e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang    unsigned char *surfaces; /* surfaces, associated with this subpicture */
6327e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang};
6337e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
634c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chentypedef struct _PsbSurfaceAttributeTPI {
635c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen    VASurfaceMemoryType type;
636c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen    unsigned int width;
637c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen    unsigned int height;
638c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen    unsigned int size;
639c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen    unsigned int pixel_format; /* buffer format */
640c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen    unsigned int tiling; /* the memory is tiling or not */
641c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen    unsigned int luma_stride; /* luma stride, could be width aligned with a special value */
642c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen    unsigned int chroma_u_stride; /* chroma stride */
643c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen    unsigned int chroma_v_stride;
644c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen    unsigned int luma_offset; /* could be 0 */
645c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen    unsigned int chroma_u_offset; /* U offset from the beginning of the memory */
646c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen    unsigned int chroma_v_offset; /* V offset from the beginning of the memory */
647c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen    unsigned int count; /* buffer count for surface creation */
648c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen    unsigned long *buffers; /* buffer handles or user pointers */
649c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen    unsigned long reserved[4]; /* used to pass additional information, like	362
650d50cf45fbdb02245b8d45b14935fc5f2f4575653Thierry Strudel                        * Android native window pointer	363
651d50cf45fbdb02245b8d45b14935fc5f2f4575653Thierry Strudel                        */
652c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen} PsbSurfaceAttributeTPI;
653c81215b4bf0f69e83b393d14bd6ffba2ec3f0ee5Tianmi Chen
6542befccec034c13d34746a9e87149889d59ac767bFei Jiang#define MEMSET_OBJECT(ptr, data_struct) \
655e9f11f100c212e9aeb194337ae43bbfea6a130dbKun Wang        memset((unsigned char *)ptr + sizeof(struct object_base_s),\
656bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang                0,                          \
657bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang               sizeof(data_struct) - sizeof(struct object_base_s))
6582befccec034c13d34746a9e87149889d59ac767bFei Jiang
6597e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangstruct format_vtable_s {
660dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    void (*queryConfigAttributes)(
6617e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        VAProfile profile,
6627e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        VAEntrypoint entrypoint,
6637e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        VAConfigAttrib *attrib_list,
6647e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        int num_attribs
665dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    );
666dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    VAStatus(*validateConfig)(
6677e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        object_config_p obj_config
668dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    );
669dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    VAStatus(*createContext)(
6707e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        object_context_p obj_context,
6717e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        object_config_p obj_config
672dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    );
673dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    void (*destroyContext)(
6747e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        object_context_p obj_context
675dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    );
676dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    VAStatus(*beginPicture)(
6777e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        object_context_p obj_context
678dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    );
679dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    VAStatus(*renderPicture)(
6807e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        object_context_p obj_context,
6817e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        object_buffer_p *buffers,
6827e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        int num_buffers
683dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    );
684dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    VAStatus(*endPicture)(
6857e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang        object_context_p obj_context
686dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    );
6877e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang};
6887e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
6897e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#define psb__bounds_check(x, max)                                       \
6907e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    do { ASSERT(x < max); if (x >= max) x = max - 1; } while(0);
6917e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
6922befccec034c13d34746a9e87149889d59ac767bFei Jiangstatic inline unsigned long GetTickCount()
6932befccec034c13d34746a9e87149889d59ac767bFei Jiang{
6942befccec034c13d34746a9e87149889d59ac767bFei Jiang    struct timeval tv;
6952befccec034c13d34746a9e87149889d59ac767bFei Jiang    if (gettimeofday(&tv, NULL))
6962befccec034c13d34746a9e87149889d59ac767bFei Jiang        return 0;
697bde3ed7517cc876cb2a6e174ea2a96a75938e787Kun Wang    return tv.tv_usec / 1000 + tv.tv_sec * 1000;
6982befccec034c13d34746a9e87149889d59ac767bFei Jiang}
6992befccec034c13d34746a9e87149889d59ac767bFei Jiang
7007e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jianginline static char * buffer_type_to_string(int type)
7017e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang{
7027e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    switch (type) {
703dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAPictureParameterBufferType:
704dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAPictureParameterBufferType";
705dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAIQMatrixBufferType:
706dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAIQMatrixBufferType";
707dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VABitPlaneBufferType:
708dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VABitPlaneBufferType";
709dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VASliceGroupMapBufferType:
710dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VASliceGroupMapBufferType";
711dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VASliceParameterBufferType:
712dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VASliceParameterBufferType";
713dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VASliceDataBufferType:
714dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VASliceDataBufferType";
715dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAProtectedSliceDataBufferType:
716dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAProtectedSliceDataBufferType";
717dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAMacroblockParameterBufferType:
718dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAMacroblockParameterBufferType";
719dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAResidualDataBufferType:
720dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAResidualDataBufferType";
721dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VADeblockingParameterBufferType:
722dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VADeblockingParameterBufferType";
723dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAImageBufferType:
724dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAImageBufferType";
725dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAEncCodedBufferType:
726dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAEncCodedBufferType";
727dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAEncSequenceParameterBufferType:
728dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAEncSequenceParameterBufferType";
729dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAEncPictureParameterBufferType:
730dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAEncPictureParameterBufferType";
731dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    case VAEncSliceParameterBufferType:
732dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "VAEncSliceParameterBufferType";
733fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang    case VAEncMiscParameterBufferType:
734fa6f2e9012a890942a47eae9f6f1a0ddcd97e9a4Fei Jiang        return "VAEncMiscParameterBufferType";
735f31d5416a60f83e184b0906a7ec77ba021840531hding    case VAProbabilityBufferType:
736d50cf45fbdb02245b8d45b14935fc5f2f4575653Thierry Strudel        return "VAProbabilityBufferType";
737f31d5416a60f83e184b0906a7ec77ba021840531hding    case VAHuffmanTableBufferType:
738f31d5416a60f83e184b0906a7ec77ba021840531hding        return "VAHuffmanTableBufferType";
7394985c4c7c4894dc1feb6b8d678e2f9b9d2f05543SUN,Jing    case VAQMatrixBufferType:
7404985c4c7c4894dc1feb6b8d678e2f9b9d2f05543SUN,Jing        return "VAQMatrixBufferType";
741dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun    default:
742dc1209519284865899ca8d990b3a2c7dbca8ae08wangkun        return "UnknowBuffer";
7437e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang    }
7447e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang}
7457e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
7460da1930627209986e8db220799a690f816494401Austin Yuaninline static int Angle2Rotation(int angle)
7470da1930627209986e8db220799a690f816494401Austin Yuan{
7480da1930627209986e8db220799a690f816494401Austin Yuan    angle %= 360;
7490da1930627209986e8db220799a690f816494401Austin Yuan    switch (angle) {
7500da1930627209986e8db220799a690f816494401Austin Yuan    case 0:
7510da1930627209986e8db220799a690f816494401Austin Yuan        return VA_ROTATION_NONE;
7520da1930627209986e8db220799a690f816494401Austin Yuan    case 90:
7530da1930627209986e8db220799a690f816494401Austin Yuan        return VA_ROTATION_90;
7540da1930627209986e8db220799a690f816494401Austin Yuan    case 180:
7550da1930627209986e8db220799a690f816494401Austin Yuan        return VA_ROTATION_180;
7560da1930627209986e8db220799a690f816494401Austin Yuan    case 270:
7570da1930627209986e8db220799a690f816494401Austin Yuan        return VA_ROTATION_270;
7580da1930627209986e8db220799a690f816494401Austin Yuan    default:
7590da1930627209986e8db220799a690f816494401Austin Yuan        return -1;
7600da1930627209986e8db220799a690f816494401Austin Yuan    }
7610da1930627209986e8db220799a690f816494401Austin Yuan}
7620da1930627209986e8db220799a690f816494401Austin Yuan
7630da1930627209986e8db220799a690f816494401Austin Yuaninline static int Rotation2Angle(int rotation)
7640da1930627209986e8db220799a690f816494401Austin Yuan{
7650da1930627209986e8db220799a690f816494401Austin Yuan    switch (rotation) {
7660da1930627209986e8db220799a690f816494401Austin Yuan    case VA_ROTATION_NONE:
7670da1930627209986e8db220799a690f816494401Austin Yuan        return 0;
7680da1930627209986e8db220799a690f816494401Austin Yuan    case VA_ROTATION_90:
7690da1930627209986e8db220799a690f816494401Austin Yuan        return 90;
7700da1930627209986e8db220799a690f816494401Austin Yuan    case VA_ROTATION_180:
7710da1930627209986e8db220799a690f816494401Austin Yuan        return 180;
7720da1930627209986e8db220799a690f816494401Austin Yuan    case VA_ROTATION_270:
7730da1930627209986e8db220799a690f816494401Austin Yuan        return 270;
7740da1930627209986e8db220799a690f816494401Austin Yuan    default:
7750da1930627209986e8db220799a690f816494401Austin Yuan        return -1;
7760da1930627209986e8db220799a690f816494401Austin Yuan    }
7770da1930627209986e8db220799a690f816494401Austin Yuan}
7780da1930627209986e8db220799a690f816494401Austin Yuan
77954752e65b02b1a84c491e3f9c964046faeea306eKun Wangint psb_parse_config(char *env, char *env_value);
780f31d5416a60f83e184b0906a7ec77ba021840531hdingvoid psb__destroy_surface(psb_driver_data_p driver_data, object_surface_p obj_surface);
781f31d5416a60f83e184b0906a7ec77ba021840531hdingunsigned long psb_tile_stride_mode(int w);
782cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywanVAStatus psb__checkSurfaceDimensions(psb_driver_data_p driver_data, int width, int height);
78354752e65b02b1a84c491e3f9c964046faeea306eKun Wang
7842befccec034c13d34746a9e87149889d59ac767bFei Jiangint LOCK_HARDWARE(psb_driver_data_p driver_data);
7857e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiangint UNLOCK_HARDWARE(psb_driver_data_p driver_data);
786cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywanunsigned long psb__tile_stride_log2_256(int w);
787cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywanint psb_update_context(psb_driver_data_p driver_data, unsigned long ctx_type);
7887e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang
7896d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_SURFACE(obj_surface) \
7906d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
7916d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (NULL == obj_surface) { \
7926d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            vaStatus = VA_STATUS_ERROR_INVALID_SURFACE; \
7936d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
7946d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
7956d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
7966d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
7976d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
7986d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_CONFIG(obj_config) \
7996d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
8006d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (NULL == obj_config) { \
8016d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            vaStatus = VA_STATUS_ERROR_INVALID_CONFIG; \
8026d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
8036d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
8046d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
8056d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
8066d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
8076d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_CONTEXT(obj_context) \
8086d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
8096d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (NULL == obj_context) { \
8106d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            vaStatus = VA_STATUS_ERROR_INVALID_CONTEXT; \
8116d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
8126d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
8136d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
8146d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
8156d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
8166d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_BUFFER(obj_buffer) \
8176d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
8186d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (NULL == obj_buffer) { \
8196d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            vaStatus = VA_STATUS_ERROR_INVALID_BUFFER; \
8206d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
8216d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
8226d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
8236d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
8246d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
8256d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_IMAGE(obj_image) \
8266d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
8276d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (NULL == obj_image) { \
8286d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            vaStatus = VA_STATUS_ERROR_INVALID_IMAGE; \
8296d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
8306d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
8316d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
8326d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
8336d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
8346d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_SUBPICTURE(obj_subpic) \
8356d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
8366d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (NULL == obj_subpic) { \
8376d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            vaStatus = VA_STATUS_ERROR_INVALID_SUBPICTURE; \
8386d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
8396d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
8406d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
8416d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
8426d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
8436d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_ALLOCATION(buf) \
8446d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
8456d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (buf == NULL) { \
8466d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; \
8476d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
8486d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
8496d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
8506d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
8516d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
8526d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_VASTATUS() \
8536d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
8546d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (VA_STATUS_SUCCESS != vaStatus) { \
8556d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
8566d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
8576d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
8586d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
8596d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
8606d37ae34fcae80f2e898b61e2506ed8e887bd16anguo#define CHECK_INVALID_PARAM(param) \
8616d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    do { \
8626d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        if (param) { \
8636d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            vaStatus = VA_STATUS_ERROR_INVALID_PARAMETER; \
8646d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            DEBUG_FAILURE; \
8656d37ae34fcae80f2e898b61e2506ed8e887bd16anguo            return vaStatus; \
8666d37ae34fcae80f2e898b61e2506ed8e887bd16anguo        } \
8676d37ae34fcae80f2e898b61e2506ed8e887bd16anguo    } while (0)
8686d37ae34fcae80f2e898b61e2506ed8e887bd16anguo
8697e8d39a9d261ff6b5256d7cf9c7a127947b2b2a5Fei,Jiang#endif /* _PSB_DRV_VIDEO_H_ */
870