1f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan/*
2f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * Copyright (c) 2007-2014 Intel Corporation. All Rights Reserved.
3f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan *
4f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * Permission is hereby granted, free of charge, to any person obtaining a
5f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * copy of this software and associated documentation files (the
6f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * "Software"), to deal in the Software without restriction, including
7f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * without limitation the rights to use, copy, modify, merge, publish,
8f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * distribute, sub license, and/or sell copies of the Software, and to
9f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * permit persons to whom the Software is furnished to do so, subject to
10f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * the following conditions:
11f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan *
12f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * The above copyright notice and this permission notice (including the
13f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * next paragraph) shall be included in all copies or substantial portions
14f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * of the Software.
15f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan *
16f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR
20f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan */
24f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
25f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan/**
26f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * \file va_dec_vp9.h
27f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * \brief The VP9 decoding API
28f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan *
29f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * This file contains the \ref api_dec_vp9 "VP9 decoding API".
30f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan */
31f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
32f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan#ifndef VA_DEC_VP9_H
33f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan#define VA_DEC_VP9_H
34f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
35f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan#include <stdint.h>
36f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
37f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan#ifdef __cplusplus
38f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquanextern "C" {
39f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan#endif
40f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
41f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan/**
42f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * \defgroup api_dec_vp9 VP9 decoding API
43f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan *
44f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * This VP9 decoding API supports 8-bit 420 format only.
45f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan *
46f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * @{
47f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan */
48f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
49f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
50f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
51f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
52f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan/**
53f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * \brief VP9 Decoding Picture Parameter Buffer Structure
54f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan *
55f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * This structure conveys picture level parameters.
56f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * App should send a surface with this data structure down to VAAPI once
57f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * per frame.
58f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan *
59f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan */
60f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquantypedef struct  _VADecPictureParameterBufferVP9
61f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan{
62f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /**@{*/
63f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
64f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /** \brief picture width
65f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  The value must be multiple of 8.
66f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
67f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    uint16_t                frame_width;
68f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /** \brief picture height
69f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  The value must be multiple of 8.
70f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
71f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    uint16_t                frame_height;
72f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
73f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /** \brief Surface index of decoded current picture
74f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
75f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    VASurfaceID             curr_pic;
76f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /** \brief Surface indices of reference frames in DPB.
77f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *
78f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  Each entry of the list specifies the surface index of the picture
79f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  that is referred by current picture or will be referred by any future
80f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  picture.
81f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  Application who calls this API should update this list based on the
82f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  refreshing information from VP9 bitstream.
83f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
84f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    VASurfaceID             reference_frames[8];
85f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
86f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    union
87f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    {
88f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan        struct
89f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan        {
90f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            /** \brief flags for current picture
91f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  same syntax and semantic as those in VP9 code
92f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             */
93f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        subsampling_x                               : 1;
94f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        subsampling_y                               : 1;
95f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        frame_type                                  : 1;
96f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        show_frame                                  : 1;
97f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        error_resilient_mode                        : 1;
98f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        intra_only                                  : 1;
99f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        allow_high_precision_mv                     : 1;
100f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        mcomp_filter_type                           : 3;
101f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        frame_parallel_decoding_mode                : 1;
102f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        reset_frame_context                         : 2;
103f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        refresh_frame_context                       : 1;
104f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        frame_context_idx                           : 2;
105f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        segmentation_enabled                        : 1;
106f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
107f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            /** \brief corresponds to variable temporal_update in VP9 code.
108f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             */
109f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        segmentation_temporal_update                : 1;
110f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            /** \brief corresponds to variable update_mb_segmentation_map
111f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  in VP9 code.
112f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             */
113f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        segmentation_update_map                     : 1;
114f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
115f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            /** \brief Index of reference_frames[] and points to the
116f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  LAST reference frame.
117f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  It corresponds to active_ref_idx[0] in VP9 code.
118f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             */
119f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        last_ref_frame                              : 3;
120f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            /** \brief Sign Bias of the LAST reference frame.
121f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  It corresponds to ref_frame_sign_bias[LAST_FRAME] in VP9 code.
122f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             */
123f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        last_ref_frame_sign_bias                    : 1;
124f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            /** \brief Index of reference_frames[] and points to the
125f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  GOLDERN reference frame.
126f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  It corresponds to active_ref_idx[1] in VP9 code.
127f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             */
128f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        golden_ref_frame                            : 3;
129f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            /** \brief Sign Bias of the GOLDERN reference frame.
130f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  Corresponds to ref_frame_sign_bias[GOLDERN_FRAME] in VP9 code.
131f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             */
132f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        golden_ref_frame_sign_bias                  : 1;
133f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            /** \brief Index of reference_frames[] and points to the
134f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  ALTERNATE reference frame.
135f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  Corresponds to active_ref_idx[2] in VP9 code.
136f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             */
137f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        alt_ref_frame                               : 3;
138f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            /** \brief Sign Bias of the ALTERNATE reference frame.
139f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  Corresponds to ref_frame_sign_bias[ALTREF_FRAME] in VP9 code.
140f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             */
141f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        alt_ref_frame_sign_bias                     : 1;
142f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            /** \brief Lossless Mode
143f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  LosslessFlag = base_qindex == 0 &&
144f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *                 y_dc_delta_q == 0 &&
145f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *                 uv_dc_delta_q == 0 &&
146f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *                 uv_ac_delta_q == 0;
147f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  Where base_qindex, y_dc_delta_q, uv_dc_delta_q and uv_ac_delta_q
148f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  are all variables in VP9 code.
149f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             */
150f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint32_t        lossless_flag                               : 1;
151f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan        } bits;
152f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan        uint32_t            value;
153f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    } pic_fields;
154f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
155f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /* following parameters have same syntax with those in VP9 code */
156f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    uint8_t                 filter_level;
157f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    uint8_t                 sharpness_level;
158f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
159f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /** \brief number of tile rows specified by (1 << log2_tile_rows).
160f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  It corresponds the variable with same name in VP9 code.
161f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
162f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    uint8_t                 log2_tile_rows;
163f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /** \brief number of tile columns specified by (1 << log2_tile_columns).
164f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  It corresponds the variable with same name in VP9 code.
165f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
166f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    uint8_t                 log2_tile_columns;
167f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /** \brief Number of bytes taken up by the uncompressed frame header,
168f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  which corresponds to byte length of function
169f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  read_uncompressed_header() in VP9 code.
170f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  Specifically, it is the byte count from bit stream buffer start to
171f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  the last byte of uncompressed frame header.
172f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
173f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    uint8_t                 frame_header_length_in_bytes;
174f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
175f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /** \brief The byte count of compressed header the bitstream buffer,
176f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  which corresponds to syntax first_partition_size in code.
177f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
178f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    uint16_t                first_partition_size;
179f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
180f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /** \brief The byte count of current frame in the bitstream buffer,
181f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  starting from first byte of the buffer.
182f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
183f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    uint32_t                frame_data_size;
184f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
185f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /** These values are segment probabilities with same names in VP9
186f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  function setup_segmentation(). They should be parsed directly from
187f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  bitstream by application.
188f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
189f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    uint8_t                 mb_segment_tree_probs[7];
190f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    uint8_t                 segment_pred_probs[3];
191f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
192f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /** \brief VP9 version number
193f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  value can be 0 or 1.
194f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
195f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    uint8_t                 version;
196f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /**@}*/
197f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
198f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan} VADecPictureParameterBufferVP9;
199f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
200f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
201f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
202f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan/**
203f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * \brief VP9 Segmentation Parameter Data Structure
204f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan *
205f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * This structure conveys per segment parameters.
206f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * 8 of this data structure will be included in VASegmentationParameterBufferVP9
207f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * and sent to API in a single buffer.
208f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan *
209f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan */
210f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquantypedef struct  _VASegmentParameterVP9
211f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan{
212f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /**@{*/
213f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
214f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    union
215f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    {
216f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan        struct
217f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan        {
218f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            /** \brief Indicates if per segment reference frame indicator
219f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  is enabled.
220f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  Corresponding to variable feature_enabled when
221f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code.
222f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             */
223f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint16_t        segment_reference_enabled                   : 1;
224f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            /** \brief Specifies per segment reference indication.
225f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  0: reserved
226f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  1: Last ref
227f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  2: golden
228f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  3: altref
229f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  Value can be derived from variable data when
230f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code.
231f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             */
232f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint16_t        segment_reference                           : 2;
233f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            /** \brief Indicates if per segment skip feature is enabled.
234f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  Corresponding to variable feature_enabled when
235f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             *  j == SEG_LVL_SKIP in function setup_segmentation() VP9 code.
236f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan             */
237f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan            uint16_t        segment_reference_skipped                   : 1;
238f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan        } fields;
239f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan        uint16_t            value;
240f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    } segment_flags;
241f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
242f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /** \brief Specifies the filter level information per segment.
243f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  The value corresponds to variable lfi->lvl[seg][ref][mode] in VP9 code,
244f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  where m is [ref], and n is [mode] in FilterLevel[m][n].
245f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
246f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    uint8_t                 filter_level[4][2];
247f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /** \brief Specifies per segment Luma AC quantization scale.
248f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  Corresponding to y_dequant[qindex][1] in vp9_mb_init_quantizer()
249f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  function of VP9 code.
250f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
251f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    int16_t                 luma_ac_quant_scale;
252f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /** \brief Specifies per segment Luma DC quantization scale.
253f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  Corresponding to y_dequant[qindex][0] in vp9_mb_init_quantizer()
254f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  function of VP9 code.
255f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
256f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    int16_t                 luma_dc_quant_scale;
257f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /** \brief Specifies per segment Chroma AC quantization scale.
258f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  Corresponding to uv_dequant[qindex][1] in vp9_mb_init_quantizer()
259f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  function of VP9 code.
260f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
261f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    int16_t                 chroma_ac_quant_scale;
262f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /** \brief Specifies per segment Chroma DC quantization scale.
263f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  Corresponding to uv_dequant[qindex][0] in vp9_mb_init_quantizer()
264f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     *  function of VP9 code.
265f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
266f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    int16_t                 chroma_dc_quant_scale;
267f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
268f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /**@}*/
269f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
270f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan} VASegmentParameterVP9;
271f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
272f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
273f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
274f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan/**
275f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * \brief VP9 Slice Parameter Buffer Structure
276f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan *
277f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * This structure conveys parameters related to segmentation data and should be
278f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * sent once per frame.
279f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan *
280f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * When segmentation is disabled, only SegParam[0] has valid values,
281f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * all other entries should be populated with 0.
282f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * Otherwise, all eight entries should be valid.
283f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan *
284f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * Slice data buffer of VASliceDataBufferType is used
285f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * to send the bitstream which should include whole or part of partition 0
286f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan * (at least compressed header) to the end of frame.
287f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan *
288f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan */
289f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquantypedef struct _VASliceParameterBufferVP9
290f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan{
291f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /**@{*/
292f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /**
293f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     * \brief per segment information
294f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan     */
295f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    VASegmentParameterVP9   seg_param[8];
296f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
297f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan    /**@}*/
298f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
299f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan} VASliceParameterBufferVP9;
300f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
301f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
302f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan/**@}*/
303f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
304f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan#ifdef __cplusplus
305f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan}
306f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan#endif
307f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan
308f3714df52ef3b6fa88e3a3815cd1fd7cf3d071cdYuan, Shengquan#endif /* VA_DEC_VP9_H */
309