frontends/omx/av1: add AV1 OBU header parsers
Based on AV1 spec: https://aomediacodec.github.io/av1-spec Signed-off-by: Leo Liu <leo.liu@amd.com> Reviewed-by: Boyuan Zhang <boyuan.zhang@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7596>
This commit is contained in:
parent
6ab3030f92
commit
2874f87348
File diff suppressed because it is too large
Load Diff
|
@ -28,4 +28,408 @@
|
|||
#ifndef VID_DEC_AV1_H
|
||||
#define VID_DEC_AV1_H
|
||||
|
||||
enum av1_obu_type {
|
||||
AV1_OBU_SEQUENCE_HEADER = 1,
|
||||
AV1_OBU_TEMPORAL_DELIMITER,
|
||||
AV1_OBU_FRAME_HEADER,
|
||||
AV1_OBU_TILE_GROUP,
|
||||
AV1_OBU_METADATA,
|
||||
AV1_OBU_FRAME,
|
||||
AV1_OBU_REDUNDANT_FRAME_HEADER,
|
||||
AV1_OBU_TILE_LIST,
|
||||
AV1_OBU_PADDING = 15
|
||||
};
|
||||
|
||||
enum av1_obu_frame_type {
|
||||
AV1_KEY_FRAME = 0,
|
||||
AV1_INTER_FRAME,
|
||||
AV1_INTRA_ONLY_FRAME,
|
||||
AV1_SWITCH_FRAME
|
||||
};
|
||||
|
||||
enum av1_obu_color_primary {
|
||||
AV1_CP_BT_709 = 1,
|
||||
AV1_CP_UNSPECIFIED,
|
||||
AV1_CP_BT_470_M = 4,
|
||||
AV1_CP_BT_470_B_G,
|
||||
AV1_CP_BT_601,
|
||||
AV1_CP_SMPTE_240,
|
||||
AV1_CP_GENERIC_FILM,
|
||||
AV1_CP_BT_2020,
|
||||
AV1_CP_XYZ,
|
||||
AV1_CP_SMPTE_431,
|
||||
AV1_CP_SMPTE_432,
|
||||
AV1_CP_EBU_3213 = 22
|
||||
};
|
||||
|
||||
enum av1_obu_transfer_characteristic {
|
||||
AV1_TC_RESERVED_0 = 0,
|
||||
AV1_TC_BT_709,
|
||||
AV1_TC_UNSPECIFIED,
|
||||
AV1_TC_RESERVED_3,
|
||||
AV1_TC_BT_470_M,
|
||||
AV1_TC_BT_470_B_G,
|
||||
AV1_TC_BT_601,
|
||||
AV1_TC_SMPTE_240,
|
||||
AV1_TC_LINEAR,
|
||||
AV1_TC_LOG_100,
|
||||
AV1_TC_LOG_100_SQRT10,
|
||||
AV1_TC_IEC_61966,
|
||||
AV1_TC_BT_1361,
|
||||
AV1_TC_SRGB,
|
||||
AV1_TC_BT_2020_10_BIT,
|
||||
AV1_TC_BT_2020_12_BIT,
|
||||
AV1_TC_SMPTE_2084,
|
||||
AV1_TC_SMPTE_428,
|
||||
AV1_TC_HLG
|
||||
};
|
||||
|
||||
enum av1_obu_matrix_coefficient {
|
||||
AV1_MC_IDENTITY = 0,
|
||||
AV1_MC_BT_709,
|
||||
AV1_MC_UNSPECIFIED,
|
||||
AV1_MC_RESERVED_3,
|
||||
AV1_MC_FCC,
|
||||
AV1_MC_BT_470_B_G,
|
||||
AV1_MC_BT_601,
|
||||
AV1_MC_SMPTE_240,
|
||||
AV1_MC_SMPTE_YCGCO,
|
||||
AV1_MC_BT_2020_NCL,
|
||||
AV1_MC_BT_2020_CL,
|
||||
AV1_MC_SMPTE_2085,
|
||||
AV1_MC_CHROMAT_NCL,
|
||||
AV1_MC_CHROMAT_CL,
|
||||
AV1_MC_ICTCP
|
||||
};
|
||||
|
||||
enum av1_obu_seg_lvl {
|
||||
AV1_SEG_LVL_ALT_Q = 0,
|
||||
AV1_SEG_LVL_ALT_LF_Y_V,
|
||||
AV1_SEG_LVL_REF_FRAME = 5,
|
||||
AV1_SEG_LVL_SKIP,
|
||||
AV1_SEG_LVL_GLOBALMV,
|
||||
AV1_SEG_LVL_MAX
|
||||
};
|
||||
|
||||
enum av1_obu_lrtype {
|
||||
AV1_RESTORE_NONE = 0,
|
||||
AV1_RESTORE_WIENER,
|
||||
AV1_RESTORE_SGRPROJ,
|
||||
AV1_RESTORE_SWITCHABLE
|
||||
};
|
||||
|
||||
enum av1_obu_txmode {
|
||||
AV1_ONLY_4X4 = 0,
|
||||
AV1_TX_MODE_LARGEST,
|
||||
AV1_TX_MODE_SELECT
|
||||
};
|
||||
|
||||
enum av1_obu_gmtype {
|
||||
AV1_IDENTITY = 0,
|
||||
AV1_TRANSLATION,
|
||||
AV1_ROTZOOM,
|
||||
AV1_AFFINE
|
||||
};
|
||||
|
||||
enum av1_frame_refs {
|
||||
AV1_NONE = -1,
|
||||
AV1_INTRA_FRAME = 0,
|
||||
AV1_LAST_FRAME,
|
||||
AV1_LAST2_FRAME,
|
||||
AV1_LAST3_FRAME,
|
||||
AV1_GOLDEN_FRAME,
|
||||
AV1_BWDREF_FRAME,
|
||||
AV1_ALTREF2_FRAME,
|
||||
AV1_ALTREF_FRAME
|
||||
};
|
||||
|
||||
#define AV1_SELECT_SCREEN_CONTENT_TOOLS 2
|
||||
#define AV1_SELECT_INTEGER_MV 2
|
||||
|
||||
#define AV1_PRIMARY_REF_NONE 7
|
||||
#define AV1_REFS_PER_FRAME 7
|
||||
#define AV1_NUM_REF_FRAMES 8
|
||||
|
||||
#define AV1_MAX_TILE_WIDTH 4096
|
||||
#define AV1_MAX_TILE_AREA (4096 * 2304)
|
||||
#define AV1_MAX_TILE_ROWS 64
|
||||
#define AV1_MAX_TILE_COLS 64
|
||||
#define AV1_MAX_NUM_TILES AV1_MAX_TILE_ROWS * AV1_MAX_TILE_COLS
|
||||
|
||||
#define AV1_MAX_SEGMENTS 8
|
||||
#define AV1_MAX_CDEF_BITS_ARRAY 8
|
||||
#define AV1_RESTORATION_TILESIZE 256
|
||||
#define AV1_WARPEDMODEL_PREC_BITS 16
|
||||
#define AV1_FG_MAX_NUM_Y_POINTS 14
|
||||
#define AV1_FG_MAX_NUM_CBR_POINTS 10
|
||||
#define AV1_FG_MAX_NUM_POS_LUMA 24
|
||||
#define AV1_FG_MAX_NUM_POS_CHROMA 25
|
||||
|
||||
struct av1_obu_extension_header_obu
|
||||
{
|
||||
unsigned temporal_id;
|
||||
unsigned spatial_id;
|
||||
};
|
||||
|
||||
struct av1_sequence_header_obu {
|
||||
uint8_t seq_profile;
|
||||
bool reduced_still_picture_header;
|
||||
|
||||
struct {
|
||||
bool equal_picture_interval;
|
||||
} timing_info;
|
||||
|
||||
bool decoder_model_info_present_flag;
|
||||
struct {
|
||||
unsigned num_units_in_decoding_tick;
|
||||
uint8_t buffer_removal_time_length_minus_1;
|
||||
uint8_t frame_presentation_time_length_minus_1;
|
||||
} decoder_model_info;
|
||||
|
||||
uint8_t operating_points_cnt_minus_1;
|
||||
uint16_t operating_point_idc[32];
|
||||
bool decoder_model_present_for_this_op[32];
|
||||
|
||||
uint8_t frame_width_bits_minus_1;
|
||||
uint8_t frame_height_bits_minus_1;
|
||||
unsigned max_frame_width_minus_1;
|
||||
unsigned max_frame_height_minus_1;
|
||||
bool frame_id_numbers_present_flag;
|
||||
uint8_t delta_frame_id_length_minus_2;
|
||||
uint8_t additional_frame_id_length_minus_1;
|
||||
|
||||
bool use_128x128_superblock;
|
||||
bool enable_filter_intra;
|
||||
bool enable_intra_edge_filter;
|
||||
bool enable_interintra_compound;
|
||||
bool enable_masked_compound;
|
||||
bool enable_warped_motion;
|
||||
bool enable_dual_filter;
|
||||
bool enable_order_hint;
|
||||
bool enable_jnt_comp;
|
||||
bool enable_ref_frame_mvs;
|
||||
uint8_t seq_force_screen_content_tools;
|
||||
uint8_t seq_force_integer_mv;
|
||||
|
||||
uint8_t order_hint_bits_minus_1;
|
||||
uint8_t OrderHintBits;
|
||||
bool enable_superres;
|
||||
bool enable_cdef;
|
||||
bool enable_restoration;
|
||||
struct {
|
||||
uint8_t BitDepth;
|
||||
bool mono_chrome;
|
||||
uint8_t NumPlanes;
|
||||
bool subsampling_x;
|
||||
bool subsampling_y;
|
||||
bool separate_uv_delta_q;
|
||||
} color_config;
|
||||
bool film_grain_params_present;
|
||||
};
|
||||
|
||||
struct ref_frame {
|
||||
uint8_t RefFrameType;
|
||||
unsigned RefFrameId;
|
||||
unsigned RefUpscaledWidth;
|
||||
unsigned RefFrameWidth;
|
||||
unsigned RefFrameHeight;
|
||||
unsigned RefRenderWidth;
|
||||
unsigned RefRenderHeight;
|
||||
};
|
||||
|
||||
struct tile_info {
|
||||
unsigned TileColsLog2;
|
||||
unsigned TileRowsLog2;
|
||||
int tile_col_start_sb[AV1_MAX_TILE_COLS + 1];
|
||||
int tile_row_start_sb[AV1_MAX_TILE_ROWS + 1];
|
||||
unsigned TileCols;
|
||||
unsigned TileRows;
|
||||
unsigned context_update_tile_id;
|
||||
uint8_t TileSizeBytes;
|
||||
};
|
||||
|
||||
struct quantization_params {
|
||||
uint8_t base_q_idx;
|
||||
int DeltaQYDc;
|
||||
int DeltaQUDc;
|
||||
int DeltaQUAc;
|
||||
int DeltaQVDc;
|
||||
int DeltaQVAc;
|
||||
uint8_t qm_y;
|
||||
uint8_t qm_u;
|
||||
uint8_t qm_v;
|
||||
};
|
||||
|
||||
struct segmentation_params {
|
||||
bool segmentation_enabled;
|
||||
bool segmentation_update_map;
|
||||
bool segmentation_temporal_update;
|
||||
bool FeatureEnabled[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
|
||||
int FeatureData[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
|
||||
int FeatureMask[AV1_MAX_SEGMENTS];
|
||||
};
|
||||
|
||||
struct delta_q_params {
|
||||
bool delta_q_present;
|
||||
uint8_t delta_q_res;
|
||||
};
|
||||
|
||||
struct delta_lf_params {
|
||||
bool delta_lf_present;
|
||||
uint8_t delta_lf_res;
|
||||
bool delta_lf_multi;
|
||||
};
|
||||
|
||||
struct loop_filter_params {
|
||||
uint8_t loop_filter_level[4];
|
||||
uint8_t loop_filter_sharpness;
|
||||
bool loop_filter_delta_enabled;
|
||||
bool loop_filter_delta_update;
|
||||
int8_t loop_filter_ref_deltas[AV1_NUM_REF_FRAMES];
|
||||
int8_t loop_filter_mode_deltas[2];
|
||||
};
|
||||
|
||||
struct cdef_params {
|
||||
uint8_t cdef_damping_minus_3;
|
||||
uint8_t cdef_bits;
|
||||
uint16_t cdef_y_strengths[AV1_MAX_CDEF_BITS_ARRAY];
|
||||
uint16_t cdef_uv_strengths[AV1_MAX_CDEF_BITS_ARRAY];
|
||||
};
|
||||
|
||||
struct loop_restoration_params {
|
||||
uint8_t FrameRestorationType[3];
|
||||
uint16_t LoopRestorationSize[3];
|
||||
};
|
||||
|
||||
struct tx_mode_params {
|
||||
uint8_t TxMode;
|
||||
};
|
||||
|
||||
enum reference_mode {
|
||||
SINGLE_REFERENCE = 0,
|
||||
COMPOUND_REFERENCE = 1,
|
||||
REFERENCE_MODE_SELECT = 2,
|
||||
REFERENCE_MODES = 3,
|
||||
};
|
||||
|
||||
struct skip_mode_params {
|
||||
bool skip_mode_present;
|
||||
};
|
||||
|
||||
struct global_motion_params {
|
||||
uint8_t GmType[AV1_NUM_REF_FRAMES];
|
||||
int gm_params[AV1_NUM_REF_FRAMES][6];
|
||||
};
|
||||
|
||||
struct film_grain_params {
|
||||
bool apply_grain;
|
||||
uint16_t grain_seed;
|
||||
uint8_t num_y_points;
|
||||
uint8_t point_y_value[AV1_FG_MAX_NUM_Y_POINTS];
|
||||
uint8_t point_y_scaling[AV1_FG_MAX_NUM_Y_POINTS];
|
||||
bool chroma_scaling_from_luma;
|
||||
uint8_t num_cb_points;
|
||||
uint8_t num_cr_points;
|
||||
uint8_t point_cb_value[AV1_FG_MAX_NUM_CBR_POINTS];
|
||||
uint8_t point_cb_scaling[AV1_FG_MAX_NUM_CBR_POINTS];
|
||||
uint8_t point_cr_value[AV1_FG_MAX_NUM_CBR_POINTS];
|
||||
uint8_t point_cr_scaling[AV1_FG_MAX_NUM_CBR_POINTS];
|
||||
uint8_t grain_scaling_minus_8;
|
||||
uint8_t ar_coeff_lag;
|
||||
int ar_coeffs_y[AV1_FG_MAX_NUM_POS_LUMA];
|
||||
int ar_coeffs_cb[AV1_FG_MAX_NUM_POS_CHROMA];
|
||||
int ar_coeffs_cr[AV1_FG_MAX_NUM_POS_CHROMA];
|
||||
uint8_t ar_coeff_shift_minus_6;
|
||||
int ar_coeff_shift;
|
||||
uint8_t grain_scale_shift;
|
||||
uint8_t cb_mult;
|
||||
uint8_t cb_luma_mult;
|
||||
uint16_t cb_offset;
|
||||
uint8_t cr_mult;
|
||||
uint8_t cr_luma_mult;
|
||||
uint16_t cr_offset;
|
||||
bool overlap_flag;
|
||||
bool clip_to_restricted_range;
|
||||
};
|
||||
|
||||
struct av1_uncompressed_header_obu
|
||||
{
|
||||
uint8_t frame_type;
|
||||
bool FrameIsIntra;
|
||||
bool show_frame;
|
||||
bool showable_frame;
|
||||
bool show_existing_frame;
|
||||
uint8_t frame_to_show_map_idx;
|
||||
|
||||
unsigned RefOrderHint[AV1_NUM_REF_FRAMES];
|
||||
bool error_resilient_mode;
|
||||
bool disable_cdf_update;
|
||||
bool allow_screen_content_tools;
|
||||
bool force_integer_mv;
|
||||
|
||||
unsigned current_frame_id;
|
||||
bool frame_size_override_flag;
|
||||
unsigned OrderHint;
|
||||
uint8_t primary_ref_frame;
|
||||
|
||||
uint8_t refresh_frame_flags;
|
||||
unsigned FrameWidth;
|
||||
unsigned FrameHeight;
|
||||
bool use_superres;
|
||||
unsigned SuperresDenom;
|
||||
unsigned UpscaledWidth;
|
||||
unsigned MiCols;
|
||||
unsigned MiRows;
|
||||
|
||||
unsigned RenderWidth;
|
||||
unsigned RenderHeight;
|
||||
|
||||
uint8_t last_frame_idx;
|
||||
uint8_t gold_frame_idx;
|
||||
uint8_t ref_frame_idx[AV1_REFS_PER_FRAME];
|
||||
uint8_t usedFrame[AV1_NUM_REF_FRAMES];
|
||||
unsigned curFrameHint;
|
||||
unsigned shiftedOrderHints[AV1_NUM_REF_FRAMES];
|
||||
|
||||
bool allow_high_precision_mv;
|
||||
bool use_ref_frame_mvs;
|
||||
bool allow_intrabc;
|
||||
uint8_t interpolation_filter;
|
||||
bool is_motion_mode_switchable;
|
||||
|
||||
bool disable_frame_end_update_cdf;
|
||||
struct tile_info ti;
|
||||
struct quantization_params qp;
|
||||
struct segmentation_params sp;
|
||||
struct delta_q_params dqp;
|
||||
struct delta_lf_params dlfp;
|
||||
|
||||
bool CodedLossless;
|
||||
bool AllLossless;
|
||||
struct loop_filter_params lfp;
|
||||
struct cdef_params cdefp;
|
||||
struct loop_restoration_params lrp;
|
||||
struct tx_mode_params tm;
|
||||
enum reference_mode reference_select;
|
||||
struct skip_mode_params smp;
|
||||
bool allow_warped_motion;
|
||||
bool reduced_tx_set;
|
||||
struct global_motion_params gmp;
|
||||
struct film_grain_params fgp;
|
||||
};
|
||||
|
||||
struct dec_av1 {
|
||||
struct av1_obu_extension_header_obu ext;
|
||||
struct av1_sequence_header_obu seq;
|
||||
struct av1_uncompressed_header_obu uncompressed_header;
|
||||
struct av1_uncompressed_header_obu refs[AV1_NUM_REF_FRAMES];
|
||||
struct ref_frame RefFrames[AV1_NUM_REF_FRAMES];
|
||||
|
||||
uint8_t bs_obu_td_buf[8];
|
||||
unsigned bs_obu_td_sz;
|
||||
uint8_t bs_obu_seq_buf[128];
|
||||
unsigned bs_obu_seq_sz;
|
||||
struct pipe_video_buffer *frame_refs[AV1_NUM_REF_FRAMES];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -34,6 +34,8 @@
|
|||
#include "vl/vl_rbsp.h"
|
||||
#include "vl/vl_zscan.h"
|
||||
|
||||
#include "bellagio/vid_dec_av1.h"
|
||||
|
||||
#include <OMX_Core.h>
|
||||
#include <OMX_Types.h>
|
||||
|
||||
|
@ -86,12 +88,14 @@ DERIVEDCLASS(vid_dec_PrivateType, omx_base_filter_PrivateType)
|
|||
struct list_head dpb_list; \
|
||||
unsigned dpb_num; \
|
||||
} h265; \
|
||||
struct dec_av1 av1; \
|
||||
} codec_data; \
|
||||
union { \
|
||||
struct pipe_picture_desc base; \
|
||||
struct pipe_mpeg12_picture_desc mpeg12; \
|
||||
struct pipe_h264_picture_desc h264; \
|
||||
struct pipe_h265_picture_desc h265; \
|
||||
struct pipe_av1_picture_desc av1; \
|
||||
} picture; \
|
||||
unsigned num_in_buffers; \
|
||||
OMX_BUFFERHEADERTYPE *in_buffers[2]; \
|
||||
|
|
Loading…
Reference in New Issue