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 * @deprecated 121 * This is a deprecated packed header flag, All applications can use 122 * \c VA_ENC_PACKED_HEADER_RAW_DATA to pass the corresponding packed 123 * SEI header data buffer to the driver 124 */ 125 VAEncPackedHeaderH264_SEI va_deprecated_enum = (0x80000000 | 1), 126 } VAEncPackedHeaderTypeH264; 127 128 /** 129 * \brief Sequence parameter for H.264 encoding in baseline, main & high 130 * profiles. 131 * 132 * This structure holds information for \c seq_parameter_set_data() as 133 * defined by the H.264 specification. 134 * 135 * If packed sequence headers mode is used, i.e. if the encoding 136 * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE 137 * flag, then the driver expects two more buffers to be provided to 138 * the same \c vaRenderPicture() as this buffer: 139 * - a #VAEncPackedHeaderParameterBuffer with type set to 140 * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; 141 * - a #VAEncPackedHeaderDataBuffer which holds the actual packed 142 * header data. 143 * 144 * If \c seq_scaling_matrix_present_flag is set to \c 1, then a 145 * #VAIQMatrixBufferH264 buffer shall also be provided within the same 146 * \c vaRenderPicture() call as this sequence parameter buffer. 147 */ 148 typedef struct _VAEncSequenceParameterBufferH264 { 149 /** \brief Same as the H.264 bitstream syntax element. */ 150 uint8_t seq_parameter_set_id; 151 /** \brief Same as the H.264 bitstream syntax element. */ 152 uint8_t level_idc; 153 /** \brief Period between I frames. */ 154 uint32_t intra_period; 155 /** \brief Period between IDR frames. */ 156 uint32_t intra_idr_period; 157 /** \brief Period between I/P frames. */ 158 uint32_t ip_period; 159 /** 160 * \brief Initial bitrate set for this sequence in CBR or VBR modes. 161 * 162 * This field represents the initial bitrate value for this 163 * sequence if CBR or VBR mode is used, i.e. if the encoder 164 * pipeline was created with a #VAConfigAttribRateControl 165 * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. 166 * 167 * The bitrate can be modified later on through 168 * #VAEncMiscParameterRateControl buffers. 169 */ 170 uint32_t bits_per_second; 171 /** \brief Same as the H.264 bitstream syntax element. */ 172 uint32_t max_num_ref_frames; 173 /** \brief Picture width in macroblocks. */ 174 uint16_t picture_width_in_mbs; 175 /** \brief Picture height in macroblocks. */ 176 uint16_t picture_height_in_mbs; 177 178 union { 179 struct { 180 /** \brief Same as the H.264 bitstream syntax element. */ 181 uint32_t chroma_format_idc : 2; 182 /** \brief Same as the H.264 bitstream syntax element. */ 183 uint32_t frame_mbs_only_flag : 1; 184 /** \brief Same as the H.264 bitstream syntax element. */ 185 uint32_t mb_adaptive_frame_field_flag : 1; 186 /** \brief Same as the H.264 bitstream syntax element. */ 187 uint32_t seq_scaling_matrix_present_flag : 1; 188 /** \brief Same as the H.264 bitstream syntax element. */ 189 uint32_t direct_8x8_inference_flag : 1; 190 /** \brief Same as the H.264 bitstream syntax element. */ 191 uint32_t log2_max_frame_num_minus4 : 4; 192 /** \brief Same as the H.264 bitstream syntax element. */ 193 uint32_t pic_order_cnt_type : 2; 194 /** \brief Same as the H.264 bitstream syntax element. */ 195 uint32_t log2_max_pic_order_cnt_lsb_minus4 : 4; 196 /** \brief Same as the H.264 bitstream syntax element. */ 197 uint32_t delta_pic_order_always_zero_flag : 1; 198 } bits; 199 uint32_t value; 200 } seq_fields; 201 202 /** \brief Same as the H.264 bitstream syntax element. */ 203 uint8_t bit_depth_luma_minus8; 204 /** \brief Same as the H.264 bitstream syntax element. */ 205 uint8_t bit_depth_chroma_minus8; 206 207 /** if pic_order_cnt_type == 1 */ 208 /**@{*/ 209 /** \brief Same as the H.264 bitstream syntax element. */ 210 uint8_t num_ref_frames_in_pic_order_cnt_cycle; 211 /** \brief Same as the H.264 bitstream syntax element. */ 212 int32_t offset_for_non_ref_pic; 213 /** \brief Same as the H.264 bitstream syntax element. */ 214 int32_t offset_for_top_to_bottom_field; 215 /** \brief Same as the H.264 bitstream syntax element. */ 216 int32_t offset_for_ref_frame[256]; 217 /**@}*/ 218 219 /** @name Cropping (optional) */ 220 /**@{*/ 221 /** \brief Same as the H.264 bitstream syntax element. */ 222 uint8_t frame_cropping_flag; 223 /** \brief Same as the H.264 bitstream syntax element. */ 224 uint32_t frame_crop_left_offset; 225 /** \brief Same as the H.264 bitstream syntax element. */ 226 uint32_t frame_crop_right_offset; 227 /** \brief Same as the H.264 bitstream syntax element. */ 228 uint32_t frame_crop_top_offset; 229 /** \brief Same as the H.264 bitstream syntax element. */ 230 uint32_t frame_crop_bottom_offset; 231 /**@}*/ 232 233 /** @name VUI parameters (optional) */ 234 /**@{*/ 235 /** \brief Same as the H.264 bitstream syntax element. */ 236 uint8_t vui_parameters_present_flag; 237 union { 238 struct { 239 /** \brief Same as the H.264 bitstream syntax element. */ 240 uint32_t aspect_ratio_info_present_flag : 1; 241 /** \brief Same as the H.264 bitstream syntax element. */ 242 uint32_t timing_info_present_flag : 1; 243 /** \brief Same as the H.264 bitstream syntax element. */ 244 uint32_t bitstream_restriction_flag : 1; 245 /** \brief Range: 0 to 16, inclusive. */ 246 uint32_t log2_max_mv_length_horizontal : 5; 247 /** \brief Range: 0 to 16, inclusive. */ 248 uint32_t log2_max_mv_length_vertical : 5; 249 /** \brief Same as the H.264 bitstream syntax element. */ 250 uint32_t fixed_frame_rate_flag : 1; 251 /** \brief Same as the H.264 bitstream syntax element. */ 252 uint32_t low_delay_hrd_flag : 1; 253 /** \brief Same as the H.264 bitstream syntax element. */ 254 uint32_t motion_vectors_over_pic_boundaries_flag: 1; 255 /** \brief Reserved for future use, must be zero */ 256 uint32_t reserved : 16; 257 } bits; 258 uint32_t value; 259 } vui_fields; 260 /** \brief Same as the H.264 bitstream syntax element. */ 261 uint8_t aspect_ratio_idc; 262 /** \brief Same as the H.264 bitstream syntax element. */ 263 uint32_t sar_width; 264 /** \brief Same as the H.264 bitstream syntax element. */ 265 uint32_t sar_height; 266 /** \brief Same as the H.264 bitstream syntax element. */ 267 uint32_t num_units_in_tick; 268 /** \brief Same as the H.264 bitstream syntax element. */ 269 uint32_t time_scale; 270 271 /** \brief Reserved bytes for future use, must be zero */ 272 uint32_t va_reserved[VA_PADDING_LOW]; 273 /**@}*/ 274 } VAEncSequenceParameterBufferH264; 275 276 /** 277 * \brief Picture parameter for H.264 encoding in baseline, main & high 278 * profiles. 279 * 280 * This structure holds information for \c pic_parameter_set_rbsp() as 281 * defined by the H.264 specification. 282 * 283 * If packed picture headers mode is used, i.e. if the encoding 284 * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE 285 * flag, then the driver expects two more buffers to be provided to 286 * the same \c vaRenderPicture() as this buffer: 287 * - a #VAEncPackedHeaderParameterBuffer with type set to 288 * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; 289 * - a #VAEncPackedHeaderDataBuffer which holds the actual packed 290 * header data. 291 * 292 * If \c pic_scaling_matrix_present_flag is set to \c 1, then a 293 * #VAIQMatrixBufferH264 buffer shall also be provided within the same 294 * \c vaRenderPicture() call as this picture parameter buffer. 295 */ 296 typedef struct _VAEncPictureParameterBufferH264 { 297 /** 298 * \brief Information about the picture to be encoded. 299 * 300 * See #VAPictureH264 for further description of each field. 301 * Note that CurrPic.picture_id represents the reconstructed 302 * (decoded) picture. User provides a scratch VA surface ID here. 303 */ 304 VAPictureH264 CurrPic; 305 /** 306 * \brief Decoded Picture Buffer (DPB). 307 * 308 * This array represents the list of reconstructed (decoded) 309 * frames used as reference. It is important to keep track of 310 * reconstructed frames so that they can be used later on as 311 * reference for P or B-frames encoding. 312 */ 313 VAPictureH264 ReferenceFrames[16]; 314 /** 315 * \brief Output encoded bitstream. 316 * 317 * \ref coded_buf has type #VAEncCodedBufferType. It should be 318 * large enough to hold the compressed NAL slice and possibly SPS 319 * and PPS NAL units. 320 */ 321 VABufferID coded_buf; 322 323 /** \brief The picture parameter set referred to in the slice header. */ 324 uint8_t pic_parameter_set_id; 325 /** \brief The active sequence parameter set. Range: 0 to 31, inclusive. */ 326 uint8_t seq_parameter_set_id; 327 328 /** 329 * \brief OR'd flags describing whether the picture is the last one or not. 330 * 331 * This fields holds 0 if the picture to be encoded is not the last 332 * one in the stream or sequence. Otherwise, it is a combination of 333 * \ref H264_LAST_PICTURE_EOSEQ or \ref H264_LAST_PICTURE_EOSTREAM. 334 */ 335 uint8_t last_picture; 336 337 /** \brief The picture identifier. 338 * Range: 0 to \f$2^{log2\_max\_frame\_num\_minus4 + 4} - 1\f$, inclusive. 339 */ 340 uint16_t frame_num; 341 342 /** \brief \c pic_init_qp_minus26 + 26. */ 343 uint8_t pic_init_qp; 344 /** \brief Maximum reference index for reference picture list 0. 345 * Range: 0 to 31, inclusive. 346 */ 347 uint8_t num_ref_idx_l0_active_minus1; 348 /** \brief Maximum reference index for reference picture list 1. 349 * Range: 0 to 31, inclusive. 350 */ 351 uint8_t num_ref_idx_l1_active_minus1; 352 353 /** \brief Range: -12 to 12, inclusive. */ 354 int8_t chroma_qp_index_offset; 355 /** \brief Range: -12 to 12, inclusive. */ 356 int8_t second_chroma_qp_index_offset; 357 358 union { 359 struct { 360 /** \brief Is picture an IDR picture? */ 361 uint32_t idr_pic_flag : 1; 362 /** \brief Is picture a reference picture? */ 363 uint32_t reference_pic_flag : 2; 364 /** \brief Selects CAVLC (0) or CABAC (1) entropy coding mode. */ 365 uint32_t entropy_coding_mode_flag : 1; 366 /** \brief Is weighted prediction applied to P slices? */ 367 uint32_t weighted_pred_flag : 1; 368 /** \brief Range: 0 to 2, inclusive. */ 369 uint32_t weighted_bipred_idc : 2; 370 /** \brief Same as the H.264 bitstream syntax element. */ 371 uint32_t constrained_intra_pred_flag : 1; 372 /** \brief Same as the H.264 bitstream syntax element. */ 373 uint32_t transform_8x8_mode_flag : 1; 374 /** \brief Same as the H.264 bitstream syntax element. */ 375 uint32_t deblocking_filter_control_present_flag : 1; 376 /** \brief Same as the H.264 bitstream syntax element. */ 377 uint32_t redundant_pic_cnt_present_flag : 1; 378 /** \brief Same as the H.264 bitstream syntax element. */ 379 uint32_t pic_order_present_flag : 1; 380 /** \brief Same as the H.264 bitstream syntax element. */ 381 uint32_t pic_scaling_matrix_present_flag : 1; 382 } bits; 383 uint32_t value; 384 } pic_fields; 385 386 /** \brief Reserved bytes for future use, must be zero */ 387 uint32_t va_reserved[VA_PADDING_LOW]; 388 } VAEncPictureParameterBufferH264; 389 390 typedef struct _VAEncQPBufferH264 { 391 /* 392 * \brief This structure holds QP per 16x16 macroblock. Buffer size shall be 393 * sufficient to fit the slice or frame to be encoded depending on if it is a 394 * slice level or frame level encoding. 395 */ 396 uint8_t qp; 397 } VAEncQPBufferH264; 398 399 /** 400 * \brief Slice parameter for H.264 encoding in baseline, main & high profiles. 401 * 402 * This structure holds information for \c 403 * slice_layer_without_partitioning_rbsp() as defined by the H.264 404 * specification. 405 * 406 * If packed slice headers mode is used, i.e. if the encoding 407 * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE 408 * flag, then the driver expects two more buffers to be provided to 409 * the same \c vaRenderPicture() as this buffer: 410 * - a #VAEncPackedHeaderParameterBuffer with type set to 411 * VAEncPackedHeaderType::VAEncPackedHeaderSlice ; 412 * - a #VAEncPackedHeaderDataBuffer which holds the actual packed 413 * header data. 414 * 415 * If per-macroblock encoder configuration is needed, \c macroblock_info 416 * references a buffer of type #VAEncMacroblockParameterBufferH264. This 417 * buffer is not passed to vaRenderPicture() and it can be re-used 418 * without re-allocating the whole buffer. 419 */ 420 typedef struct _VAEncSliceParameterBufferH264 { 421 /** \brief Starting MB address for this slice. */ 422 uint32_t macroblock_address; 423 /** \brief Number of macroblocks in this slice. */ 424 uint32_t num_macroblocks; 425 /** 426 * \brief Per-MB encoder configuration buffer, or \c VA_INVALID_ID. 427 * 428 * If per-MB encoder configuration is needed, then \ref macroblock_info 429 * references a buffer of type #VAEncMacroblockParameterBufferH264 430 * (\c VAEncMacroblockParameterBufferType). Otherwise, buffer id 431 * is set to \c VA_INVALID_ID and per-MB configuration is derived 432 * from this slice parameter. 433 * 434 * The \c macroblock_info buffer must hold \ref num_macroblocks 435 * elements. 436 */ 437 VABufferID macroblock_info; 438 /** \brief Slice type. 439 * Range: 0..2, 5..7, i.e. no switching slices. 440 */ 441 uint8_t slice_type; 442 /** \brief Same as the H.264 bitstream syntax element. */ 443 uint8_t pic_parameter_set_id; 444 /** \brief Same as the H.264 bitstream syntax element. */ 445 uint16_t idr_pic_id; 446 447 /** @name If pic_order_cnt_type == 0 */ 448 /**@{*/ 449 /** \brief The picture order count modulo MaxPicOrderCntLsb. */ 450 uint16_t pic_order_cnt_lsb; 451 /** \brief Valid if \c pic_order_present_flag and this is a bottom field. */ 452 int32_t delta_pic_order_cnt_bottom; 453 /**@}*/ 454 /** @name If pic_order_cnt_type == 1 && !delta_pic_order_always_zero_flag */ 455 /**@{*/ 456 /** \brief [0]: top, [1]: bottom. */ 457 int32_t delta_pic_order_cnt[2]; 458 /**@}*/ 459 460 /** @name If slice_type == B */ 461 /**@{*/ 462 uint8_t direct_spatial_mv_pred_flag; 463 /**@}*/ 464 465 /** @name If slice_type == P */ 466 /**@{*/ 467 /** \brief Specifies if 468 * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l0_active_minus1 or 469 * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l1_active_minus1 are 470 * overriden by the values for this slice. 471 */ 472 uint8_t num_ref_idx_active_override_flag; 473 /** \brief Maximum reference index for reference picture list 0. 474 * Range: 0 to 31, inclusive. 475 */ 476 uint8_t num_ref_idx_l0_active_minus1; 477 /** \brief Maximum reference index for reference picture list 1. 478 * Range: 0 to 31, inclusive. 479 */ 480 uint8_t num_ref_idx_l1_active_minus1; 481 /** \brief Reference picture list 0 (for P slices). */ 482 VAPictureH264 RefPicList0[32]; 483 /** \brief Reference picture list 1 (for B slices). */ 484 VAPictureH264 RefPicList1[32]; 485 /**@}*/ 486 487 /** @name pred_weight_table() */ 488 /**@{*/ 489 /** \brief Same as the H.264 bitstream syntax element. */ 490 uint8_t luma_log2_weight_denom; 491 /** \brief Same as the H.264 bitstream syntax element. */ 492 uint8_t chroma_log2_weight_denom; 493 /** \brief Same as the H.264 bitstream syntax element. */ 494 uint8_t luma_weight_l0_flag; 495 /** \brief Same as the H.264 bitstream syntax element. */ 496 signed short luma_weight_l0[32]; 497 /** \brief Same as the H.264 bitstream syntax element. */ 498 signed short luma_offset_l0[32]; 499 /** \brief Same as the H.264 bitstream syntax element. */ 500 uint8_t chroma_weight_l0_flag; 501 /** \brief Same as the H.264 bitstream syntax element. */ 502 signed short chroma_weight_l0[32][2]; 503 /** \brief Same as the H.264 bitstream syntax element. */ 504 signed short chroma_offset_l0[32][2]; 505 /** \brief Same as the H.264 bitstream syntax element. */ 506 uint8_t luma_weight_l1_flag; 507 /** \brief Same as the H.264 bitstream syntax element. */ 508 signed short luma_weight_l1[32]; 509 /** \brief Same as the H.264 bitstream syntax element. */ 510 signed short luma_offset_l1[32]; 511 /** \brief Same as the H.264 bitstream syntax element. */ 512 uint8_t chroma_weight_l1_flag; 513 /** \brief Same as the H.264 bitstream syntax element. */ 514 signed short chroma_weight_l1[32][2]; 515 /** \brief Same as the H.264 bitstream syntax element. */ 516 signed short chroma_offset_l1[32][2]; 517 /**@}*/ 518 519 /** \brief Range: 0 to 2, inclusive. */ 520 uint8_t cabac_init_idc; 521 /** \brief Same as the H.264 bitstream syntax element. */ 522 int8_t slice_qp_delta; 523 /** @name If deblocking_filter_control_present_flag */ 524 /**@{*/ 525 /** \brief Range: 0 to 2, inclusive. */ 526 uint8_t disable_deblocking_filter_idc; 527 /** \brief Same as the H.264 bitstream syntax element. */ 528 int8_t slice_alpha_c0_offset_div2; 529 /** \brief Same as the H.264 bitstream syntax element. */ 530 int8_t slice_beta_offset_div2; 531 532 /** \brief Reserved bytes for future use, must be zero */ 533 uint32_t va_reserved[VA_PADDING_LOW]; 534 /**@}*/ 535 } VAEncSliceParameterBufferH264; 536 537 /** 538 * @name Macroblock neighbour availability bits 539 * 540 * \anchor api_enc_h264_mb_pred_avail_bits 541 * Definitions for macroblock neighbour availability bits used in 542 * intra prediction mode (non MBAFF only). 543 * 544 * @{ 545 */ 546 /** \brief References macroblock in the top-left corner. */ 547 #define VA_MB_PRED_AVAIL_TOP_LEFT (1 << 2) 548 /** \brief References macroblock above the current macroblock. */ 549 #define VA_MB_PRED_AVAIL_TOP (1 << 4) 550 /** \brief References macroblock in the top-right corner. */ 551 #define VA_MB_PRED_AVAIL_TOP_RIGHT (1 << 3) 552 /** \brief References macroblock on the left of the current macroblock. */ 553 #define VA_MB_PRED_AVAIL_LEFT (1 << 6) 554 /**@}*/ 555 556 /** 557 * \brief Macroblock parameter for H.264 encoding in baseline, main & high 558 * profiles. 559 * 560 * This structure holds per-macroblock information. The buffer must be 561 * allocated with as many elements (macroblocks) as necessary to fit 562 * the slice to be encoded. Besides, the per-macroblock records must 563 * be written in a strict raster order and with no gap. i.e. every 564 * macroblock, regardless of its type, shall have an entry. 565 */ 566 typedef struct _VAEncMacroblockParameterBufferH264 { 567 /** 568 * \brief Quantization parameter. 569 * 570 * Requested quantization parameter. Range: 0 to 51, inclusive. 571 * If \ref qp is set to 0xff, then the actual value is derived 572 * from the slice-level value: \c pic_init_qp + \c slice_qp_delta. 573 */ 574 uint8_t qp; 575 576 union { 577 /** @name Data for intra macroblock */ 578 /**@{*/ 579 union { 580 struct { 581 /** 582 * \brief Flag specified to override MB neighbour 583 * availability bits from VME stage. 584 * 585 * This flag specifies that macroblock neighbour 586 * availability bits from the VME stage are overriden 587 * by the \ref pred_avail_flags hereunder. 588 */ 589 uint32_t pred_avail_override_flag : 1; 590 /** 591 * \brief Bitwise representation of which macroblocks 592 * are available for intra prediction. 593 * 594 * If the slice is intra-coded, this field represents 595 * the macroblocks available for intra prediction. 596 * See \ref api_enc_h264_mb_pred_avail_bits 597 * "macroblock neighbour availability" bit definitions. 598 */ 599 uint32_t pred_avail_flags : 8; 600 } bits; 601 uint32_t value; 602 } intra_fields; 603 /**@}*/ 604 605 /** @name Data for inter macroblock */ 606 /**@{*/ 607 union { 608 struct { 609 uint32_t reserved; 610 } bits; 611 uint32_t value; 612 } inter_fields; 613 /**@}*/ 614 } info; 615 616 /** \brief Reserved bytes for future use, must be zero */ 617 uint32_t va_reserved[VA_PADDING_LOW]; 618 } VAEncMacroblockParameterBufferH264; 619 620 /** 621 * \brief MB partition modes and 1/2 1/4 motion search configuration 622 * 623 * Specifies MB partition modes that are disabled. Specifies Half-pel 624 * mode and Quarter-pel mode searching 625 */ 626 typedef struct _VAEncMiscParameterSubMbPartPelH264 { 627 uint32_t disable_inter_sub_mb_partition; 628 union { 629 struct { 630 uint32_t disable_16x16_inter_mb_partition : 1; 631 uint32_t disable_16x8_inter_mb_partition : 1; 632 uint32_t disable_8x16_inter_mb_partition : 1; 633 uint32_t disable_8x8_inter_mb_partition : 1; 634 uint32_t disable_8x4_inter_mb_partition : 1; 635 uint32_t disable_4x8_inter_mb_partition : 1; 636 uint32_t disable_4x4_inter_mb_partition : 1; 637 uint32_t reserved : 1; 638 } bits; 639 uint8_t value; 640 } inter_sub_mb_partition_mask; 641 642 /** 643 * \brief Precison of motion search 644 * 0:Integer mode searching 645 * 1:Half-pel mode searching 646 * 2:Reserved 647 * 3:Quarter-pel mode searching 648 */ 649 uint32_t enable_sub_pel_mode; 650 uint8_t sub_pel_mode; 651 uint8_t reserved[3]; 652 } VAEncMiscParameterSubMbPartPelH264; 653 /**@}*/ 654 655 #ifdef __cplusplus 656 } 657 #endif 658 659 #endif /* VA_ENC_H264_H */ 660