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 #include <stdint.h> 40 #include <va/va_enc.h> 41 42 /** 43 * \defgroup api_enc_h264 H.264 encoding API 44 * 45 * @{ 46 */ 47 48 /** 49 * @name Picture flags 50 * 51 * Those flags flags are meant to signal when a picture marks the end 52 * of a sequence, a stream, or even both at once. 53 * 54 * @{ 55 */ 56 /** 57 * \brief Marks the last picture in the sequence. 58 * 59 * i.e. the driver appends \c end_of_seq() NAL unit to the encoded frame. 60 */ 61 #define H264_LAST_PICTURE_EOSEQ VA_ENC_LAST_PICTURE_EOSEQ 62 /** 63 * \brief Marks the last picture in the stream. 64 * 65 * i.e. the driver appends \c end_of_stream() NAL unit to the encoded frame. 66 */ 67 #define H264_LAST_PICTURE_EOSTREAM VA_ENC_LAST_PICTURE_EOSTREAM 68 /**@}*/ 69 70 /** 71 * \brief Packed header types specific to H.264 encoding. 72 * 73 * Types of packed headers generally used for H.264 encoding. Each 74 * associated packed header data buffer shall contain the start code 75 * prefix 0x000001 followed by the complete NAL unit, thus also 76 * including the \c nal_unit_type. 77 * 78 * Note: the start code prefix can contain an arbitrary number of leading 79 * zeros. The driver will skip them for emulation prevention bytes insertion, 80 * if necessary. 81 */ 82 typedef enum { 83 /** 84 * \brief Packed Sequence Parameter Set (SPS). 85 * 86 * The corresponding packed header data buffer shall contain the 87 * complete seq_parameter_set_rbsp() syntax element. 88 * 89 * Note: packed \c nal_unit_type shall be equal to 7. 90 */ 91 VAEncPackedHeaderH264_SPS = VAEncPackedHeaderSequence, 92 /** 93 * \brief Packed Picture Parameter Set (PPS). 94 * 95 * The corresponding packed header data buffer shall contain the 96 * complete pic_parameter_set_rbsp() syntax element. 97 * 98 * Note: packed \c nal_unit_type shall be equal to 8. 99 */ 100 VAEncPackedHeaderH264_PPS = VAEncPackedHeaderPicture, 101 /** 102 * \brief Packed slice header. 103 * 104 * The corresponding packed header data buffer shall contain the 105 * \c slice_header() syntax element only, along with any start 106 * code prefix and NAL unit type preceeding it. i.e. this means 107 * that the buffer does not contain any of the \c slice_data() or 108 * the \c rbsp_slice_trailing_bits(). 109 * 110 * Note: packed \c nal_unit_type shall be equal to 1 (non-IDR 111 * picture), or 5 (IDR picture). 112 */ 113 VAEncPackedHeaderH264_Slice = VAEncPackedHeaderSlice, 114 /** 115 * \brief Packed Supplemental Enhancement Information (SEI). 116 * 117 * The corresponding packed header data buffer shall contain the 118 * complete sei_rbsp() syntax element, thus including several 119 * sei_message() elements if necessary. 120 * 121 * Note: packed \c nal_unit_type shall be equal to 6. 122 */ 123 VAEncPackedHeaderH264_SEI = (VAEncPackedHeaderMiscMask | 1), 124 } VAEncPackedHeaderTypeH264; 125 126 /** 127 * \brief Sequence parameter for H.264 encoding in baseline, main & high 128 * profiles. 129 * 130 * This structure holds information for \c seq_parameter_set_data() as 131 * defined by the H.264 specification. 132 * 133 * If packed sequence headers mode is used, i.e. if the encoding 134 * pipeline was configured with the #VA_ENC_PACKED_HEADER_SEQUENCE 135 * flag, then the driver expects two more buffers to be provided to 136 * the same \c vaRenderPicture() as this buffer: 137 * - a #VAEncPackedHeaderParameterBuffer with type set to 138 * VAEncPackedHeaderType::VAEncPackedHeaderSequence ; 139 * - a #VAEncPackedHeaderDataBuffer which holds the actual packed 140 * header data. 141 * 142 * If \c seq_scaling_matrix_present_flag is set to \c 1, then a 143 * #VAIQMatrixBufferH264 buffer shall also be provided within the same 144 * \c vaRenderPicture() call as this sequence parameter buffer. 145 */ 146 typedef struct _VAEncSequenceParameterBufferH264 { 147 /** \brief Same as the H.264 bitstream syntax element. */ 148 unsigned char seq_parameter_set_id; 149 /** \brief Same as the H.264 bitstream syntax element. */ 150 unsigned char level_idc; 151 /** \brief Period between I frames. */ 152 unsigned int intra_period; 153 /** \brief Period between IDR frames. */ 154 unsigned int intra_idr_period; 155 /** \brief Period between I/P frames. */ 156 unsigned int ip_period; 157 /** 158 * \brief Initial bitrate set for this sequence in CBR or VBR modes. 159 * 160 * This field represents the initial bitrate value for this 161 * sequence if CBR or VBR mode is used, i.e. if the encoder 162 * pipeline was created with a #VAConfigAttribRateControl 163 * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. 164 * 165 * The bitrate can be modified later on through 166 * #VAEncMiscParameterRateControl buffers. 167 */ 168 unsigned int bits_per_second; 169 /** \brief Same as the H.264 bitstream syntax element. */ 170 unsigned int max_num_ref_frames; 171 /** \brief Picture width in macroblocks. */ 172 unsigned short picture_width_in_mbs; 173 /** \brief Picture height in macroblocks. */ 174 unsigned short picture_height_in_mbs; 175 176 union { 177 struct { 178 /** \brief Same as the H.264 bitstream syntax element. */ 179 unsigned int chroma_format_idc : 2; 180 /** \brief Same as the H.264 bitstream syntax element. */ 181 unsigned int frame_mbs_only_flag : 1; 182 /** \brief Same as the H.264 bitstream syntax element. */ 183 unsigned int mb_adaptive_frame_field_flag : 1; 184 /** \brief Same as the H.264 bitstream syntax element. */ 185 unsigned int seq_scaling_matrix_present_flag : 1; 186 /** \brief Same as the H.264 bitstream syntax element. */ 187 unsigned int direct_8x8_inference_flag : 1; 188 /** \brief Same as the H.264 bitstream syntax element. */ 189 unsigned int log2_max_frame_num_minus4 : 4; 190 /** \brief Same as the H.264 bitstream syntax element. */ 191 unsigned int pic_order_cnt_type : 2; 192 /** \brief Same as the H.264 bitstream syntax element. */ 193 unsigned int log2_max_pic_order_cnt_lsb_minus4 : 4; 194 /** \brief Same as the H.264 bitstream syntax element. */ 195 unsigned int delta_pic_order_always_zero_flag : 1; 196 } bits; 197 unsigned int value; 198 } seq_fields; 199 200 /** \brief Same as the H.264 bitstream syntax element. */ 201 unsigned char bit_depth_luma_minus8; 202 /** \brief Same as the H.264 bitstream syntax element. */ 203 unsigned char bit_depth_chroma_minus8; 204 205 /** if pic_order_cnt_type == 1 */ 206 /**@{*/ 207 /** \brief Same as the H.264 bitstream syntax element. */ 208 unsigned char num_ref_frames_in_pic_order_cnt_cycle; 209 /** \brief Same as the H.264 bitstream syntax element. */ 210 int offset_for_non_ref_pic; 211 /** \brief Same as the H.264 bitstream syntax element. */ 212 int offset_for_top_to_bottom_field; 213 /** \brief Same as the H.264 bitstream syntax element. */ 214 int offset_for_ref_frame[256]; 215 /**@}*/ 216 217 /** @name Cropping (optional) */ 218 /**@{*/ 219 /** \brief Same as the H.264 bitstream syntax element. */ 220 unsigned char frame_cropping_flag; 221 /** \brief Same as the H.264 bitstream syntax element. */ 222 unsigned int frame_crop_left_offset; 223 /** \brief Same as the H.264 bitstream syntax element. */ 224 unsigned int frame_crop_right_offset; 225 /** \brief Same as the H.264 bitstream syntax element. */ 226 unsigned int frame_crop_top_offset; 227 /** \brief Same as the H.264 bitstream syntax element. */ 228 unsigned int frame_crop_bottom_offset; 229 /**@}*/ 230 231 /** @name VUI parameters (optional) */ 232 /**@{*/ 233 /** \brief Same as the H.264 bitstream syntax element. */ 234 unsigned char vui_parameters_present_flag; 235 union { 236 struct { 237 /** \brief Same as the H.264 bitstream syntax element. */ 238 unsigned int aspect_ratio_info_present_flag : 1; 239 /** \brief Same as the H.264 bitstream syntax element. */ 240 unsigned int timing_info_present_flag : 1; 241 /** \brief Same as the H.264 bitstream syntax element. */ 242 unsigned int bitstream_restriction_flag : 1; 243 /** \brief Range: 0 to 16, inclusive. */ 244 unsigned int log2_max_mv_length_horizontal : 5; 245 /** \brief Range: 0 to 16, inclusive. */ 246 unsigned int log2_max_mv_length_vertical : 5; 247 } bits; 248 unsigned int value; 249 } vui_fields; 250 /** \brief Same as the H.264 bitstream syntax element. */ 251 unsigned char aspect_ratio_idc; 252 /** \brief Same as the H.264 bitstream syntax element. */ 253 unsigned int sar_width; 254 /** \brief Same as the H.264 bitstream syntax element. */ 255 unsigned int sar_height; 256 /** \brief Same as the H.264 bitstream syntax element. */ 257 unsigned int num_units_in_tick; 258 /** \brief Same as the H.264 bitstream syntax element. */ 259 unsigned int time_scale; 260 /**@}*/ 261 } VAEncSequenceParameterBufferH264; 262 263 /** 264 * \brief Picture parameter for H.264 encoding in baseline, main & high 265 * profiles. 266 * 267 * This structure holds information for \c pic_parameter_set_rbsp() as 268 * defined by the H.264 specification. 269 * 270 * If packed picture headers mode is used, i.e. if the encoding 271 * pipeline was configured with the #VA_ENC_PACKED_HEADER_PICTURE 272 * flag, then the driver expects two more buffers to be provided to 273 * the same \c vaRenderPicture() as this buffer: 274 * - a #VAEncPackedHeaderParameterBuffer with type set to 275 * VAEncPackedHeaderType::VAEncPackedHeaderPicture ; 276 * - a #VAEncPackedHeaderDataBuffer which holds the actual packed 277 * header data. 278 * 279 * If \c pic_scaling_matrix_present_flag is set to \c 1, then a 280 * #VAIQMatrixBufferH264 buffer shall also be provided within the same 281 * \c vaRenderPicture() call as this picture parameter buffer. 282 */ 283 typedef struct _VAEncPictureParameterBufferH264 { 284 /** 285 * \brief Information about the picture to be encoded. 286 * 287 * See #VAPictureH264 for further description of each field. 288 * Note that CurrPic.picture_id represents the reconstructed 289 * (decoded) picture. User provides a scratch VA surface ID here. 290 */ 291 VAPictureH264 CurrPic; 292 /** 293 * \brief Decoded Picture Buffer (DPB). 294 * 295 * This array represents the list of reconstructed (decoded) 296 * frames used as reference. It is important to keep track of 297 * reconstructed frames so that they can be used later on as 298 * reference for P or B-frames encoding. 299 */ 300 VAPictureH264 ReferenceFrames[16]; 301 /** 302 * \brief Output encoded bitstream. 303 * 304 * \ref coded_buf has type #VAEncCodedBufferType. It should be 305 * large enough to hold the compressed NAL slice and possibly SPS 306 * and PPS NAL units. 307 */ 308 VABufferID coded_buf; 309 310 /** \brief The picture parameter set referred to in the slice header. */ 311 unsigned char pic_parameter_set_id; 312 /** \brief The active sequence parameter set. Range: 0 to 31, inclusive. */ 313 unsigned char seq_parameter_set_id; 314 315 /** 316 * \brief OR'd flags describing whether the picture is the last one or not. 317 * 318 * This fields holds 0 if the picture to be encoded is not the last 319 * one in the stream or sequence. Otherwise, it is a combination of 320 * \ref H264_LAST_PICTURE_EOSEQ or \ref H264_LAST_PICTURE_EOSTREAM. 321 */ 322 unsigned char last_picture; 323 324 /** \brief The picture identifier. 325 * Range: 0 to \f$2^{log2\_max\_frame\_num\_minus4 + 4} - 1\f$, inclusive. 326 */ 327 unsigned short frame_num; 328 329 /** \brief \c pic_init_qp_minus26 + 26. */ 330 unsigned char pic_init_qp; 331 /** \brief Maximum reference index for reference picture list 0. 332 * Range: 0 to 31, inclusive. 333 */ 334 unsigned char num_ref_idx_l0_active_minus1; 335 /** \brief Maximum reference index for reference picture list 1. 336 * Range: 0 to 31, inclusive. 337 */ 338 unsigned char num_ref_idx_l1_active_minus1; 339 340 /** \brief Range: -12 to 12, inclusive. */ 341 signed char chroma_qp_index_offset; 342 /** \brief Range: -12 to 12, inclusive. */ 343 signed char second_chroma_qp_index_offset; 344 345 union { 346 struct { 347 /** \brief Is picture an IDR picture? */ 348 unsigned int idr_pic_flag : 1; 349 /** \brief Is picture a reference picture? */ 350 unsigned int reference_pic_flag : 2; 351 /** \brief Selects CAVLC (0) or CABAC (1) entropy coding mode. */ 352 unsigned int entropy_coding_mode_flag : 1; 353 /** \brief Is weighted prediction applied to P slices? */ 354 unsigned int weighted_pred_flag : 1; 355 /** \brief Range: 0 to 2, inclusive. */ 356 unsigned int weighted_bipred_idc : 2; 357 /** \brief Same as the H.264 bitstream syntax element. */ 358 unsigned int constrained_intra_pred_flag : 1; 359 /** \brief Same as the H.264 bitstream syntax element. */ 360 unsigned int transform_8x8_mode_flag : 1; 361 /** \brief Same as the H.264 bitstream syntax element. */ 362 unsigned int deblocking_filter_control_present_flag : 1; 363 /** \brief Same as the H.264 bitstream syntax element. */ 364 unsigned int redundant_pic_cnt_present_flag : 1; 365 /** \brief Same as the H.264 bitstream syntax element. */ 366 unsigned int pic_order_present_flag : 1; 367 /** \brief Same as the H.264 bitstream syntax element. */ 368 unsigned int pic_scaling_matrix_present_flag : 1; 369 } bits; 370 unsigned int value; 371 } pic_fields; 372 } VAEncPictureParameterBufferH264; 373 374 /** 375 * \brief Slice parameter for H.264 encoding in baseline, main & high profiles. 376 * 377 * This structure holds information for \c 378 * slice_layer_without_partitioning_rbsp() as defined by the H.264 379 * specification. 380 * 381 * If packed slice headers mode is used, i.e. if the encoding 382 * pipeline was configured with the #VA_ENC_PACKED_HEADER_SLICE 383 * flag, then the driver expects two more buffers to be provided to 384 * the same \c vaRenderPicture() as this buffer: 385 * - a #VAEncPackedHeaderParameterBuffer with type set to 386 * VAEncPackedHeaderType::VAEncPackedHeaderSlice ; 387 * - a #VAEncPackedHeaderDataBuffer which holds the actual packed 388 * header data. 389 * 390 * If per-macroblock encoder configuration is needed, \c macroblock_info 391 * references a buffer of type #VAEncMacroblockParameterBufferH264. This 392 * buffer is not passed to vaRenderPicture(). i.e. it is not destroyed 393 * by subsequent calls to vaRenderPicture() and then can be re-used 394 * without re-allocating the whole buffer. 395 */ 396 typedef struct _VAEncSliceParameterBufferH264 { 397 /** \brief Starting MB address for this slice. */ 398 unsigned int macroblock_address; 399 /** \brief Number of macroblocks in this slice. */ 400 unsigned int num_macroblocks; 401 /** 402 * \brief Per-MB encoder configuration buffer, or \c VA_INVALID_ID. 403 * 404 * If per-MB encoder configuration is needed, then \ref macroblock_info 405 * references a buffer of type #VAEncMacroblockParameterBufferH264 406 * (\c VAEncMacroblockParameterBufferType). Otherwise, buffer id 407 * is set to \c VA_INVALID_ID and per-MB configuration is derived 408 * from this slice parameter. 409 * 410 * The \c macroblock_info buffer must hold \ref num_macroblocks 411 * elements. 412 */ 413 VABufferID macroblock_info; 414 /** \brief Slice type. 415 * Range: 0..2, 5..7, i.e. no switching slices. 416 */ 417 unsigned char slice_type; 418 /** \brief Same as the H.264 bitstream syntax element. */ 419 unsigned char pic_parameter_set_id; 420 /** \brief Same as the H.264 bitstream syntax element. */ 421 unsigned short idr_pic_id; 422 423 /** @name If pic_order_cnt_type == 0 */ 424 /**@{*/ 425 /** \brief The picture order count modulo MaxPicOrderCntLsb. */ 426 unsigned short pic_order_cnt_lsb; 427 /** \brief Valid if \c pic_order_present_flag and this is a bottom field. */ 428 int delta_pic_order_cnt_bottom; 429 /**@}*/ 430 /** @name If pic_order_cnt_type == 1 && !delta_pic_order_always_zero_flag */ 431 /**@{*/ 432 /** \brief [0]: top, [1]: bottom. */ 433 int delta_pic_order_cnt[2]; 434 /**@}*/ 435 436 /** @name If slice_type == B */ 437 /**@{*/ 438 unsigned char direct_spatial_mv_pred_flag; 439 /**@}*/ 440 441 /** @name If slice_type == P */ 442 /**@{*/ 443 /** \brief Specifies if 444 * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l0_active_minus1 or 445 * \ref _VAEncPictureParameterBufferH264::num_ref_idx_l1_active_minus1 are 446 * overriden by the values for this slice. 447 */ 448 unsigned char num_ref_idx_active_override_flag; 449 /** \brief Maximum reference index for reference picture list 0. 450 * Range: 0 to 31, inclusive. 451 */ 452 unsigned char num_ref_idx_l0_active_minus1; 453 /** \brief Maximum reference index for reference picture list 1. 454 * Range: 0 to 31, inclusive. 455 */ 456 unsigned char num_ref_idx_l1_active_minus1; 457 /** \brief Reference picture list 0 (for P slices). */ 458 VAPictureH264 RefPicList0[32]; 459 /** \brief Reference picture list 1 (for B slices). */ 460 VAPictureH264 RefPicList1[32]; 461 /**@}*/ 462 463 /** @name pred_weight_table() */ 464 /**@{*/ 465 /** \brief Same as the H.264 bitstream syntax element. */ 466 unsigned char luma_log2_weight_denom; 467 /** \brief Same as the H.264 bitstream syntax element. */ 468 unsigned char chroma_log2_weight_denom; 469 /** \brief Same as the H.264 bitstream syntax element. */ 470 unsigned char luma_weight_l0_flag; 471 /** \brief Same as the H.264 bitstream syntax element. */ 472 signed short luma_weight_l0[32]; 473 /** \brief Same as the H.264 bitstream syntax element. */ 474 signed short luma_offset_l0[32]; 475 /** \brief Same as the H.264 bitstream syntax element. */ 476 unsigned char chroma_weight_l0_flag; 477 /** \brief Same as the H.264 bitstream syntax element. */ 478 signed short chroma_weight_l0[32][2]; 479 /** \brief Same as the H.264 bitstream syntax element. */ 480 signed short chroma_offset_l0[32][2]; 481 /** \brief Same as the H.264 bitstream syntax element. */ 482 unsigned char luma_weight_l1_flag; 483 /** \brief Same as the H.264 bitstream syntax element. */ 484 signed short luma_weight_l1[32]; 485 /** \brief Same as the H.264 bitstream syntax element. */ 486 signed short luma_offset_l1[32]; 487 /** \brief Same as the H.264 bitstream syntax element. */ 488 unsigned char chroma_weight_l1_flag; 489 /** \brief Same as the H.264 bitstream syntax element. */ 490 signed short chroma_weight_l1[32][2]; 491 /** \brief Same as the H.264 bitstream syntax element. */ 492 signed short chroma_offset_l1[32][2]; 493 /**@}*/ 494 495 /** \brief Range: 0 to 2, inclusive. */ 496 unsigned char cabac_init_idc; 497 /** \brief Same as the H.264 bitstream syntax element. */ 498 signed char slice_qp_delta; 499 /** @name If deblocking_filter_control_present_flag */ 500 /**@{*/ 501 /** \brief Range: 0 to 2, inclusive. */ 502 unsigned char disable_deblocking_filter_idc; 503 /** \brief Same as the H.264 bitstream syntax element. */ 504 signed char slice_alpha_c0_offset_div2; 505 /** \brief Same as the H.264 bitstream syntax element. */ 506 signed char slice_beta_offset_div2; 507 /**@}*/ 508 } VAEncSliceParameterBufferH264; 509 510 /** 511 * @name Macroblock neighbour availability bits 512 * 513 * \anchor api_enc_h264_mb_pred_avail_bits 514 * Definitions for macroblock neighbour availability bits used in 515 * intra prediction mode (non MBAFF only). 516 * 517 * @{ 518 */ 519 /** \brief References macroblock in the top-left corner. */ 520 #define VA_MB_PRED_AVAIL_TOP_LEFT (1 << 2) 521 /** \brief References macroblock above the current macroblock. */ 522 #define VA_MB_PRED_AVAIL_TOP (1 << 4) 523 /** \brief References macroblock in the top-right corner. */ 524 #define VA_MB_PRED_AVAIL_TOP_RIGHT (1 << 3) 525 /** \brief References macroblock on the left of the current macroblock. */ 526 #define VA_MB_PRED_AVAIL_LEFT (1 << 6) 527 /**@}*/ 528 529 /** 530 * \brief Macroblock parameter for H.264 encoding in baseline, main & high 531 * profiles. 532 * 533 * This structure holds per-macroblock information. The buffer must be 534 * allocated with as many elements (macroblocks) as necessary to fit 535 * the slice to be encoded. Besides, the per-macroblock records must 536 * be written in a strict raster order and with no gap. i.e. every 537 * macroblock, regardless of its type, shall have an entry. 538 */ 539 typedef struct _VAEncMacroblockParameterBufferH264 { 540 /** 541 * \brief Quantization parameter. 542 * 543 * Requested quantization parameter. Range: 0 to 51, inclusive. 544 * If \ref qp is set to 0xff, then the actual value is derived 545 * from the slice-level value: \c pic_init_qp + \c slice_qp_delta. 546 */ 547 unsigned char qp; 548 549 union { 550 /** @name Data for intra macroblock */ 551 /**@{*/ 552 struct { 553 union { 554 /** 555 * \brief Flag specified to override MB neighbour 556 * availability bits from VME stage. 557 * 558 * This flag specifies that macroblock neighbour 559 * availability bits from the VME stage are overriden 560 * by the \ref pred_avail_flags hereunder. 561 */ 562 unsigned int pred_avail_override_flag : 1; 563 /** 564 * \brief Bitwise representation of which macroblocks 565 * are available for intra prediction. 566 * 567 * If the slice is intra-coded, this field represents 568 * the macroblocks available for intra prediction. 569 * See \ref api_enc_h264_mb_pred_avail_bits 570 * "macroblock neighbour availability" bit definitions. 571 */ 572 unsigned int pred_avail_flags : 8; 573 } bits; 574 unsigned int value; 575 } intra_fields; 576 /**@}*/ 577 578 /** @name Data for inter macroblock */ 579 /**@{*/ 580 struct { 581 union { 582 } bits; 583 unsigned int value; 584 } inter_fields; 585 /**@}*/ 586 } info; 587 } VAEncMacroblockParameterBufferH264; 588 589 /** 590 * \brief H.264 Mutiview Coding(MVC) Sequence Parameter Buffer 591 * 592 */ 593 typedef struct _VAEncSequenceParameterBufferH264_MVC { 594 /** brief Basic common sequence parameter */ 595 VAEncSequenceParameterBufferH264 base; 596 597 /** brief Plus 1 specify the max number of views 598 * coded in the video sequence 599 */ 600 uint16_t num_views_minus1; 601 602 /** brief Specify the view information in all layers */ 603 struct H264SPSExtMVCViewInfo{ 604 /** \brief The current view identifier. */ 605 uint16_t view_id; 606 /** \brief Specifies the number of view components for inter-view 607 * prediction in the initialized RefPicList0 in decoding 608 * anchor views. 609 */ 610 uint8_t num_anchor_refs_l0; 611 /** \brief Specifies the view_id for inter-view prediction in 612 * the initialized RefPicList0 in decoding anchor views. 613 */ 614 uint16_t anchor_ref_l0[15]; 615 /** \brief Specifies the number of view components for inter-view 616 * prediction in the initialized RefPicList1 in decoding 617 * anchor views 618 */ 619 uint8_t num_anchor_refs_l1; 620 /** \brief Specifies the view_id for inter-view prediction in 621 * the initialized RefPicList1 in decoding anchor views. 622 */ 623 uint16_t anchor_ref_l1[15]; 624 /** \brief Specifies the number of view components for inter-view 625 * prediction in the initialized RefPicList0 in decoding 626 * non-anchor views. 627 */ 628 uint8_t num_non_anchor_refs_l0; 629 /** \brief Specifies the view_id for inter-view prediction in 630 * the initialized RefPicList0 in decoding non-anchor views. 631 */ 632 uint16_t non_anchor_ref_l0[15]; 633 /** \brief Specifies the number of view components for inter-view 634 * prediction in the initialized RefPicList1 in decoding 635 * non-anchor view. 636 */ 637 uint8_t num_non_anchor_refs_l1; 638 /** \brief Specifies the view_id for inter-view prediction in 639 * the initialized RefPicList1 in decoding non-anchor views. 640 */ 641 uint16_t non_anchor_ref_l1[15]; 642 }* view_list; 643 644 /** brief Plus 1 specifies the number of level values 645 * signalled for the coded video sequence 646 */ 647 uint8_t num_level_values_signalled_minus1; 648 649 /** brief Level values operation for a set of the operation 650 * points in the current sequence 651 */ 652 struct H264SPSExtMVCLevelValue { 653 /** \brief Specifies the level value signalled for the coded video sequence */ 654 uint8_t level_idc; 655 656 /** \brief Plus 1 specifies the number of operation points to 657 * which the level indicated by level_idc applies 658 */ 659 uint16_t num_applicable_ops_minus1; 660 661 /** \brief Represent the specific operation to the view in the video sequence */ 662 struct H264SPSExtMVCLevelValueOps { 663 /** \brief Specify a temporal identifier for the NAL unit */ 664 uint8_t temporal_id; 665 /** \brief Specify the number of the views whose level value will be modified */ 666 uint16_t num_target_views_minus1; 667 /** \brief Specify the views whose level value will be modified */ 668 uint16_t* target_view_id_list; 669 /** \brief Specify the number of views whose level value can be modified */ 670 uint16_t num_views_minus1; 671 }* level_value_ops_list; 672 673 }* level_value_list; 674 675 } VAEncSequenceParameterBufferH264_MVC; 676 677 /** 678 * \brief H.264 Multiview Coding(MVC) Picture Parameter Buffer 679 * 680 */ 681 typedef struct _VAEncPictureParameterBufferH264_MVC 682 { 683 /** brief Basic common picture parameter */ 684 VAEncPictureParameterBufferH264 base; 685 686 /** brief Specifes the view id for current picture */ 687 uint16_t view_id; 688 689 /** brief Specifes whether the picture is one anchor picture */ 690 uint8_t anchor_pic_flag; 691 692 /** brief Specifes whether inter view reference frame 693 * is used to encode current picture. 694 */ 695 uint8_t inter_view_flag; 696 } VAEncPictureParameterBufferH264_MVC; 697 698 typedef struct _VAEncQpBufferH264 { 699 /* 700 * \brief This structure holds luma Qp per 16x16 macroblock. Buffer size shall be 701 * sufficient to fit the slice or frame to be encoded depending on if it is a slice level 702 * or frame level encoding. 703 */ 704 unsigned char qp_y; 705 } VAEncQpBufferH264; 706 707 /** \brief Bitstream writer attribute types specific to H.264 encoding. */ 708 typedef enum { 709 /** 710 * \brief Flag: specifies whether to insert emulation prevention 711 * bytes (integer). 712 */ 713 VAEncBitstreamAttribEmulationPreventionH264 = ( 714 VAEncBitstreamAttribMiscMask | 1), 715 } VAEncBitstreamAttribTypeH264; 716 717 718 /** 719 * \brief Allocates a new H.264 bitstream writer. 720 * 721 * Allocates a new bitstream writer. By default, libva allocates and 722 * maintains its own buffer. However, the user can pass down his own 723 * buffer with the \c VAEncBitstreamAttribBuffer attribute, along with 724 * the size of that buffer with the \c VAEncBitstreamAttribBufferSize 725 * attribute. 726 * 727 * By default, emulation prevention bytes are not inserted. However, 728 * the user can still request emulation prevention by setting the 729 * \c VAEncBitstreamAttribEmulationPreventionH264 attribute to 1. 730 * 731 * @param[in] attribs the optional attributes, or NULL 732 * @param[in] num_attribs the number of attributes available in \c attribs 733 * @return a new #VAEncBitstream, or NULL if an error occurred 734 */ 735 VAEncBitstream * 736 va_enc_bitstream_h264_new( 737 VAEncBitstreamAttrib *attribs, 738 unsigned int num_attribs 739 ); 740 741 /** 742 * \brief Destroys an H.264 bitstream writer. 743 * 744 * @param[in] bs the bitstream writer to destroy 745 */ 746 void 747 va_enc_bitstream_h264_destroy(VAEncBitstream *bs); 748 749 /** 750 * \brief Writes an unsigned integer as \c ue(v). 751 * 752 * Writes a 32-bit unsigned int value by following \c ue(v) from the 753 * H.264 specification. 754 * 755 * @param[in] bs the bitstream writer 756 * @param[in] value the unsigned int value 757 * @return the number of bits written, or a negative value to indicate an error 758 */ 759 int 760 va_enc_bitstream_h264_write_ue(VAEncBitstream *bs, unsigned int value); 761 762 /** 763 * \brief Writes a signed integer as \c se(v). 764 * 765 * Writes a 32-bit signed int value by following \c se(v) from the 766 * H.264 specification. 767 * 768 * @param[in] bs the bitstream writer 769 * @param[in] value the signed int value 770 * @return the number of bits written, or a negative value to indicate an error 771 */ 772 int 773 va_enc_bitstream_h264_write_se(VAEncBitstream *bs, int value); 774 775 /** 776 * \brief Helper function to write trailing bits into the bitstream. 777 * 778 * @param[in] bs the bitstream writer 779 * @return the number of bits written, or a negative value to indicate an error 780 */ 781 int 782 va_enc_bitstream_h264_write_trailing_bits(VAEncBitstream *bs); 783 784 /**@}*/ 785 786 #ifdef __cplusplus 787 } 788 #endif 789 790 #endif /* VA_ENC_H264_H */ 791