1/* 2 * Copyright (c) 2011 Intel Corporation. All Rights Reserved. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the 6 * "Software"), to deal in the Software without restriction, including 7 * without limitation the rights to use, copy, modify, merge, publish, 8 * distribute, sub license, and/or sell copies of the Software, and to 9 * permit persons to whom the Software is furnished to do so, subject to 10 * the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the 13 * next paragraph) shall be included in all copies or substantial portions 14 * of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 19 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 20 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 * 24 * Authors: 25 * Shengquan Yuan <shengquan.yuan@intel.com> 26 * Zhaohan Ren <zhaohan.ren@intel.com> 27 * Jason Hu <jason.hu@intel.com> 28 * 29 */ 30 31#ifndef _PSB_OUTPUT_H_ 32#define _PSB_OUTPUT_H_ 33#include <inttypes.h> 34#include "psb_drv_video.h" 35#include "psb_surface.h" 36#include "hwdefs/img_types.h" 37#include <va/va.h> 38#include <linux/fb.h> 39#include <fcntl.h> 40 41#define IMG_VIDEO_IED_STATE 0 42#ifndef ANDROID 43#include <va/va_x11.h> 44#else 45#define Drawable unsigned int 46#define Bool int 47#define LOG_TAG "pvr_drv_video" 48#endif 49 50#define PSB_MAX_IMAGE_FORMATS 4 /* sizeof(psb__CreateImageFormat)/sizeof(VAImageFormat) */ 51#define PSB_MAX_SUBPIC_FORMATS 3 /* sizeof(psb__SubpicFormat)/sizeof(VAImageFormat) */ 52#define PSB_MAX_DISPLAY_ATTRIBUTES 14 /* sizeof(psb__DisplayAttribute)/sizeof(VADisplayAttribute) */ 53 54#define VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD 0x0004 55#define PSB_SUPPORTED_SUBPIC_FLAGS VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD /* No alpha or chroma key support */ 56 57 58#define CLAMP(_X) ( (_X)= ((_X)<0?0:((_X)>255?255:(_X)) ) ) 59 60#define HUE_DEFAULT_VALUE 0 61#define HUE_MIN -180 62#define HUE_MAX 180 63#define HUE_STEPSIZE 0.1 64 65#define BRIGHTNESS_DEFAULT_VALUE 0 66#define BRIGHTNESS_MIN -100 67#define BRIGHTNESS_MAX 100 68#define BRIGHTNESS_STEPSIZE 0.1 69 70#define CONTRAST_DEFAULT_VALUE 1 71#define CONTRAST_MIN 0 72#define CONTRAST_MAX 2 73#define CONTRAST_STEPSIZE 0.0001 74 75#define SATURATION_DEFAULT_VALUE 1 76#define SATURATION_MIN 0 77#define SATURATION_MAX 3 78#define SATURATION_STEPSIZE 0.0001 79 80#define VA_RENDER_MODE_MASK 0x0f 81#define VA_RENDER_DEVICE_MASK 0x03 82 83#define PSB_DRIDDX_VERSION_MAJOR 0 84#define PSB_DRIDDX_VERSION_MINOR 1 85#define PSB_DRIDDX_VERSION_PATCH 0 86 87#define psb__ImageNV12 \ 88{ \ 89 VA_FOURCC_NV12, \ 90 VA_LSB_FIRST, \ 91 16, \ 92 0, \ 93 0, \ 94 0, \ 95 0, \ 96 0 \ 97} 98 99#define psb__ImageAYUV \ 100{ \ 101 VA_FOURCC_AYUV, \ 102 VA_LSB_FIRST, \ 103 32, \ 104 0, \ 105 0, \ 106 0, \ 107 0, \ 108 0 \ 109} 110 111#define psb__ImageAI44 \ 112{ \ 113 VA_FOURCC_AI44, \ 114 VA_LSB_FIRST, \ 115 16, \ 116 0, \ 117 0, \ 118 0, \ 119 0, \ 120 0, \ 121} 122 123#define psb__ImageRGBA \ 124{ \ 125 VA_FOURCC_RGBA, \ 126 VA_LSB_FIRST, \ 127 32, \ 128 32, \ 129 0xff, \ 130 0xff00, \ 131 0xff0000, \ 132 0xff000000 \ 133} 134 135#define psb__ImageYV16 \ 136{ \ 137 VA_FOURCC_YV16, \ 138 VA_LSB_FIRST, \ 139 16, \ 140 0, \ 141 0, \ 142 0, \ 143 0, \ 144 0, \ 145} 146 147#define psb__ImageYV32 \ 148{ \ 149 VA_FOURCC_YV32, \ 150 VA_LSB_FIRST, \ 151 32, \ 152 0, \ 153 0, \ 154 0, \ 155 0, \ 156 0, \ 157} 158 159VAStatus psb__destroy_subpicture(psb_driver_data_p driver_data, object_subpic_p obj_subpic); 160VAStatus psb__destroy_image(psb_driver_data_p driver_data, object_image_p obj_image); 161 162/* 163 * VAImage call these buffer routines 164 */ 165VAStatus psb__CreateBuffer( 166 psb_driver_data_p driver_data, 167 object_context_p obj_context, /* in */ 168 VABufferType type, /* in */ 169 unsigned int size, /* in */ 170 unsigned int num_elements, /* in */ 171 unsigned char *data, /* in */ 172 VABufferID *buf_desc /* out */ 173); 174 175VAStatus psb_DestroyBuffer( 176 VADriverContextP ctx, 177 VABufferID buffer_id 178); 179 180VAStatus psb_initOutput( 181 VADriverContextP ctx 182); 183 184 185VAStatus psb_deinitOutput( 186 VADriverContextP ctx 187); 188 189VAStatus psb_PutSurfaceBuf( 190 VADriverContextP ctx, 191 VASurfaceID surface, 192 unsigned char* data, 193 int* data_len, 194 short srcx, 195 short srcy, 196 unsigned short srcw, 197 unsigned short srch, 198 short destx, 199 short desty, 200 unsigned short destw, 201 unsigned short desth, 202 VARectangle *cliprects, /* client supplied clip list */ 203 unsigned int number_cliprects, /* number of clip rects in the clip list */ 204 unsigned int flags /* de-interlacing flags */ 205); 206 207VAStatus psb_SetTimestampForSurface( 208 VADriverContextP ctx, 209 VASurfaceID surface, 210 long long timestamp 211); 212 213VAStatus psb_PutSurface( 214 VADriverContextP ctx, 215 VASurfaceID surface, 216 void* draw, /* X Drawable */ 217 short srcx, 218 short srcy, 219 unsigned short srcw, 220 unsigned short srch, 221 short destx, 222 short desty, 223 unsigned short destw, 224 unsigned short desth, 225 VARectangle *cliprects, /* client supplied clip list */ 226 unsigned int number_cliprects, /* number of clip rects in the clip list */ 227 unsigned int flags /* de-interlacing flags */ 228); 229 230VAStatus psb_QueryImageFormats( 231 VADriverContextP ctx, 232 VAImageFormat *format_list, /* out */ 233 int *num_formats /* out */ 234); 235 236VAStatus psb_CreateImage( 237 VADriverContextP ctx, 238 VAImageFormat *format, 239 int width, 240 int height, 241 VAImage *image /* out */ 242); 243 244VAStatus psb_DeriveImage( 245 VADriverContextP ctx, 246 VASurfaceID surface, 247 VAImage *image /* out */ 248); 249 250VAStatus psb_DestroyImage( 251 VADriverContextP ctx, 252 VAImageID image 253); 254 255VAStatus psb_SetImagePalette( 256 VADriverContextP ctx, 257 VAImageID image, 258 /* 259 * pointer to an array holding the palette data. The size of the array is 260 * num_palette_entries * entry_bytes in size. The order of the components 261 * in the palette is described by the component_order in VAImage struct 262 */ 263 unsigned char *palette 264); 265 266VAStatus psb_GetImage( 267 VADriverContextP ctx, 268 VASurfaceID surface, 269 int x, /* coordinates of the upper left source pixel */ 270 int y, 271 unsigned int width, /* width and height of the region */ 272 unsigned int height, 273 VAImageID image 274); 275 276VAStatus psb_PutImage( 277 VADriverContextP ctx, 278 VASurfaceID surface, 279 VAImageID image, 280 int src_x, 281 int src_y, 282 unsigned int src_width, 283 unsigned int src_height, 284 int dest_x, 285 int dest_y, 286 unsigned int dest_width, 287 unsigned int dest_height 288); 289 290VAStatus psb_QuerySubpictureFormats( 291 VADriverContextP ctx, 292 VAImageFormat *format_list, /* out */ 293 unsigned int *flags, /* out */ 294 unsigned int *num_formats /* out */ 295); 296 297VAStatus psb_CreateSubpicture( 298 VADriverContextP ctx, 299 VAImageID image, 300 VASubpictureID *subpicture /* out */ 301); 302 303VAStatus psb_DestroySubpicture( 304 VADriverContextP ctx, 305 VASubpictureID subpicture 306); 307 308VAStatus psb_SetSubpictureImage( 309 VADriverContextP ctx, 310 VASubpictureID subpicture, 311 VAImageID image 312); 313 314 315VAStatus psb_SetSubpictureChromakey( 316 VADriverContextP ctx, 317 VASubpictureID subpicture, 318 unsigned int chromakey_min, 319 unsigned int chromakey_max, 320 unsigned int chromakey_mask 321); 322 323VAStatus psb_SetSubpictureGlobalAlpha( 324 VADriverContextP ctx, 325 VASubpictureID subpicture, 326 float global_alpha 327); 328 329VAStatus psb_AssociateSubpicture( 330 VADriverContextP ctx, 331 VASubpictureID subpicture, 332 VASurfaceID *target_surfaces, 333 int num_surfaces, 334 short src_x, /* upper left offset in subpicture */ 335 short src_y, 336 unsigned short src_width, 337 unsigned short src_height, 338 short dest_x, /* upper left offset in surface */ 339 short dest_y, 340 unsigned short dest_width, 341 unsigned short dest_height, 342 /* 343 * whether to enable chroma-keying or global-alpha 344 * see VA_SUBPICTURE_XXX values 345 */ 346 unsigned int flags 347); 348 349VAStatus psb_DeassociateSubpicture( 350 VADriverContextP ctx, 351 VASubpictureID subpicture, 352 VASurfaceID *target_surfaces, 353 int num_surfaces 354); 355 356void psb_SurfaceDeassociateSubpict( 357 psb_driver_data_p driver_data, 358 object_surface_p obj_surface 359); 360 361/* 362 * Query display attributes 363 * The caller must provide a "attr_list" array that can hold at 364 * least vaMaxNumDisplayAttributes() entries. The actual number of attributes 365 * returned in "attr_list" is returned in "num_attributes". 366 */ 367VAStatus psb_QueryDisplayAttributes( 368 VADriverContextP ctx, 369 VADisplayAttribute *attr_list, /* out */ 370 int *num_attributes /* out */ 371); 372 373/* 374 * Get display attributes 375 * This function returns the current attribute values in "attr_list". 376 * Only attributes returned with VA_DISPLAY_ATTRIB_GETTABLE set in the "flags" field 377 * from vaQueryDisplayAttributes() can have their values retrieved. 378 */ 379VAStatus psb_GetDisplayAttributes( 380 VADriverContextP ctx, 381 VADisplayAttribute *attr_list, /* in/out */ 382 int num_attributes 383); 384 385/* 386 * Set display attributes 387 * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" field 388 * from vaQueryDisplayAttributes() can be set. If the attribute is not settable or 389 * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPPORTED 390 */ 391VAStatus psb_SetDisplayAttributes( 392 VADriverContextP ctx, 393 VADisplayAttribute *attr_list, 394 int num_attributes 395); 396 397#endif /* _PSB_OUTPUT_H_ */ 398