Re: [PATCH v2 1/3] media: venus: Reorder encoder property setting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 7/30/2024 12:49 AM, Fritz Koenig wrote:
> Configure the generic controls before the codec specific ones.
> Some codec specific controls can override the generic ones.
> 
> Signed-off-by: Fritz Koenig <frkoenig@xxxxxxxxxxxx>
> ---
> v2:
> - requested testing methodology added to cover letter
> 
>  drivers/media/platform/qcom/venus/venc.c | 183 +++++++++++------------
>  1 file changed, 91 insertions(+), 92 deletions(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c
> index 3ec2fb8d9fab..ae24de125c56 100644
> --- a/drivers/media/platform/qcom/venus/venc.c
> +++ b/drivers/media/platform/qcom/venus/venc.c
> @@ -688,98 +688,6 @@ static int venc_set_properties(struct venus_inst *inst)
>  	if (ret)
>  		return ret;
>  
> -	if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_H264) {
> -		struct hfi_h264_vui_timing_info info;
> -		struct hfi_h264_entropy_control entropy;
> -		struct hfi_h264_db_control deblock;
> -		struct hfi_h264_8x8_transform h264_transform;
> -
> -		ptype = HFI_PROPERTY_PARAM_VENC_H264_VUI_TIMING_INFO;
> -		info.enable = 1;
> -		info.fixed_framerate = 1;
> -		info.time_scale = NSEC_PER_SEC;
> -
> -		ret = hfi_session_set_property(inst, ptype, &info);
> -		if (ret)
> -			return ret;
> -
> -		ptype = HFI_PROPERTY_PARAM_VENC_H264_ENTROPY_CONTROL;
> -		entropy.entropy_mode = venc_v4l2_to_hfi(
> -					  V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE,
> -					  ctr->h264_entropy_mode);
> -		entropy.cabac_model = HFI_H264_CABAC_MODEL_0;
> -
> -		ret = hfi_session_set_property(inst, ptype, &entropy);
> -		if (ret)
> -			return ret;
> -
> -		ptype = HFI_PROPERTY_PARAM_VENC_H264_DEBLOCK_CONTROL;
> -		deblock.mode = venc_v4l2_to_hfi(
> -				      V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE,
> -				      ctr->h264_loop_filter_mode);
> -		deblock.slice_alpha_offset = ctr->h264_loop_filter_alpha;
> -		deblock.slice_beta_offset = ctr->h264_loop_filter_beta;
> -
> -		ret = hfi_session_set_property(inst, ptype, &deblock);
> -		if (ret)
> -			return ret;
> -
> -		ptype = HFI_PROPERTY_PARAM_VENC_H264_TRANSFORM_8X8;
> -		h264_transform.enable_type = 0;
> -		if (ctr->profile.h264 == V4L2_MPEG_VIDEO_H264_PROFILE_HIGH ||
> -		    ctr->profile.h264 == V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH)
> -			h264_transform.enable_type = ctr->h264_8x8_transform;
> -
> -		ret = hfi_session_set_property(inst, ptype, &h264_transform);
> -		if (ret)
> -			return ret;
> -
> -	}
> -
> -	if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_H264 ||
> -	    inst->fmt_cap->pixfmt == V4L2_PIX_FMT_HEVC) {
> -		/* IDR periodicity, n:
> -		 * n = 0 - only the first I-frame is IDR frame
> -		 * n = 1 - all I-frames will be IDR frames
> -		 * n > 1 - every n-th I-frame will be IDR frame
> -		 */
> -		ptype = HFI_PROPERTY_CONFIG_VENC_IDR_PERIOD;
> -		idrp.idr_period = 0;
> -		ret = hfi_session_set_property(inst, ptype, &idrp);
> -		if (ret)
> -			return ret;
> -	}
> -
> -	if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_HEVC &&
> -	    ctr->profile.hevc == V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10) {
> -		struct hfi_hdr10_pq_sei hdr10;
> -		unsigned int c;
> -
> -		ptype = HFI_PROPERTY_PARAM_VENC_HDR10_PQ_SEI;
> -
> -		for (c = 0; c < 3; c++) {
> -			hdr10.mastering.display_primaries_x[c] =
> -				ctr->mastering.display_primaries_x[c];
> -			hdr10.mastering.display_primaries_y[c] =
> -				ctr->mastering.display_primaries_y[c];
> -		}
> -
> -		hdr10.mastering.white_point_x = ctr->mastering.white_point_x;
> -		hdr10.mastering.white_point_y = ctr->mastering.white_point_y;
> -		hdr10.mastering.max_display_mastering_luminance =
> -			ctr->mastering.max_display_mastering_luminance;
> -		hdr10.mastering.min_display_mastering_luminance =
> -			ctr->mastering.min_display_mastering_luminance;
> -
> -		hdr10.cll.max_content_light = ctr->cll.max_content_light_level;
> -		hdr10.cll.max_pic_average_light =
> -			ctr->cll.max_pic_average_light_level;
> -
> -		ret = hfi_session_set_property(inst, ptype, &hdr10);
> -		if (ret)
> -			return ret;
> -	}
> -
>  	if (ctr->num_b_frames) {
>  		u32 max_num_b_frames = NUM_B_FRAMES_MAX;
>  
> @@ -922,6 +830,97 @@ static int venc_set_properties(struct venus_inst *inst)
>  	if (ret)
>  		return ret;
>  
> +	if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_H264) {
> +		struct hfi_h264_vui_timing_info info;
> +		struct hfi_h264_entropy_control entropy;
> +		struct hfi_h264_db_control deblock;
> +		struct hfi_h264_8x8_transform h264_transform;
> +
> +		ptype = HFI_PROPERTY_PARAM_VENC_H264_VUI_TIMING_INFO;
> +		info.enable = 1;
> +		info.fixed_framerate = 1;
> +		info.time_scale = NSEC_PER_SEC;
> +
> +		ret = hfi_session_set_property(inst, ptype, &info);
> +		if (ret)
> +			return ret;
> +
> +		ptype = HFI_PROPERTY_PARAM_VENC_H264_ENTROPY_CONTROL;
> +		entropy.entropy_mode = venc_v4l2_to_hfi(
> +					  V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE,
> +					  ctr->h264_entropy_mode);
> +		entropy.cabac_model = HFI_H264_CABAC_MODEL_0;
> +
> +		ret = hfi_session_set_property(inst, ptype, &entropy);
> +		if (ret)
> +			return ret;
> +
> +		ptype = HFI_PROPERTY_PARAM_VENC_H264_DEBLOCK_CONTROL;
> +		deblock.mode = venc_v4l2_to_hfi(
> +				      V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE,
> +				      ctr->h264_loop_filter_mode);
> +		deblock.slice_alpha_offset = ctr->h264_loop_filter_alpha;
> +		deblock.slice_beta_offset = ctr->h264_loop_filter_beta;
> +
> +		ret = hfi_session_set_property(inst, ptype, &deblock);
> +		if (ret)
> +			return ret;
> +
> +		ptype = HFI_PROPERTY_PARAM_VENC_H264_TRANSFORM_8X8;
> +		h264_transform.enable_type = 0;
> +		if (ctr->profile.h264 == V4L2_MPEG_VIDEO_H264_PROFILE_HIGH ||
> +		    ctr->profile.h264 == V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH)
> +			h264_transform.enable_type = ctr->h264_8x8_transform;
> +
> +		ret = hfi_session_set_property(inst, ptype, &h264_transform);
> +		if (ret)
> +			return ret;
> +	}
> +
> +	if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_H264 ||
> +	    inst->fmt_cap->pixfmt == V4L2_PIX_FMT_HEVC) {
> +		/* IDR periodicity, n:
> +		 * n = 0 - only the first I-frame is IDR frame
> +		 * n = 1 - all I-frames will be IDR frames
> +		 * n > 1 - every n-th I-frame will be IDR frame
> +		 */
> +		ptype = HFI_PROPERTY_CONFIG_VENC_IDR_PERIOD;
> +		idrp.idr_period = 0;
> +		ret = hfi_session_set_property(inst, ptype, &idrp);
> +		if (ret)
> +			return ret;
> +	}
> +
> +	if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_HEVC &&
> +	    ctr->profile.hevc == V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10) {
> +		struct hfi_hdr10_pq_sei hdr10;
> +		unsigned int c;
> +
> +		ptype = HFI_PROPERTY_PARAM_VENC_HDR10_PQ_SEI;
> +
> +		for (c = 0; c < 3; c++) {
> +			hdr10.mastering.display_primaries_x[c] =
> +				ctr->mastering.display_primaries_x[c];
> +			hdr10.mastering.display_primaries_y[c] =
> +				ctr->mastering.display_primaries_y[c];
> +		}
> +
> +		hdr10.mastering.white_point_x = ctr->mastering.white_point_x;
> +		hdr10.mastering.white_point_y = ctr->mastering.white_point_y;
> +		hdr10.mastering.max_display_mastering_luminance =
> +			ctr->mastering.max_display_mastering_luminance;
> +		hdr10.mastering.min_display_mastering_luminance =
> +			ctr->mastering.min_display_mastering_luminance;
> +
> +		hdr10.cll.max_content_light = ctr->cll.max_content_light_level;
> +		hdr10.cll.max_pic_average_light =
> +			ctr->cll.max_pic_average_light_level;
> +
> +		ret = hfi_session_set_property(inst, ptype, &hdr10);
> +		if (ret)
> +			return ret;
> +	}
> +
>  	switch (inst->hfi_codec) {
>  	case HFI_VIDEO_CODEC_H264:
>  		profile = ctr->profile.h264;

Changing the order might cause issue for other functionalities.

Also, Client should either set the commutative bitrate or layerwise
bitrate. So, if the motive behind this re-order is to not update the
commutative bitrate, then that is expected and this way there might not be
a need to change current order.

Thanks,
Dikshita




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux