1 /* 2 * Copyright (c) 2007-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 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 /** 26 * \file va_enc_h264.h 27 * \brief The H.264 encoding API 28 * 29 * This file contains the \ref api_enc_h264 "H.264 encoding API". 30 */ 31 32 #ifndef VA_ENC_H264_H 33 #define VA_ENC_H264_H 34 35 #ifdef __cplusplus 36 extern "C" { 37 #endif 38 39 /** 40 * \defgroup api_enc_h264 H.264 encoding API 41 * 42 * @{ 43 */ 44 45 /** 46 * @name Picture flags 47 * 48 * Those flags flags are meant to signal when a picture marks the end 49 * of a sequence, a stream, or even both at once. 50 * 51 * @{ 52 */ 53 /** 54 * \brief Marks the last picture in the sequence. 55 * 56 * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame. 57 */ 58 #define H264_LAST_PICTURE_EOSEQ 0x01 59 /** 60 * \brief Marks the last picture in the stream. 61 * 62 * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame. 63 */ 64 #define H264_LAST_PICTURE_EOSTREAM 0x02 65 /**@}*/ 66 67 /** 68 * \brief Packed header types specific to H.264 encoding. 69 * 70 * Types of packed headers generally used for H.264 encoding. Each 71 * associated packed header data buffer shall contain the start code 72 * prefix 0x000001 followed by the complete NAL unit, thus also 73 * including the \c nal_unit_type. 74 * 75 * Note: the start code prefix can contain an arbitrary number of leading 76 * zeros. The driver will skip them for emulation prevention bytes insertion, 77 * if necessary. 78 */ 79 typedef enum { 80 /** 81 * \brief Packed Sequence Parameter Set (SPS). 82 * 83 * The corresponding packed header data buffer shall contain the 84 * complete seq_parameter_set_rbsp() syntax element. 85 * 86 * Note: packed \c nal_unit_type shall be equal to 7. 87 */ 88 VAEncPackedHeaderH264_SPS = VAEncPackedHeaderSequence, 89 /** 90 * \brief Packed Picture Parameter Set (PPS). 91 * 92 * The corresponding packed header data buffer shall contain the 93 * complete pic_parameter_set_rbsp() syntax element. 94 * 95 * Note: packed \c nal_unit_type shall be equal to 8. 96 */ 97 VAEncPackedHeaderH264_PPS = VAEncPackedHeaderPicture, 98 /** 99 * \brief Packed slice header. 100 * 101 * The corresponding packed header data buffer shall contain the 102 * \c slice_header() syntax element only, along with any start 103 * code prefix and NAL unit type preceeding it. i.e. this means 104 * that the buffer does not contain any of the \c slice_data() or 105 * the \c rbsp_slice_trailing_bits(). 106 * 107 * Note: packed \c nal_unit_type shall be equal to 1 (non-IDR 108 * picture), or 5 (IDR picture). 109 */ 110 VAEncPackedHeaderH264_Slice = VAEncPackedHeaderSlice, 111 /** 112 * \brief Packed Supplemental Enhancement Information (SEI). 113 * 114 * The corresponding packed header data buffer shall contain the 115 * complete sei_rbsp() syntax element, thus including several 116 * sei_message() elements if necessary. 117 * 118 * Note: packed \c nal_unit_type shall be equal to 6. 119 */ 120 VAEncPackedHeaderH264_SEI = (VAEncPackedHeaderMiscMask | 1), 121 } VAEncPackedHeaderTypeH264; 122 123 /** 124 * \brief Sequence parameter for H.264 encoding in baseline, main & high 125 * profiles. 126 * 127 * This structure holds information for \c seq_parameter_set_data() as 128 * defined by the H.264 specification. 129 * 130 * If packed sequence headers mode is used, i.e. if the encoding 131 * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE 132 * flag, then the driver expects two more buffers to be provided to 133 * the same \c vaRenderPicture() as this buffer: 134 * - a #VAEncPackedHeaderParameterBuffer with type set to 135 * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; 136 * - a #VAEncPackedHeaderDataBuffer which holds the actual packed 137 * header data. 138 * 139 * If \c seq_scaling_matrix_present_flag is set to \c 1, then a 140 * #VAIQMatrixBufferH264 buffer shall also be provided within the same 141 * \c vaRenderPicture() call as this sequence parameter buffer. 142 */ 143 typedef struct _VAEncSequenceParameterBufferH264 { 144 /** \brief Same as the H.264 bitstream syntax element. */ 145 unsigned char seq_parameter_set_id; 146 /** \brief Same as the H.264 bitstream syntax element. */ 147 unsigned char level_idc; 148 /** \brief Period between I frames. */ 149 unsigned int intra_period; 150 /** \brief Period between IDR frames. */ 151 unsigned int intra_idr_period; 152 /** \brief Period between I/P frames. */ 153 unsigned int ip_period; 154 /** 155 * \brief Initial bitrate set for this sequence in CBR or VBR modes. 156 * 157 * This field represents the initial bitrate value for this 158 * sequence if CBR or VBR mode is used, i.e. if the encoder 159 * pipeline was created with a #VAConfigAttribRateControl 160 * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. 161 * 162 * The bitrate can be modified later on through 163 * #VAEncMiscParameterRateControl buffers. 164 */ 165 unsigned int bits_per_second; 166 /** \brief Same as the H.264 bitstream syntax element. */ 167 unsigned int max_num_ref_frames; 168 /** \brief Picture width in macroblocks. */ 169 unsigned short picture_width_in_mbs; 170 /** \brief Picture height in macroblocks. */ 171 unsigned short picture_height_in_mbs; 172 173 union { 174 struct { 175 /** \brief Same as the H.264 bitstream syntax element. */ 176 unsigned int chroma_format_idc : 2; 177 /** \brief Same as the H.264 bitstream syntax element. */ 178 unsigned int frame_mbs_only_flag : 1; 179 /** \brief Same as the H.264 bitstream syntax element. */ 180 unsigned int mb_adaptive_frame_field_flag : 1; 181 /** \brief Same as the H.264 bitstream syntax element. */ 182 unsigned int seq_scaling_matrix_present_flag : 1; 183 /** \brief Same as the H.264 bitstream syntax element. */ 184 unsigned int direct_8x8_inference_flag : 1; 185 /** \brief Same as the H.264 bitstream syntax element. */ 186 unsigned int log2_max_frame_num_minus4 : 4; 187 /** \brief Same as the H.264 bitstream syntax element. */ 188 unsigned int pic_order_cnt_type : 2; 189 /** \brief Same as the H.264 bitstream syntax element. */ 190 unsigned int log2_max_pic_order_cnt_lsb_minus4 : 4; 191 /** \brief Same as the H.264 bitstream syntax element. */ 192 unsigned int delta_pic_order_always_zero_flag : 1; 193 } bits; 194 unsigned int value; 195 } seq_fields; 196 197 /** \brief Same as the H.264 bitstream syntax element. */ 198 unsigned char bit_depth_luma_minus8; 199 /** \brief Same as the H.264 bitstream syntax element. */ 200 unsigned char bit_depth_chroma_minus8; 201 202 /** if pic_order_cnt_type == 1 */ 203 /**@{*/ 204 /** \brief Same as the H.264 bitstream syntax element. */ 205 unsigned char num_ref_frames_in_pic_order_cnt_cycle; 206 /** \brief Same as the H.264 bitstream syntax element. */ 207 int offset_for_non_ref_pic; 208 /** \brief Same as the H.264 bitstream syntax element. */ 209 int offset_for_top_to_bottom_field; 210 /** \brief Same as the H.264 bitstream syntax element. */ 211 int offset_for_ref_frame[256]; 212 /**@}*/ 213 214 /** @name Cropping (optional) */ 215 /**@{*/ 216 /** \brief Same as the H.264 bitstream syntax element. */ 217 unsigned char frame_cropping_flag; 218 /** \brief Same as the H.264 bitstream syntax element. */ 219 unsigned int frame_crop_left_offset; 220 /** \brief Same as the H.264 bitstream syntax element. */ 221 unsigned int frame_crop_right_offset; 222 /** \brief Same as the H.264 bitstream syntax element. */ 223 unsigned int frame_crop_top_offset; 224 /** \brief Same as the H.264 bitstream syntax element. */ 225 unsigned int frame_crop_bottom_offset; 226 /**@}*/ 227 228 /** @name VUI parameters (optional) */ 229 /**@{*/ 230 /** \brief Same as the H.264 bitstream syntax element. */ 231 unsigned char vui_parameters_present_flag; 232 union { 233 struct { 234 /** \brief Same as the H.264 bitstream syntax element. */ 235 unsigned int aspect_ratio_info_present_flag : 1; 236 /** \brief Same as the H.264 bitstream syntax element. */ 237 unsigned int timing_info_present_flag : 1; 238 /** \brief Same as the H.264 bitstream syntax element. */ 239 unsigned int bitstream_restriction_flag : 1; 240 /** \brief Range: 0 to 16, inclusive. */ 241 unsigned int log2_max_mv_length_horizontal : 5; 242 /** \brief Range: 0 to 16, inclusive. */ 243 unsigned int log2_max_mv_length_vertical : 5; 244 } bits; 245 unsigned int value; 246 } vui_fields; 247 /** \brief Same as the H.264 bitstream syntax element. */ 248 unsigned char aspect_ratio_idc; 249 /** \brief Same as the H.264 bitstream syntax element. */ 250 unsigned int sar_width; 251 /** \brief Same as the H.264 bitstream syntax element. */ 252 unsigned int sar_height; 253 /** \brief Same as the H.264 bitstream syntax element. */ 254 unsigned int num_units_in_tick; 255 /** \brief Same as the H.264 bitstream syntax element. */ 256 unsigned int time_scale; 257 /**@}*/ 258 } VAEncSequenceParameterBufferH264; 259 260 /** 261 * \brief Picture parameter for H.264 encoding in baseline, main & high 262 * profiles. 263 * 264 * This structure holds information for \c pic_parameter_set_rbsp() as 265 * defined by the H.264 specification. 266 * 267 * If packed picture headers mode is used, i.e. if the encoding 268 * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE 269 * flag, then the driver expects two more buffers to be provided to 270 * the same \c vaRenderPicture() as this buffer: 271 * - a #VAEncPackedHeaderParameterBuffer with type set to 272 * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; 273 * - a #VAEncPackedHeaderDataBuffer which holds the actual packed 274 * header data. 275 * 276 * If \c pic_scaling_matrix_present_flag is set to \c 1, then a 277 * #VAIQMatrixBufferH264 buffer shall also be provided within the same 278 * \c vaRenderPicture() call as this picture parameter buffer. 279 */ 280 typedef struct _VAEncPictureParameterBufferH264 { 281 /** 282 * \brief Information about the picture to be encoded. 283 * 284 * See #VAPictureH264 for further description of each field. 285 * Note that CurrPic.picture_id represents the reconstructed 286 * (decoded) picture. User provides a scratch VA surface ID here. 287 */ 288 VAPictureH264 CurrPic; 289 /** 290 * \brief Decoded Picture Buffer (DPB). 291 * 292 * This array represents the list of reconstructed (decoded) 293 * frames used as reference. It is important to keep track of 294 * reconstructed frames so that they can be used later on as 295 * reference for P or B-frames encoding. 296 */ 297 VAPictureH264 ReferenceFrames[16]; 298 /** 299 * \brief Output encoded bitstream. 300 * 301 * \ref coded_buf has type #VAEncCodedBufferType. It should be 302 * large enough to hold the compressed NAL slice and possibly SPS 303 * and PPS NAL units. 304 */ 305 VABufferID coded_buf; 306 307 /** \brief The picture parameter set referred to in the slice header. */ 308 unsigned char pic_parameter_set_id; 309 /** \brief The active sequence parameter set. Range: 0 to 31, inclusive. */ 310 unsigned char seq_parameter_set_id; 311 312 /** 313 * \brief OR'd flags describing whether the picture is the last one or not. 314 * 315 * This fields holds 0 if the picture to be encoded is not the last 316 * one in the stream or sequence. Otherwise, it is a combination of 317 * \ref H264_LAST_PICTURE_EOSEQ or \ref H264_LAST_PICTURE_EOSTREAM. 318 */ 319 unsigned char last_picture; 320 321 /** \brief The picture identifier. 322 * Range: 0 to \f$2^{log2\_max\_frame\_num\_minus4 + 4} - 1\f$, inclusive. 323 */ 324 unsigned short frame_num; 325 326 /** \brief \c pic_init_qp_minus26 + 26. */ 327 unsigned char pic_init_qp; 328 /** \brief Maximum reference index for reference picture list 0. 329 * Range: 0 to 31, inclusive. 330 */ 331 unsigned char num_ref_idx_l0_active_minus1; 332 /** \brief Maximum reference index for reference picture list 1. 333 * Range: 0 to 31, inclusive. 334 */ 335 unsigned char num_ref_idx_l1_active_minus1; 336 337 /** \brief Range: -12 to 12, inclusive. */ 338 signed char chroma_qp_index_offset; 339 /** \brief Range: -12 to 12, inclusive. */ 340 signed char second_chroma_qp_index_offset; 341 342 union { 343 struct { 344 /** \brief Is picture an IDR picture? */ 345 unsigned int idr_pic_flag : 1; 346 /** \brief Is picture a reference picture? */ 347 unsigned int reference_pic_flag : 2; 348 /** \brief Selects CAVLC (0) or CABAC (1) entropy coding mode. */ 349 unsigned int entropy_coding_mode_flag : 1; 350 /** \brief Is weighted prediction applied to P slices? */ 351 unsigned int weighted_pred_flag : 1; 352 /** \brief Range: 0 to 2, inclusive. */ 353 unsigned int weighted_bipred_idc : 2; 354 /** \brief Same as the H.264 bitstream syntax element. */ 355 unsigned int constrained_intra_pred_flag : 1; 356 /** \brief Same as the H.264 bitstream syntax element. */ 357 unsigned int transform_8x8_mode_flag : 1; 358 /** \brief Same as the H.264 bitstream syntax element. */ 359 unsigned int deblocking_filter_control_present_flag : 1; 360 /** \brief Same as the H.264 bitstream syntax element. */ 361 unsigned int redundant_pic_cnt_present_flag : 1; 362 /** \brief Same as the H.264 bitstream syntax element. */ 363 unsigned int pic_order_present_flag : 1; 364 /** \brief Same as the H.264 bitstream syntax element. */ 365 unsigned int pic_scaling_matrix_present_flag : 1; 366 } bits; 367 unsigned int value; 368 } pic_fields; 369 } VAEncPictureParameterBufferH264; 370 371 /** 372 * \brief Slice parameter for H.264 encoding in baseline, main & high profiles. 373 * 374 * This structure holds information for \c 375 * slice_layer_without_partitioning_rbsp() as defined by the H.264 376 * specification. 377 * 378 * If packed slice headers mode is used, i.e. if the encoding 379 * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE 380 * flag, then the driver expects two more buffers to be provided to 381 * the same \c vaRenderPicture() as this buffer: 382 * - a #VAEncPackedHeaderParameterBuffer with type set to 383 * VAEncPackedHeaderType::VAEncPackedHeaderSlice ; 384 * - a #VAEncPackedHeaderDataBuffer which holds the actual packed 385 * header data. 386 * 387 * If per-macroblock encoder configuration is needed, \c macroblock_info 388 * references a buffer of type #VAEncMacroblockParameterBufferH264. This 389 * buffer is not passed to vaRenderPicture(). i.e. it is not destroyed 390 * by subsequent calls to vaRenderPicture() and then can be re-used 391 * without re-allocating the whole buffer. 392 */ 393 typedef struct _VAEncSliceParameterBufferH264 { 394 /** \brief Starting MB address for this slice. */ 395 unsigned int macroblock_address; 396 /** \brief Number of macroblocks in this slice. */ 397 unsigned int num_macroblocks; 398 /** 399 * \brief Per-MB encoder configuration buffer, or \c VA_INVALID_ID. 400 * 401 * If per-MB encoder configuration is needed, then \ref macroblock_info 402 * references a buffer of type #VAEncMacroblockParameterBufferH264 403 * (\c VAEncMacroblockParameterBufferType). Otherwise, buffer id 404 * is set to \c VA_INVALID_ID and per-MB configuration is derived 405 * from this slice parameter. 406 * 407 * The \c macroblock_info buffer must hold \ref num_macroblocks 408 * elements. 409 */ 410 VABufferID macroblock_info; 411 /** \brief Slice type. 412 * Range: 0..2, 5..7, i.e. no switching slices. 413 */ 414 unsigned char slice_type; 415 /** \brief Same as the H.264 bitstream syntax element. */ 416 unsigned char pic_parameter_set_id; 417 /** \brief Same as the H.264 bitstream syntax element. */ 418 unsigned short idr_pic_id; 419 420 /** @name If pic_order_cnt_type == 0 */ 421 /**@{*/ 422 /** \brief The picture order count modulo MaxPicOrderCntLsb. */ 423 unsigned short pic_order_cnt_lsb; 424 /** \brief Valid if \c pic_order_present_flag and this is a bottom field. */ 425 int delta_pic_order_cnt_bottom; 426 /**@}*/ 427 /** @name If pic_order_cnt_type == 1 && !delta_pic_order_always_zero_flag */ 428 /**@{*/ 429 /** \brief [0]: top, [1]: bottom. */ 430 int delta_pic_order_cnt[2]; 431 /**@}*/ 432 433 /** @name If slice_type == B */ 434 /**@{*/ 435 unsigned char direct_spatial_mv_pred_flag; 436 /**@}*/ 437 438 /** @name If slice_type == P */ 439 /**@{*/ 440 /** \brief Specifies if 441 * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l0_active_minus1 or 442 * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l1_active_minus1 are 443 * overriden by the values for this slice. 444 */ 445 unsigned char num_ref_idx_active_override_flag; 446 /** \brief Maximum reference index for reference picture list 0. 447 * Range: 0 to 31, inclusive. 448 */ 449 unsigned char num_ref_idx_l0_active_minus1; 450 /** \brief Maximum reference index for reference picture list 1. 451 * Range: 0 to 31, inclusive. 452 */ 453 unsigned char num_ref_idx_l1_active_minus1; 454 /** \brief Reference picture list 0 (for P slices). */ 455 VAPictureH264 RefPicList0[32]; 456 /** \brief Reference picture list 1 (for B slices). */ 457 VAPictureH264 RefPicList1[32]; 458 /**@}*/ 459 460 /** @name pred_weight_table() */ 461 /**@{*/ 462 /** \brief Same as the H.264 bitstream syntax element. */ 463 unsigned char luma_log2_weight_denom; 464 /** \brief Same as the H.264 bitstream syntax element. */ 465 unsigned char chroma_log2_weight_denom; 466 /** \brief Same as the H.264 bitstream syntax element. */ 467 unsigned char luma_weight_l0_flag; 468 /** \brief Same as the H.264 bitstream syntax element. */ 469 signed short luma_weight_l0[32]; 470 /** \brief Same as the H.264 bitstream syntax element. */ 471 signed short luma_offset_l0[32]; 472 /** \brief Same as the H.264 bitstream syntax element. */ 473 unsigned char chroma_weight_l0_flag; 474 /** \brief Same as the H.264 bitstream syntax element. */ 475 signed short chroma_weight_l0[32][2]; 476 /** \brief Same as the H.264 bitstream syntax element. */ 477 signed short chroma_offset_l0[32][2]; 478 /** \brief Same as the H.264 bitstream syntax element. */ 479 unsigned char luma_weight_l1_flag; 480 /** \brief Same as the H.264 bitstream syntax element. */ 481 signed short luma_weight_l1[32]; 482 /** \brief Same as the H.264 bitstream syntax element. */ 483 signed short luma_offset_l1[32]; 484 /** \brief Same as the H.264 bitstream syntax element. */ 485 unsigned char chroma_weight_l1_flag; 486 /** \brief Same as the H.264 bitstream syntax element. */ 487 signed short chroma_weight_l1[32][2]; 488 /** \brief Same as the H.264 bitstream syntax element. */ 489 signed short chroma_offset_l1[32][2]; 490 /**@}*/ 491 492 /** \brief Range: 0 to 2, inclusive. */ 493 unsigned char cabac_init_idc; 494 /** \brief Same as the H.264 bitstream syntax element. */ 495 signed char slice_qp_delta; 496 /** @name If deblocking_filter_control_present_flag */ 497 /**@{*/ 498 /** \brief Range: 0 to 2, inclusive. */ 499 unsigned char disable_deblocking_filter_idc; 500 /** \brief Same as the H.264 bitstream syntax element. */ 501 signed char slice_alpha_c0_offset_div2; 502 /** \brief Same as the H.264 bitstream syntax element. */ 503 signed char slice_beta_offset_div2; 504 /**@}*/ 505 } VAEncSliceParameterBufferH264; 506 507 /** 508 * @name Macroblock neighbour availability bits 509 * 510 * \anchor api_enc_h264_mb_pred_avail_bits 511 * Definitions for macroblock neighbour availability bits used in 512 * intra prediction mode (non MBAFF only). 513 * 514 * @{ 515 */ 516 /** \brief References macroblock in the top-left corner. */ 517 #define VA_MB_PRED_AVAIL_TOP_LEFT (1 << 2) 518 /** \brief References macroblock above the current macroblock. */ 519 #define VA_MB_PRED_AVAIL_TOP (1 << 4) 520 /** \brief References macroblock in the top-right corner. */ 521 #define VA_MB_PRED_AVAIL_TOP_RIGHT (1 << 3) 522 /** \brief References macroblock on the left of the current macroblock. */ 523 #define VA_MB_PRED_AVAIL_LEFT (1 << 6) 524 /**@}*/ 525 526 /** 527 * \brief Macroblock parameter for H.264 encoding in baseline, main & high 528 * profiles. 529 * 530 * This structure holds per-macroblock information. The buffer must be 531 * allocated with as many elements (macroblocks) as necessary to fit 532 * the slice to be encoded. Besides, the per-macroblock records must 533 * be written in a strict raster order and with no gap. i.e. every 534 * macroblock, regardless of its type, shall have an entry. 535 */ 536 typedef struct _VAEncMacroblockParameterBufferH264 { 537 /** 538 * \brief Quantization parameter. 539 * 540 * Requested quantization parameter. Range: 0 to 51, inclusive. 541 * If \ref qp is set to 0xff, then the actual value is derived 542 * from the slice-level value: \c pic_init_qp + \c slice_qp_delta. 543 */ 544 unsigned char qp; 545 546 union { 547 /** @name Data for intra macroblock */ 548 /**@{*/ 549 struct { 550 union { 551 /** 552 * \brief Flag specified to override MB neighbour 553 * availability bits from VME stage. 554 * 555 * This flag specifies that macroblock neighbour 556 * availability bits from the VME stage are overriden 557 * by the \ref pred_avail_flags hereunder. 558 */ 559 unsigned int pred_avail_override_flag : 1; 560 /** 561 * \brief Bitwise representation of which macroblocks 562 * are available for intra prediction. 563 * 564 * If the slice is intra-coded, this field represents 565 * the macroblocks available for intra prediction. 566 * See \ref api_enc_h264_mb_pred_avail_bits 567 * "macroblock neighbour availability" bit definitions. 568 */ 569 unsigned int pred_avail_flags : 8; 570 } bits; 571 unsigned int value; 572 } intra_fields; 573 /**@}*/ 574 575 /** @name Data for inter macroblock */ 576 /**@{*/ 577 struct { 578 union { 579 } bits; 580 unsigned int value; 581 } inter_fields; 582 /**@}*/ 583 } info; 584 } VAEncMacroblockParameterBufferH264; 585 586 /**@}*/ 587 588 #ifdef __cplusplus 589 } 590 #endif 591 592 #endif /* VA_ENC_H264_H */ 593