1 /* 2 * Copyright (c) 2019 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_dec_av1.h 27 * \brief The AV1 decoding API 28 * 29 * This file contains the \ref api_dec_av1 "AV1 decoding API". 30 */ 31 32 #ifndef VA_DEC_AV1_H 33 #define VA_DEC_AV1_H 34 35 #include <stdint.h> 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 /** 42 * \defgroup api_dec_av1 AV1 decoding API 43 * 44 * This AV1 decoding API supports 8-bit/10bit 420 format only. 45 * 46 * @{ 47 */ 48 49 /** Attribute value for VAConfigAttribDecAV1Features. 50 * 51 * This attribute decribes the supported features of a AV1 52 * decoder configuration. 53 * 54 */ 55 typedef union VAConfigAttribValDecAV1Features { 56 struct { 57 /** large scale tile 58 * 59 * This conveys whether AV1 large scale tile is supported by HW. 60 * 0 - unsupported, 1 - supported. 61 */ 62 uint32_t lst_support : 2; 63 /* Reserved for future use. */ 64 uint32_t reserved : 30; 65 } bits; 66 uint32_t value; 67 } VAConfigAttribValDecAV1Features; 68 69 /** 70 * \brief AV1 Decoding Picture Parameter Buffer Structure 71 * 72 * This structure conveys picture level parameters. 73 * App should send a surface with this data structure down to VAAPI once 74 * per frame. 75 * 76 */ 77 78 /** \brief Segmentation Information 79 */ 80 typedef struct _VASegmentationStructAV1 { 81 union { 82 struct { 83 /** Indicates whether segmentation map related syntax elements 84 * are present or not for current frame. If equal to 0, 85 * the segmentation map related syntax elements are 86 * not present for the current frame and the control flags of 87 * segmentation map related tables feature_data[][], and 88 * feature_mask[] are not valid and shall be ignored by accelerator. 89 */ 90 uint32_t enabled : 1; 91 /** Value 1 indicates that the segmentation map are updated 92 * during the decoding of this frame. 93 * Value 0 means that the segmentation map from the previous 94 * frame is used. 95 */ 96 uint32_t update_map : 1; 97 /** Value 1 indicates that the updates to the segmentation map 98 * are coded relative to the existing segmentation map. 99 * Value 0 indicates that the new segmentation map is coded 100 * without reference to the existing segmentation map. 101 */ 102 uint32_t temporal_update : 1; 103 /** Value 1 indicates that new parameters are about to be 104 * specified for each segment. 105 * Value 0 indicates that the segmentation parameters 106 * should keep their existing values. 107 */ 108 uint32_t update_data : 1; 109 110 /** \brief Reserved bytes for future use, must be zero */ 111 uint32_t reserved : 28; 112 } bits; 113 uint32_t value; 114 } segment_info_fields; 115 116 /** \brief Segmentation parameters for current frame. 117 * feature_data[segment_id][feature_id] 118 * where segment_id has value range [0..7] indicating the segment id. 119 * and feature_id is defined as 120 typedef enum { 121 SEG_LVL_ALT_Q, // Use alternate Quantizer .... 122 SEG_LVL_ALT_LF_Y_V, // Use alternate loop filter value on y plane vertical 123 SEG_LVL_ALT_LF_Y_H, // Use alternate loop filter value on y plane horizontal 124 SEG_LVL_ALT_LF_U, // Use alternate loop filter value on u plane 125 SEG_LVL_ALT_LF_V, // Use alternate loop filter value on v plane 126 SEG_LVL_REF_FRAME, // Optional Segment reference frame 127 SEG_LVL_SKIP, // Optional Segment (0,0) + skip mode 128 SEG_LVL_GLOBALMV, 129 SEG_LVL_MAX 130 } SEG_LVL_FEATURES; 131 * feature_data[][] is equivalent to variable FeatureData[][] in spec, 132 * which is after clip3() operation. 133 * Clip3(x, y, z) = (z < x)? x : ((z > y)? y : z); 134 * The limit is defined in Segmentation_Feature_Max[ SEG_LVL_MAX ] = { 135 * 255, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, MAX_LOOP_FILTER, 7, 0, 0 } 136 */ 137 int16_t feature_data[8][8]; 138 139 /** \brief indicates if a feature is enabled or not. 140 * Each bit field itself is the feature_id. Index is segment_id. 141 * feature_mask[segment_id] & (1 << feature_id) equal to 1 specify that the feature of 142 * feature_id for segment of segment_id is enabled, otherwise disabled. 143 */ 144 uint8_t feature_mask[8]; 145 146 /** \brief Reserved bytes for future use, must be zero */ 147 uint32_t va_reserved[VA_PADDING_LOW]; 148 149 } VASegmentationStructAV1; 150 151 /** \brief Film Grain Information 152 */ 153 typedef struct _VAFilmGrainStructAV1 { 154 union { 155 struct { 156 /** \brief Specify whether or not film grain is applied on current frame. 157 * If set to 0, all the rest parameters should be set to zero 158 * and ignored. 159 */ 160 uint32_t apply_grain : 1; 161 uint32_t chroma_scaling_from_luma : 1; 162 uint32_t grain_scaling_minus_8 : 2; 163 uint32_t ar_coeff_lag : 2; 164 uint32_t ar_coeff_shift_minus_6 : 2; 165 uint32_t grain_scale_shift : 2; 166 uint32_t overlap_flag : 1; 167 uint32_t clip_to_restricted_range : 1; 168 /** \brief Reserved bytes for future use, must be zero */ 169 uint32_t reserved : 20; 170 } bits; 171 uint32_t value; 172 } film_grain_info_fields; 173 174 uint16_t grain_seed; 175 /* value range [0..14] */ 176 uint8_t num_y_points; 177 uint8_t point_y_value[14]; 178 uint8_t point_y_scaling[14]; 179 /* value range [0..10] */ 180 uint8_t num_cb_points; 181 uint8_t point_cb_value[10]; 182 uint8_t point_cb_scaling[10]; 183 /* value range [0..10] */ 184 uint8_t num_cr_points; 185 uint8_t point_cr_value[10]; 186 uint8_t point_cr_scaling[10]; 187 /* value range [-128..127] */ 188 int8_t ar_coeffs_y[24]; 189 int8_t ar_coeffs_cb[25]; 190 int8_t ar_coeffs_cr[25]; 191 uint8_t cb_mult; 192 uint8_t cb_luma_mult; 193 uint16_t cb_offset; 194 uint8_t cr_mult; 195 uint8_t cr_luma_mult; 196 uint16_t cr_offset; 197 198 /** \brief Reserved bytes for future use, must be zero */ 199 uint32_t va_reserved[VA_PADDING_LOW]; 200 201 } VAFilmGrainStructAV1; 202 203 typedef enum { 204 /** identity transformation, 0-parameter */ 205 VAAV1TransformationIdentity = 0, 206 /** translational motion, 2-parameter */ 207 VAAV1TransformationTranslation = 1, 208 /** simplified affine with rotation + zoom only, 4-parameter */ 209 VAAV1TransformationRotzoom = 2, 210 /** affine, 6-parameter */ 211 VAAV1TransformationAffine = 3, 212 /** transformation count */ 213 VAAV1TransformationCount 214 } VAAV1TransformationType; 215 216 typedef struct _VAWarpedMotionParamsAV1 { 217 218 /** \brief Specify the type of warped motion */ 219 VAAV1TransformationType wmtype; 220 221 /** \brief Specify warp motion parameters 222 * wm.wmmat[] corresponds to gm_params[][] in spec. 223 * Details in AV1 spec section 5.9.24 or refer to libaom code 224 * https://aomedia.googlesource.com/aom/+/refs/heads/master/av1/decoder/decodeframe.c 225 */ 226 int32_t wmmat[8]; 227 228 /* valid or invalid on affine set */ 229 uint8_t invalid; 230 231 /** \brief Reserved bytes for future use, must be zero */ 232 uint32_t va_reserved[VA_PADDING_LOW]; 233 234 } VAWarpedMotionParamsAV1; 235 236 /** 237 * \brief AV1 Decoding Picture Parameter Buffer Structure 238 * 239 * This structure conveys picture level parameters and should be sent once 240 * per frame. 241 * 242 */ 243 typedef struct _VADecPictureParameterBufferAV1 { 244 /**@{*/ 245 246 /** \brief sequence level information 247 */ 248 249 /** \brief AV1 bit stream profile 250 */ 251 uint8_t profile; 252 253 uint8_t order_hint_bits_minus_1; 254 255 /** \brief bit depth index 256 * value range [0..2] 257 * 0 - bit depth 8; 258 * 1 - bit depth 10; 259 * 2 - bit depth 12; 260 */ 261 uint8_t bit_depth_idx; 262 263 /** \brief corresponds to AV1 spec variable of the same name. */ 264 uint8_t matrix_coefficients; 265 266 union { 267 struct { 268 uint32_t still_picture : 1; 269 uint32_t use_128x128_superblock : 1; 270 uint32_t enable_filter_intra : 1; 271 uint32_t enable_intra_edge_filter : 1; 272 273 /** read_compound_tools */ 274 uint32_t enable_interintra_compound : 1; 275 uint32_t enable_masked_compound : 1; 276 277 uint32_t enable_dual_filter : 1; 278 uint32_t enable_order_hint : 1; 279 uint32_t enable_jnt_comp : 1; 280 uint32_t enable_cdef : 1; 281 uint32_t mono_chrome : 1; 282 uint32_t color_range : 1; 283 uint32_t subsampling_x : 1; 284 uint32_t subsampling_y : 1; 285 va_deprecated uint32_t chroma_sample_position : 1; 286 uint32_t film_grain_params_present : 1; 287 /** \brief Reserved bytes for future use, must be zero */ 288 uint32_t reserved : 16; 289 } fields; 290 uint32_t value; 291 } seq_info_fields; 292 293 /** \brief Picture level information 294 */ 295 296 /** \brief buffer description of decoded current picture 297 */ 298 VASurfaceID current_frame; 299 300 /** \brief display buffer of current picture 301 * Used for film grain applied decoded picture. 302 * Valid only when apply_grain equals 1. 303 */ 304 VASurfaceID current_display_picture; 305 306 /** \brief number of anchor frames for large scale tile 307 * This parameter gives the number of entries of anchor_frames_list[]. 308 * Value range [0..128]. 309 */ 310 uint8_t anchor_frames_num; 311 312 /** \brief anchor frame list for large scale tile 313 * For large scale tile applications, the anchor frames could come from 314 * previously decoded frames in current sequence (aka. internal), or 315 * from external sources. 316 * For external anchor frames, application should call API 317 * vaCreateBuffer() to generate frame buffers and populate them with 318 * pixel frames. And this process may happen multiple times. 319 * The array anchor_frames_list[] is used to register all the available 320 * anchor frames from both external and internal, up to the current 321 * frame instance. If a previously registerred anchor frame is no longer 322 * needed, it should be removed from the list. But it does not prevent 323 * applications from relacing the frame buffer with new anchor frames. 324 * Please note that the internal anchor frames may not still be present 325 * in the current DPB buffer. But if it is in the anchor_frames_list[], 326 * it should not be replaced with other frames or removed from memory 327 * until it is not shown in the list. 328 * This number of entries of the list is given by parameter anchor_frames_num. 329 */ 330 VASurfaceID *anchor_frames_list; 331 332 /** \brief Picture resolution minus 1 333 * Picture original resolution. If SuperRes is enabled, 334 * this is the upscaled resolution. 335 * value range [0..65535] 336 */ 337 uint16_t frame_width_minus1; 338 uint16_t frame_height_minus1; 339 340 /** \brief Output frame buffer size in unit of tiles 341 * Valid only when large_scale_tile equals 1. 342 * value range [0..65535] 343 */ 344 uint16_t output_frame_width_in_tiles_minus_1; 345 uint16_t output_frame_height_in_tiles_minus_1; 346 347 /** \brief Surface indices of reference frames in DPB. 348 * 349 * Contains a list of uncompressed frame buffer surface indices as references. 350 * Application needs to make sure all the entries point to valid frames 351 * except for intra frames by checking ref_frame_id[]. If missing frame 352 * is identified, application may choose to perform error recovery by 353 * pointing problematic index to an alternative frame buffer. 354 * Driver is not responsible to validate reference frames' id. 355 */ 356 VASurfaceID ref_frame_map[8]; 357 358 /** \brief Reference frame indices. 359 * 360 * Contains a list of indices into ref_frame_map[8]. 361 * It specifies the reference frame correspondence. 362 * The indices of the array are defined as [LAST_FRAME – LAST_FRAME, 363 * LAST2_FRAME – LAST_FRAME, …, ALTREF_FRAME – LAST_FRAME], where each 364 * symbol is defined as: 365 * enum{INTRA_FRAME = 0, LAST_FRAME, LAST2_FRAME, LAST3_FRAME, GOLDEN_FRAME, 366 * BWDREF_FRAME, ALTREF2_FRAME, ALTREF_FRAME}; 367 */ 368 uint8_t ref_frame_idx[7]; 369 370 /** \brief primary reference frame index 371 * Index into ref_frame_idx[], specifying which reference frame contains 372 * propagated info that should be loaded at the start of the frame. 373 * When value equals PRIMARY_REF_NONE (7), it indicates there is 374 * no primary reference frame. 375 * value range [0..7] 376 */ 377 uint8_t primary_ref_frame; 378 379 uint8_t order_hint; 380 381 VASegmentationStructAV1 seg_info; 382 VAFilmGrainStructAV1 film_grain_info; 383 384 /** \brief tile structure 385 * When uniform_tile_spacing_flag == 1, width_in_sbs_minus_1[] and 386 * height_in_sbs_minus_1[] should be ignored, which will be generated 387 * by driver based on tile_cols and tile_rows. 388 */ 389 uint8_t tile_cols; 390 uint8_t tile_rows; 391 392 /* The width/height of a tile minus 1 in units of superblocks. Though the 393 * maximum number of tiles is 64, since ones of the last tile are computed 394 * from ones of the other tiles and frame_width/height, they are not 395 * necessarily specified. 396 */ 397 uint16_t width_in_sbs_minus_1[63]; 398 uint16_t height_in_sbs_minus_1[63]; 399 400 /** \brief number of tiles minus 1 in large scale tile list 401 * Same as AV1 semantic element. 402 * Valid only when large_scale_tiles == 1. 403 */ 404 uint16_t tile_count_minus_1; 405 406 /* specify the tile index for context updating */ 407 uint16_t context_update_tile_id; 408 409 union { 410 struct { 411 /** \brief flags for current picture 412 * same syntax and semantic as those in AV1 code 413 */ 414 415 /** \brief Frame Type 416 * 0: KEY_FRAME; 417 * 1: INTER_FRAME; 418 * 2: INTRA_ONLY_FRAME; 419 * 3: SWITCH_FRAME 420 * For SWITCH_FRAME, application shall set error_resilient_mode = 1, 421 * refresh_frame_flags, etc. appropriately. And driver will convert it 422 * to INTER_FRAME. 423 */ 424 uint32_t frame_type : 2; 425 uint32_t show_frame : 1; 426 uint32_t showable_frame : 1; 427 uint32_t error_resilient_mode : 1; 428 uint32_t disable_cdf_update : 1; 429 uint32_t allow_screen_content_tools : 1; 430 uint32_t force_integer_mv : 1; 431 uint32_t allow_intrabc : 1; 432 uint32_t use_superres : 1; 433 uint32_t allow_high_precision_mv : 1; 434 uint32_t is_motion_mode_switchable : 1; 435 uint32_t use_ref_frame_mvs : 1; 436 /* disable_frame_end_update_cdf is coded as refresh_frame_context. */ 437 uint32_t disable_frame_end_update_cdf : 1; 438 uint32_t uniform_tile_spacing_flag : 1; 439 uint32_t allow_warped_motion : 1; 440 /** \brief indicate if current frame in large scale tile mode */ 441 uint32_t large_scale_tile : 1; 442 443 /** \brief Reserved bytes for future use, must be zero */ 444 uint32_t reserved : 15; 445 } bits; 446 uint32_t value; 447 } pic_info_fields; 448 449 /** \brief Supper resolution scale denominator. 450 * When use_superres=1, superres_scale_denominator must be in the range [9..16]. 451 * When use_superres=0, superres_scale_denominator must be 8. 452 */ 453 uint8_t superres_scale_denominator; 454 455 /** \brief Interpolation filter. 456 * value range [0..4] 457 */ 458 uint8_t interp_filter; 459 460 /** \brief luma loop filter levels. 461 * value range [0..63]. 462 */ 463 uint8_t filter_level[2]; 464 465 /** \brief chroma loop filter levels. 466 * value range [0..63]. 467 */ 468 uint8_t filter_level_u; 469 uint8_t filter_level_v; 470 471 union { 472 struct { 473 /** \brief flags for reference pictures 474 * same syntax and semantic as those in AV1 code 475 */ 476 uint8_t sharpness_level : 3; 477 uint8_t mode_ref_delta_enabled : 1; 478 uint8_t mode_ref_delta_update : 1; 479 480 /** \brief Reserved bytes for future use, must be zero */ 481 uint8_t reserved : 3; 482 } bits; 483 uint8_t value; 484 } loop_filter_info_fields; 485 486 /** \brief The adjustment needed for the filter level based on 487 * the chosen reference frame. 488 * value range [-64..63]. 489 */ 490 int8_t ref_deltas[8]; 491 492 /** \brief The adjustment needed for the filter level based on 493 * the chosen mode. 494 * value range [-64..63]. 495 */ 496 int8_t mode_deltas[2]; 497 498 /** \brief quantization 499 */ 500 /** \brief Y AC index 501 * value range [0..255] 502 */ 503 uint8_t base_qindex; 504 /** \brief Y DC delta from Y AC 505 * value range [-64..63] 506 */ 507 int8_t y_dc_delta_q; 508 /** \brief U DC delta from Y AC 509 * value range [-64..63] 510 */ 511 int8_t u_dc_delta_q; 512 /** \brief U AC delta from Y AC 513 * value range [-64..63] 514 */ 515 int8_t u_ac_delta_q; 516 /** \brief V DC delta from Y AC 517 * value range [-64..63] 518 */ 519 int8_t v_dc_delta_q; 520 /** \brief V AC delta from Y AC 521 * value range [-64..63] 522 */ 523 int8_t v_ac_delta_q; 524 525 /** \brief quantization_matrix 526 */ 527 union { 528 struct { 529 uint16_t using_qmatrix : 1; 530 /** \brief qm level 531 * value range [0..15] 532 * Invalid if using_qmatrix equals 0. 533 */ 534 uint16_t qm_y : 4; 535 uint16_t qm_u : 4; 536 uint16_t qm_v : 4; 537 538 /** \brief Reserved bytes for future use, must be zero */ 539 uint16_t reserved : 3; 540 } bits; 541 uint16_t value; 542 } qmatrix_fields; 543 544 union { 545 struct { 546 /** \brief delta_q parameters 547 */ 548 uint32_t delta_q_present_flag : 1; 549 uint32_t log2_delta_q_res : 2; 550 551 /** \brief delta_lf parameters 552 */ 553 uint32_t delta_lf_present_flag : 1; 554 uint32_t log2_delta_lf_res : 2; 555 556 /** \brief CONFIG_LOOPFILTER_LEVEL 557 */ 558 uint32_t delta_lf_multi : 1; 559 560 /** \brief read_tx_mode 561 * value range [0..2] 562 */ 563 uint32_t tx_mode : 2; 564 565 /* AV1 frame reference mode semantic */ 566 uint32_t reference_select : 1; 567 568 uint32_t reduced_tx_set_used : 1; 569 570 uint32_t skip_mode_present : 1; 571 572 /** \brief Reserved bytes for future use, must be zero */ 573 uint32_t reserved : 20; 574 } bits; 575 uint32_t value; 576 } mode_control_fields; 577 578 /** \brief CDEF parameters 579 */ 580 /* value range [0..3] */ 581 uint8_t cdef_damping_minus_3; 582 /* value range [0..3] */ 583 uint8_t cdef_bits; 584 585 /** Encode cdef strength: 586 * 587 * The cdef_y_strengths[] and cdef_uv_strengths[] are expected to be packed 588 * with both primary and secondary strength. The secondary strength is 589 * given in the lower two bits and the primary strength is given in the next 590 * four bits. 591 * 592 * cdef_y_strengths[] & cdef_uv_strengths[] should be derived as: 593 * (cdef_y_strengths[]) = (cdef_y_pri_strength[] << 2) | (cdef_y_sec_strength[] & 0x03) 594 * (cdef_uv_strengths[]) = (cdef_uv_pri_strength[] << 2) | (cdef_uv_sec_strength[] & 0x03) 595 * In which, cdef_y_pri_strength[]/cdef_y_sec_strength[]/cdef_uv_pri_strength[]/cdef_uv_sec_strength[] 596 * are variables defined in AV1 Spec 5.9.19. The cdef_y_strengths[] & cdef_uv_strengths[] 597 * are corresponding to LIBAOM variables cm->cdef_strengths[] & cm->cdef_uv_strengths[] respectively. 598 */ 599 /* value range [0..63] */ 600 uint8_t cdef_y_strengths[8]; 601 /* value range [0..63] */ 602 uint8_t cdef_uv_strengths[8]; 603 604 /** \brief loop restoration parameters 605 */ 606 union { 607 struct { 608 uint16_t yframe_restoration_type : 2; 609 uint16_t cbframe_restoration_type : 2; 610 uint16_t crframe_restoration_type : 2; 611 uint16_t lr_unit_shift : 2; 612 uint16_t lr_uv_shift : 1; 613 614 /** \brief Reserved bytes for future use, must be zero */ 615 uint16_t reserved : 7; 616 } bits; 617 uint16_t value; 618 } loop_restoration_fields; 619 620 /** \brief global motion 621 */ 622 VAWarpedMotionParamsAV1 wm[7]; 623 624 /**@}*/ 625 626 /** \brief Reserved bytes for future use, must be zero */ 627 uint32_t va_reserved[VA_PADDING_MEDIUM]; 628 } VADecPictureParameterBufferAV1; 629 630 631 /** 632 * \brief AV1 Slice Parameter Buffer Structure 633 * 634 * This structure conveys parameters related to bit stream data and should be 635 * sent once per tile. 636 * 637 * It uses the name VASliceParameterBufferAV1 to be consistent with other codec, 638 * but actually means VATileParameterBufferAV1. 639 * 640 * Slice data buffer of VASliceDataBufferType is used 641 * to send the bitstream. 642 * 643 * Please note that host decoder is responsible to parse out the 644 * per tile information. And the bit stream in sent to driver in per 645 * tile granularity. 646 */ 647 typedef struct _VASliceParameterBufferAV1 { 648 /**@{*/ 649 /** \brief The byte count of current tile in the bitstream buffer, 650 * starting from first byte of the buffer. 651 * It uses the name slice_data_size to be consistent with other codec, 652 * but actually means tile_data_size. 653 */ 654 uint32_t slice_data_size; 655 /** 656 * offset to the first byte of the data buffer. 657 */ 658 uint32_t slice_data_offset; 659 /** 660 * see VA_SLICE_DATA_FLAG_XXX definitions 661 */ 662 uint32_t slice_data_flag; 663 664 uint16_t tile_row; 665 uint16_t tile_column; 666 667 va_deprecated uint16_t tg_start; 668 va_deprecated uint16_t tg_end; 669 /** \brief anchor frame index for large scale tile. 670 * index into an array AnchorFrames of the frames that the tile uses 671 * for prediction. 672 * valid only when large_scale_tile equals 1. 673 */ 674 uint8_t anchor_frame_idx; 675 676 /** \brief tile index in the tile list. 677 * Valid only when large_scale_tile is enabled. 678 * Driver uses this field to decide the tile output location. 679 */ 680 uint16_t tile_idx_in_tile_list; 681 682 /**@}*/ 683 684 /** \brief Reserved bytes for future use, must be zero */ 685 uint32_t va_reserved[VA_PADDING_LOW]; 686 } VASliceParameterBufferAV1; 687 688 689 /**@}*/ 690 691 #ifdef __cplusplus 692 } 693 #endif 694 695 #endif /* VA_DEC_AV1_H */ 696