[Libva] [Libva-intel-driver][PATCH v2 1/3] Save ROI parameters in the common encoder context
Zhao Yakui
yakui.zhao at intel.com
Wed Nov 30 00:21:31 UTC 2016
On 11/29/2016 12:33 PM, Xiang, Haihao wrote:
> From: "peng.chen"<peng.c.chen at intel.com>
>
> These parameters can be used for all codecs
>
> v2: Don't align ROI region, each codec might have
> special requirement
This looks fine to me.
Thanks
>
> Signed-off-by: peng.chen<peng.c.chen at intel.com>
> Signed-off-by: Xiang, Haihao<haihao.xiang at intel.com>
> ---
> src/i965_encoder.c | 35 +++++++++++++++++++++++++++++++++++
> src/i965_encoder.h | 6 ++++++
> 2 files changed, 41 insertions(+)
>
> diff --git a/src/i965_encoder.c b/src/i965_encoder.c
> index 4ef92eb..4aa3ee1 100644
> --- a/src/i965_encoder.c
> +++ b/src/i965_encoder.c
> @@ -438,6 +438,30 @@ intel_encoder_check_framerate_parameter(VADriverContextP ctx,
> }
> }
>
> +static void
> +intel_encoder_check_roi_parameter(VADriverContextP ctx,
> + struct intel_encoder_context *encoder_context,
> + VAEncMiscParameterBufferROI *misc)
> +{
> + int i = 0;
> +
> + encoder_context->brc.num_roi = MIN(misc->num_roi, I965_MAX_NUM_ROI_REGIONS);
> + encoder_context->brc.roi_max_delta_qp = misc->max_delta_qp;
> + encoder_context->brc.roi_min_delta_qp = misc->min_delta_qp;
> + encoder_context->brc.roi_value_is_qp_delta = 0;
> +
> + if (encoder_context->rate_control_mode != VA_RC_CQP)
> + encoder_context->brc.roi_value_is_qp_delta = misc->roi_flags.bits.roi_value_is_qp_delta;
> +
> + for (i = 0; i< encoder_context->brc.num_roi; i++) {
> + encoder_context->brc.roi[i].left = misc->roi->roi_rectangle.x;
> + encoder_context->brc.roi[i].right = encoder_context->brc.roi[i].left + misc->roi->roi_rectangle.width;
> + encoder_context->brc.roi[i].top = misc->roi->roi_rectangle.y;
> + encoder_context->brc.roi[i].bottom = encoder_context->brc.roi[i].top + misc->roi->roi_rectangle.height;
> + encoder_context->brc.roi[i].value = misc->roi->roi_value;
> + }
> +}
> +
> static VAStatus
> intel_encoder_check_brc_parameter(VADriverContextP ctx,
> struct encode_state *encode_state,
> @@ -481,6 +505,12 @@ intel_encoder_check_brc_parameter(VADriverContextP ctx,
> (VAEncMiscParameterHRD *)misc_param->data);
> break;
>
> + case VAEncMiscParameterTypeROI:
> + intel_encoder_check_roi_parameter(ctx,
> + encoder_context,
> + (VAEncMiscParameterBufferROI *)misc_param->data);
> + break;
> +
> default:
> break;
> }
> @@ -1056,6 +1086,11 @@ intel_encoder_end_picture(VADriverContextP ctx,
> encoder_context->mfc_pipeline(ctx, profile, encode_state, encoder_context);
> encoder_context->num_frames_in_sequence++;
> encoder_context->brc.need_reset = 0;
> + /*
> + * ROI is only available for the current frame, see the comment
> + * for VAEncROI in va.h
> + */
> + encoder_context->brc.num_roi = 0;
>
> return VA_STATUS_SUCCESS;
> }
> diff --git a/src/i965_encoder.h b/src/i965_encoder.h
> index ba31364..fe5a595 100644
> --- a/src/i965_encoder.h
> +++ b/src/i965_encoder.h
> @@ -84,6 +84,12 @@ struct intel_encoder_context
> unsigned int hrd_buffer_size;
> unsigned int hrd_initial_buffer_fullness;
> unsigned int need_reset;
> +
> + unsigned int num_roi;
> + unsigned int roi_max_delta_qp;
> + unsigned int roi_min_delta_qp;
> + unsigned int roi_value_is_qp_delta;
> + struct intel_roi roi[I965_MAX_NUM_ROI_REGIONS];
> } brc;
>
> void *vme_context;
More information about the Libva
mailing list