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