OLD | NEW |
(Empty) | |
| 1 /* |
| 2 * Copyright (c) 2007-2009 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 INTEL 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 /* |
| 25 * Video Acceleration (VA) API Specification |
| 26 * |
| 27 * Rev. 0.30 |
| 28 * <jonathan.bian@intel.com> |
| 29 * |
| 30 * Revision History: |
| 31 * rev 0.10 (12/10/2006 Jonathan Bian) - Initial draft |
| 32 * rev 0.11 (12/15/2006 Jonathan Bian) - Fixed some errors |
| 33 * rev 0.12 (02/05/2007 Jonathan Bian) - Added VC-1 data structures for slice le
vel decode |
| 34 * rev 0.13 (02/28/2007 Jonathan Bian) - Added GetDisplay() |
| 35 * rev 0.14 (04/13/2007 Jonathan Bian) - Fixed MPEG-2 PictureParameter structure
, cleaned up a few funcs. |
| 36 * rev 0.15 (04/20/2007 Jonathan Bian) - Overhauled buffer management |
| 37 * rev 0.16 (05/02/2007 Jonathan Bian) - Added error codes and fixed some issues
with configuration |
| 38 * rev 0.17 (05/07/2007 Jonathan Bian) - Added H.264/AVC data structures for sli
ce level decode. |
| 39 * rev 0.18 (05/14/2007 Jonathan Bian) - Added data structures for MPEG-4 slice
level decode |
| 40 * and MPEG-2 motion compensation. |
| 41 * rev 0.19 (08/06/2007 Jonathan Bian) - Removed extra type for bitplane data. |
| 42 * rev 0.20 (08/08/2007 Jonathan Bian) - Added missing fields to VC-1 PicturePar
ameter structure. |
| 43 * rev 0.21 (08/20/2007 Jonathan Bian) - Added image and subpicture support. |
| 44 * rev 0.22 (08/27/2007 Jonathan Bian) - Added support for chroma-keying and glo
bal alpha. |
| 45 * rev 0.23 (09/11/2007 Jonathan Bian) - Fixed some issues with images and subpi
ctures. |
| 46 * rev 0.24 (09/18/2007 Jonathan Bian) - Added display attributes. |
| 47 * rev 0.25 (10/18/2007 Jonathan Bian) - Changed to use IDs only for some types. |
| 48 * rev 0.26 (11/07/2007 Waldo Bastian) - Change vaCreateBuffer semantics |
| 49 * rev 0.27 (11/19/2007 Matt Sottek) - Added DeriveImage |
| 50 * rev 0.28 (12/06/2007 Jonathan Bian) - Added new versions of PutImage and Asso
ciateSubpicture |
| 51 * to enable scaling |
| 52 * rev 0.29 (02/07/2008 Jonathan Bian) - VC1 parameter fixes, |
| 53 * added VA_STATUS_ERROR_RESOLUTION_NOT_SU
PPORTED |
| 54 * rev 0.30 (03/01/2009 Jonathan Bian) - Added encoding support for H.264 BP and
MPEG-4 SP and fixes |
| 55 * for ISO C conformance. |
| 56 * rev 0.31 (09/02/2009 Gwenole Beauchesne) - VC-1/H264 fields change for VDPAU
and XvBA backend |
| 57 * Application needs to relink with the ne
w library. |
| 58 * |
| 59 * rev 0.31.1 (03/29/2009) - Data structure for JPEG encode |
| 60 * rev 0.31.2 (01/13/2011 Anthony Pabon)- Added a flag to indicate Subpicture co
ordinates are screen |
| 61 * screen relative rather than source vid
eo relative. |
| 62 * rev 0.32.0 (01/13/2011 Xiang Haihao) - Add profile into VAPictureParameterBuf
ferVC1 |
| 63 * update VAAPI to 0.32.0 |
| 64 * |
| 65 * Acknowledgements: |
| 66 * Some concepts borrowed from XvMC and XvImage. |
| 67 * Waldo Bastian (Intel), Matt Sottek (Intel), Austin Yuan (Intel), and Gwenol
e Beauchesne (SDS) |
| 68 * contributed to various aspects of the API. |
| 69 */ |
| 70 |
| 71 #ifndef _VA_H_ |
| 72 #define _VA_H_ |
| 73 |
| 74 #include <va/va_version.h> |
| 75 |
| 76 #ifdef __cplusplus |
| 77 extern "C" { |
| 78 #endif |
| 79 |
| 80 /* |
| 81 Overview |
| 82 |
| 83 The VA API is intended to provide an interface between a video decode/encode/dis
play |
| 84 application (client) and a hardware accelerator (server), to off-load |
| 85 video decode/encode/display operations from the host to the hardware accelerator
at various |
| 86 entry-points. |
| 87 |
| 88 The basic operation steps are: |
| 89 |
| 90 - Negotiate a mutually acceptable configuration with the server to lock |
| 91 down profile, entrypoints, and other attributes that will not change on |
| 92 a frame-by-frame basis. |
| 93 - Create a decode context which represents a "virtualized" hardware decode |
| 94 device |
| 95 - Get and fill decode buffers with picture level, slice level and macroblock |
| 96 level data (depending on entrypoints) |
| 97 - Pass the decode buffers to the server to decode the current frame |
| 98 |
| 99 Initialization & Configuration Management |
| 100 |
| 101 - Find out supported profiles |
| 102 - Find out entrypoints for a given profile |
| 103 - Find out configuration attributes for a given profile/entrypoint pair |
| 104 - Create a configuration for use by the decoder |
| 105 |
| 106 */ |
| 107 |
| 108 typedef void* VADisplay; /* window system dependent */ |
| 109 |
| 110 typedef int VAStatus; /* Return status type from functions */ |
| 111 /* Values for the return status */ |
| 112 #define VA_STATUS_SUCCESS 0x00000000 |
| 113 #define VA_STATUS_ERROR_OPERATION_FAILED 0x00000001 |
| 114 #define VA_STATUS_ERROR_ALLOCATION_FAILED 0x00000002 |
| 115 #define VA_STATUS_ERROR_INVALID_DISPLAY 0x00000003 |
| 116 #define VA_STATUS_ERROR_INVALID_CONFIG 0x00000004 |
| 117 #define VA_STATUS_ERROR_INVALID_CONTEXT 0x00000005 |
| 118 #define VA_STATUS_ERROR_INVALID_SURFACE 0x00000006 |
| 119 #define VA_STATUS_ERROR_INVALID_BUFFER 0x00000007 |
| 120 #define VA_STATUS_ERROR_INVALID_IMAGE 0x00000008 |
| 121 #define VA_STATUS_ERROR_INVALID_SUBPICTURE 0x00000009 |
| 122 #define VA_STATUS_ERROR_ATTR_NOT_SUPPORTED 0x0000000a |
| 123 #define VA_STATUS_ERROR_MAX_NUM_EXCEEDED 0x0000000b |
| 124 #define VA_STATUS_ERROR_UNSUPPORTED_PROFILE 0x0000000c |
| 125 #define VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT 0x0000000d |
| 126 #define VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT 0x0000000e |
| 127 #define VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE 0x0000000f |
| 128 #define VA_STATUS_ERROR_SURFACE_BUSY 0x00000010 |
| 129 #define VA_STATUS_ERROR_FLAG_NOT_SUPPORTED 0x00000011 |
| 130 #define VA_STATUS_ERROR_INVALID_PARAMETER 0x00000012 |
| 131 #define VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED 0x00000013 |
| 132 #define VA_STATUS_ERROR_UNIMPLEMENTED 0x00000014 |
| 133 #define VA_STATUS_ERROR_SURFACE_IN_DISPLAYING 0x00000015 |
| 134 #define VA_STATUS_ERROR_INVALID_IMAGE_FORMAT 0x00000016 |
| 135 #define VA_STATUS_ERROR_DECODING_ERROR 0x00000017 |
| 136 #define VA_STATUS_ERROR_ENCODING_ERROR 0x00000018 |
| 137 #define VA_STATUS_ERROR_UNKNOWN 0xFFFFFFFF |
| 138 |
| 139 /* De-interlacing flags for vaPutSurface() */ |
| 140 #define VA_FRAME_PICTURE 0x00000000 |
| 141 #define VA_TOP_FIELD 0x00000001 |
| 142 #define VA_BOTTOM_FIELD 0x00000002 |
| 143 |
| 144 /* |
| 145 * Enabled the positioning/cropping/blending feature: |
| 146 * 1, specify the video playback position in the isurface |
| 147 * 2, specify the cropping info for video playback |
| 148 * 3, encoded video will blend with background color |
| 149 */ |
| 150 #define VA_ENABLE_BLEND 0x00000004 /* video area blend with the constant
color */ |
| 151 |
| 152 /* |
| 153 * Clears the drawable with background color. |
| 154 * for hardware overlay based implementation this flag |
| 155 * can be used to turn off the overlay |
| 156 */ |
| 157 #define VA_CLEAR_DRAWABLE 0x00000008 |
| 158 |
| 159 /* Color space conversion flags for vaPutSurface() */ |
| 160 #define VA_SRC_BT601 0x00000010 |
| 161 #define VA_SRC_BT709 0x00000020 |
| 162 #define VA_SRC_SMPTE_240 0x00000040 |
| 163 |
| 164 /* Scaling flags for vaPutSurface() */ |
| 165 #define VA_FILTER_SCALING_DEFAULT 0x00000000 |
| 166 #define VA_FILTER_SCALING_FAST 0x00000100 |
| 167 #define VA_FILTER_SCALING_HQ 0x00000200 |
| 168 #define VA_FILTER_SCALING_NL_ANAMORPHIC 0x00000300 |
| 169 #define VA_FILTER_SCALING_MASK 0x00000f00 |
| 170 |
| 171 /* |
| 172 * Returns a short english description of error_status |
| 173 */ |
| 174 const char *vaErrorStr(VAStatus error_status); |
| 175 |
| 176 /* |
| 177 * Initialization: |
| 178 * A display must be obtained by calling vaGetDisplay() before calling |
| 179 * vaInitialize() and other functions. This connects the API to the |
| 180 * native window system. |
| 181 * For X Windows, native_dpy would be from XOpenDisplay() |
| 182 */ |
| 183 typedef void* VANativeDisplay; /* window system dependent */ |
| 184 |
| 185 int vaDisplayIsValid(VADisplay dpy); |
| 186 |
| 187 /* |
| 188 * Initialize the library |
| 189 */ |
| 190 VAStatus vaInitialize ( |
| 191 VADisplay dpy, |
| 192 int *major_version, /* out */ |
| 193 int *minor_version /* out */ |
| 194 ); |
| 195 |
| 196 /* |
| 197 * After this call, all library internal resources will be cleaned up |
| 198 */ |
| 199 VAStatus vaTerminate ( |
| 200 VADisplay dpy |
| 201 ); |
| 202 |
| 203 /* |
| 204 * vaQueryVendorString returns a pointer to a zero-terminated string |
| 205 * describing some aspects of the VA implemenation on a specific |
| 206 * hardware accelerator. The format of the returned string is vendor |
| 207 * specific and at the discretion of the implementer. |
| 208 * e.g. for the Intel GMA500 implementation, an example would be: |
| 209 * "Intel GMA500 - 2.0.0.32L.0005" |
| 210 */ |
| 211 const char *vaQueryVendorString ( |
| 212 VADisplay dpy |
| 213 ); |
| 214 |
| 215 typedef int (*VAPrivFunc)(); |
| 216 |
| 217 /* |
| 218 * Return a function pointer given a function name in the library. |
| 219 * This allows private interfaces into the library |
| 220 */ |
| 221 VAPrivFunc vaGetLibFunc ( |
| 222 VADisplay dpy, |
| 223 const char *func |
| 224 ); |
| 225 |
| 226 /* Currently defined profiles */ |
| 227 typedef enum |
| 228 { |
| 229 VAProfileMPEG2Simple = 0, |
| 230 VAProfileMPEG2Main = 1, |
| 231 VAProfileMPEG4Simple = 2, |
| 232 VAProfileMPEG4AdvancedSimple = 3, |
| 233 VAProfileMPEG4Main = 4, |
| 234 VAProfileH264Baseline = 5, |
| 235 VAProfileH264Main = 6, |
| 236 VAProfileH264High = 7, |
| 237 VAProfileVC1Simple = 8, |
| 238 VAProfileVC1Main = 9, |
| 239 VAProfileVC1Advanced = 10, |
| 240 VAProfileH263Baseline = 11, |
| 241 VAProfileJPEGBaseline = 12, |
| 242 VAProfileH264ConstrainedBaseline = 13 |
| 243 } VAProfile; |
| 244 |
| 245 /* |
| 246 * Currently defined entrypoints |
| 247 */ |
| 248 typedef enum |
| 249 { |
| 250 VAEntrypointVLD = 1, |
| 251 VAEntrypointIZZ = 2, |
| 252 VAEntrypointIDCT = 3, |
| 253 VAEntrypointMoComp = 4, |
| 254 VAEntrypointDeblocking = 5, |
| 255 VAEntrypointEncSlice = 6, /* slice level encode */ |
| 256 VAEntrypointEncPicture = 7 /* pictuer encode, JPEG, etc */ |
| 257 } VAEntrypoint; |
| 258 |
| 259 /* Currently defined configuration attribute types */ |
| 260 typedef enum |
| 261 { |
| 262 VAConfigAttribRTFormat = 0, |
| 263 VAConfigAttribSpatialResidual = 1, |
| 264 VAConfigAttribSpatialClipping = 2, |
| 265 VAConfigAttribIntraResidual = 3, |
| 266 VAConfigAttribEncryption = 4, |
| 267 VAConfigAttribRateControl = 5 |
| 268 } VAConfigAttribType; |
| 269 |
| 270 /* |
| 271 * Configuration attributes |
| 272 * If there is more than one value for an attribute, a default |
| 273 * value will be assigned to the attribute if the client does not |
| 274 * specify the attribute when creating a configuration |
| 275 */ |
| 276 typedef struct _VAConfigAttrib { |
| 277 VAConfigAttribType type; |
| 278 unsigned int value; /* OR'd flags (bits) for this attribute */ |
| 279 } VAConfigAttrib; |
| 280 |
| 281 /* attribute value for VAConfigAttribRTFormat */ |
| 282 #define VA_RT_FORMAT_YUV420 0x00000001 |
| 283 #define VA_RT_FORMAT_YUV422 0x00000002 |
| 284 #define VA_RT_FORMAT_YUV444 0x00000004 |
| 285 #define VA_RT_FORMAT_PROTECTED 0x80000000 |
| 286 |
| 287 /* attribute value for VAConfigAttribRateControl */ |
| 288 #define VA_RC_NONE 0x00000001 |
| 289 #define VA_RC_CBR 0x00000002 |
| 290 #define VA_RC_VBR 0x00000004 |
| 291 #define VA_RC_VCM 0x00000008 /* video conference mode */ |
| 292 |
| 293 /* |
| 294 * if an attribute is not applicable for a given |
| 295 * profile/entrypoint pair, then set the value to the following |
| 296 */ |
| 297 #define VA_ATTRIB_NOT_SUPPORTED 0x80000000 |
| 298 |
| 299 /* Get maximum number of profiles supported by the implementation */ |
| 300 int vaMaxNumProfiles ( |
| 301 VADisplay dpy |
| 302 ); |
| 303 |
| 304 /* Get maximum number of entrypoints supported by the implementation */ |
| 305 int vaMaxNumEntrypoints ( |
| 306 VADisplay dpy |
| 307 ); |
| 308 |
| 309 /* Get maximum number of attributs supported by the implementation */ |
| 310 int vaMaxNumConfigAttributes ( |
| 311 VADisplay dpy |
| 312 ); |
| 313 |
| 314 /* |
| 315 * Query supported profiles |
| 316 * The caller must provide a "profile_list" array that can hold at |
| 317 * least vaMaxNumProfile() entries. The actual number of profiles |
| 318 * returned in "profile_list" is returned in "num_profile". |
| 319 */ |
| 320 VAStatus vaQueryConfigProfiles ( |
| 321 VADisplay dpy, |
| 322 VAProfile *profile_list, /* out */ |
| 323 int *num_profiles /* out */ |
| 324 ); |
| 325 |
| 326 /* |
| 327 * Query supported entrypoints for a given profile |
| 328 * The caller must provide an "entrypoint_list" array that can hold at |
| 329 * least vaMaxNumEntrypoints() entries. The actual number of entrypoints |
| 330 * returned in "entrypoint_list" is returned in "num_entrypoints". |
| 331 */ |
| 332 VAStatus vaQueryConfigEntrypoints ( |
| 333 VADisplay dpy, |
| 334 VAProfile profile, |
| 335 VAEntrypoint *entrypoint_list, /* out */ |
| 336 int *num_entrypoints /* out */ |
| 337 ); |
| 338 |
| 339 /* |
| 340 * Get attributes for a given profile/entrypoint pair |
| 341 * The caller must provide an "attrib_list" with all attributes to be |
| 342 * retrieved. Upon return, the attributes in "attrib_list" have been |
| 343 * updated with their value. Unknown attributes or attributes that are |
| 344 * not supported for the given profile/entrypoint pair will have their |
| 345 * value set to VA_ATTRIB_NOT_SUPPORTED |
| 346 */ |
| 347 VAStatus vaGetConfigAttributes ( |
| 348 VADisplay dpy, |
| 349 VAProfile profile, |
| 350 VAEntrypoint entrypoint, |
| 351 VAConfigAttrib *attrib_list, /* in/out */ |
| 352 int num_attribs |
| 353 ); |
| 354 |
| 355 /* Generic ID type, can be re-typed for specific implementation */ |
| 356 typedef unsigned int VAGenericID; |
| 357 |
| 358 typedef VAGenericID VAConfigID; |
| 359 |
| 360 /* |
| 361 * Create a configuration for the decode pipeline |
| 362 * it passes in the attribute list that specifies the attributes it cares |
| 363 * about, with the rest taking default values. |
| 364 */ |
| 365 VAStatus vaCreateConfig ( |
| 366 VADisplay dpy, |
| 367 VAProfile profile, |
| 368 VAEntrypoint entrypoint, |
| 369 VAConfigAttrib *attrib_list, |
| 370 int num_attribs, |
| 371 VAConfigID *config_id /* out */ |
| 372 ); |
| 373 |
| 374 /* |
| 375 * Free resources associdated with a given config |
| 376 */ |
| 377 VAStatus vaDestroyConfig ( |
| 378 VADisplay dpy, |
| 379 VAConfigID config_id |
| 380 ); |
| 381 |
| 382 /* |
| 383 * Query all attributes for a given configuration |
| 384 * The profile of the configuration is returned in "profile" |
| 385 * The entrypoint of the configuration is returned in "entrypoint" |
| 386 * The caller must provide an "attrib_list" array that can hold at least |
| 387 * vaMaxNumConfigAttributes() entries. The actual number of attributes |
| 388 * returned in "attrib_list" is returned in "num_attribs" |
| 389 */ |
| 390 VAStatus vaQueryConfigAttributes ( |
| 391 VADisplay dpy, |
| 392 VAConfigID config_id, |
| 393 VAProfile *profile, /* out */ |
| 394 VAEntrypoint *entrypoint, /* out */ |
| 395 VAConfigAttrib *attrib_list,/* out */ |
| 396 int *num_attribs /* out */ |
| 397 ); |
| 398 |
| 399 |
| 400 /* |
| 401 * Contexts and Surfaces |
| 402 * |
| 403 * Context represents a "virtual" video decode pipeline. Surfaces are render |
| 404 * targets for a given context. The data in the surfaces are not accessible |
| 405 * to the client and the internal data format of the surface is implementatin |
| 406 * specific. |
| 407 * |
| 408 * Surfaces will be bound to a context when the context is created. Once |
| 409 * a surface is bound to a given context, it can not be used to create |
| 410 * another context. The association is removed when the context is destroyed |
| 411 * |
| 412 * Both contexts and surfaces are identified by unique IDs and its |
| 413 * implementation specific internals are kept opaque to the clients |
| 414 */ |
| 415 |
| 416 typedef VAGenericID VAContextID; |
| 417 |
| 418 typedef VAGenericID VASurfaceID; |
| 419 |
| 420 #define VA_INVALID_ID 0xffffffff |
| 421 #define VA_INVALID_SURFACE VA_INVALID_ID |
| 422 |
| 423 /* |
| 424 * vaCreateSurfaces - Create an array of surfaces used for decode and display |
| 425 * dpy: display |
| 426 * width: surface width |
| 427 * height: surface height |
| 428 * format: VA_RT_FORMAT_YUV420, VA_RT_FORMAT_YUV422 or VA_RT_FORMAT_YUV444 |
| 429 * num_surfaces: number of surfaces to be created |
| 430 * surfaces: array of surfaces created upon return |
| 431 */ |
| 432 VAStatus vaCreateSurfaces ( |
| 433 VADisplay dpy, |
| 434 int width, |
| 435 int height, |
| 436 int format, |
| 437 int num_surfaces, |
| 438 VASurfaceID *surfaces /* out */ |
| 439 ); |
| 440 |
| 441 |
| 442 /* |
| 443 * vaDestroySurfaces - Destroy resources associated with surfaces. |
| 444 * Surfaces can only be destroyed after the context associated has been |
| 445 * destroyed. |
| 446 * dpy: display |
| 447 * surfaces: array of surfaces to destroy |
| 448 * num_surfaces: number of surfaces in the array to be destroyed. |
| 449 */ |
| 450 VAStatus vaDestroySurfaces ( |
| 451 VADisplay dpy, |
| 452 VASurfaceID *surfaces, |
| 453 int num_surfaces |
| 454 ); |
| 455 |
| 456 #define VA_PROGRESSIVE 0x1 |
| 457 /* |
| 458 * vaCreateContext - Create a context |
| 459 * dpy: display |
| 460 * config_id: configuration for the context |
| 461 * picture_width: coded picture width |
| 462 * picture_height: coded picture height |
| 463 * flag: any combination of the following: |
| 464 * VA_PROGRESSIVE (only progressive frame pictures in the sequence when set) |
| 465 * render_targets: render targets (surfaces) tied to the context |
| 466 * num_render_targets: number of render targets in the above array |
| 467 * context: created context id upon return |
| 468 */ |
| 469 VAStatus vaCreateContext ( |
| 470 VADisplay dpy, |
| 471 VAConfigID config_id, |
| 472 int picture_width, |
| 473 int picture_height, |
| 474 int flag, |
| 475 VASurfaceID *render_targets, |
| 476 int num_render_targets, |
| 477 VAContextID *context /* out */ |
| 478 ); |
| 479 |
| 480 /* |
| 481 * vaDestroyContext - Destroy a context |
| 482 * dpy: display |
| 483 * context: context to be destroyed |
| 484 */ |
| 485 VAStatus vaDestroyContext ( |
| 486 VADisplay dpy, |
| 487 VAContextID context |
| 488 ); |
| 489 |
| 490 /* |
| 491 * Buffers |
| 492 * Buffers are used to pass various types of data from the |
| 493 * client to the server. The server maintains a data store |
| 494 * for each buffer created, and the client idenfies a buffer |
| 495 * through a unique buffer id assigned by the server. |
| 496 */ |
| 497 |
| 498 typedef VAGenericID VABufferID; |
| 499 |
| 500 typedef enum |
| 501 { |
| 502 VAPictureParameterBufferType = 0, |
| 503 VAIQMatrixBufferType = 1, |
| 504 VABitPlaneBufferType = 2, |
| 505 VASliceGroupMapBufferType = 3, |
| 506 VASliceParameterBufferType = 4, |
| 507 VASliceDataBufferType = 5, |
| 508 VAMacroblockParameterBufferType = 6, |
| 509 VAResidualDataBufferType = 7, |
| 510 VADeblockingParameterBufferType = 8, |
| 511 VAImageBufferType = 9, |
| 512 VAProtectedSliceDataBufferType = 10, |
| 513 VAQMatrixBufferType = 11, |
| 514 VAHuffmanTableBufferType = 12, |
| 515 |
| 516 /* Following are encode buffer types */ |
| 517 VAEncCodedBufferType = 21, |
| 518 VAEncSequenceParameterBufferType = 22, |
| 519 VAEncPictureParameterBufferType = 23, |
| 520 VAEncSliceParameterBufferType = 24, |
| 521 VAEncH264VUIBufferType = 25, |
| 522 VAEncH264SEIBufferType = 26, |
| 523 VAEncMiscParameterBufferType = 27, |
| 524 VABufferTypeMax = 0xff |
| 525 } VABufferType; |
| 526 |
| 527 typedef enum |
| 528 { |
| 529 VAEncMiscParameterTypeFrameRate = 0, |
| 530 VAEncMiscParameterTypeRateControl = 1, |
| 531 VAEncMiscParameterTypeMaxSliceSize = 2, |
| 532 VAEncMiscParameterTypeAIR = 3, |
| 533 } VAEncMiscParameterType; |
| 534 |
| 535 /* |
| 536 * For application, e.g. set a new bitrate |
| 537 * VABufferID buf_id; |
| 538 * VAEncMiscParameterBuffer *misc_param; |
| 539 * VAEncMiscParameterRateControl *misc_rate_ctrl; |
| 540 * |
| 541 * vaCreateBuffer(dpy, context, VAEncMiscParameterBufferType, |
| 542 * sizeof(VAEncMiscParameterBuffer) + sizeof(VAEncMiscParameterRate
Control), |
| 543 * 1, NULL, &buf_id); |
| 544 * |
| 545 * vaMapBuffer(dpy,buf_id,(void **)&misc_param); |
| 546 * misc_param->type = VAEncMiscParameterTypeRateControl; |
| 547 * misc_rate_ctrl= (VAEncMiscParameterRateControl *)misc_param->data; |
| 548 * misc_rate_ctrl->bits_per_second = 6400000; |
| 549 * vaUnmapBuffer(dpy, buf_id); |
| 550 * vaRenderPicture(dpy, context, &buf_id, 1); |
| 551 */ |
| 552 typedef struct _VAEncMiscParameterBuffer |
| 553 { |
| 554 VAEncMiscParameterType type; |
| 555 unsigned int data[0]; |
| 556 } VAEncMiscParameterBuffer; |
| 557 |
| 558 typedef struct _VAEncMiscParameterRateControl |
| 559 { |
| 560 unsigned int bits_per_second; /* this is the maximum bit-rate to be constrai
ned by the rate control implementation */ |
| 561 unsigned int target_percentage; /* this is the bit-rate the rate control is
targeting, as a percentage of the maximum bit-rate */ |
| 562 /* for example if target_percentage is 95 th
en the rate control will target a bit-rate that is */ |
| 563 /* 95% of the maximum bit-rate */ |
| 564 unsigned int window_size; /* windows size in milliseconds. For example if th
is is set to 500, then the rate control will guarantee the */ |
| 565 /* target bit-rate over a 500 ms window */ |
| 566 unsigned int initial_qp; /* initial QP at I frames */ |
| 567 unsigned int min_qp; |
| 568 } VAEncMiscParameterRateControl; |
| 569 |
| 570 typedef struct _VAEncMiscParameterFrameRate |
| 571 { |
| 572 unsigned int framerate; |
| 573 } VAEncMiscParameterFrameRate; |
| 574 |
| 575 /* |
| 576 * Allow a maximum slice size to be specified (in bits). |
| 577 * The encoder will attempt to make sure that individual slices do not exceed th
is size |
| 578 * Or to signal applicate if the slice size exceed this size, see "status" of VA
CodedBufferSegment |
| 579 */ |
| 580 typedef struct _VAEncMiscParameterMaxSliceSize |
| 581 { |
| 582 unsigned int max_slice_size; |
| 583 } VAEncMiscParameterMaxSliceSize; |
| 584 |
| 585 typedef struct _VAEncMiscParameterAIR |
| 586 { |
| 587 unsigned int air_num_mbs; |
| 588 unsigned int air_threshold; |
| 589 unsigned int air_auto; /* if set to 1 then hardware auto-tune the AIR thresh
old */ |
| 590 } VAEncMiscParameterAIR; |
| 591 |
| 592 |
| 593 /* |
| 594 * There will be cases where the bitstream buffer will not have enough room to h
old |
| 595 * the data for the entire slice, and the following flags will be used in the sl
ice |
| 596 * parameter to signal to the server for the possible cases. |
| 597 * If a slice parameter buffer and slice data buffer pair is sent to the server
with |
| 598 * the slice data partially in the slice data buffer (BEGIN and MIDDLE cases bel
ow), |
| 599 * then a slice parameter and data buffer needs to be sent again to complete thi
s slice. |
| 600 */ |
| 601 #define VA_SLICE_DATA_FLAG_ALL 0x00 /* whole slice is in the buffer
*/ |
| 602 #define VA_SLICE_DATA_FLAG_BEGIN 0x01 /* The beginning of the slice is
in the buffer but the end if not */ |
| 603 #define VA_SLICE_DATA_FLAG_MIDDLE 0x02 /* Neither beginning nor end of
the slice is in the buffer */ |
| 604 #define VA_SLICE_DATA_FLAG_END 0x04 /* end of the slice is in the bu
ffer */ |
| 605 |
| 606 /* Codec-independent Slice Parameter Buffer base */ |
| 607 typedef struct _VASliceParameterBufferBase |
| 608 { |
| 609 unsigned int slice_data_size; /* number of bytes in the slice data buf
fer for this slice */ |
| 610 unsigned int slice_data_offset; /* the offset to the first byte of slice
data */ |
| 611 unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX definition
s */ |
| 612 } VASliceParameterBufferBase; |
| 613 |
| 614 |
| 615 /**************************** |
| 616 * JEPG data structure |
| 617 ***************************/ |
| 618 typedef struct _VAQMatrixBufferJPEG |
| 619 { |
| 620 int load_lum_quantiser_matrix; |
| 621 int load_chroma_quantiser_matrix; |
| 622 unsigned char lum_quantiser_matrix[64]; |
| 623 unsigned char chroma_quantiser_matrix[64]; |
| 624 } VAQMatrixBufferJPEG; |
| 625 |
| 626 typedef struct _VAEncPictureParameterBufferJPEG |
| 627 { |
| 628 VASurfaceID reconstructed_picture; |
| 629 unsigned short picture_width; |
| 630 unsigned short picture_height; |
| 631 VABufferID coded_buf; |
| 632 } VAEncPictureParameterBufferJPEG; |
| 633 |
| 634 /* data struct for JPEG decoding */ |
| 635 |
| 636 /* Quantization table */ |
| 637 typedef struct _VAIQMatrixBufferJPEG |
| 638 { |
| 639 int precision[4]; /* valid value: 0(8-bits) , 1(16
-bits), precision[Tq](Tq=0,1,2,3) |
| 640 * specifies precision for desti
nation Tq |
| 641 */ |
| 642 unsigned char quantiser_matrix[4][128]; /* quantiser_matrix[Tq](Tq=0,1,2
,3) specifies a |
| 643 * quantization table for destin
ation Tq in zig-zag |
| 644 * scan order. Only the first 64
bytes are valid for each |
| 645 * table if precision is 0(8-bit
s). |
| 646 */ |
| 647 } VAIQMatrixBufferJPEG; |
| 648 |
| 649 #define VA_JPEG_SOF0 0xC0 |
| 650 #define VA_JPEG_SOF1 0xC1 |
| 651 #define VA_JPEG_SOF2 0xC2 |
| 652 #define VA_JPEG_SOF3 0xC3 |
| 653 #define VA_JPEG_SOF5 0xC5 |
| 654 #define VA_JPEG_SOF6 0xC6 |
| 655 #define VA_JPEG_SOF7 0xC7 |
| 656 #define VA_JPEG_SOF9 0xC9 |
| 657 #define VA_JPEG_SOF10 0xCA |
| 658 #define VA_JPEG_SOF11 0xCB |
| 659 #define VA_JPEG_SOF13 0xCD |
| 660 #define VA_JPEG_SOF14 0xCE |
| 661 |
| 662 /* JPEG Picture Parameter Buffer */ |
| 663 typedef struct _VAPictureParameterBufferJPEG |
| 664 { |
| 665 unsigned int type; /* SOFn */ |
| 666 unsigned int sample_precision; |
| 667 unsigned int image_width; |
| 668 unsigned int image_height; |
| 669 unsigned int num_components; |
| 670 struct { |
| 671 unsigned char component_id; /* Ci, the range is 0-255, see B
.2.2 */ |
| 672 unsigned char h_sampling_factor; |
| 673 unsigned char v_sampling_factor; |
| 674 unsigned char quantiser_table_selector; /* Tqi, quantization table desti
nation selector */ |
| 675 } components[4]; |
| 676 |
| 677 /* ROI (region of interest), for JPEG2000 */ |
| 678 struct { |
| 679 int enabled; |
| 680 int start_x; |
| 681 int start_y; |
| 682 int end_x; |
| 683 int end_y; |
| 684 } roi; |
| 685 |
| 686 int rotation; |
| 687 } VAPictureParameterBufferJPEG; |
| 688 |
| 689 typedef struct _VAHuffmanTableBufferJPEG |
| 690 { |
| 691 struct { |
| 692 unsigned char dc_bits[16]; /* Number of Huffman codes of length i f
or DC */ |
| 693 unsigned char dc_huffval[20]; /* Value associated with each Huffman co
de for DC */ |
| 694 unsigned char ac_bits[16]; /* Number of Huffman codes of length i f
or AC */ |
| 695 unsigned char ac_huffval[256]; /* Value associated with each Huffman co
de for AC */ |
| 696 } huffman_table[4]; /* Up to 4 huffman tables, huffman_table
[Th](Th=0,1,2,3) |
| 697 * specifies a buffman table for destina
tion Th. |
| 698 */ |
| 699 |
| 700 } VAHuffmanTableBufferJPEG; |
| 701 |
| 702 /* JPEG Scan Parameter Buffer, The Scan of is similar to |
| 703 * the Slice of other codecs */ |
| 704 typedef struct _VASliceParameterBufferJPEG |
| 705 { |
| 706 unsigned int slice_data_size; /* number of bytes in the slice data buf
fer for this slice */ |
| 707 unsigned int slice_data_offset; /* the offset to the first byte of slice
data */ |
| 708 unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX definition
s */ |
| 709 unsigned int slice_horizontal_position; |
| 710 unsigned int slice_vertical_position; |
| 711 |
| 712 unsigned int num_components; |
| 713 struct { |
| 714 int component_id; /* Csj, it must match one of component_i
ds specified in VAPictureParameterBufferJPEG */ |
| 715 int dc_selector; /* Tdj(0,1,2,3) */ |
| 716 int ac_selector; /* Taj(0,1,2,3) */ |
| 717 } components[4]; |
| 718 |
| 719 int restart_interval; /* specifies the number of MCUs in restart interval, d
efined in DRI marker */ |
| 720 int num_mcus; /* indicates the number of MCUs in a scan */ |
| 721 } VASliceParameterBufferJPEG; |
| 722 |
| 723 /**************************** |
| 724 * MPEG-2 data structures |
| 725 ****************************/ |
| 726 |
| 727 /* MPEG-2 Picture Parameter Buffer */ |
| 728 /* |
| 729 * For each frame or field, and before any slice data, a single |
| 730 * picture parameter buffer must be send. |
| 731 */ |
| 732 typedef struct _VAPictureParameterBufferMPEG2 |
| 733 { |
| 734 unsigned short horizontal_size; |
| 735 unsigned short vertical_size; |
| 736 VASurfaceID forward_reference_picture; |
| 737 VASurfaceID backward_reference_picture; |
| 738 /* meanings of the following fields are the same as in the standard */ |
| 739 int picture_coding_type; |
| 740 int f_code; /* pack all four fcode into this */ |
| 741 union { |
| 742 struct { |
| 743 unsigned int intra_dc_precision : 2; |
| 744 unsigned int picture_structure : 2; |
| 745 unsigned int top_field_first : 1; |
| 746 unsigned int frame_pred_frame_dct : 1; |
| 747 unsigned int concealment_motion_vectors : 1; |
| 748 unsigned int q_scale_type : 1; |
| 749 unsigned int intra_vlc_format : 1; |
| 750 unsigned int alternate_scan : 1; |
| 751 unsigned int repeat_first_field : 1; |
| 752 unsigned int progressive_frame : 1; |
| 753 unsigned int is_first_field : 1; /* indicate whether
the current field |
| 754 * is the first fie
ld for field picture |
| 755 */ |
| 756 } bits; |
| 757 unsigned int value; |
| 758 } picture_coding_extension; |
| 759 } VAPictureParameterBufferMPEG2; |
| 760 |
| 761 /* MPEG-2 Inverse Quantization Matrix Buffer */ |
| 762 typedef struct _VAIQMatrixBufferMPEG2 |
| 763 { |
| 764 int load_intra_quantiser_matrix; |
| 765 int load_non_intra_quantiser_matrix; |
| 766 int load_chroma_intra_quantiser_matrix; |
| 767 int load_chroma_non_intra_quantiser_matrix; |
| 768 unsigned char intra_quantiser_matrix[64]; |
| 769 unsigned char non_intra_quantiser_matrix[64]; |
| 770 unsigned char chroma_intra_quantiser_matrix[64]; |
| 771 unsigned char chroma_non_intra_quantiser_matrix[64]; |
| 772 } VAIQMatrixBufferMPEG2; |
| 773 |
| 774 /* MPEG-2 Slice Parameter Buffer */ |
| 775 typedef struct _VASliceParameterBufferMPEG2 |
| 776 { |
| 777 unsigned int slice_data_size;/* number of bytes in the slice data buffer for
this slice */ |
| 778 unsigned int slice_data_offset;/* the offset to the first byte of slice data
*/ |
| 779 unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ |
| 780 unsigned int macroblock_offset;/* the offset to the first bit of MB from the
first byte of slice data */ |
| 781 unsigned int slice_horizontal_position; |
| 782 unsigned int slice_vertical_position; |
| 783 int quantiser_scale_code; |
| 784 int intra_slice_flag; |
| 785 } VASliceParameterBufferMPEG2; |
| 786 |
| 787 /* MPEG-2 Macroblock Parameter Buffer */ |
| 788 typedef struct _VAMacroblockParameterBufferMPEG2 |
| 789 { |
| 790 unsigned short macroblock_address; |
| 791 /* |
| 792 * macroblock_address (in raster scan order) |
| 793 * top-left: 0 |
| 794 * bottom-right: picture-height-in-mb*picture-width-in-mb - 1 |
| 795 */ |
| 796 unsigned char macroblock_type; /* see definition below */ |
| 797 union { |
| 798 struct { |
| 799 unsigned int frame_motion_type : 2; |
| 800 unsigned int field_motion_type : 2; |
| 801 unsigned int dct_type : 1; |
| 802 } bits; |
| 803 unsigned int value; |
| 804 } macroblock_modes; |
| 805 unsigned char motion_vertical_field_select; |
| 806 /* |
| 807 * motion_vertical_field_select: |
| 808 * see section 6.3.17.2 in the spec |
| 809 * only the lower 4 bits are used |
| 810 * bit 0: first vector forward |
| 811 * bit 1: first vector backward |
| 812 * bit 2: second vector forward |
| 813 * bit 3: second vector backward |
| 814 */ |
| 815 short PMV[2][2][2]; /* see Table 7-7 in the spec */ |
| 816 unsigned short coded_block_pattern; |
| 817 /* |
| 818 * The bitplanes for coded_block_pattern are described |
| 819 * in Figure 6.10-12 in the spec |
| 820 */ |
| 821 |
| 822 /* Number of skipped macroblocks after this macroblock */ |
| 823 unsigned short num_skipped_macroblocks; |
| 824 } VAMacroblockParameterBufferMPEG2; |
| 825 |
| 826 /* |
| 827 * OR'd flags for macroblock_type (section 6.3.17.1 in the spec) |
| 828 */ |
| 829 #define VA_MB_TYPE_MOTION_FORWARD 0x02 |
| 830 #define VA_MB_TYPE_MOTION_BACKWARD 0x04 |
| 831 #define VA_MB_TYPE_MOTION_PATTERN 0x08 |
| 832 #define VA_MB_TYPE_MOTION_INTRA 0x10 |
| 833 |
| 834 /* |
| 835 * MPEG-2 Residual Data Buffer |
| 836 * For each macroblock, there wil be 64 shorts (16-bit) in the |
| 837 * residual data buffer |
| 838 */ |
| 839 |
| 840 /**************************** |
| 841 * MPEG-4 Part 2 data structures |
| 842 ****************************/ |
| 843 |
| 844 /* MPEG-4 Picture Parameter Buffer */ |
| 845 /* |
| 846 * For each frame or field, and before any slice data, a single |
| 847 * picture parameter buffer must be send. |
| 848 */ |
| 849 typedef struct _VAPictureParameterBufferMPEG4 |
| 850 { |
| 851 unsigned short vop_width; |
| 852 unsigned short vop_height; |
| 853 VASurfaceID forward_reference_picture; |
| 854 VASurfaceID backward_reference_picture; |
| 855 union { |
| 856 struct { |
| 857 unsigned int short_video_header : 1; |
| 858 unsigned int chroma_format : 2; |
| 859 unsigned int interlaced : 1; |
| 860 unsigned int obmc_disable : 1; |
| 861 unsigned int sprite_enable : 2; |
| 862 unsigned int sprite_warping_accuracy : 2; |
| 863 unsigned int quant_type : 1; |
| 864 unsigned int quarter_sample : 1; |
| 865 unsigned int data_partitioned : 1; |
| 866 unsigned int reversible_vlc : 1; |
| 867 unsigned int resync_marker_disable : 1; |
| 868 } bits; |
| 869 unsigned int value; |
| 870 } vol_fields; |
| 871 unsigned char no_of_sprite_warping_points; |
| 872 short sprite_trajectory_du[3]; |
| 873 short sprite_trajectory_dv[3]; |
| 874 unsigned char quant_precision; |
| 875 union { |
| 876 struct { |
| 877 unsigned int vop_coding_type : 2; |
| 878 unsigned int backward_reference_vop_coding_type : 2; |
| 879 unsigned int vop_rounding_type : 1; |
| 880 unsigned int intra_dc_vlc_thr : 3; |
| 881 unsigned int top_field_first : 1; |
| 882 unsigned int alternate_vertical_scan_flag : 1; |
| 883 } bits; |
| 884 unsigned int value; |
| 885 } vop_fields; |
| 886 unsigned char vop_fcode_forward; |
| 887 unsigned char vop_fcode_backward; |
| 888 unsigned short vop_time_increment_resolution; |
| 889 /* short header related */ |
| 890 unsigned char num_gobs_in_vop; |
| 891 unsigned char num_macroblocks_in_gob; |
| 892 /* for direct mode prediction */ |
| 893 short TRB; |
| 894 short TRD; |
| 895 } VAPictureParameterBufferMPEG4; |
| 896 |
| 897 /* MPEG-4 Inverse Quantization Matrix Buffer */ |
| 898 typedef struct _VAIQMatrixBufferMPEG4 |
| 899 { |
| 900 int load_intra_quant_mat; |
| 901 int load_non_intra_quant_mat; |
| 902 unsigned char intra_quant_mat[64]; |
| 903 unsigned char non_intra_quant_mat[64]; |
| 904 } VAIQMatrixBufferMPEG4; |
| 905 |
| 906 /* MPEG-4 Slice Parameter Buffer */ |
| 907 typedef struct _VASliceParameterBufferMPEG4 |
| 908 { |
| 909 unsigned int slice_data_size;/* number of bytes in the slice data buffer for
this slice */ |
| 910 unsigned int slice_data_offset;/* the offset to the first byte of slice data
*/ |
| 911 unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ |
| 912 unsigned int macroblock_offset;/* the offset to the first bit of MB from the
first byte of slice data */ |
| 913 unsigned int macroblock_number; |
| 914 int quant_scale; |
| 915 } VASliceParameterBufferMPEG4; |
| 916 |
| 917 /* |
| 918 VC-1 data structures |
| 919 */ |
| 920 |
| 921 typedef enum /* see 7.1.1.32 */ |
| 922 { |
| 923 VAMvMode1Mv = 0, |
| 924 VAMvMode1MvHalfPel = 1, |
| 925 VAMvMode1MvHalfPelBilinear = 2, |
| 926 VAMvModeMixedMv = 3, |
| 927 VAMvModeIntensityCompensation = 4 |
| 928 } VAMvModeVC1; |
| 929 |
| 930 /* VC-1 Picture Parameter Buffer */ |
| 931 /* |
| 932 * For each picture, and before any slice data, a picture parameter |
| 933 * buffer must be send. Multiple picture parameter buffers may be |
| 934 * sent for a single picture. In that case picture parameters will |
| 935 * apply to all slice data that follow it until a new picture |
| 936 * parameter buffer is sent. |
| 937 * |
| 938 * Notes: |
| 939 * pic_quantizer_type should be set to the applicable quantizer |
| 940 * type as defined by QUANTIZER (J.1.19) and either |
| 941 * PQUANTIZER (7.1.1.8) or PQINDEX (7.1.1.6) |
| 942 */ |
| 943 typedef struct _VAPictureParameterBufferVC1 |
| 944 { |
| 945 VASurfaceID forward_reference_picture; |
| 946 VASurfaceID backward_reference_picture; |
| 947 /* if out-of-loop post-processing is done on the render |
| 948 target, then we need to keep the in-loop decoded |
| 949 picture as a reference picture */ |
| 950 VASurfaceID inloop_decoded_picture; |
| 951 |
| 952 /* sequence layer for AP or meta data for SP and MP */ |
| 953 union { |
| 954 struct { |
| 955 unsigned int pulldown : 1; /* SEQUENCE_LAYER::PULLDOWN */ |
| 956 unsigned int interlace : 1; /* SEQUENCE_LAYER::INTERLACE */ |
| 957 unsigned int tfcntrflag : 1; /* SEQUENCE_LAYER::TFCNTRFLAG */ |
| 958 unsigned int finterpflag : 1; /* SEQUENCE_LAYER::FINTERPFLAG */ |
| 959 unsigned int psf : 1; /* SEQUENCE_LAYER::PSF */ |
| 960 unsigned int multires : 1; /* METADATA::MULTIRES */ |
| 961 unsigned int overlap : 1; /* METADATA::OVERLAP */ |
| 962 unsigned int syncmarker : 1; /* METADATA::SYNCMARKER */ |
| 963 unsigned int rangered : 1; /* METADATA::RANGERED */ |
| 964 unsigned int max_b_frames : 3; /* METADATA::MAXBFRAMES */ |
| 965 unsigned int profile : 2; /* SEQUENCE_LAYER::PROFILE or The M
SB of METADATA::PROFILE */ |
| 966 } bits; |
| 967 unsigned int value; |
| 968 } sequence_fields; |
| 969 |
| 970 unsigned short coded_width; /* ENTRY_POINT_LAYER::CODED_WIDTH */ |
| 971 unsigned short coded_height; /* ENTRY_POINT_LAYER::CODED_HEIGHT */ |
| 972 union { |
| 973 struct { |
| 974 unsigned int broken_link : 1; /* ENTRY_POINT_LAYER::BROKEN_LINK *
/ |
| 975 unsigned int closed_entry : 1; /* ENTRY_POINT_LAYER::CLOSED_ENTRY
*/ |
| 976 unsigned int panscan_flag : 1; /* ENTRY_POINT_LAYER::PANSCAN_FLAG
*/ |
| 977 unsigned int loopfilter : 1; /* ENTRY_POINT_LAYER::LOOPFILTER */ |
| 978 } bits; |
| 979 unsigned int value; |
| 980 } entrypoint_fields; |
| 981 unsigned char conditional_overlap_flag; /* ENTRY_POINT_LAYER::CONDOVER */ |
| 982 unsigned char fast_uvmc_flag; /* ENTRY_POINT_LAYER::FASTUVMC */ |
| 983 union { |
| 984 struct { |
| 985 unsigned int luma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPY_FL
AG */ |
| 986 unsigned int luma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPY */ |
| 987 unsigned int chroma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPUV_F
LAG */ |
| 988 unsigned int chroma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPUV *
/ |
| 989 } bits; |
| 990 unsigned int value; |
| 991 } range_mapping_fields; |
| 992 |
| 993 unsigned char b_picture_fraction; /* PICTURE_LAYER::BFRACTION */ |
| 994 unsigned char cbp_table; /* PICTURE_LAYER::CBPTAB/ICBPTAB */ |
| 995 unsigned char mb_mode_table; /* PICTURE_LAYER::MBMODETAB */ |
| 996 unsigned char range_reduction_frame;/* PICTURE_LAYER::RANGEREDFRM */ |
| 997 unsigned char rounding_control; /* PICTURE_LAYER::RNDCTRL */ |
| 998 unsigned char post_processing; /* PICTURE_LAYER::POSTPROC */ |
| 999 unsigned char picture_resolution_index; /* PICTURE_LAYER::RESPIC */ |
| 1000 unsigned char luma_scale; /* PICTURE_LAYER::LUMSCALE */ |
| 1001 unsigned char luma_shift; /* PICTURE_LAYER::LUMSHIFT */ |
| 1002 union { |
| 1003 struct { |
| 1004 unsigned int picture_type : 3; /* PICTURE_LAYER::PTYPE */ |
| 1005 unsigned int frame_coding_mode : 3; /* PICTURE_LAYER::FCM */ |
| 1006 unsigned int top_field_first : 1; /* PICTURE_LAYER::TFF */ |
| 1007 unsigned int is_first_field : 1; /* set to 1 if it is the fi
rst field */ |
| 1008 unsigned int intensity_compensation : 1; /* PICTURE_LAYER::INTCOMP *
/ |
| 1009 } bits; |
| 1010 unsigned int value; |
| 1011 } picture_fields; |
| 1012 union { |
| 1013 struct { |
| 1014 unsigned int mv_type_mb : 1; /* PICTURE::MVTYPEMB */ |
| 1015 unsigned int direct_mb : 1; /* PICTURE::DIRECTMB */ |
| 1016 unsigned int skip_mb : 1; /* PICTURE::SKIPMB */ |
| 1017 unsigned int field_tx : 1; /* PICTURE::FIELDTX */ |
| 1018 unsigned int forward_mb : 1; /* PICTURE::FORWARDMB */ |
| 1019 unsigned int ac_pred : 1; /* PICTURE::ACPRED */ |
| 1020 unsigned int overflags : 1; /* PICTURE::OVERFLAGS */ |
| 1021 } flags; |
| 1022 unsigned int value; |
| 1023 } raw_coding; |
| 1024 union { |
| 1025 struct { |
| 1026 unsigned int bp_mv_type_mb : 1; /* PICTURE::MVTYPEMB */ |
| 1027 unsigned int bp_direct_mb : 1; /* PICTURE::DIRECTMB */ |
| 1028 unsigned int bp_skip_mb : 1; /* PICTURE::SKIPMB */ |
| 1029 unsigned int bp_field_tx : 1; /* PICTURE::FIELDTX */ |
| 1030 unsigned int bp_forward_mb : 1; /* PICTURE::FORWARDMB */ |
| 1031 unsigned int bp_ac_pred : 1; /* PICTURE::ACPRED */ |
| 1032 unsigned int bp_overflags : 1; /* PICTURE::OVERFLAGS */ |
| 1033 } flags; |
| 1034 unsigned int value; |
| 1035 } bitplane_present; /* signal what bitplane is being passed via the bitplane
buffer */ |
| 1036 union { |
| 1037 struct { |
| 1038 unsigned int reference_distance_flag : 1;/* PICTURE_LAYER::REFDIST_F
LAG */ |
| 1039 unsigned int reference_distance : 5;/* PICTURE_LAYER::REFDIST */ |
| 1040 unsigned int num_reference_pictures: 1;/* PICTURE_LAYER::NUMREF */ |
| 1041 unsigned int reference_field_pic_indicator : 1;/* PICTURE_LAYER::RE
FFIELD */ |
| 1042 } bits; |
| 1043 unsigned int value; |
| 1044 } reference_fields; |
| 1045 union { |
| 1046 struct { |
| 1047 unsigned int mv_mode : 3; /* PICTURE_LAYER::MVMODE */ |
| 1048 unsigned int mv_mode2 : 3; /* PICTURE_LAYER::MVMODE2 *
/ |
| 1049 unsigned int mv_table : 3; /* PICTURE_LAYER::MVTAB/IMV
TAB */ |
| 1050 unsigned int two_mv_block_pattern_table: 2; /* PICTURE_LAYER::2MVBPT
AB */ |
| 1051 unsigned int four_mv_switch : 1; /* PICTURE_LAYER::4MVSWITCH
*/ |
| 1052 unsigned int four_mv_block_pattern_table : 2; /* PICTURE_LAYER::4MVB
PTAB */ |
| 1053 unsigned int extended_mv_flag : 1; /* ENTRY_POINT_LAYER::EXTEN
DED_MV */ |
| 1054 unsigned int extended_mv_range : 2; /* PICTURE_LAYER::MVRANGE *
/ |
| 1055 unsigned int extended_dmv_flag : 1; /* ENTRY_POINT_LAYER::EXTEN
DED_DMV */ |
| 1056 unsigned int extended_dmv_range : 2; /* PICTURE_LAYER::DMVRANGE
*/ |
| 1057 } bits; |
| 1058 unsigned int value; |
| 1059 } mv_fields; |
| 1060 union { |
| 1061 struct { |
| 1062 unsigned int dquant : 2; /* ENTRY_POINT_LAYER::DQUANT */ |
| 1063 unsigned int quantizer : 2; /* ENTRY_POINT_LAYER::QUANTIZER
*/ |
| 1064 unsigned int half_qp : 1; /* PICTURE_LAYER::HALFQP */ |
| 1065 unsigned int pic_quantizer_scale : 5;/* PICTURE_LAYER::PQUANT */ |
| 1066 unsigned int pic_quantizer_type : 1;/* PICTURE_LAYER::PQUANTIZER */ |
| 1067 unsigned int dq_frame : 1; /* VOPDQUANT::DQUANTFRM */ |
| 1068 unsigned int dq_profile : 2; /* VOPDQUANT::DQPROFILE */ |
| 1069 unsigned int dq_sb_edge : 2; /* VOPDQUANT::DQSBEDGE */ |
| 1070 unsigned int dq_db_edge : 2; /* VOPDQUANT::DQDBEDGE */ |
| 1071 unsigned int dq_binary_level : 1; /* VOPDQUANT::DQBILEVEL */ |
| 1072 unsigned int alt_pic_quantizer : 5;/* VOPDQUANT::ALTPQUANT */ |
| 1073 } bits; |
| 1074 unsigned int value; |
| 1075 } pic_quantizer_fields; |
| 1076 union { |
| 1077 struct { |
| 1078 unsigned int variable_sized_transform_flag : 1;/* ENTRY_POINT_LAYER
::VSTRANSFORM */ |
| 1079 unsigned int mb_level_transform_type_flag : 1;/* PICTURE_LAYER::TT
MBF */ |
| 1080 unsigned int frame_level_transform_type : 2;/* PICTURE_LAYER::TT
FRM */ |
| 1081 unsigned int transform_ac_codingset_idx1 : 2;/* PICTURE_LAYER::TR
ANSACFRM */ |
| 1082 unsigned int transform_ac_codingset_idx2 : 2;/* PICTURE_LAYER::TR
ANSACFRM2 */ |
| 1083 unsigned int intra_transform_dc_table : 1;/* PICTURE_LAYER::TR
ANSDCTAB */ |
| 1084 } bits; |
| 1085 unsigned int value; |
| 1086 } transform_fields; |
| 1087 } VAPictureParameterBufferVC1; |
| 1088 |
| 1089 /* VC-1 Bitplane Buffer |
| 1090 There will be at most three bitplanes coded in any picture header. To send |
| 1091 the bitplane data more efficiently, each byte is divided in two nibbles, with |
| 1092 each nibble carrying three bitplanes for one macroblock. The following table |
| 1093 shows the bitplane data arrangement within each nibble based on the picture |
| 1094 type. |
| 1095 |
| 1096 Picture Type Bit3 Bit2 Bit1 Bit0 |
| 1097 I or BI OVERFLAGS ACPRED FIELDTX |
| 1098 P MYTYPEMB SKIPMB DIRECTMB |
| 1099 B FORWARDMB SKIPMB DIRECTMB |
| 1100 |
| 1101 Within each byte, the lower nibble is for the first MB and the upper nibble is |
| 1102 for the second MB. E.g. the lower nibble of the first byte in the bitplane |
| 1103 buffer is for Macroblock #1 and the upper nibble of the first byte is for |
| 1104 Macroblock #2 in the first row. |
| 1105 */ |
| 1106 |
| 1107 /* VC-1 Slice Parameter Buffer */ |
| 1108 typedef struct _VASliceParameterBufferVC1 |
| 1109 { |
| 1110 unsigned int slice_data_size;/* number of bytes in the slice data buffer for
this slice */ |
| 1111 unsigned int slice_data_offset;/* the offset to the first byte of slice data
*/ |
| 1112 unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ |
| 1113 unsigned int macroblock_offset;/* the offset to the first bit of MB from the
first byte of slice data */ |
| 1114 unsigned int slice_vertical_position; |
| 1115 } VASliceParameterBufferVC1; |
| 1116 |
| 1117 /* VC-1 Slice Data Buffer */ |
| 1118 /* |
| 1119 This is simplely a buffer containing raw bit-stream bytes |
| 1120 */ |
| 1121 |
| 1122 /**************************** |
| 1123 * H.264/AVC data structures |
| 1124 ****************************/ |
| 1125 |
| 1126 typedef struct _VAPictureH264 |
| 1127 { |
| 1128 VASurfaceID picture_id; |
| 1129 unsigned int frame_idx; |
| 1130 unsigned int flags; |
| 1131 signed int TopFieldOrderCnt; |
| 1132 signed int BottomFieldOrderCnt; |
| 1133 } VAPictureH264; |
| 1134 /* flags in VAPictureH264 could be OR of the following */ |
| 1135 #define VA_PICTURE_H264_INVALID 0x00000001 |
| 1136 #define VA_PICTURE_H264_TOP_FIELD 0x00000002 |
| 1137 #define VA_PICTURE_H264_BOTTOM_FIELD 0x00000004 |
| 1138 #define VA_PICTURE_H264_SHORT_TERM_REFERENCE 0x00000008 |
| 1139 #define VA_PICTURE_H264_LONG_TERM_REFERENCE 0x00000010 |
| 1140 |
| 1141 /* H.264 Picture Parameter Buffer */ |
| 1142 /* |
| 1143 * For each picture, and before any slice data, a single |
| 1144 * picture parameter buffer must be send. |
| 1145 */ |
| 1146 typedef struct _VAPictureParameterBufferH264 |
| 1147 { |
| 1148 VAPictureH264 CurrPic; |
| 1149 VAPictureH264 ReferenceFrames[16]; /* in DPB */ |
| 1150 unsigned short picture_width_in_mbs_minus1; |
| 1151 unsigned short picture_height_in_mbs_minus1; |
| 1152 unsigned char bit_depth_luma_minus8; |
| 1153 unsigned char bit_depth_chroma_minus8; |
| 1154 unsigned char num_ref_frames; |
| 1155 union { |
| 1156 struct { |
| 1157 unsigned int chroma_format_idc : 2; |
| 1158 unsigned int residual_colour_transform_flag : 1; |
| 1159 unsigned int gaps_in_frame_num_value_allowed_flag : 1; |
| 1160 unsigned int frame_mbs_only_flag : 1; |
| 1161 unsigned int mb_adaptive_frame_field_flag : 1; |
| 1162 unsigned int direct_8x8_inference_flag : 1; |
| 1163 unsigned int MinLumaBiPredSize8x8 : 1; /* see A.3.
3.2 */ |
| 1164 unsigned int log2_max_frame_num_minus4 : 4; |
| 1165 unsigned int pic_order_cnt_type : 2; |
| 1166 unsigned int log2_max_pic_order_cnt_lsb_minus4 : 4; |
| 1167 unsigned int delta_pic_order_always_zero_flag : 1; |
| 1168 } bits; |
| 1169 unsigned int value; |
| 1170 } seq_fields; |
| 1171 unsigned char num_slice_groups_minus1; |
| 1172 unsigned char slice_group_map_type; |
| 1173 unsigned short slice_group_change_rate_minus1; |
| 1174 signed char pic_init_qp_minus26; |
| 1175 signed char pic_init_qs_minus26; |
| 1176 signed char chroma_qp_index_offset; |
| 1177 signed char second_chroma_qp_index_offset; |
| 1178 union { |
| 1179 struct { |
| 1180 unsigned int entropy_coding_mode_flag : 1; |
| 1181 unsigned int weighted_pred_flag : 1; |
| 1182 unsigned int weighted_bipred_idc : 2; |
| 1183 unsigned int transform_8x8_mode_flag : 1; |
| 1184 unsigned int field_pic_flag : 1; |
| 1185 unsigned int constrained_intra_pred_flag : 1; |
| 1186 unsigned int pic_order_present_flag : 1; |
| 1187 unsigned int deblocking_filter_control_present_flag : 1; |
| 1188 unsigned int redundant_pic_cnt_present_flag : 1; |
| 1189 unsigned int reference_pic_flag : 1; /* nal_ref_
idc != 0 */ |
| 1190 } bits; |
| 1191 unsigned int value; |
| 1192 } pic_fields; |
| 1193 unsigned short frame_num; |
| 1194 } VAPictureParameterBufferH264; |
| 1195 |
| 1196 /* H.264 Inverse Quantization Matrix Buffer */ |
| 1197 typedef struct _VAIQMatrixBufferH264 |
| 1198 { |
| 1199 unsigned char ScalingList4x4[6][16]; |
| 1200 unsigned char ScalingList8x8[2][64]; |
| 1201 } VAIQMatrixBufferH264; |
| 1202 |
| 1203 /* |
| 1204 * H.264 Slice Group Map Buffer |
| 1205 * When VAPictureParameterBufferH264::num_slice_group_minus1 is not equal to 0, |
| 1206 * A slice group map buffer should be sent for each picture if required. The buf
fer |
| 1207 * is sent only when there is a change in the mapping values. |
| 1208 * The slice group map buffer map "map units" to slice groups as specified in |
| 1209 * section 8.2.2 of the H.264 spec. The buffer will contain one byte for each ma
croblock |
| 1210 * in raster scan order |
| 1211 */ |
| 1212 |
| 1213 /* H.264 Slice Parameter Buffer */ |
| 1214 typedef struct _VASliceParameterBufferH264 |
| 1215 { |
| 1216 unsigned int slice_data_size;/* number of bytes in the slice data buffer for
this slice */ |
| 1217 /** \brief Byte offset to the NAL Header Unit for this slice. */ |
| 1218 unsigned int slice_data_offset; |
| 1219 unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ |
| 1220 /** |
| 1221 * \brief Bit offset from NAL Header Unit to the begining of slice_data(). |
| 1222 * |
| 1223 * This bit offset is relative to and includes the NAL unit byte |
| 1224 * and represents the number of bits parsed in the slice_header() |
| 1225 * after the removal of any emulation prevention bytes in |
| 1226 * there. However, the slice data buffer passed to the hardware is |
| 1227 * the original bitstream, thus including any emulation prevention |
| 1228 * bytes. |
| 1229 */ |
| 1230 unsigned short slice_data_bit_offset; |
| 1231 unsigned short first_mb_in_slice; |
| 1232 unsigned char slice_type; |
| 1233 unsigned char direct_spatial_mv_pred_flag; |
| 1234 unsigned char num_ref_idx_l0_active_minus1; |
| 1235 unsigned char num_ref_idx_l1_active_minus1; |
| 1236 unsigned char cabac_init_idc; |
| 1237 char slice_qp_delta; |
| 1238 unsigned char disable_deblocking_filter_idc; |
| 1239 char slice_alpha_c0_offset_div2; |
| 1240 char slice_beta_offset_div2; |
| 1241 VAPictureH264 RefPicList0[32]; /* See 8.2.4.2 */ |
| 1242 VAPictureH264 RefPicList1[32]; /* See 8.2.4.2 */ |
| 1243 unsigned char luma_log2_weight_denom; |
| 1244 unsigned char chroma_log2_weight_denom; |
| 1245 unsigned char luma_weight_l0_flag; |
| 1246 short luma_weight_l0[32]; |
| 1247 short luma_offset_l0[32]; |
| 1248 unsigned char chroma_weight_l0_flag; |
| 1249 short chroma_weight_l0[32][2]; |
| 1250 short chroma_offset_l0[32][2]; |
| 1251 unsigned char luma_weight_l1_flag; |
| 1252 short luma_weight_l1[32]; |
| 1253 short luma_offset_l1[32]; |
| 1254 unsigned char chroma_weight_l1_flag; |
| 1255 short chroma_weight_l1[32][2]; |
| 1256 short chroma_offset_l1[32][2]; |
| 1257 } VASliceParameterBufferH264; |
| 1258 |
| 1259 /**************************** |
| 1260 * Common encode data structures |
| 1261 ****************************/ |
| 1262 typedef enum |
| 1263 { |
| 1264 VAEncPictureTypeIntra = 0, |
| 1265 VAEncPictureTypePredictive = 1, |
| 1266 VAEncPictureTypeBidirectional = 2, |
| 1267 } VAEncPictureType; |
| 1268 |
| 1269 /* Encode Slice Parameter Buffer */ |
| 1270 typedef struct _VAEncSliceParameterBuffer |
| 1271 { |
| 1272 unsigned int start_row_number; /* starting MB row number for this slice
*/ |
| 1273 unsigned int slice_height; /* slice height measured in MB */ |
| 1274 union { |
| 1275 struct { |
| 1276 unsigned int is_intra : 1; |
| 1277 unsigned int disable_deblocking_filter_idc : 2; |
| 1278 unsigned int uses_long_term_ref :1; |
| 1279 unsigned int is_long_term_ref :1; |
| 1280 } bits; |
| 1281 unsigned int value; |
| 1282 } slice_flags; |
| 1283 } VAEncSliceParameterBuffer; |
| 1284 |
| 1285 /**************************** |
| 1286 * H.264 specific encode data structures |
| 1287 ****************************/ |
| 1288 |
| 1289 typedef struct _VAEncSequenceParameterBufferH264 |
| 1290 { |
| 1291 unsigned char seq_parameter_set_id; |
| 1292 unsigned char level_idc; |
| 1293 unsigned int intra_period; |
| 1294 unsigned int intra_idr_period; |
| 1295 unsigned int max_num_ref_frames; |
| 1296 unsigned int picture_width_in_mbs; |
| 1297 unsigned int picture_height_in_mbs; |
| 1298 unsigned int bits_per_second; |
| 1299 unsigned int frame_rate; |
| 1300 unsigned int initial_qp; |
| 1301 unsigned int min_qp; |
| 1302 unsigned int basic_unit_size; |
| 1303 unsigned char vui_flag; |
| 1304 } VAEncSequenceParameterBufferH264; |
| 1305 |
| 1306 #define H264_LAST_PICTURE_EOSEQ 0x01 /* the last picture in the sequence */ |
| 1307 #define H264_LAST_PICTURE_EOSTREAM 0x02 /* the last picture in the stream */ |
| 1308 typedef struct _VAEncPictureParameterBufferH264 |
| 1309 { |
| 1310 VASurfaceID reference_picture; |
| 1311 VASurfaceID reconstructed_picture; |
| 1312 VABufferID coded_buf; |
| 1313 unsigned short picture_width; |
| 1314 unsigned short picture_height; |
| 1315 unsigned char last_picture; |
| 1316 } VAEncPictureParameterBufferH264; |
| 1317 |
| 1318 /**************************** |
| 1319 * H.263 specific encode data structures |
| 1320 ****************************/ |
| 1321 |
| 1322 typedef struct _VAEncSequenceParameterBufferH263 |
| 1323 { |
| 1324 unsigned int intra_period; |
| 1325 unsigned int bits_per_second; |
| 1326 unsigned int frame_rate; |
| 1327 unsigned int initial_qp; |
| 1328 unsigned int min_qp; |
| 1329 } VAEncSequenceParameterBufferH263; |
| 1330 |
| 1331 typedef struct _VAEncPictureParameterBufferH263 |
| 1332 { |
| 1333 VASurfaceID reference_picture; |
| 1334 VASurfaceID reconstructed_picture; |
| 1335 VABufferID coded_buf; |
| 1336 unsigned short picture_width; |
| 1337 unsigned short picture_height; |
| 1338 VAEncPictureType picture_type; |
| 1339 } VAEncPictureParameterBufferH263; |
| 1340 |
| 1341 /**************************** |
| 1342 * MPEG-4 specific encode data structures |
| 1343 ****************************/ |
| 1344 |
| 1345 typedef struct _VAEncSequenceParameterBufferMPEG4 |
| 1346 { |
| 1347 unsigned char profile_and_level_indication; |
| 1348 unsigned int intra_period; |
| 1349 unsigned int video_object_layer_width; |
| 1350 unsigned int video_object_layer_height; |
| 1351 unsigned int vop_time_increment_resolution; |
| 1352 unsigned int fixed_vop_rate; |
| 1353 unsigned int fixed_vop_time_increment; |
| 1354 unsigned int bits_per_second; |
| 1355 unsigned int frame_rate; |
| 1356 unsigned int initial_qp; |
| 1357 unsigned int min_qp; |
| 1358 } VAEncSequenceParameterBufferMPEG4; |
| 1359 |
| 1360 typedef struct _VAEncPictureParameterBufferMPEG4 |
| 1361 { |
| 1362 VASurfaceID reference_picture; |
| 1363 VASurfaceID reconstructed_picture; |
| 1364 VABufferID coded_buf; |
| 1365 unsigned short picture_width; |
| 1366 unsigned short picture_height; |
| 1367 unsigned int modulo_time_base; /* number of 1s */ |
| 1368 unsigned int vop_time_increment; |
| 1369 VAEncPictureType picture_type; |
| 1370 } VAEncPictureParameterBufferMPEG4; |
| 1371 |
| 1372 |
| 1373 |
| 1374 /* Buffer functions */ |
| 1375 |
| 1376 /* |
| 1377 * Creates a buffer for "num_elements" elements of "size" bytes and |
| 1378 * initalize with "data". |
| 1379 * if "data" is null, then the contents of the buffer data store |
| 1380 * are undefined. |
| 1381 * Basically there are two ways to get buffer data to the server side. One is |
| 1382 * to call vaCreateBuffer() with a non-null "data", which results the data being |
| 1383 * copied to the data store on the server side. A different method that |
| 1384 * eliminates this copy is to pass null as "data" when calling vaCreateBuffer(), |
| 1385 * and then use vaMapBuffer() to map the data store from the server side to the |
| 1386 * client address space for access. |
| 1387 * Note: image buffers are created by the library, not the client. Please see |
| 1388 * vaCreateImage on how image buffers are managed. |
| 1389 */ |
| 1390 VAStatus vaCreateBuffer ( |
| 1391 VADisplay dpy, |
| 1392 VAContextID context, |
| 1393 VABufferType type, /* in */ |
| 1394 unsigned int size, /* in */ |
| 1395 unsigned int num_elements, /* in */ |
| 1396 void *data, /* in */ |
| 1397 VABufferID *buf_id /* out */ |
| 1398 ); |
| 1399 |
| 1400 /* |
| 1401 * Convey to the server how many valid elements are in the buffer. |
| 1402 * e.g. if multiple slice parameters are being held in a single buffer, |
| 1403 * this will communicate to the server the number of slice parameters |
| 1404 * that are valid in the buffer. |
| 1405 */ |
| 1406 VAStatus vaBufferSetNumElements ( |
| 1407 VADisplay dpy, |
| 1408 VABufferID buf_id, /* in */ |
| 1409 unsigned int num_elements /* in */ |
| 1410 ); |
| 1411 |
| 1412 |
| 1413 /* |
| 1414 * device independent data structure for codedbuffer |
| 1415 */ |
| 1416 |
| 1417 /* |
| 1418 * FICTURE_AVE_QP(bit7-0): The average Qp value used during this frame |
| 1419 * LARGE_SLICE(bit8):At least one slice in the current frame was large |
| 1420 * enough for the encoder to attempt to limit its size. |
| 1421 * SLICE_OVERFLOW(bit9): At least one slice in the current frame has |
| 1422 * exceeded the maximum slice size specified. |
| 1423 * BITRATE_OVERFLOW(bit10): The peak bitrate was exceeded for this frame. |
| 1424 * BITRATE_HIGH(bit11): The frame size got within the safety margin of the maxim
um size (VCM only) |
| 1425 * AIR_MB_OVER_THRESHOLD: the number of MBs adapted to Intra MB |
| 1426 */ |
| 1427 #define VA_CODED_BUF_STATUS_PICTURE_AVE_QP_MASK 0xff |
| 1428 #define VA_CODED_BUF_STATUS_LARGE_SLICE_MASK 0x100 |
| 1429 #define VA_CODED_BUF_STATUS_SLICE_OVERFLOW_MASK 0x200 |
| 1430 #define VA_CODED_BUF_STATUS_BITRATE_OVERFLOW 0x400 |
| 1431 #define VA_CODED_BUF_STATUS_BITRATE_HIGH 0x800 |
| 1432 #define VA_CODED_BUF_STATUS_AIR_MB_OVER_THRESHOLD 0xff0000 |
| 1433 |
| 1434 /* |
| 1435 * device independent data structure for codedbuffer |
| 1436 */ |
| 1437 typedef struct _VACodedBufferSegment { |
| 1438 unsigned int size;/* size of the data buffer in the coded buffer segment, in
bytes */ |
| 1439 unsigned int bit_offset; /* bit offset into the data buffer where valid bits
tream data begins */ |
| 1440 unsigned int status; /* status set by the driver on the coded buffer*/ |
| 1441 unsigned int reserved; /* for future use */ |
| 1442 void *buf; /* pointer to the beginning of the data buffer in the coded buffe
r segment */ |
| 1443 void *next; /* pointer to the next VACodedBufferSegment */ |
| 1444 } VACodedBufferSegment; |
| 1445 |
| 1446 /* |
| 1447 * Map data store of the buffer into the client's address space |
| 1448 * vaCreateBuffer() needs to be called with "data" set to NULL before |
| 1449 * calling vaMapBuffer() |
| 1450 * |
| 1451 * if buffer type is VAEncCodedBufferType, pbuf points to link-list of |
| 1452 * VACodedBufferSegment, and the list is terminated if "next" is NULL |
| 1453 */ |
| 1454 VAStatus vaMapBuffer ( |
| 1455 VADisplay dpy, |
| 1456 VABufferID buf_id, /* in */ |
| 1457 void **pbuf /* out */ |
| 1458 ); |
| 1459 |
| 1460 /* |
| 1461 * After client making changes to a mapped data store, it needs to |
| 1462 * "Unmap" it to let the server know that the data is ready to be |
| 1463 * consumed by the server |
| 1464 */ |
| 1465 VAStatus vaUnmapBuffer ( |
| 1466 VADisplay dpy, |
| 1467 VABufferID buf_id /* in */ |
| 1468 ); |
| 1469 |
| 1470 /* |
| 1471 * After this call, the buffer is deleted and this buffer_id is no longer valid |
| 1472 * Only call this if the buffer is not going to be passed to vaRenderBuffer |
| 1473 */ |
| 1474 VAStatus vaDestroyBuffer ( |
| 1475 VADisplay dpy, |
| 1476 VABufferID buffer_id |
| 1477 ); |
| 1478 |
| 1479 /* |
| 1480 Render (Decode) Pictures |
| 1481 |
| 1482 A picture represents either a frame or a field. |
| 1483 |
| 1484 The Begin/Render/End sequence sends the decode buffers to the server |
| 1485 */ |
| 1486 |
| 1487 /* |
| 1488 * Get ready to decode a picture to a target surface |
| 1489 */ |
| 1490 VAStatus vaBeginPicture ( |
| 1491 VADisplay dpy, |
| 1492 VAContextID context, |
| 1493 VASurfaceID render_target |
| 1494 ); |
| 1495 |
| 1496 /* |
| 1497 * Send decode buffers to the server. |
| 1498 * Buffers are automatically destroyed afterwards |
| 1499 */ |
| 1500 VAStatus vaRenderPicture ( |
| 1501 VADisplay dpy, |
| 1502 VAContextID context, |
| 1503 VABufferID *buffers, |
| 1504 int num_buffers |
| 1505 ); |
| 1506 |
| 1507 /* |
| 1508 * Make the end of rendering for a picture. |
| 1509 * The server should start processing all pending operations for this |
| 1510 * surface. This call is non-blocking. The client can start another |
| 1511 * Begin/Render/End sequence on a different render target. |
| 1512 */ |
| 1513 VAStatus vaEndPicture ( |
| 1514 VADisplay dpy, |
| 1515 VAContextID context |
| 1516 ); |
| 1517 |
| 1518 /* |
| 1519 |
| 1520 Synchronization |
| 1521 |
| 1522 */ |
| 1523 |
| 1524 /* |
| 1525 * This function blocks until all pending operations on the render target |
| 1526 * have been completed. Upon return it is safe to use the render target for a |
| 1527 * different picture. |
| 1528 */ |
| 1529 VAStatus vaSyncSurface ( |
| 1530 VADisplay dpy, |
| 1531 VASurfaceID render_target |
| 1532 ); |
| 1533 |
| 1534 typedef enum |
| 1535 { |
| 1536 VASurfaceRendering = 1, /* Rendering in progress */ |
| 1537 VASurfaceDisplaying = 2, /* Displaying in progress (not safe to render into
it) */ |
| 1538 /* this status is useful if surface is used as the
source */ |
| 1539 /* of an overlay */ |
| 1540 VASurfaceReady = 4, /* not being rendered or displayed */ |
| 1541 VASurfaceSkipped = 8 /* Indicate a skipped frame during encode */ |
| 1542 } VASurfaceStatus; |
| 1543 |
| 1544 /* |
| 1545 * Find out any pending ops on the render target |
| 1546 */ |
| 1547 VAStatus vaQuerySurfaceStatus ( |
| 1548 VADisplay dpy, |
| 1549 VASurfaceID render_target, |
| 1550 VASurfaceStatus *status /* out */ |
| 1551 ); |
| 1552 |
| 1553 typedef enum |
| 1554 { |
| 1555 VADecodeSliceMissing = 0, |
| 1556 VADecodeMBError = 1, |
| 1557 } VADecodeErrorType; |
| 1558 |
| 1559 /* |
| 1560 * Client calls vaQuerySurfaceError with VA_STATUS_ERROR_DECODING_ERROR, server
side returns |
| 1561 * an array of structure VASurfaceDecodeMBErrors, and the array is terminated by
setting status=-1 |
| 1562 */ |
| 1563 typedef struct _VASurfaceDecodeMBErrors |
| 1564 { |
| 1565 int status; /* 1 if hardware has returned detailed info below, -1 means this
record is invalid */ |
| 1566 unsigned int start_mb; /* start mb address with errors */ |
| 1567 unsigned int end_mb; /* end mb address with errors */ |
| 1568 VADecodeErrorType decode_error_type; |
| 1569 } VASurfaceDecodeMBErrors; |
| 1570 |
| 1571 /* |
| 1572 * After the application gets VA_STATUS_ERROR_DECODING_ERROR after calling vaSyn
cSurface(), |
| 1573 * it can call vaQuerySurfaceError to find out further details on the particular
error. |
| 1574 * VA_STATUS_ERROR_DECODING_ERROR should be passed in as "error_status", |
| 1575 * upon the return, error_info will point to an array of _VASurfaceDecodeMBError
s structure, |
| 1576 * which is allocated and filled by libVA with detailed information on the missi
ng or error macroblocks. |
| 1577 * The array is terminated if "status==-1" is detected. |
| 1578 */ |
| 1579 VAStatus vaQuerySurfaceError( |
| 1580 VADisplay dpy, |
| 1581 VASurfaceID surface, |
| 1582 VAStatus error_status, |
| 1583 void **error_info |
| 1584 ); |
| 1585 |
| 1586 /* |
| 1587 * Images and Subpictures |
| 1588 * VAImage is used to either get the surface data to client memory, or |
| 1589 * to copy image data in client memory to a surface. |
| 1590 * Both images, subpictures and surfaces follow the same 2D coordinate system wh
ere origin |
| 1591 * is at the upper left corner with positive X to the right and positive Y down |
| 1592 */ |
| 1593 #define VA_FOURCC(ch0, ch1, ch2, ch3) \ |
| 1594 ((unsigned long)(unsigned char) (ch0) | ((unsigned long)(unsigned char) (ch1
) << 8) | \ |
| 1595 ((unsigned long)(unsigned char) (ch2) << 16) | ((unsigned long)(unsigned cha
r) (ch3) << 24 )) |
| 1596 |
| 1597 /* a few common FourCCs */ |
| 1598 #define VA_FOURCC_NV12 0x3231564E |
| 1599 #define VA_FOURCC_AI44 0x34344149 |
| 1600 #define VA_FOURCC_RGBA 0x41424752 |
| 1601 #define VA_FOURCC_BGRA 0x41524742 |
| 1602 #define VA_FOURCC_UYVY 0x59565955 |
| 1603 #define VA_FOURCC_YUY2 0x32595559 |
| 1604 #define VA_FOURCC_AYUV 0x56555941 |
| 1605 #define VA_FOURCC_NV11 0x3131564e |
| 1606 #define VA_FOURCC_YV12 0x32315659 |
| 1607 #define VA_FOURCC_P208 0x38303250 |
| 1608 #define VA_FOURCC_IYUV 0x56555949 |
| 1609 |
| 1610 /* byte order */ |
| 1611 #define VA_LSB_FIRST 1 |
| 1612 #define VA_MSB_FIRST 2 |
| 1613 |
| 1614 typedef struct _VAImageFormat |
| 1615 { |
| 1616 unsigned int fourcc; |
| 1617 unsigned int byte_order; /* VA_LSB_FIRST, VA_MSB_FIRST */ |
| 1618 unsigned int bits_per_pixel; |
| 1619 /* for RGB formats */ |
| 1620 unsigned int depth; /* significant bits per pixel */ |
| 1621 unsigned int red_mask; |
| 1622 unsigned int green_mask; |
| 1623 unsigned int blue_mask; |
| 1624 unsigned int alpha_mask; |
| 1625 } VAImageFormat; |
| 1626 |
| 1627 typedef VAGenericID VAImageID; |
| 1628 |
| 1629 typedef struct _VAImage |
| 1630 { |
| 1631 VAImageID image_id; /* uniquely identify this image */ |
| 1632 VAImageFormat format; |
| 1633 VABufferID buf; /* image data buffer */ |
| 1634 /* |
| 1635 * Image data will be stored in a buffer of type VAImageBufferType to facili
tate |
| 1636 * data store on the server side for optimal performance. The buffer will be
|
| 1637 * created by the CreateImage function, and proper storage allocated based o
n the image |
| 1638 * size and format. This buffer is managed by the library implementation, an
d |
| 1639 * accessed by the client through the buffer Map/Unmap functions. |
| 1640 */ |
| 1641 unsigned short width; |
| 1642 unsigned short height; |
| 1643 unsigned int data_size; |
| 1644 unsigned int num_planes; /* can not be greater than 3 */ |
| 1645 /* |
| 1646 * An array indicating the scanline pitch in bytes for each plane. |
| 1647 * Each plane may have a different pitch. Maximum 3 planes for planar format
s |
| 1648 */ |
| 1649 unsigned int pitches[3]; |
| 1650 /* |
| 1651 * An array indicating the byte offset from the beginning of the image data |
| 1652 * to the start of each plane. |
| 1653 */ |
| 1654 unsigned int offsets[3]; |
| 1655 |
| 1656 /* The following fields are only needed for paletted formats */ |
| 1657 int num_palette_entries; /* set to zero for non-palette images */ |
| 1658 /* |
| 1659 * Each component is one byte and entry_bytes indicates the number of compon
ents in |
| 1660 * each entry (eg. 3 for YUV palette entries). set to zero for non-palette i
mages |
| 1661 */ |
| 1662 int entry_bytes; |
| 1663 /* |
| 1664 * An array of ascii characters describing the order of the components withi
n the bytes. |
| 1665 * Only entry_bytes characters of the string are used. |
| 1666 */ |
| 1667 char component_order[4]; |
| 1668 } VAImage; |
| 1669 |
| 1670 /* Get maximum number of image formats supported by the implementation */ |
| 1671 int vaMaxNumImageFormats ( |
| 1672 VADisplay dpy |
| 1673 ); |
| 1674 |
| 1675 /* |
| 1676 * Query supported image formats |
| 1677 * The caller must provide a "format_list" array that can hold at |
| 1678 * least vaMaxNumImageFormats() entries. The actual number of formats |
| 1679 * returned in "format_list" is returned in "num_formats". |
| 1680 */ |
| 1681 VAStatus vaQueryImageFormats ( |
| 1682 VADisplay dpy, |
| 1683 VAImageFormat *format_list, /* out */ |
| 1684 int *num_formats /* out */ |
| 1685 ); |
| 1686 |
| 1687 /* |
| 1688 * Create a VAImage structure |
| 1689 * The width and height fields returned in the VAImage structure may get |
| 1690 * enlarged for some YUV formats. Upon return from this function, |
| 1691 * image->buf has been created and proper storage allocated by the library. |
| 1692 * The client can access the image through the Map/Unmap calls. |
| 1693 */ |
| 1694 VAStatus vaCreateImage ( |
| 1695 VADisplay dpy, |
| 1696 VAImageFormat *format, |
| 1697 int width, |
| 1698 int height, |
| 1699 VAImage *image /* out */ |
| 1700 ); |
| 1701 |
| 1702 /* |
| 1703 * Should call DestroyImage before destroying the surface it is bound to |
| 1704 */ |
| 1705 VAStatus vaDestroyImage ( |
| 1706 VADisplay dpy, |
| 1707 VAImageID image |
| 1708 ); |
| 1709 |
| 1710 VAStatus vaSetImagePalette ( |
| 1711 VADisplay dpy, |
| 1712 VAImageID image, |
| 1713 /* |
| 1714 * pointer to an array holding the palette data. The size of the array is |
| 1715 * num_palette_entries * entry_bytes in size. The order of the components |
| 1716 * in the palette is described by the component_order in VAImage struct |
| 1717 */ |
| 1718 unsigned char *palette |
| 1719 ); |
| 1720 |
| 1721 /* |
| 1722 * Retrive surface data into a VAImage |
| 1723 * Image must be in a format supported by the implementation |
| 1724 */ |
| 1725 VAStatus vaGetImage ( |
| 1726 VADisplay dpy, |
| 1727 VASurfaceID surface, |
| 1728 int x, /* coordinates of the upper left source pixel */ |
| 1729 int y, |
| 1730 unsigned int width, /* width and height of the region */ |
| 1731 unsigned int height, |
| 1732 VAImageID image |
| 1733 ); |
| 1734 |
| 1735 /* |
| 1736 * Copy data from a VAImage to a surface |
| 1737 * Image must be in a format supported by the implementation |
| 1738 * Returns a VA_STATUS_ERROR_SURFACE_BUSY if the surface |
| 1739 * shouldn't be rendered into when this is called |
| 1740 */ |
| 1741 VAStatus vaPutImage ( |
| 1742 VADisplay dpy, |
| 1743 VASurfaceID surface, |
| 1744 VAImageID image, |
| 1745 int src_x, |
| 1746 int src_y, |
| 1747 unsigned int src_width, |
| 1748 unsigned int src_height, |
| 1749 int dest_x, |
| 1750 int dest_y, |
| 1751 unsigned int dest_width, |
| 1752 unsigned int dest_height |
| 1753 ); |
| 1754 |
| 1755 /* |
| 1756 * Derive an VAImage from an existing surface. |
| 1757 * This interface will derive a VAImage and corresponding image buffer from |
| 1758 * an existing VA Surface. The image buffer can then be mapped/unmapped for |
| 1759 * direct CPU access. This operation is only possible on implementations with |
| 1760 * direct rendering capabilities and internal surface formats that can be |
| 1761 * represented with a VAImage. When the operation is not possible this interface |
| 1762 * will return VA_STATUS_ERROR_OPERATION_FAILED. Clients should then fall back |
| 1763 * to using vaCreateImage + vaPutImage to accomplish the same task in an |
| 1764 * indirect manner. |
| 1765 * |
| 1766 * Implementations should only return success when the resulting image buffer |
| 1767 * would be useable with vaMap/Unmap. |
| 1768 * |
| 1769 * When directly accessing a surface special care must be taken to insure |
| 1770 * proper synchronization with the graphics hardware. Clients should call |
| 1771 * vaQuerySurfaceStatus to insure that a surface is not the target of concurrent |
| 1772 * rendering or currently being displayed by an overlay. |
| 1773 * |
| 1774 * Additionally nothing about the contents of a surface should be assumed |
| 1775 * following a vaPutSurface. Implementations are free to modify the surface for |
| 1776 * scaling or subpicture blending within a call to vaPutImage. |
| 1777 * |
| 1778 * Calls to vaPutImage or vaGetImage using the same surface from which the image |
| 1779 * has been derived will return VA_STATUS_ERROR_SURFACE_BUSY. vaPutImage or |
| 1780 * vaGetImage with other surfaces is supported. |
| 1781 * |
| 1782 * An image created with vaDeriveImage should be freed with vaDestroyImage. The |
| 1783 * image and image buffer structures will be destroyed; however, the underlying |
| 1784 * surface will remain unchanged until freed with vaDestroySurfaces. |
| 1785 */ |
| 1786 VAStatus vaDeriveImage ( |
| 1787 VADisplay dpy, |
| 1788 VASurfaceID surface, |
| 1789 VAImage *image /* out */ |
| 1790 ); |
| 1791 |
| 1792 /* |
| 1793 * Subpictures |
| 1794 * Subpicture is a special type of image that can be blended |
| 1795 * with a surface during vaPutSurface(). Subpicture can be used to render |
| 1796 * DVD sub-titles or closed captioning text etc. |
| 1797 */ |
| 1798 |
| 1799 typedef VAGenericID VASubpictureID; |
| 1800 |
| 1801 /* Get maximum number of subpicture formats supported by the implementation */ |
| 1802 int vaMaxNumSubpictureFormats ( |
| 1803 VADisplay dpy |
| 1804 ); |
| 1805 |
| 1806 /* flags for subpictures */ |
| 1807 #define VA_SUBPICTURE_CHROMA_KEYING 0x0001 |
| 1808 #define VA_SUBPICTURE_GLOBAL_ALPHA 0x0002 |
| 1809 #define VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD 0x0004 |
| 1810 /* |
| 1811 * Query supported subpicture formats |
| 1812 * The caller must provide a "format_list" array that can hold at |
| 1813 * least vaMaxNumSubpictureFormats() entries. The flags arrary holds the flag |
| 1814 * for each format to indicate additional capabilities for that format. The actu
al |
| 1815 * number of formats returned in "format_list" is returned in "num_formats". |
| 1816 * flags: returned value to indicate addtional capabilities |
| 1817 * VA_SUBPICTURE_CHROMA_KEYING - supports chroma-keying |
| 1818 * VA_SUBPICTURE_GLOBAL_ALPHA - supports global alpha |
| 1819 * VA_SUBPICTURE_DESTINATION_IS_SCREEN_COORD - supports unscaled screen
relative subpictures for On Screen Display |
| 1820 */ |
| 1821 |
| 1822 VAStatus vaQuerySubpictureFormats ( |
| 1823 VADisplay dpy, |
| 1824 VAImageFormat *format_list, /* out */ |
| 1825 unsigned int *flags, /* out */ |
| 1826 unsigned int *num_formats /* out */ |
| 1827 ); |
| 1828 |
| 1829 /* |
| 1830 * Subpictures are created with an image associated. |
| 1831 */ |
| 1832 VAStatus vaCreateSubpicture ( |
| 1833 VADisplay dpy, |
| 1834 VAImageID image, |
| 1835 VASubpictureID *subpicture /* out */ |
| 1836 ); |
| 1837 |
| 1838 /* |
| 1839 * Destroy the subpicture before destroying the image it is assocated to |
| 1840 */ |
| 1841 VAStatus vaDestroySubpicture ( |
| 1842 VADisplay dpy, |
| 1843 VASubpictureID subpicture |
| 1844 ); |
| 1845 |
| 1846 /* |
| 1847 * Bind an image to the subpicture. This image will now be associated with |
| 1848 * the subpicture instead of the one at creation. |
| 1849 */ |
| 1850 VAStatus vaSetSubpictureImage ( |
| 1851 VADisplay dpy, |
| 1852 VASubpictureID subpicture, |
| 1853 VAImageID image |
| 1854 ); |
| 1855 |
| 1856 /* |
| 1857 * If chromakey is enabled, then the area where the source value falls within |
| 1858 * the chromakey [min, max] range is transparent |
| 1859 * The chromakey component format is the following: |
| 1860 * For RGB: [0:7] Red [8:15] Blue [16:23] Green |
| 1861 * For YUV: [0:7] V [8:15] U [16:23] Y |
| 1862 * The chromakey mask can be used to mask out certain components for chromakey |
| 1863 * comparision |
| 1864 */ |
| 1865 VAStatus vaSetSubpictureChromakey ( |
| 1866 VADisplay dpy, |
| 1867 VASubpictureID subpicture, |
| 1868 unsigned int chromakey_min, |
| 1869 unsigned int chromakey_max, |
| 1870 unsigned int chromakey_mask |
| 1871 ); |
| 1872 |
| 1873 /* |
| 1874 * Global alpha value is between 0 and 1. A value of 1 means fully opaque and |
| 1875 * a value of 0 means fully transparent. If per-pixel alpha is also specified th
en |
| 1876 * the overall alpha is per-pixel alpha multiplied by the global alpha |
| 1877 */ |
| 1878 VAStatus vaSetSubpictureGlobalAlpha ( |
| 1879 VADisplay dpy, |
| 1880 VASubpictureID subpicture, |
| 1881 float global_alpha |
| 1882 ); |
| 1883 |
| 1884 /* |
| 1885 * vaAssociateSubpicture associates the subpicture with target_surfaces. |
| 1886 * It defines the region mapping between the subpicture and the target |
| 1887 * surfaces through source and destination rectangles (with the same width and h
eight). |
| 1888 * Both will be displayed at the next call to vaPutSurface. Additional |
| 1889 * associations before the call to vaPutSurface simply overrides the association
. |
| 1890 */ |
| 1891 VAStatus vaAssociateSubpicture ( |
| 1892 VADisplay dpy, |
| 1893 VASubpictureID subpicture, |
| 1894 VASurfaceID *target_surfaces, |
| 1895 int num_surfaces, |
| 1896 short src_x, /* upper left offset in subpicture */ |
| 1897 short src_y, |
| 1898 unsigned short src_width, |
| 1899 unsigned short src_height, |
| 1900 short dest_x, /* upper left offset in surface */ |
| 1901 short dest_y, |
| 1902 unsigned short dest_width, |
| 1903 unsigned short dest_height, |
| 1904 /* |
| 1905 * whether to enable chroma-keying, global-alpha, or screen relative mode |
| 1906 * see VA_SUBPICTURE_XXX values |
| 1907 */ |
| 1908 unsigned int flags |
| 1909 ); |
| 1910 |
| 1911 /* |
| 1912 * vaDeassociateSubpicture removes the association of the subpicture with target
_surfaces. |
| 1913 */ |
| 1914 VAStatus vaDeassociateSubpicture ( |
| 1915 VADisplay dpy, |
| 1916 VASubpictureID subpicture, |
| 1917 VASurfaceID *target_surfaces, |
| 1918 int num_surfaces |
| 1919 ); |
| 1920 |
| 1921 typedef struct _VARectangle |
| 1922 { |
| 1923 short x; |
| 1924 short y; |
| 1925 unsigned short width; |
| 1926 unsigned short height; |
| 1927 } VARectangle; |
| 1928 |
| 1929 /* |
| 1930 * Display attributes |
| 1931 * Display attributes are used to control things such as contrast, hue, saturati
on, |
| 1932 * brightness etc. in the rendering process. The application can query what |
| 1933 * attributes are supported by the driver, and then set the appropriate attribut
es |
| 1934 * before calling vaPutSurface() |
| 1935 */ |
| 1936 /* PowerVR IEP Lite attributes */ |
| 1937 typedef enum |
| 1938 { |
| 1939 VADISPLAYATTRIB_BLE_OFF = 0x00, |
| 1940 VADISPLAYATTRIB_BLE_LOW, |
| 1941 VADISPLAYATTRIB_BLE_MEDIUM, |
| 1942 VADISPLAYATTRIB_BLE_HIGH, |
| 1943 VADISPLAYATTRIB_BLE_NONE, |
| 1944 } VADisplayAttribBLEMode; |
| 1945 |
| 1946 /* attribute value for VADisplayAttribRotation */ |
| 1947 #define VA_ROTATION_NONE 0x00000000 |
| 1948 #define VA_ROTATION_90 0x00000001 |
| 1949 #define VA_ROTATION_180 0x00000002 |
| 1950 #define VA_ROTATION_270 0x00000003 |
| 1951 |
| 1952 /* attribute value for VADisplayAttribOutOfLoopDeblock */ |
| 1953 #define VA_OOL_DEBLOCKING_FALSE 0x00000000 |
| 1954 #define VA_OOL_DEBLOCKING_TRUE 0x00000001 |
| 1955 |
| 1956 /* Render mode */ |
| 1957 #define VA_RENDER_MODE_UNDEFINED 0 |
| 1958 #define VA_RENDER_MODE_LOCAL_OVERLAY 1 |
| 1959 #define VA_RENDER_MODE_LOCAL_GPU 2 |
| 1960 #define VA_RENDER_MODE_EXTERNAL_OVERLAY 4 |
| 1961 #define VA_RENDER_MODE_EXTERNAL_GPU 8 |
| 1962 |
| 1963 /* Render device */ |
| 1964 #define VA_RENDER_DEVICE_UNDEFINED 0 |
| 1965 #define VA_RENDER_DEVICE_LOCAL 1 |
| 1966 #define VA_RENDER_DEVICE_EXTERNAL 2 |
| 1967 |
| 1968 /* Currently defined display attribute types */ |
| 1969 typedef enum |
| 1970 { |
| 1971 VADisplayAttribBrightness = 0, |
| 1972 VADisplayAttribContrast = 1, |
| 1973 VADisplayAttribHue = 2, |
| 1974 VADisplayAttribSaturation = 3, |
| 1975 /* client can specifiy a background color for the target window |
| 1976 * the new feature of video conference, |
| 1977 * the uncovered area of the surface is filled by this color |
| 1978 * also it will blend with the decoded video color |
| 1979 */ |
| 1980 VADisplayAttribBackgroundColor = 4, |
| 1981 /* |
| 1982 * this is a gettable only attribute. For some implementations that use the |
| 1983 * hardware overlay, after PutSurface is called, the surface can not be |
| 1984 * re-used until after the subsequent PutSurface call. If this is the case |
| 1985 * then the value for this attribute will be set to 1 so that the client |
| 1986 * will not attempt to re-use the surface right after returning from a call |
| 1987 * to PutSurface. |
| 1988 * |
| 1989 * Don't use it, use flag VASurfaceDisplaying of vaQuerySurfaceStatus since |
| 1990 * driver may use overlay or GPU alternatively |
| 1991 */ |
| 1992 VADisplayAttribDirectSurface = 5, |
| 1993 VADisplayAttribRotation = 6, |
| 1994 VADisplayAttribOutofLoopDeblock = 7, |
| 1995 |
| 1996 /* PowerVR IEP Lite specific attributes */ |
| 1997 VADisplayAttribBLEBlackMode = 8, |
| 1998 VADisplayAttribBLEWhiteMode = 9, |
| 1999 VADisplayAttribBlueStretch = 10, |
| 2000 VADisplayAttribSkinColorCorrection = 11, |
| 2001 /* |
| 2002 * For type VADisplayAttribCSCMatrix, "value" field is a pointer to the colo
r |
| 2003 * conversion matrix. Each element in the matrix is float-point |
| 2004 */ |
| 2005 VADisplayAttribCSCMatrix = 12, |
| 2006 /* specify the constant color used to blend with video surface |
| 2007 * Cd = Cv*Cc*Ac + Cb *(1 - Ac) C means the constant RGB |
| 2008 * d: the final color to overwrite into the frame buffer |
| 2009 * v: decoded video after color conversion, |
| 2010 * c: video color specified by VADisplayAttribBlendColor |
| 2011 * b: background color of the drawable |
| 2012 */ |
| 2013 VADisplayAttribBlendColor = 13, |
| 2014 /* |
| 2015 * Indicate driver to skip painting color key or not. |
| 2016 * only applicable if the render is overlay |
| 2017 */ |
| 2018 VADisplayAttribOverlayAutoPaintColorKey = 14, |
| 2019 /* |
| 2020 * customized overlay color key, the format is RGB888 |
| 2021 * [23:16] = Red, [15:08] = Green, [07:00] = Blue. |
| 2022 */ |
| 2023 VADisplayAttribOverlayColorKey = 15, |
| 2024 /* |
| 2025 * The hint for the implementation of vaPutSurface |
| 2026 * normally, the driver could use an overlay or GPU to render the surface on
the screen |
| 2027 * this flag provides APP the flexibity to switch the render dynamically |
| 2028 */ |
| 2029 VADisplayAttribRenderMode = 16, |
| 2030 /* |
| 2031 * specify if vaPutSurface needs to render into specified monitors |
| 2032 * one example is that one external monitor (e.g. HDMI) is enabled, |
| 2033 * but the window manager is not aware of it, and there is no associated dra
wable |
| 2034 */ |
| 2035 VADisplayAttribRenderDevice = 17, |
| 2036 /* |
| 2037 * specify vaPutSurface render area if there is no drawable on the monitor |
| 2038 */ |
| 2039 VADisplayAttribRenderRect = 18, |
| 2040 } VADisplayAttribType; |
| 2041 |
| 2042 /* flags for VADisplayAttribute */ |
| 2043 #define VA_DISPLAY_ATTRIB_NOT_SUPPORTED 0x0000 |
| 2044 #define VA_DISPLAY_ATTRIB_GETTABLE 0x0001 |
| 2045 #define VA_DISPLAY_ATTRIB_SETTABLE 0x0002 |
| 2046 |
| 2047 typedef struct _VADisplayAttribute |
| 2048 { |
| 2049 VADisplayAttribType type; |
| 2050 int min_value; |
| 2051 int max_value; |
| 2052 int value; /* used by the set/get attribute functions */ |
| 2053 /* flags can be VA_DISPLAY_ATTRIB_GETTABLE or VA_DISPLAY_ATTRIB_SETTABLE or OR'd
together */ |
| 2054 unsigned int flags; |
| 2055 } VADisplayAttribute; |
| 2056 |
| 2057 /* Get maximum number of display attributs supported by the implementation */ |
| 2058 int vaMaxNumDisplayAttributes ( |
| 2059 VADisplay dpy |
| 2060 ); |
| 2061 |
| 2062 /* |
| 2063 * Query display attributes |
| 2064 * The caller must provide a "attr_list" array that can hold at |
| 2065 * least vaMaxNumDisplayAttributes() entries. The actual number of attributes |
| 2066 * returned in "attr_list" is returned in "num_attributes". |
| 2067 */ |
| 2068 VAStatus vaQueryDisplayAttributes ( |
| 2069 VADisplay dpy, |
| 2070 VADisplayAttribute *attr_list, /* out */ |
| 2071 int *num_attributes /* out */ |
| 2072 ); |
| 2073 |
| 2074 /* |
| 2075 * Get display attributes |
| 2076 * This function returns the current attribute values in "attr_list". |
| 2077 * Only attributes returned with VA_DISPLAY_ATTRIB_GETTABLE set in the "flags" f
ield |
| 2078 * from vaQueryDisplayAttributes() can have their values retrieved. |
| 2079 */ |
| 2080 VAStatus vaGetDisplayAttributes ( |
| 2081 VADisplay dpy, |
| 2082 VADisplayAttribute *attr_list, /* in/out */ |
| 2083 int num_attributes |
| 2084 ); |
| 2085 |
| 2086 /* |
| 2087 * Set display attributes |
| 2088 * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" f
ield |
| 2089 * from vaQueryDisplayAttributes() can be set. If the attribute is not settable
or |
| 2090 * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPP
ORTED |
| 2091 */ |
| 2092 VAStatus vaSetDisplayAttributes ( |
| 2093 VADisplay dpy, |
| 2094 VADisplayAttribute *attr_list, |
| 2095 int num_attributes |
| 2096 ); |
| 2097 |
| 2098 #ifdef __cplusplus |
| 2099 } |
| 2100 #endif |
| 2101 |
| 2102 #endif /* _VA_H_ */ |
OLD | NEW |