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