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