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