codec_private_data in struct i965_coded_buffer_segment is used to store codec related data. Add 'struct vp9_encode_status' for the data that will be written into codec_private_data
Signed-off-by: Xiang, Haihao <[email protected]> --- src/gen9_vp9_encoder.c | 26 ++++++++------------------ src/gen9_vp9_encoder.h | 12 ++++++++---- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/gen9_vp9_encoder.c b/src/gen9_vp9_encoder.c index edfbda6..76cd1d7 100644 --- a/src/gen9_vp9_encoder.c +++ b/src/gen9_vp9_encoder.c @@ -5985,15 +5985,16 @@ gen9_vp9_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *en /* the definition of status buffer offset for VP9 */ { struct vp9_encode_status_buffer_internal *status_buffer; + uint32_t base_offset = offsetof(struct i965_coded_buffer_segment, codec_private_data); status_buffer = &vp9_state->status_buffer; memset(status_buffer, 0, sizeof(struct vp9_encode_status_buffer_internal)); - status_buffer->bs_byte_count_offset = 2048; - status_buffer->image_status_mask_offset = 2052; - status_buffer->image_status_ctrl_offset = 2056; - status_buffer->media_index_offset = 2060; + status_buffer->bs_byte_count_offset = base_offset + offsetof(struct vp9_encode_status, bs_byte_count); + status_buffer->image_status_mask_offset = base_offset + offsetof(struct vp9_encode_status, image_status_mask); + status_buffer->image_status_ctrl_offset = base_offset + offsetof(struct vp9_encode_status, image_status_ctrl); + status_buffer->media_index_offset = base_offset + offsetof(struct vp9_encode_status, media_index); status_buffer->vp9_bs_frame_reg_offset = 0x1E9E0; status_buffer->vp9_image_mask_reg_offset = 0x1E9F0; @@ -6014,24 +6015,13 @@ gen9_vp9_get_coded_status(VADriverContextP ctx, struct intel_encoder_context *encoder_context, struct i965_coded_buffer_segment *coded_buf_seg) { - struct gen9_vp9_state *vp9_state = NULL; - struct vp9_encode_status_buffer_internal *status_buffer; - unsigned int *buf_ptr; + struct vp9_encode_status *vp9_encode_status; if (!encoder_context || !coded_buf_seg) return VA_STATUS_ERROR_INVALID_BUFFER; - vp9_state = (struct gen9_vp9_state *)(encoder_context->enc_priv_state); - - if (!vp9_state) - return VA_STATUS_ERROR_INVALID_BUFFER; - - status_buffer = &vp9_state->status_buffer; - - buf_ptr = (unsigned int *)((char *)coded_buf_seg + status_buffer->bs_byte_count_offset); - - /* the stream size is writen into the bs_byte_count_offset address of buffer */ - coded_buf_seg->base.size = *buf_ptr; + vp9_encode_status = (struct vp9_encode_status *)coded_buf_seg->codec_private_data; + coded_buf_seg->base.size = vp9_encode_status->bs_byte_count; /* One VACodedBufferSegment for VP9 will be added later. * It will be linked to the next element of coded_buf_seg->base.next diff --git a/src/gen9_vp9_encoder.h b/src/gen9_vp9_encoder.h index 8034240..ad2d875 100644 --- a/src/gen9_vp9_encoder.h +++ b/src/gen9_vp9_encoder.h @@ -1849,15 +1849,19 @@ enum INTEL_ENC_VP9_TU_MODE #define VP9_GOLDEN_REF 0x02 #define VP9_ALT_REF 0x04 -/* the vp9_encode_status_buffer is the shadow - * of vp9_encode_status_buffer_internal. - */ +struct vp9_encode_status +{ + uint32_t bs_byte_count; + uint32_t image_status_mask; + uint32_t image_status_ctrl; + uint32_t media_index; +}; + struct vp9_encode_status_buffer_internal { uint32_t bs_byte_count_offset; uint32_t reserved[15]; - /* the above is shared with the gen9_encode_status_buffer */ uint32_t image_status_mask_offset; uint32_t image_status_ctrl_offset; -- 1.9.1 _______________________________________________ Libva mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libva
