1/* 2 * Copyright (c) 2011 Intel Corporation. All Rights Reserved. 3 * Copyright (c) Imagination Technologies Limited, UK 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the 7 * "Software"), to deal in the Software without restriction, including 8 * without limitation the rights to use, copy, modify, merge, publish, 9 * distribute, sub license, and/or sell copies of the Software, and to 10 * permit persons to whom the Software is furnished to do so, subject to 11 * the following conditions: 12 * 13 * The above copyright notice and this permission notice (including the 14 * next paragraph) shall be included in all copies or substantial portions 15 * of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 20 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 21 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 * 25 * Authors: 26 * Waldo Bastian <waldo.bastian@intel.com> 27 */ 28 29#ifndef _PSB_SURFACE_H_ 30#define _PSB_SURFACE_H_ 31 32#include <va/va.h> 33#include <va/va_tpi.h> 34#include "psb_buffer.h" 35//#include "xf86mm.h" 36 37/* MSVDX specific */ 38typedef enum { 39 STRIDE_352 = 0, 40 STRIDE_720 = 1, 41 STRIDE_1280 = 2, 42 STRIDE_1920 = 3, 43 STRIDE_512 = 4, 44 STRIDE_1024 = 5, 45 STRIDE_2048 = 6, 46 STRIDE_4096 = 7, 47 STRIDE_NA, 48 STRIDE_UNDEFINED, 49} psb_surface_stride_t; 50 51typedef enum { 52 IS_PROTECTED = 0x1, 53 IS_ROTATED = 0x2, 54} psb_surface_flags_t; 55 56typedef struct psb_surface_s *psb_surface_p; 57 58struct psb_surface_s { 59 struct psb_buffer_s buf; 60 struct psb_buffer_s *in_loop_buf; 61 struct psb_buffer_s *ref_buf; 62 psb_surface_stride_t stride_mode; 63 unsigned int stride; 64 unsigned int luma_offset; 65 unsigned int chroma_offset; 66 /* Used to store driver private data, e.g. decoder specific intermediate status data 67 * extra_info[0-3]: used for decode 68 * extra_info[4]: surface fourcc 69 * extra_info[5]: surface skippeded or not for encode, rotate info for decode 70 * extra_info[6]: mfld protected surface 71 * extra_info[7]: linear or tiled 72 * extra_info[8]: the fourcc set by application 73 */ 74 int extra_info[9]; 75 int size; 76 unsigned int bc_buffer; 77 void *handle; 78}; 79 80/* 81 * Create surface 82 */ 83VAStatus psb_surface_create(psb_driver_data_p driver_data, 84 int width, int height, int fourcc, unsigned int flags, 85 psb_surface_p psb_surface /* out */ 86 ); 87 88 89#define SET_SURFACE_INFO_rotate(psb_surface, rotate) psb_surface->extra_info[5] = (uint32_t) rotate; 90#define GET_SURFACE_INFO_rotate(psb_surface) ((int) psb_surface->extra_info[5]) 91#define GET_SURFACE_INFO_protect(psb_surface) ((int) psb_surface->extra_info[6]) 92#define SET_SURFACE_INFO_protect(psb_surface, protect) (psb_surface->extra_info[6] = protect) 93#define SET_SURFACE_INFO_tiling(psb_surface, tiling) psb_surface->extra_info[7] = (uint32_t) tiling; 94#define GET_SURFACE_INFO_tiling(psb_surface) ((unsigned long) psb_surface->extra_info[7]) 95 96 97/* 98 * Temporarily map surface and set all chroma values of surface to 'chroma' 99 */ 100VAStatus psb_surface_set_chroma(psb_surface_p psb_surface, int chroma); 101 102/* 103 * Destroy surface 104 */ 105void psb_surface_destroy(psb_surface_p psb_surface); 106 107/* 108 * Wait for surface to become idle 109 */ 110VAStatus psb_surface_sync(psb_surface_p psb_surface); 111 112/* 113 * Return surface status 114 */ 115VAStatus psb_surface_query_status(psb_surface_p psb_surface, VASurfaceStatus *status); 116 117/* 118 * Set current displaying surface info to kernel 119 */ 120int psb_surface_set_displaying(psb_driver_data_p driver_data, 121 int width, int height, 122 psb_surface_p psb_surface); 123 124#endif /* _PSB_SURFACE_H_ */ 125