tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

va_dec_vp9.h (12130B)


      1 /*
      2 * Copyright (c) 2014 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_vp9.h
     27 * \brief The VP9 decoding API
     28 *
     29 * This file contains the \ref api_dec_vp9 "VP9 decoding API".
     30 */
     31 
     32 #ifndef VA_DEC_VP9_H
     33 #define VA_DEC_VP9_H
     34 
     35 #ifdef __cplusplus
     36 extern "C" {
     37 #endif
     38 
     39 /**
     40 * \defgroup api_dec_vp9 VP9 decoding API
     41 *
     42 * This VP9 decoding API supports 8-bit 420 format only.
     43 *
     44 * @{
     45 */
     46 
     47 
     48 
     49 
     50 /**
     51 * \brief VP9 Decoding Picture Parameter Buffer Structure
     52 *
     53 * This structure conveys picture level parameters.
     54 * App should send a surface with this data structure down to VAAPI once
     55 * per frame.
     56 *
     57 */
     58 typedef struct  _VADecPictureParameterBufferVP9 {
     59    /** \brief picture width
     60     *  Picture original resolution. The value may not be multiple of 8.
     61     */
     62    uint16_t                frame_width;
     63    /** \brief picture height
     64     *  Picture original resolution. The value may not be multiple of 8.
     65     */
     66    uint16_t                frame_height;
     67 
     68    /** \brief Surface indices of reference frames in DPB.
     69     *
     70     *  Each entry of the list specifies the surface index of the picture
     71     *  that is referred by current picture or will be referred by any future
     72     *  picture.
     73     *  Application who calls this API should update this list based on the
     74     *  refreshing information from VP9 bitstream.
     75     */
     76    VASurfaceID             reference_frames[8];
     77 
     78    union {
     79        struct {
     80            /** \brief flags for current picture
     81             *  same syntax and semantic as those in VP9 code
     82             */
     83            uint32_t        subsampling_x                               : 1;
     84            uint32_t        subsampling_y                               : 1;
     85            uint32_t        frame_type                                  : 1;
     86            uint32_t        show_frame                                  : 1;
     87            uint32_t        error_resilient_mode                        : 1;
     88            uint32_t        intra_only                                  : 1;
     89            uint32_t        allow_high_precision_mv                     : 1;
     90            uint32_t        mcomp_filter_type                           : 3;
     91            uint32_t        frame_parallel_decoding_mode                : 1;
     92            uint32_t        reset_frame_context                         : 2;
     93            uint32_t        refresh_frame_context                       : 1;
     94            uint32_t        frame_context_idx                           : 2;
     95            uint32_t        segmentation_enabled                        : 1;
     96 
     97            /** \brief corresponds to variable temporal_update in VP9 code.
     98             */
     99            uint32_t        segmentation_temporal_update                : 1;
    100            /** \brief corresponds to variable update_mb_segmentation_map
    101             *  in VP9 code.
    102             */
    103            uint32_t        segmentation_update_map                     : 1;
    104 
    105            /** \brief Index of reference_frames[] and points to the
    106             *  LAST reference frame.
    107             *  It corresponds to active_ref_idx[0] in VP9 code.
    108             */
    109            uint32_t        last_ref_frame                              : 3;
    110            /** \brief Sign Bias of the LAST reference frame.
    111             *  It corresponds to ref_frame_sign_bias[LAST_FRAME] in VP9 code.
    112             */
    113            uint32_t        last_ref_frame_sign_bias                    : 1;
    114            /** \brief Index of reference_frames[] and points to the
    115             *  GOLDERN reference frame.
    116             *  It corresponds to active_ref_idx[1] in VP9 code.
    117             */
    118            uint32_t        golden_ref_frame                            : 3;
    119            /** \brief Sign Bias of the GOLDERN reference frame.
    120             *  Corresponds to ref_frame_sign_bias[GOLDERN_FRAME] in VP9 code.
    121             */
    122            uint32_t        golden_ref_frame_sign_bias                  : 1;
    123            /** \brief Index of reference_frames[] and points to the
    124             *  ALTERNATE reference frame.
    125             *  Corresponds to active_ref_idx[2] in VP9 code.
    126             */
    127            uint32_t        alt_ref_frame                               : 3;
    128            /** \brief Sign Bias of the ALTERNATE reference frame.
    129             *  Corresponds to ref_frame_sign_bias[ALTREF_FRAME] in VP9 code.
    130             */
    131            uint32_t        alt_ref_frame_sign_bias                     : 1;
    132            /** \brief Lossless Mode
    133             *  LosslessFlag = base_qindex == 0 &&
    134             *                 y_dc_delta_q == 0 &&
    135             *                 uv_dc_delta_q == 0 &&
    136             *                 uv_ac_delta_q == 0;
    137             *  Where base_qindex, y_dc_delta_q, uv_dc_delta_q and uv_ac_delta_q
    138             *  are all variables in VP9 code.
    139             */
    140            uint32_t        lossless_flag                               : 1;
    141        } bits;
    142        uint32_t            value;
    143    } pic_fields;
    144 
    145    /* following parameters have same syntax with those in VP9 code */
    146    uint8_t                 filter_level;
    147    uint8_t                 sharpness_level;
    148 
    149    /** \brief number of tile rows specified by (1 << log2_tile_rows).
    150     *  It corresponds the variable with same name in VP9 code.
    151     */
    152    uint8_t                 log2_tile_rows;
    153    /** \brief number of tile columns specified by (1 << log2_tile_columns).
    154     *  It corresponds the variable with same name in VP9 code.
    155     */
    156    uint8_t                 log2_tile_columns;
    157    /** \brief Number of bytes taken up by the uncompressed frame header,
    158     *  which corresponds to byte length of function
    159     *  read_uncompressed_header() in VP9 code.
    160     *  Specifically, it is the byte count from bit stream buffer start to
    161     *  the last byte of uncompressed frame header.
    162     *  If there are other meta data in the buffer before uncompressed header,
    163     *  its size should be also included here.
    164     */
    165    uint8_t                 frame_header_length_in_bytes;
    166 
    167    /** \brief The byte count of compressed header the bitstream buffer,
    168     *  which corresponds to syntax first_partition_size in code.
    169     */
    170    uint16_t                first_partition_size;
    171 
    172    /** These values are segment probabilities with same names in VP9
    173     *  function setup_segmentation(). They should be parsed directly from
    174     *  bitstream by application.
    175     */
    176    uint8_t                 mb_segment_tree_probs[7];
    177    uint8_t                 segment_pred_probs[3];
    178 
    179    /** \brief VP9 Profile definition
    180     *  value range [0..3].
    181      */
    182    uint8_t                 profile;
    183 
    184    /** \brief VP9 bit depth per sample
    185     *  same for both luma and chroma samples.
    186     */
    187    uint8_t                 bit_depth;
    188 
    189    /** \brief Reserved bytes for future use, must be zero */
    190    uint32_t                va_reserved[VA_PADDING_MEDIUM];
    191 
    192 } VADecPictureParameterBufferVP9;
    193 
    194 
    195 
    196 /**
    197 * \brief VP9 Segmentation Parameter Data Structure
    198 *
    199 * This structure conveys per segment parameters.
    200 * 8 of this data structure will be included in VASegmentationParameterBufferVP9
    201 * and sent to API in a single buffer.
    202 *
    203 */
    204 typedef struct  _VASegmentParameterVP9 {
    205    union {
    206        struct {
    207            /** \brief Indicates if per segment reference frame indicator
    208             *  is enabled.
    209             *  Corresponding to variable feature_enabled when
    210             *  j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code.
    211             */
    212            uint16_t        segment_reference_enabled                   : 1;
    213            /** \brief Specifies per segment reference indication.
    214             *  0: reserved
    215             *  1: Last ref
    216             *  2: golden
    217             *  3: altref
    218             *  Value can be derived from variable data when
    219             *  j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code.
    220             */
    221            uint16_t        segment_reference                           : 2;
    222            /** \brief Indicates if per segment skip feature is enabled.
    223             *  Corresponding to variable feature_enabled when
    224             *  j == SEG_LVL_SKIP in function setup_segmentation() VP9 code.
    225             */
    226            uint16_t        segment_reference_skipped                   : 1;
    227        } fields;
    228        uint16_t            value;
    229    } segment_flags;
    230 
    231    /** \brief Specifies the filter level information per segment.
    232     *  The value corresponds to variable lfi->lvl[seg][ref][mode] in VP9 code,
    233     *  where m is [ref], and n is [mode] in FilterLevel[m][n].
    234     */
    235    uint8_t                 filter_level[4][2];
    236    /** \brief Specifies per segment Luma AC quantization scale.
    237     *  Corresponding to y_dequant[qindex][1] in vp9_mb_init_quantizer()
    238     *  function of VP9 code.
    239     */
    240    int16_t                 luma_ac_quant_scale;
    241    /** \brief Specifies per segment Luma DC quantization scale.
    242     *  Corresponding to y_dequant[qindex][0] in vp9_mb_init_quantizer()
    243     *  function of VP9 code.
    244     */
    245    int16_t                 luma_dc_quant_scale;
    246    /** \brief Specifies per segment Chroma AC quantization scale.
    247     *  Corresponding to uv_dequant[qindex][1] in vp9_mb_init_quantizer()
    248     *  function of VP9 code.
    249     */
    250    int16_t                 chroma_ac_quant_scale;
    251    /** \brief Specifies per segment Chroma DC quantization scale.
    252     *  Corresponding to uv_dequant[qindex][0] in vp9_mb_init_quantizer()
    253     *  function of VP9 code.
    254     */
    255    int16_t                 chroma_dc_quant_scale;
    256 
    257    /** \brief Reserved bytes for future use, must be zero */
    258    uint32_t                va_reserved[VA_PADDING_LOW];
    259 
    260 } VASegmentParameterVP9;
    261 
    262 
    263 
    264 /**
    265 * \brief VP9 Slice Parameter Buffer Structure
    266 *
    267 * This structure conveys parameters related to segmentation data and should be
    268 * sent once per frame.
    269 *
    270 * When segmentation is disabled, only SegParam[0] has valid values,
    271 * all other entries should be populated with 0.
    272 * Otherwise, all eight entries should be valid.
    273 *
    274 * Slice data buffer of VASliceDataBufferType is used
    275 * to send the bitstream which should include whole or part of partition 0
    276 * (at least compressed header) to the end of frame.
    277 *
    278 */
    279 typedef struct _VASliceParameterBufferVP9 {
    280    /** \brief The byte count of current frame in the bitstream buffer,
    281     *  starting from first byte of the buffer.
    282     *  It uses the name slice_data_size to be consitent with other codec,
    283     *  but actually means frame_data_size.
    284     */
    285    uint32_t slice_data_size;
    286    /**
    287     * offset to the first byte of partition data (control partition)
    288     */
    289    uint32_t slice_data_offset;
    290    /**
    291     * see VA_SLICE_DATA_FLAG_XXX definitions
    292     */
    293    uint32_t slice_data_flag;
    294 
    295    /**
    296     * \brief per segment information
    297     */
    298    VASegmentParameterVP9   seg_param[8];
    299 
    300    /** \brief Reserved bytes for future use, must be zero */
    301    uint32_t                va_reserved[VA_PADDING_LOW];
    302 
    303 } VASliceParameterBufferVP9;
    304 
    305 
    306 /**@}*/
    307 
    308 #ifdef __cplusplus
    309 }
    310 #endif
    311 
    312 #endif /* VA_DEC_VP9_H */