mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-19 07:24:34 +08:00

When decoding S picture, reference list with be force to set to only one left. Slot flag should be cleared for the already marked buffers at reference list. But decoded picture may not be correct if following AVS2 specification. So for S picture, keep those reference frames found by doi_of_ref and replace the content of the first reference frame with scene ref only. Change-Id: I9f84fdd55acfc9cf9d65deb065ccf97c36de1321 Signed-off-by: Johnson Ding <johnson.ding@rock-chips.com>
91 lines
3.4 KiB
C
91 lines
3.4 KiB
C
/*
|
|
* Copyright 2021 Rockchip Electronics Co. LTD
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef __AVS2D_SYNTAX_H__
|
|
#define __AVS2D_SYNTAX_H__
|
|
|
|
#include "rk_type.h"
|
|
|
|
//!< avs2 decoder picture parameters structure
|
|
typedef struct _DXVA_PicParams_AVS2 {
|
|
//!< sequence header
|
|
RK_U32 chroma_format_idc : 2;
|
|
RK_U32 pic_width_in_luma_samples : 16;
|
|
RK_U32 pic_height_in_luma_samples : 16;
|
|
RK_U32 bit_depth_luma_minus8 : 3;
|
|
RK_U32 bit_depth_chroma_minus8 : 3;
|
|
RK_U32 lcu_size : 3;
|
|
RK_U32 progressive_sequence : 1;
|
|
RK_U32 field_coded_sequence : 1;
|
|
RK_U32 multi_hypothesis_skip_enable_flag : 1;
|
|
RK_U32 dual_hypothesis_prediction_enable_flag : 1;
|
|
RK_U32 weighted_skip_enable_flag : 1;
|
|
RK_U32 asymmetrc_motion_partitions_enable_flag : 1;
|
|
RK_U32 nonsquare_quadtree_transform_enable_flag : 1;
|
|
RK_U32 nonsquare_intra_prediction_enable_flag : 1;
|
|
RK_U32 secondary_transform_enable_flag : 1;
|
|
RK_U32 sample_adaptive_offset_enable_flag : 1;
|
|
RK_U32 adaptive_loop_filter_enable_flag : 1;
|
|
RK_U32 pmvr_enable_flag : 1;
|
|
RK_U32 cross_slice_loopfilter_enable_flag : 1;
|
|
//!< picture header
|
|
RK_U32 picture_type : 3;
|
|
RK_U32 scene_reference_enable_flag : 1;
|
|
RK_U32 bottom_field_picture_flag : 1;
|
|
RK_U32 fixed_picture_qp : 1;
|
|
RK_U32 picture_qp : 7;
|
|
RK_U32 loop_filter_disable_flag : 1;
|
|
RK_S8 alpha_c_offset; //!< 5bits signed
|
|
RK_S8 beta_offset; //!< 5bits signed
|
|
} PicParams_Avs2d, *LP_PicParams_Avs2d;
|
|
|
|
typedef struct _DXVA_RefParams_AVS2 {
|
|
RK_U8 ref_pic_num;
|
|
RK_S32 ref_poc_list[32];
|
|
RK_S32 scene_ref_slot_idx;
|
|
RK_S32 scene_ref_enable;
|
|
RK_S32 scene_ref_replace_pos;
|
|
} RefParams_Avs2d, *LP_RefParams_Avs2d;
|
|
|
|
typedef struct _DXVA_AlfParams_AVS2 {
|
|
RK_U8 enable_pic_alf_y; //!< 1bits
|
|
RK_U8 enable_pic_alf_cb; //!< 1bits
|
|
RK_U8 enable_pic_alf_cr; //!< 1bits
|
|
RK_U8 alf_filter_num_minus1; //!< 4bits
|
|
RK_U8 alf_coeff_idx_tab[16];
|
|
RK_S32 alf_coeff_y[16][9];
|
|
RK_S32 alf_coeff_cb[9];
|
|
RK_S32 alf_coeff_cr[9];
|
|
} AlfParams_Avs2d, *LP_AlfParams_Avs2d;
|
|
|
|
typedef struct _DXVA_WqmParams_AVS2 {
|
|
RK_U8 pic_weight_quant_enable_flag;
|
|
RK_S8 chroma_quant_param_delta_cb; //!< 6bits
|
|
RK_S8 chroma_quant_param_delta_cr; //!< 6bits
|
|
RK_U32 wq_matrix[2][64];
|
|
} WqmParams_Avs2d, *LP_WqmParams_Avs2d;
|
|
|
|
typedef struct avs2d_syntax_t {
|
|
PicParams_Avs2d pp;
|
|
RefParams_Avs2d refp;
|
|
AlfParams_Avs2d alfp;
|
|
WqmParams_Avs2d wqmp;
|
|
RK_U8 *bitstream;
|
|
RK_U32 bitstream_size;
|
|
} Avs2dSyntax_t;
|
|
|
|
#endif /*__AVS2D_SYNTAX_H__*/
|