Thanks for the patch, applied.
> From: Zhao Yakui <[email protected]> > > Signed-off-by: Zhao Yakui <[email protected]> > --- > src/gen9_vp9_encoder.c | 99 > +++++++++++++++++++++++++++++++++++++++++++++----- > src/gen9_vp9_encoder.h | 1 + > 2 files changed, 90 insertions(+), 10 deletions(-) > > diff --git a/src/gen9_vp9_encoder.c b/src/gen9_vp9_encoder.c > index e6b1543..eecd206 100644 > --- a/src/gen9_vp9_encoder.c > +++ b/src/gen9_vp9_encoder.c > @@ -272,6 +272,11 @@ gen9_vp9_init_check_surfaces(VADriverContextP > ctx, > &vp9_surface->scaled_4x_surface_id); > > vp9_surface->scaled_4x_surface_obj = SURFACE(vp9_surface- > >scaled_4x_surface_id); > + > + if (!vp9_surface->scaled_4x_surface_obj) { > + return VA_STATUS_ERROR_ALLOCATION_FAILED; > + } > + > i965_check_alloc_surface_bo(ctx, vp9_surface- > >scaled_4x_surface_obj, 1, > VA_FOURCC('N', 'V', '1', '2'), > SUBSAMPLE_YUV420); > > @@ -284,6 +289,11 @@ gen9_vp9_init_check_surfaces(VADriverContextP > ctx, > 1, > &vp9_surface->scaled_16x_surface_id); > vp9_surface->scaled_16x_surface_obj = SURFACE(vp9_surface- > >scaled_16x_surface_id); > + > + if (!vp9_surface->scaled_16x_surface_obj) { > + return VA_STATUS_ERROR_ALLOCATION_FAILED; > + } > + > i965_check_alloc_surface_bo(ctx, vp9_surface- > >scaled_16x_surface_obj, 1, > VA_FOURCC('N', 'V', '1', '2'), > SUBSAMPLE_YUV420); > > @@ -344,6 +354,11 @@ gen9_vp9_check_dys_surfaces(VADriverContextP > ctx, > 1, > &vp9_surface->dys_surface_id); > vp9_surface->dys_surface_obj = SURFACE(vp9_surface- > >dys_surface_id); > + > + if (!vp9_surface->dys_surface_obj) { > + return VA_STATUS_ERROR_ALLOCATION_FAILED; > + } > + > i965_check_alloc_surface_bo(ctx, vp9_surface->dys_surface_obj, > 1, > VA_FOURCC('N', 'V', '1', '2'), > SUBSAMPLE_YUV420); > > @@ -358,6 +373,11 @@ gen9_vp9_check_dys_surfaces(VADriverContextP > ctx, > &vp9_surface->dys_4x_surface_id); > > vp9_surface->dys_4x_surface_obj = SURFACE(vp9_surface- > >dys_4x_surface_id); > + > + if (!vp9_surface->dys_4x_surface_obj) { > + return VA_STATUS_ERROR_ALLOCATION_FAILED; > + } > + > i965_check_alloc_surface_bo(ctx, vp9_surface- > >dys_4x_surface_obj, 1, > VA_FOURCC('N', 'V', '1', '2'), > SUBSAMPLE_YUV420); > > @@ -370,6 +390,11 @@ gen9_vp9_check_dys_surfaces(VADriverContextP > ctx, > 1, > &vp9_surface->dys_16x_surface_id); > vp9_surface->dys_16x_surface_obj = SURFACE(vp9_surface- > >dys_16x_surface_id); > + > + if (!vp9_surface->dys_16x_surface_obj) { > + return VA_STATUS_ERROR_ALLOCATION_FAILED; > + } > + > i965_check_alloc_surface_bo(ctx, vp9_surface- > >dys_16x_surface_obj, 1, > VA_FOURCC('N', 'V', '1', '2'), > SUBSAMPLE_YUV420); > > @@ -1135,6 +1160,10 @@ void gen9_vp9_set_curbe_brc(VADriverContextP > ctx, > segment_param = param->psegment_param; > > cmd = gen8p_gpe_context_map_curbe(gpe_context); > + > + if (!cmd) > + return; > + > memset(cmd, 0, sizeof(vp9_brc_curbe_data)); > > if (!vp9_state->dys_enabled) > @@ -1548,7 +1577,7 @@ > intel_vp9enc_construct_picstate_batchbuf(VADriverContextP ctx, > pdata = i965_map_gpe_resource(gpe_resource); > vp9_state = (struct gen9_vp9_state *) encoder_context- > >enc_priv_state; > > - if (!vp9_state || !vp9_state->pic_param) > + if (!vp9_state || !vp9_state->pic_param || !pdata) > return; > > pic_param = vp9_state->pic_param; > @@ -1954,6 +1983,10 @@ gen9_vp9_brc_update_kernel(VADriverContextP > ctx, > { > char *brc_const_buffer; > brc_const_buffer = i965_map_gpe_resource(&vme_context- > >res_brc_const_data_buffer); > + > + if (!brc_const_buffer) > + return VA_STATUS_ERROR_OPERATION_FAILED; > + > if (vp9_state->picture_coding_type) > memcpy(brc_const_buffer, vp9_brc_const_data_p_g9, > sizeof(vp9_brc_const_data_p_g9)); > @@ -2025,6 +2058,10 @@ void gen9_vp9_set_curbe_me(VADriverContextP > ctx, > enc_media_state = VP9_MEDIA_STATE_4X_ME; > > me_cmd = gen8p_gpe_context_map_curbe(gpe_context); > + > + if (!me_cmd) > + return; > + > memset(me_cmd, 0, sizeof(vp9_me_curbe_data)); > > me_cmd->dw1.max_num_mvs = 0x10; > @@ -2362,6 +2399,10 @@ gen9_vp9_set_curbe_scaling_cm(VADriverContextP > ctx, > vp9_scaling4x_curbe_data_cm *curbe_cmd; > > curbe_cmd = gen8p_gpe_context_map_curbe(gpe_context); > + > + if (!curbe_cmd) > + return; > + > memset(curbe_cmd, 0, sizeof(vp9_scaling4x_curbe_data_cm)); > > curbe_cmd->dw0.input_picture_width = curbe_param- > >input_picture_width; > @@ -2549,8 +2590,15 @@ static void > gen9_vp9_dys_set_sampler_state(struct i965_gpe_context *gpe_context) > { > struct gen9_sampler_8x8_avs *sampler_cmd; > + > + if (!gpe_context) > + return; > + > dri_bo_map(gpe_context->dynamic_state.bo, 1); > > + if (!gpe_context->dynamic_state.bo->virtual) > + return; > + > sampler_cmd = (struct gen9_sampler_8x8_avs *) > (gpe_context->dynamic_state.bo->virtual + gpe_context- > >sampler_offset); > > @@ -2623,6 +2671,10 @@ gen9_vp9_set_curbe_dys(VADriverContextP ctx, > vp9_dys_curbe_data *curbe_cmd; > > curbe_cmd = gen8p_gpe_context_map_curbe(gpe_context); > + > + if (!curbe_cmd) > + return; > + > memset(curbe_cmd, 0, sizeof(vp9_dys_curbe_data)); > > curbe_cmd->dw0.input_frame_width = curbe_param->input_width; > @@ -2780,7 +2832,8 @@ gen9_vp9_run_dys_refframes(VADriverContextP > ctx, > &dys_kernel_param); > } > > - if (vp9_state->dys_ref_frame_flag & VP9_LAST_REF) { > + if ((vp9_state->dys_ref_frame_flag & VP9_LAST_REF) && > + vp9_state->last_ref_obj) { > obj_surface = vp9_state->last_ref_obj; > vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface- > >private_data); > > @@ -2832,7 +2885,8 @@ gen9_vp9_run_dys_refframes(VADriverContextP > ctx, > } > } > > - if (vp9_state->dys_ref_frame_flag & VP9_GOLDEN_REF) { > + if ((vp9_state->dys_ref_frame_flag & VP9_GOLDEN_REF) && > + vp9_state->golden_ref_obj) { > obj_surface = vp9_state->golden_ref_obj; > vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface- > >private_data); > > @@ -2884,7 +2938,8 @@ gen9_vp9_run_dys_refframes(VADriverContextP > ctx, > } > } > > - if (vp9_state->dys_ref_frame_flag & VP9_ALT_REF) { > + if ((vp9_state->dys_ref_frame_flag & VP9_ALT_REF) && > + vp9_state->alt_ref_obj) { > obj_surface = vp9_state->alt_ref_obj; > vp9_priv_surface = (struct gen9_surface_vp9 *)(obj_surface- > >private_data); > > @@ -2969,6 +3024,10 @@ gen9_vp9_set_curbe_mbenc(VADriverContextP ctx, > } > > curbe_cmd = gen8p_gpe_context_map_curbe(gpe_context); > + > + if (!curbe_cmd) > + return; > + > memset(curbe_cmd, 0, sizeof(vp9_mbenc_curbe_data)); > > if (vp9_state->dys_in_use) > @@ -3843,6 +3902,10 @@ > gen9_encode_vp9_check_parameter(VADriverContextP ctx, > encode_state->seq_param_ext->buffer) > seq_param = (VAEncSequenceParameterBufferVP9 *)encode_state- > >seq_param_ext->buffer; > > + if (!seq_param) { > + seq_param = &vp9_state->bogus_seq_param; > + } > + > vp9_state->pic_param = pic_param; > vp9_state->segment_param = seg_param; > vp9_state->seq_param = seq_param; > @@ -4051,7 +4114,8 @@ > gen9_encode_vp9_check_parameter(VADriverContextP ctx, > !pic_param->pic_flags.bits.intra_only) { > vp9_state->dys_ref_frame_flag = vp9_state->ref_frame_flag; > > - if (vp9_state->ref_frame_flag & VP9_LAST_REF) { > + if ((vp9_state->ref_frame_flag & VP9_LAST_REF) && > + vp9_state->last_ref_obj) { > obj_surface = vp9_state->last_ref_obj; > vp9_priv_surface = (struct gen9_surface_vp9 > *)(obj_surface->private_data); > > @@ -4059,7 +4123,8 @@ > gen9_encode_vp9_check_parameter(VADriverContextP ctx, > vp9_state->frame_height == vp9_priv_surface- > >frame_height) > vp9_state->dys_ref_frame_flag &= ~(VP9_LAST_REF); > } > - if (vp9_state->ref_frame_flag & VP9_GOLDEN_REF) { > + if ((vp9_state->ref_frame_flag & VP9_GOLDEN_REF) && > + vp9_state->golden_ref_obj) { > obj_surface = vp9_state->golden_ref_obj; > vp9_priv_surface = (struct gen9_surface_vp9 > *)(obj_surface->private_data); > > @@ -4067,7 +4132,8 @@ > gen9_encode_vp9_check_parameter(VADriverContextP ctx, > vp9_state->frame_height == vp9_priv_surface- > >frame_height) > vp9_state->dys_ref_frame_flag &= ~(VP9_GOLDEN_REF); > } > - if (vp9_state->ref_frame_flag & VP9_ALT_REF) { > + if ((vp9_state->ref_frame_flag & VP9_ALT_REF) && > + vp9_state->alt_ref_obj) { > obj_surface = vp9_state->alt_ref_obj; > vp9_priv_surface = (struct gen9_surface_vp9 > *)(obj_surface->private_data); > > @@ -4214,7 +4280,8 @@ > gen9_vme_gpe_kernel_prepare_vp9(VADriverContextP ctx, > } > > if (vp9_state->dys_ref_frame_flag) { > - if (vp9_state->dys_ref_frame_flag & VP9_LAST_REF) { > + if ((vp9_state->dys_ref_frame_flag & VP9_LAST_REF) && > + vp9_state->last_ref_obj) { > obj_surface = vp9_state->last_ref_obj; > surface_param.frame_width = vp9_state->frame_width; > surface_param.frame_height = vp9_state->frame_height; > @@ -4225,7 +4292,8 @@ > gen9_vme_gpe_kernel_prepare_vp9(VADriverContextP ctx, > if (va_status) > return va_status; > } > - if (vp9_state->dys_ref_frame_flag & VP9_GOLDEN_REF) { > + if ((vp9_state->dys_ref_frame_flag & VP9_GOLDEN_REF) && > + vp9_state->golden_ref_obj) { > obj_surface = vp9_state->golden_ref_obj; > surface_param.frame_width = vp9_state->frame_width; > surface_param.frame_height = vp9_state->frame_height; > @@ -4236,7 +4304,8 @@ > gen9_vme_gpe_kernel_prepare_vp9(VADriverContextP ctx, > if (va_status) > return va_status; > } > - if (vp9_state->dys_ref_frame_flag & VP9_ALT_REF) { > + if ((vp9_state->dys_ref_frame_flag & VP9_ALT_REF) && > + vp9_state->alt_ref_obj) { > obj_surface = vp9_state->alt_ref_obj; > surface_param.frame_width = vp9_state->frame_width; > surface_param.frame_height = vp9_state->frame_height; > @@ -4843,6 +4912,9 @@ > intel_vp9enc_refresh_frame_internal_buffers(VADriverContextP ctx, > i965_zero_gpe_resource(&pak_context- > >res_compressed_input_buffer); > buffer = i965_map_gpe_resource(&pak_context- > >res_compressed_input_buffer); > > + if (!buffer) > + return; > + > /* write tx_size */ > if ((pic_param->luma_ac_qindex == 0) && > (pic_param->luma_dc_qindex_delta == 0) && > @@ -5357,6 +5429,9 @@ > intel_vp9enc_construct_pak_insertobj_batchbuffer(VADriverContextP > ctx, > uncompressed_header_length = vp9_state->header_length; > cmd_ptr = i965_map_gpe_resource(obj_batch_buffer); > > + if (!cmd_ptr) > + return; > + > bits_in_last_dw = uncompressed_header_length % 4; > bits_in_last_dw *= 8; > > @@ -5437,6 +5512,10 @@ gen9_vp9_pak_picture_level(VADriverContextP > ctx, > uint8_t *prob_ptr; > > prob_ptr = i965_map_gpe_resource(&pak_context- > >res_prob_buffer); > + > + if (!prob_ptr) > + return; > + > /* copy the current fc to vp9_prob buffer */ > memcpy(prob_ptr, &vp9_state->vp9_current_fc, > sizeof(FRAME_CONTEXT)); > if ((pic_param->pic_flags.bits.frame_type == > HCP_VP9_KEY_FRAME) || > diff --git a/src/gen9_vp9_encoder.h b/src/gen9_vp9_encoder.h > index ccc9f80..8034240 100644 > --- a/src/gen9_vp9_encoder.h > +++ b/src/gen9_vp9_encoder.h > @@ -1908,6 +1908,7 @@ struct gen9_vp9_state { > struct object_surface *alt_ref_obj; > > VAEncSequenceParameterBufferVP9 *seq_param; > + VAEncSequenceParameterBufferVP9 bogus_seq_param; > VAEncPictureParameterBufferVP9 *pic_param; > VAEncMiscParameterTypeVP9PerSegmantParam *segment_param; > double brc_init_current_target_buf_full_in_bits; _______________________________________________ Libva mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libva
