[Libva] [PATCH v3 1/2] Move gen6 phantom slice function as common

Zhao, Yakui yakui.zhao at intel.com
Thu Sep 4 19:46:40 PDT 2014


On Wed, 2014-08-27 at 01:04 -0600, Zhong Li wrote:
> Following haihao's suggestion, make gen6 phantom slice funcion can be
> re-used by SNB+.
> 
> v1->v2: Remove an unnessary comment.

LGTM.

This patch will be pushed.

Thanks.
   Yakui

> 
> Signed-off-by: Zhong Li <zhong.li at intel.com>
> Reviewed-by: Xiang Haihao <haihao.xiang at intel.com>
>              Gwenole Beauchesne <gwenole.beauchesne at intel.com>
> ---
>  src/gen6_mfd.c           |   81 ++--------------------------------------------
>  src/i965_decoder_utils.c |   75 ++++++++++++++++++++++++++++++++++++++++++
>  src/i965_decoder_utils.h |    7 ++++
>  3 files changed, 84 insertions(+), 79 deletions(-)
> 
> diff --git a/src/gen6_mfd.c b/src/gen6_mfd.c
> index b3a8ef4..ea13e4f 100755
> --- a/src/gen6_mfd.c
> +++ b/src/gen6_mfd.c
> @@ -596,56 +596,6 @@ gen6_mfd_avc_slice_state(VADriverContextP ctx,
>      ADVANCE_BCS_BATCH(batch);
>  }
>  
> -static void
> -gen6_mfd_avc_phantom_slice_state(VADriverContextP ctx,
> -                                 VAPictureParameterBufferH264 *pic_param,
> -                                 VASliceParameterBufferH264 *next_slice_param,
> -                                 struct gen6_mfd_context *gen6_mfd_context)
> -{
> -    struct intel_batchbuffer *batch = gen6_mfd_context->base.batch;
> -    int width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1;
> -    int height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; /* frame height */
> -    int slice_hor_pos, slice_ver_pos, slice_start_mb_num, next_slice_hor_pos, next_slice_ver_pos;
> -    int mbaff_picture = (!pic_param->pic_fields.bits.field_pic_flag &&
> -                         pic_param->seq_fields.bits.mb_adaptive_frame_field_flag);
> -
> -    if (next_slice_param) {
> -        int first_mb_in_next_slice;
> -
> -        slice_hor_pos = 0;
> -        slice_ver_pos = 0;
> -        slice_start_mb_num = 0;
> -        first_mb_in_next_slice = next_slice_param->first_mb_in_slice << mbaff_picture;
> -        next_slice_hor_pos = first_mb_in_next_slice % width_in_mbs;
> -        next_slice_ver_pos = first_mb_in_next_slice / width_in_mbs;
> -    } else {
> -        slice_hor_pos = 0;
> -        slice_ver_pos = height_in_mbs;
> -        slice_start_mb_num = width_in_mbs * height_in_mbs / (1 + !!pic_param->pic_fields.bits.field_pic_flag);
> -        next_slice_hor_pos = 0;
> -        next_slice_ver_pos = 0;
> -    }
> -
> -    BEGIN_BCS_BATCH(batch, 11); /* FIXME: is it 10??? */
> -    OUT_BCS_BATCH(batch, MFX_AVC_SLICE_STATE | (11 - 2));
> -    OUT_BCS_BATCH(batch, 0);
> -    OUT_BCS_BATCH(batch, 0);
> -    OUT_BCS_BATCH(batch, 0);
> -    OUT_BCS_BATCH(batch,
> -                  slice_ver_pos << 24 |
> -                  slice_hor_pos << 16 |
> -                  slice_start_mb_num << 0);
> -    OUT_BCS_BATCH(batch,
> -                  next_slice_ver_pos << 16 |
> -                  next_slice_hor_pos << 0);
> -    OUT_BCS_BATCH(batch, 0);
> -    OUT_BCS_BATCH(batch, 0);
> -    OUT_BCS_BATCH(batch, 0);
> -    OUT_BCS_BATCH(batch, 0);
> -    OUT_BCS_BATCH(batch, 0);
> -    ADVANCE_BCS_BATCH(batch);
> -}
> -
>  static inline void
>  gen6_mfd_avc_ref_idx_state(VADriverContextP ctx,
>                             VAPictureParameterBufferH264 *pic_param,
> @@ -747,39 +697,12 @@ gen6_mfd_avc_bsd_object(VADriverContextP ctx,
>  }
>  
>  static void
> -gen6_mfd_avc_phantom_slice_bsd_object(VADriverContextP ctx,
> -                                      VAPictureParameterBufferH264 *pic_param,
> -                                      struct gen6_mfd_context *gen6_mfd_context)
> -{
> -    struct intel_batchbuffer *batch = gen6_mfd_context->base.batch;
> -
> -    BEGIN_BCS_BATCH(batch, 6);
> -    OUT_BCS_BATCH(batch, MFD_AVC_BSD_OBJECT | (6 - 2));
> -    OUT_BCS_BATCH(batch, 0);
> -    OUT_BCS_BATCH(batch, 0);
> -    OUT_BCS_BATCH(batch, 0);
> -    OUT_BCS_BATCH(batch, 0);
> -    OUT_BCS_BATCH(batch, 0);
> -    ADVANCE_BCS_BATCH(batch);
> -}
> -
> -static void
> -gen6_mfd_avc_phantom_slice(VADriverContextP ctx,
> -                           VAPictureParameterBufferH264 *pic_param,
> -                           VASliceParameterBufferH264 *next_slice_param,
> -                           struct gen6_mfd_context *gen6_mfd_context)
> -{
> -    gen6_mfd_avc_phantom_slice_state(ctx, pic_param, next_slice_param, gen6_mfd_context);
> -    gen6_mfd_avc_phantom_slice_bsd_object(ctx, pic_param, gen6_mfd_context);
> -}
> -
> -static void
>  gen6_mfd_avc_phantom_slice_first(VADriverContextP ctx,
>                                   VAPictureParameterBufferH264 *pic_param,
>                                   VASliceParameterBufferH264 *next_slice_param,
>                                   struct gen6_mfd_context *gen6_mfd_context)
>  {
> -    gen6_mfd_avc_phantom_slice(ctx, pic_param, next_slice_param, gen6_mfd_context);
> +    gen6_mfd_avc_phantom_slice(ctx, pic_param, next_slice_param, gen6_mfd_context->base.batch);
>  }
>  
>  static void
> @@ -787,7 +710,7 @@ gen6_mfd_avc_phantom_slice_last(VADriverContextP ctx,
>                                  VAPictureParameterBufferH264 *pic_param,
>                                  struct gen6_mfd_context *gen6_mfd_context)
>  {
> -    gen6_mfd_avc_phantom_slice(ctx, pic_param, NULL, gen6_mfd_context);
> +    gen6_mfd_avc_phantom_slice(ctx, pic_param, NULL, gen6_mfd_context->base.batch);
>  }
>  
>  static void
> diff --git a/src/i965_decoder_utils.c b/src/i965_decoder_utils.c
> index 0af46cb..da8a270 100644
> --- a/src/i965_decoder_utils.c
> +++ b/src/i965_decoder_utils.c
> @@ -487,6 +487,81 @@ gen6_send_avc_ref_idx_state(
>      );
>  }
>  
> +static void
> +gen6_mfd_avc_phantom_slice_state(VADriverContextP ctx,
> +                                 VAPictureParameterBufferH264 *pic_param,
> +                                 VASliceParameterBufferH264 *next_slice_param,
> +                                 struct intel_batchbuffer *batch)
> +{
> +    int width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1;
> +    int height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; /* frame height */
> +    int slice_hor_pos, slice_ver_pos, slice_start_mb_num, next_slice_hor_pos, next_slice_ver_pos;
> +    int mbaff_picture = (!pic_param->pic_fields.bits.field_pic_flag &&
> +                         pic_param->seq_fields.bits.mb_adaptive_frame_field_flag);
> +
> +    if (next_slice_param) {
> +        int first_mb_in_next_slice;
> +
> +        slice_hor_pos = 0;
> +        slice_ver_pos = 0;
> +        slice_start_mb_num = 0;
> +        first_mb_in_next_slice = next_slice_param->first_mb_in_slice << mbaff_picture;
> +        next_slice_hor_pos = first_mb_in_next_slice % width_in_mbs;
> +        next_slice_ver_pos = first_mb_in_next_slice / width_in_mbs;
> +    } else {
> +        slice_hor_pos = 0;
> +        slice_ver_pos = height_in_mbs;
> +        slice_start_mb_num = width_in_mbs * height_in_mbs / (1 + !!pic_param->pic_fields.bits.field_pic_flag);
> +        next_slice_hor_pos = 0;
> +        next_slice_ver_pos = 0;
> +    }
> +
> +    BEGIN_BCS_BATCH(batch, 11);
> +    OUT_BCS_BATCH(batch, MFX_AVC_SLICE_STATE | (11 - 2));
> +    OUT_BCS_BATCH(batch, 0);
> +    OUT_BCS_BATCH(batch, 0);
> +    OUT_BCS_BATCH(batch, 0);
> +    OUT_BCS_BATCH(batch,
> +                  slice_ver_pos << 24 |
> +                  slice_hor_pos << 16 |
> +                  slice_start_mb_num << 0);
> +    OUT_BCS_BATCH(batch,
> +                  next_slice_ver_pos << 16 |
> +                  next_slice_hor_pos << 0);
> +    OUT_BCS_BATCH(batch, 0);
> +    OUT_BCS_BATCH(batch, 0);
> +    OUT_BCS_BATCH(batch, 0);
> +    OUT_BCS_BATCH(batch, 0);
> +    OUT_BCS_BATCH(batch, 0);
> +    ADVANCE_BCS_BATCH(batch);
> +}
> +
> +static void
> +gen6_mfd_avc_phantom_slice_bsd_object(VADriverContextP ctx,
> +                                      VAPictureParameterBufferH264 *pic_param,
> +                                      struct intel_batchbuffer *batch)
> +{
> +
> +    BEGIN_BCS_BATCH(batch, 6);
> +    OUT_BCS_BATCH(batch, MFD_AVC_BSD_OBJECT | (6 - 2));
> +    OUT_BCS_BATCH(batch, 0);
> +    OUT_BCS_BATCH(batch, 0);
> +    OUT_BCS_BATCH(batch, 0);
> +    OUT_BCS_BATCH(batch, 0);
> +    OUT_BCS_BATCH(batch, 0);
> +    ADVANCE_BCS_BATCH(batch);
> +}
> +
> +void
> +gen6_mfd_avc_phantom_slice(VADriverContextP ctx,
> +                           VAPictureParameterBufferH264 *pic_param,
> +                           VASliceParameterBufferH264 *next_slice_param,
> +                           struct intel_batchbuffer *batch)
> +{
> +    gen6_mfd_avc_phantom_slice_state(ctx, pic_param, next_slice_param, batch);
> +    gen6_mfd_avc_phantom_slice_bsd_object(ctx, pic_param, batch);
> +}
> +
>  /* Comparison function for sorting out the array of free frame store entries */
>  static int
>  compare_avc_ref_store_func(const void *p1, const void *p2)
> diff --git a/src/i965_decoder_utils.h b/src/i965_decoder_utils.h
> index acd21f2..48ef814 100644
> --- a/src/i965_decoder_utils.h
> +++ b/src/i965_decoder_utils.h
> @@ -89,6 +89,13 @@ gen6_send_avc_ref_idx_state(
>      const GenFrameStore               frame_store[MAX_GEN_REFERENCE_FRAMES]
>  );
>  
> +void
> +gen6_mfd_avc_phantom_slice(VADriverContextP ctx,
> +                           VAPictureParameterBufferH264 *pic_param,
> +                           VASliceParameterBufferH264 *next_slice_param,
> +                           struct intel_batchbuffer *batch
> +);
> +
>  VAStatus
>  intel_decoder_sanity_check_input(VADriverContextP ctx,
>                                   VAProfile profile,




More information about the Libva mailing list