Message ID | 20230103125952.2707824-8-fei.w.wang@intel.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel,v3,01/11] lavc/hevc_ps: remove profile limitation of pps_range_extensions() | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_fate_x86 | success | Make fate finished |
andriy/make_x86 | warning | New warnings during build |
> -----Original Message----- > From: Wang, Fei W <fei.w.wang@intel.com> > Sent: Tuesday, January 3, 2023 9:00 PM > To: ffmpeg-devel@ffmpeg.org > Cc: Linjie Fu <linjie.fu@intel.com>; Linjie Fu <linjie.justin.fu@gmail.com>; Wang, > Fei W <fei.w.wang@intel.com> > Subject: [FFmpeg-devel][PATCH v3 08/11] lavc/vaapi_hevc: Pass SCC parameters > Through VA-API > > From: Linjie Fu <linjie.fu@intel.com> > > Including sps/pps/slice parameters. > > Signed-off-by: Linjie Fu <linjie.justin.fu@gmail.com> > Signed-off-by: Fei Wang <fei.w.wang@intel.com> > --- > libavcodec/vaapi_hevc.c | 52 +++++++++++++++++++++++++++++++++++++---- > 1 file changed, 47 insertions(+), 5 deletions(-) > > diff --git a/libavcodec/vaapi_hevc.c b/libavcodec/vaapi_hevc.c index > 20fb36adfa..73a8f5b4ce 100644 > --- a/libavcodec/vaapi_hevc.c > +++ b/libavcodec/vaapi_hevc.c > @@ -124,7 +124,7 @@ static int vaapi_hevc_start_frame(AVCodecContext > *avctx, > const HEVCPPS *pps = h->ps.pps; > > const ScalingList *scaling_list = NULL; > - int pic_param_size, err, i; > + int pic_param_size, num_comps, pre_palette_size, err, i; > > VAPictureParameterBufferHEVC *pic_param = > (VAPictureParameterBufferHEVC *)&pic->pic_param; > > @@ -245,8 +245,46 @@ static int vaapi_hevc_start_frame(AVCodecContext > *avctx, > for (i = 0; i < 6; i++) > pic->pic_param.rext.cr_qp_offset_list[i] = pps->cr_qp_offset_list[i]; > } > + > + pre_palette_size = pps->pps_palette_predictor_initializers_present_flag ? > + pps->pps_num_palette_predictor_initializers : > + (sps->sps_palette_predictor_initializers_present_flag ? > + sps->sps_num_palette_predictor_initializers_minus1 + 1 : > + 0); > + > + if (avctx->profile == FF_PROFILE_HEVC_SCC) { > + pic->pic_param.scc = (VAPictureParameterBufferHEVCScc) { > + .screen_content_pic_fields.bits = { > + .pps_curr_pic_ref_enabled_flag = pps- > >pps_curr_pic_ref_enabled_flag, > + .palette_mode_enabled_flag = sps- > >palette_mode_enabled_flag, > + .motion_vector_resolution_control_idc = sps- > >motion_vector_resolution_control_idc, > + .intra_boundary_filtering_disabled_flag = sps- > >intra_boundary_filtering_disabled_flag, > + .residual_adaptive_colour_transform_enabled_flag > + = pps- > >residual_adaptive_colour_transform_enabled_flag, > + .pps_slice_act_qp_offsets_present_flag = pps- > >pps_slice_act_qp_offsets_present_flag, > + }, > + .palette_max_size = sps->palette_max_size, > + .delta_palette_max_predictor_size = sps- > >delta_palette_max_predictor_size, > + .predictor_palette_size = pre_palette_size, > + .pps_act_y_qp_offset_plus5 = pps- > >residual_adaptive_colour_transform_enabled_flag ? > + pps->pps_act_y_qp_offset + 5 : 0, > + .pps_act_cb_qp_offset_plus5 = pps- > >residual_adaptive_colour_transform_enabled_flag ? > + pps->pps_act_cb_qp_offset + 5 : 0, > + .pps_act_cr_qp_offset_plus3 = pps- > >residual_adaptive_colour_transform_enabled_flag ? > + pps->pps_act_cr_qp_offset + 3 : 0, > + }; > + > + num_comps = pps->monochrome_palette_flag ? 1 : 3; > + for (int comp = 0; comp < num_comps; comp++) > + for (int j = 0; j < pre_palette_size; j++) > + pic->pic_param.scc.predictor_palette_entries[comp][j] = > + pps->pps_palette_predictor_initializers_present_flag ? > + pps->pps_palette_predictor_initializer[comp][j]: > + sps->sps_palette_predictor_initializer[comp][j]; > + } > + > #endif > - pic_param_size = avctx->profile == FF_PROFILE_HEVC_REXT ? > + pic_param_size = avctx->profile >= FF_PROFILE_HEVC_REXT ? > sizeof(pic->pic_param) : sizeof(VAPictureParameterBufferHEVC); > > err = ff_vaapi_decode_make_param_buffer(avctx, &pic->pic, @@ -299,7 > +337,7 @@ static int vaapi_hevc_end_frame(AVCodecContext *avctx) > VASliceParameterBufferHEVC *last_slice_param = > (VASliceParameterBufferHEVC *)&pic->last_slice_param; > int ret; > > - int slice_param_size = avctx->profile == FF_PROFILE_HEVC_REXT ? > + int slice_param_size = avctx->profile >= FF_PROFILE_HEVC_REXT ? > sizeof(pic->last_slice_param) : > sizeof(VASliceParameterBufferHEVC); > > if (pic->last_size) { > @@ -413,7 +451,7 @@ static int vaapi_hevc_decode_slice(AVCodecContext > *avctx, > VAAPIDecodePictureHEVC *pic = h->ref->hwaccel_picture_private; > VASliceParameterBufferHEVC *last_slice_param = > (VASliceParameterBufferHEVC *)&pic->last_slice_param; > > - int slice_param_size = avctx->profile == FF_PROFILE_HEVC_REXT ? > + int slice_param_size = avctx->profile >= FF_PROFILE_HEVC_REXT ? > sizeof(pic->last_slice_param) : > sizeof(VASliceParameterBufferHEVC); > > int nb_list = (sh->slice_type == HEVC_SLICE_B) ? > @@ -478,11 +516,15 @@ static int vaapi_hevc_decode_slice(AVCodecContext > *avctx, > fill_pred_weight_table(avctx, h, sh, last_slice_param); > > #if VA_CHECK_VERSION(1, 2, 0) > - if (avctx->profile == FF_PROFILE_HEVC_REXT) { > + if (avctx->profile >= FF_PROFILE_HEVC_REXT) { > pic->last_slice_param.rext = (VASliceParameterBufferHEVCRext) { > .slice_ext_flags.bits = { > .cu_chroma_qp_offset_enabled_flag = sh- > >cu_chroma_qp_offset_enabled_flag, > + .use_integer_mv_flag = sh->use_integer_mv_flag, > }, > + .slice_act_y_qp_offset = sh->slice_act_y_qp_offset, > + .slice_act_cb_qp_offset = sh->slice_act_cb_qp_offset, > + .slice_act_cr_qp_offset = sh->slice_act_cr_qp_offset, Hello, https://patchwork.ffmpeg.org/project/ffmpeg/patch/20230103125952.2707824-8-fei.w.wang@intel.com/ A new warning during build reported in patchwork, but didn't appear in my local build. Does anyone can help tell me how to reproduce this warning? Any special configuration or build environment needed? Thanks Fei > }; > for (i = 0; i < 15 && i < sh->nb_refs[L0]; i++) { > pic->last_slice_param.rext.luma_offset_l0[i] = sh->luma_offset_l0[i]; > -- > 2.25.1
diff --git a/libavcodec/vaapi_hevc.c b/libavcodec/vaapi_hevc.c index 20fb36adfa..73a8f5b4ce 100644 --- a/libavcodec/vaapi_hevc.c +++ b/libavcodec/vaapi_hevc.c @@ -124,7 +124,7 @@ static int vaapi_hevc_start_frame(AVCodecContext *avctx, const HEVCPPS *pps = h->ps.pps; const ScalingList *scaling_list = NULL; - int pic_param_size, err, i; + int pic_param_size, num_comps, pre_palette_size, err, i; VAPictureParameterBufferHEVC *pic_param = (VAPictureParameterBufferHEVC *)&pic->pic_param; @@ -245,8 +245,46 @@ static int vaapi_hevc_start_frame(AVCodecContext *avctx, for (i = 0; i < 6; i++) pic->pic_param.rext.cr_qp_offset_list[i] = pps->cr_qp_offset_list[i]; } + + pre_palette_size = pps->pps_palette_predictor_initializers_present_flag ? + pps->pps_num_palette_predictor_initializers : + (sps->sps_palette_predictor_initializers_present_flag ? + sps->sps_num_palette_predictor_initializers_minus1 + 1 : + 0); + + if (avctx->profile == FF_PROFILE_HEVC_SCC) { + pic->pic_param.scc = (VAPictureParameterBufferHEVCScc) { + .screen_content_pic_fields.bits = { + .pps_curr_pic_ref_enabled_flag = pps->pps_curr_pic_ref_enabled_flag, + .palette_mode_enabled_flag = sps->palette_mode_enabled_flag, + .motion_vector_resolution_control_idc = sps->motion_vector_resolution_control_idc, + .intra_boundary_filtering_disabled_flag = sps->intra_boundary_filtering_disabled_flag, + .residual_adaptive_colour_transform_enabled_flag + = pps->residual_adaptive_colour_transform_enabled_flag, + .pps_slice_act_qp_offsets_present_flag = pps->pps_slice_act_qp_offsets_present_flag, + }, + .palette_max_size = sps->palette_max_size, + .delta_palette_max_predictor_size = sps->delta_palette_max_predictor_size, + .predictor_palette_size = pre_palette_size, + .pps_act_y_qp_offset_plus5 = pps->residual_adaptive_colour_transform_enabled_flag ? + pps->pps_act_y_qp_offset + 5 : 0, + .pps_act_cb_qp_offset_plus5 = pps->residual_adaptive_colour_transform_enabled_flag ? + pps->pps_act_cb_qp_offset + 5 : 0, + .pps_act_cr_qp_offset_plus3 = pps->residual_adaptive_colour_transform_enabled_flag ? + pps->pps_act_cr_qp_offset + 3 : 0, + }; + + num_comps = pps->monochrome_palette_flag ? 1 : 3; + for (int comp = 0; comp < num_comps; comp++) + for (int j = 0; j < pre_palette_size; j++) + pic->pic_param.scc.predictor_palette_entries[comp][j] = + pps->pps_palette_predictor_initializers_present_flag ? + pps->pps_palette_predictor_initializer[comp][j]: + sps->sps_palette_predictor_initializer[comp][j]; + } + #endif - pic_param_size = avctx->profile == FF_PROFILE_HEVC_REXT ? + pic_param_size = avctx->profile >= FF_PROFILE_HEVC_REXT ? sizeof(pic->pic_param) : sizeof(VAPictureParameterBufferHEVC); err = ff_vaapi_decode_make_param_buffer(avctx, &pic->pic, @@ -299,7 +337,7 @@ static int vaapi_hevc_end_frame(AVCodecContext *avctx) VASliceParameterBufferHEVC *last_slice_param = (VASliceParameterBufferHEVC *)&pic->last_slice_param; int ret; - int slice_param_size = avctx->profile == FF_PROFILE_HEVC_REXT ? + int slice_param_size = avctx->profile >= FF_PROFILE_HEVC_REXT ? sizeof(pic->last_slice_param) : sizeof(VASliceParameterBufferHEVC); if (pic->last_size) { @@ -413,7 +451,7 @@ static int vaapi_hevc_decode_slice(AVCodecContext *avctx, VAAPIDecodePictureHEVC *pic = h->ref->hwaccel_picture_private; VASliceParameterBufferHEVC *last_slice_param = (VASliceParameterBufferHEVC *)&pic->last_slice_param; - int slice_param_size = avctx->profile == FF_PROFILE_HEVC_REXT ? + int slice_param_size = avctx->profile >= FF_PROFILE_HEVC_REXT ? sizeof(pic->last_slice_param) : sizeof(VASliceParameterBufferHEVC); int nb_list = (sh->slice_type == HEVC_SLICE_B) ? @@ -478,11 +516,15 @@ static int vaapi_hevc_decode_slice(AVCodecContext *avctx, fill_pred_weight_table(avctx, h, sh, last_slice_param); #if VA_CHECK_VERSION(1, 2, 0) - if (avctx->profile == FF_PROFILE_HEVC_REXT) { + if (avctx->profile >= FF_PROFILE_HEVC_REXT) { pic->last_slice_param.rext = (VASliceParameterBufferHEVCRext) { .slice_ext_flags.bits = { .cu_chroma_qp_offset_enabled_flag = sh->cu_chroma_qp_offset_enabled_flag, + .use_integer_mv_flag = sh->use_integer_mv_flag, }, + .slice_act_y_qp_offset = sh->slice_act_y_qp_offset, + .slice_act_cb_qp_offset = sh->slice_act_cb_qp_offset, + .slice_act_cr_qp_offset = sh->slice_act_cr_qp_offset, }; for (i = 0; i < 15 && i < sh->nb_refs[L0]; i++) { pic->last_slice_param.rext.luma_offset_l0[i] = sh->luma_offset_l0[i];