media: venus: venc: add support for V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM control
Add support for V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM control for H264 high profile and constrained high profile. Signed-off-by: Mansur Alisha Shaik <mansur@codeaurora.org> Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
f7a3d3dc58
commit
bfee75f73c
@ -234,6 +234,7 @@ struct venc_controls {
|
||||
u32 h264_loop_filter_mode;
|
||||
s32 h264_loop_filter_alpha;
|
||||
s32 h264_loop_filter_beta;
|
||||
u32 h264_8x8_transform;
|
||||
|
||||
u32 hevc_i_qp;
|
||||
u32 hevc_p_qp;
|
||||
|
@ -1239,6 +1239,14 @@ pkt_session_set_property_4xx(struct hfi_session_set_property_pkt *pkt,
|
||||
break;
|
||||
}
|
||||
|
||||
case HFI_PROPERTY_PARAM_VENC_H264_TRANSFORM_8X8: {
|
||||
struct hfi_h264_8x8_transform *in = pdata, *tm = prop_data;
|
||||
|
||||
tm->enable_type = in->enable_type;
|
||||
pkt->shdr.hdr.size += sizeof(u32) + sizeof(*tm);
|
||||
break;
|
||||
}
|
||||
|
||||
case HFI_PROPERTY_CONFIG_VENC_MAX_BITRATE:
|
||||
case HFI_PROPERTY_CONFIG_VDEC_POST_LOOP_DEBLOCKER:
|
||||
case HFI_PROPERTY_PARAM_BUFFER_ALLOC_MODE:
|
||||
|
@ -507,6 +507,7 @@
|
||||
#define HFI_PROPERTY_PARAM_VENC_MAX_NUM_B_FRAMES 0x2005020
|
||||
#define HFI_PROPERTY_PARAM_VENC_H264_VUI_BITSTREAM_RESTRC 0x2005021
|
||||
#define HFI_PROPERTY_PARAM_VENC_PRESERVE_TEXT_QUALITY 0x2005023
|
||||
#define HFI_PROPERTY_PARAM_VENC_H264_TRANSFORM_8X8 0x2005025
|
||||
#define HFI_PROPERTY_PARAM_VENC_HIER_P_MAX_NUM_ENH_LAYER 0x2005026
|
||||
#define HFI_PROPERTY_PARAM_VENC_DISABLE_RC_TIMESTAMP 0x2005027
|
||||
#define HFI_PROPERTY_PARAM_VENC_INITIAL_QP 0x2005028
|
||||
@ -562,6 +563,10 @@ struct hfi_bitrate {
|
||||
u32 layer_id;
|
||||
};
|
||||
|
||||
struct hfi_h264_8x8_transform {
|
||||
u32 enable_type;
|
||||
};
|
||||
|
||||
#define HFI_CAPABILITY_FRAME_WIDTH 0x01
|
||||
#define HFI_CAPABILITY_FRAME_HEIGHT 0x02
|
||||
#define HFI_CAPABILITY_MBS_PER_FRAME 0x03
|
||||
|
@ -570,6 +570,7 @@ static int venc_set_properties(struct venus_inst *inst)
|
||||
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;
|
||||
@ -600,6 +601,17 @@ static int venc_set_properties(struct venus_inst *inst)
|
||||
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 == HFI_H264_PROFILE_HIGH ||
|
||||
ctr->profile.h264 == HFI_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 ||
|
||||
|
@ -319,6 +319,25 @@ static int venc_op_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
case V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD:
|
||||
ctr->intra_refresh_period = ctrl->val;
|
||||
break;
|
||||
case V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM:
|
||||
if (ctr->profile.h264 != HFI_H264_PROFILE_HIGH &&
|
||||
ctr->profile.h264 != HFI_H264_PROFILE_CONSTRAINED_HIGH)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* In video firmware, 8x8 transform is supported only for
|
||||
* high profile(HP) and constrained high profile(CHP).
|
||||
* If client wants to disable 8x8 transform for HP/CHP,
|
||||
* it is better to set profile as main profile(MP).
|
||||
* Because there is no difference between HP and MP
|
||||
* if we disable 8x8 transform for HP.
|
||||
*/
|
||||
|
||||
if (ctrl->val == 0)
|
||||
return -EINVAL;
|
||||
|
||||
ctr->h264_8x8_transform = ctrl->val;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
@ -334,7 +353,7 @@ int venc_ctrl_init(struct venus_inst *inst)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = v4l2_ctrl_handler_init(&inst->ctrl_handler, 57);
|
||||
ret = v4l2_ctrl_handler_init(&inst->ctrl_handler, 58);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -437,6 +456,9 @@ int venc_ctrl_init(struct venus_inst *inst)
|
||||
v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
|
||||
V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MIN_QP, 1, 51, 1, 1);
|
||||
|
||||
v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
|
||||
V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM, 0, 1, 1, 0);
|
||||
|
||||
v4l2_ctrl_new_std(&inst->ctrl_handler, &venc_ctrl_ops,
|
||||
V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MIN_QP, 1, 51, 1, 1);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user