Path: blob/21.2-virgl/src/gallium/frontends/omx/bellagio/vid_dec_av1.h
4565 views
/**************************************************************************1*2* Copyright 2020 Advanced Micro Devices, Inc.3* All Rights Reserved.4*5* Permission is hereby granted, free of charge, to any person obtaining a6* copy of this software and associated documentation files (the7* "Software"), to deal in the Software without restriction, including8* without limitation the rights to use, copy, modify, merge, publish,9* distribute, sub license, and/or sell copies of the Software, and to10* permit persons to whom the Software is furnished to do so, subject to11* the following conditions:12*13* The above copyright notice and this permission notice (including the14* next paragraph) shall be included in all copies or substantial portions15* of the Software.16*17* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS18* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF19* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.20* IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR21* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,22* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE23* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.24*25**************************************************************************/2627#ifndef VID_DEC_AV1_H28#define VID_DEC_AV1_H2930#include "os/os_thread.h"3132enum av1_obu_type {33AV1_OBU_SEQUENCE_HEADER = 1,34AV1_OBU_TEMPORAL_DELIMITER,35AV1_OBU_FRAME_HEADER,36AV1_OBU_TILE_GROUP,37AV1_OBU_METADATA,38AV1_OBU_FRAME,39AV1_OBU_REDUNDANT_FRAME_HEADER,40AV1_OBU_TILE_LIST,41AV1_OBU_PADDING = 1542};4344enum av1_obu_frame_type {45AV1_KEY_FRAME = 0,46AV1_INTER_FRAME,47AV1_INTRA_ONLY_FRAME,48AV1_SWITCH_FRAME49};5051enum av1_obu_color_primary {52AV1_CP_BT_709 = 1,53AV1_CP_UNSPECIFIED,54AV1_CP_BT_470_M = 4,55AV1_CP_BT_470_B_G,56AV1_CP_BT_601,57AV1_CP_SMPTE_240,58AV1_CP_GENERIC_FILM,59AV1_CP_BT_2020,60AV1_CP_XYZ,61AV1_CP_SMPTE_431,62AV1_CP_SMPTE_432,63AV1_CP_EBU_3213 = 2264};6566enum av1_obu_transfer_characteristic {67AV1_TC_RESERVED_0 = 0,68AV1_TC_BT_709,69AV1_TC_UNSPECIFIED,70AV1_TC_RESERVED_3,71AV1_TC_BT_470_M,72AV1_TC_BT_470_B_G,73AV1_TC_BT_601,74AV1_TC_SMPTE_240,75AV1_TC_LINEAR,76AV1_TC_LOG_100,77AV1_TC_LOG_100_SQRT10,78AV1_TC_IEC_61966,79AV1_TC_BT_1361,80AV1_TC_SRGB,81AV1_TC_BT_2020_10_BIT,82AV1_TC_BT_2020_12_BIT,83AV1_TC_SMPTE_2084,84AV1_TC_SMPTE_428,85AV1_TC_HLG86};8788enum av1_obu_matrix_coefficient {89AV1_MC_IDENTITY = 0,90AV1_MC_BT_709,91AV1_MC_UNSPECIFIED,92AV1_MC_RESERVED_3,93AV1_MC_FCC,94AV1_MC_BT_470_B_G,95AV1_MC_BT_601,96AV1_MC_SMPTE_240,97AV1_MC_SMPTE_YCGCO,98AV1_MC_BT_2020_NCL,99AV1_MC_BT_2020_CL,100AV1_MC_SMPTE_2085,101AV1_MC_CHROMAT_NCL,102AV1_MC_CHROMAT_CL,103AV1_MC_ICTCP104};105106enum av1_obu_seg_lvl {107AV1_SEG_LVL_ALT_Q = 0,108AV1_SEG_LVL_ALT_LF_Y_V,109AV1_SEG_LVL_REF_FRAME = 5,110AV1_SEG_LVL_SKIP,111AV1_SEG_LVL_GLOBALMV,112AV1_SEG_LVL_MAX113};114115enum av1_obu_lrtype {116AV1_RESTORE_NONE = 0,117AV1_RESTORE_WIENER,118AV1_RESTORE_SGRPROJ,119AV1_RESTORE_SWITCHABLE120};121122enum av1_obu_txmode {123AV1_ONLY_4X4 = 0,124AV1_TX_MODE_LARGEST,125AV1_TX_MODE_SELECT126};127128enum av1_obu_gmtype {129AV1_IDENTITY = 0,130AV1_TRANSLATION,131AV1_ROTZOOM,132AV1_AFFINE133};134135enum av1_frame_refs {136AV1_NONE = -1,137AV1_INTRA_FRAME = 0,138AV1_LAST_FRAME,139AV1_LAST2_FRAME,140AV1_LAST3_FRAME,141AV1_GOLDEN_FRAME,142AV1_BWDREF_FRAME,143AV1_ALTREF2_FRAME,144AV1_ALTREF_FRAME145};146147#define AV1_SELECT_SCREEN_CONTENT_TOOLS 2148#define AV1_SELECT_INTEGER_MV 2149150#define AV1_PRIMARY_REF_NONE 7151#define AV1_REFS_PER_FRAME 7152#define AV1_NUM_REF_FRAMES 8153154#define AV1_MAX_TILE_WIDTH 4096155#define AV1_MAX_TILE_AREA (4096 * 2304)156#define AV1_MAX_TILE_ROWS 64157#define AV1_MAX_TILE_COLS 64158#define AV1_MAX_NUM_TILES AV1_MAX_TILE_ROWS * AV1_MAX_TILE_COLS159160#define AV1_MAX_SEGMENTS 8161#define AV1_MAX_CDEF_BITS_ARRAY 8162#define AV1_RESTORATION_TILESIZE 256163#define AV1_WARPEDMODEL_PREC_BITS 16164#define AV1_FG_MAX_NUM_Y_POINTS 14165#define AV1_FG_MAX_NUM_CBR_POINTS 10166#define AV1_FG_MAX_NUM_POS_LUMA 24167#define AV1_FG_MAX_NUM_POS_CHROMA 25168169struct av1_obu_extension_header_obu170{171unsigned temporal_id;172unsigned spatial_id;173};174175struct av1_sequence_header_obu {176uint8_t seq_profile;177bool reduced_still_picture_header;178179struct {180bool equal_picture_interval;181} timing_info;182183bool decoder_model_info_present_flag;184struct {185unsigned num_units_in_decoding_tick;186uint8_t buffer_removal_time_length_minus_1;187uint8_t frame_presentation_time_length_minus_1;188} decoder_model_info;189190uint8_t operating_points_cnt_minus_1;191uint16_t operating_point_idc[32];192bool decoder_model_present_for_this_op[32];193194uint8_t frame_width_bits_minus_1;195uint8_t frame_height_bits_minus_1;196unsigned max_frame_width_minus_1;197unsigned max_frame_height_minus_1;198bool frame_id_numbers_present_flag;199uint8_t delta_frame_id_length_minus_2;200uint8_t additional_frame_id_length_minus_1;201202bool use_128x128_superblock;203bool enable_filter_intra;204bool enable_intra_edge_filter;205bool enable_interintra_compound;206bool enable_masked_compound;207bool enable_warped_motion;208bool enable_dual_filter;209bool enable_order_hint;210bool enable_jnt_comp;211bool enable_ref_frame_mvs;212uint8_t seq_force_screen_content_tools;213uint8_t seq_force_integer_mv;214215uint8_t order_hint_bits_minus_1;216uint8_t OrderHintBits;217bool enable_superres;218bool enable_cdef;219bool enable_restoration;220struct {221uint8_t BitDepth;222bool mono_chrome;223uint8_t NumPlanes;224bool subsampling_x;225bool subsampling_y;226bool separate_uv_delta_q;227} color_config;228bool film_grain_params_present;229};230231struct ref_frame {232uint8_t RefFrameType;233unsigned RefFrameId;234unsigned RefUpscaledWidth;235unsigned RefFrameWidth;236unsigned RefFrameHeight;237unsigned RefRenderWidth;238unsigned RefRenderHeight;239};240241struct tile_info {242unsigned TileColsLog2;243unsigned TileRowsLog2;244int tile_col_start_sb[AV1_MAX_TILE_COLS + 1];245int tile_row_start_sb[AV1_MAX_TILE_ROWS + 1];246unsigned TileCols;247unsigned TileRows;248unsigned context_update_tile_id;249uint8_t TileSizeBytes;250};251252struct quantization_params {253uint8_t base_q_idx;254int DeltaQYDc;255int DeltaQUDc;256int DeltaQUAc;257int DeltaQVDc;258int DeltaQVAc;259uint8_t qm_y;260uint8_t qm_u;261uint8_t qm_v;262};263264struct segmentation_params {265bool segmentation_enabled;266bool segmentation_update_map;267bool segmentation_temporal_update;268bool FeatureEnabled[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];269int FeatureData[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];270int FeatureMask[AV1_MAX_SEGMENTS];271};272273struct delta_q_params {274bool delta_q_present;275uint8_t delta_q_res;276};277278struct delta_lf_params {279bool delta_lf_present;280uint8_t delta_lf_res;281bool delta_lf_multi;282};283284struct loop_filter_params {285uint8_t loop_filter_level[4];286uint8_t loop_filter_sharpness;287bool loop_filter_delta_enabled;288bool loop_filter_delta_update;289int8_t loop_filter_ref_deltas[AV1_NUM_REF_FRAMES];290int8_t loop_filter_mode_deltas[2];291};292293struct cdef_params {294uint8_t cdef_damping_minus_3;295uint8_t cdef_bits;296uint16_t cdef_y_strengths[AV1_MAX_CDEF_BITS_ARRAY];297uint16_t cdef_uv_strengths[AV1_MAX_CDEF_BITS_ARRAY];298};299300struct loop_restoration_params {301uint8_t FrameRestorationType[3];302uint16_t LoopRestorationSize[3];303};304305struct tx_mode_params {306uint8_t TxMode;307};308309enum reference_mode {310SINGLE_REFERENCE = 0,311COMPOUND_REFERENCE = 1,312REFERENCE_MODE_SELECT = 2,313REFERENCE_MODES = 3,314};315316struct skip_mode_params {317bool skip_mode_present;318};319320struct global_motion_params {321uint8_t GmType[AV1_NUM_REF_FRAMES];322int gm_params[AV1_NUM_REF_FRAMES][6];323};324325struct film_grain_params {326bool apply_grain;327uint16_t grain_seed;328uint8_t num_y_points;329uint8_t point_y_value[AV1_FG_MAX_NUM_Y_POINTS];330uint8_t point_y_scaling[AV1_FG_MAX_NUM_Y_POINTS];331bool chroma_scaling_from_luma;332uint8_t num_cb_points;333uint8_t num_cr_points;334uint8_t point_cb_value[AV1_FG_MAX_NUM_CBR_POINTS];335uint8_t point_cb_scaling[AV1_FG_MAX_NUM_CBR_POINTS];336uint8_t point_cr_value[AV1_FG_MAX_NUM_CBR_POINTS];337uint8_t point_cr_scaling[AV1_FG_MAX_NUM_CBR_POINTS];338uint8_t grain_scaling_minus_8;339uint8_t ar_coeff_lag;340int ar_coeffs_y[AV1_FG_MAX_NUM_POS_LUMA];341int ar_coeffs_cb[AV1_FG_MAX_NUM_POS_CHROMA];342int ar_coeffs_cr[AV1_FG_MAX_NUM_POS_CHROMA];343uint8_t ar_coeff_shift_minus_6;344int ar_coeff_shift;345uint8_t grain_scale_shift;346uint8_t cb_mult;347uint8_t cb_luma_mult;348uint16_t cb_offset;349uint8_t cr_mult;350uint8_t cr_luma_mult;351uint16_t cr_offset;352bool overlap_flag;353bool clip_to_restricted_range;354};355356struct av1_uncompressed_header_obu357{358uint8_t frame_type;359bool FrameIsIntra;360bool show_frame;361bool showable_frame;362bool show_existing_frame;363uint8_t frame_to_show_map_idx;364365unsigned RefOrderHint[AV1_NUM_REF_FRAMES];366bool error_resilient_mode;367bool disable_cdf_update;368bool allow_screen_content_tools;369bool force_integer_mv;370371unsigned current_frame_id;372bool frame_size_override_flag;373unsigned OrderHint;374uint8_t primary_ref_frame;375376uint8_t refresh_frame_flags;377unsigned FrameWidth;378unsigned FrameHeight;379bool use_superres;380unsigned SuperresDenom;381unsigned UpscaledWidth;382unsigned MiCols;383unsigned MiRows;384385unsigned RenderWidth;386unsigned RenderHeight;387388uint8_t last_frame_idx;389uint8_t gold_frame_idx;390uint8_t ref_frame_idx[AV1_REFS_PER_FRAME];391uint8_t usedFrame[AV1_NUM_REF_FRAMES];392unsigned curFrameHint;393unsigned shiftedOrderHints[AV1_NUM_REF_FRAMES];394395bool allow_high_precision_mv;396bool use_ref_frame_mvs;397bool allow_intrabc;398uint8_t interpolation_filter;399bool is_motion_mode_switchable;400401bool disable_frame_end_update_cdf;402struct tile_info ti;403struct quantization_params qp;404struct segmentation_params sp;405struct delta_q_params dqp;406struct delta_lf_params dlfp;407408bool CodedLossless;409bool AllLossless;410struct loop_filter_params lfp;411struct cdef_params cdefp;412struct loop_restoration_params lrp;413struct tx_mode_params tm;414enum reference_mode reference_select;415struct skip_mode_params smp;416bool allow_warped_motion;417bool reduced_tx_set;418struct global_motion_params gmp;419struct film_grain_params fgp;420};421422struct dec_av1_task {423struct list_head list;424425struct pipe_video_buffer *buf;426bool no_show_frame;427unsigned buf_ref_count;428struct pipe_video_buffer **buf_ref;429bool is_sef_task;430};431432struct input_buf_private {433struct list_head tasks;434struct list_head inps;435};436437struct dec_av1 {438struct av1_obu_extension_header_obu ext;439struct av1_sequence_header_obu seq;440struct av1_uncompressed_header_obu uncompressed_header;441struct av1_uncompressed_header_obu refs[AV1_NUM_REF_FRAMES];442struct ref_frame RefFrames[AV1_NUM_REF_FRAMES];443444uint8_t bs_obu_td_buf[8];445unsigned bs_obu_td_sz;446uint8_t bs_obu_seq_buf[128];447unsigned bs_obu_seq_sz;448struct pipe_video_buffer *frame_refs[AV1_NUM_REF_FRAMES];449struct list_head free_tasks;450struct list_head started_tasks;451struct list_head finished_tasks;452struct list_head decode_tasks;453unsigned que_num;454bool stacked_frame;455mtx_t mutex;456};457458#endif459460461