diff --git a/driver/platform/waipio/src/msm_vidc_waipio.c b/driver/platform/waipio/src/msm_vidc_waipio.c index 6ce0dca31d..1d9b4b2e20 100644 --- a/driver/platform/waipio/src/msm_vidc_waipio.c +++ b/driver/platform/waipio/src/msm_vidc_waipio.c @@ -312,7 +312,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 1, MAX_BITRATE, 1, DEFAULT_BITRATE, V4L2_CID_MPEG_VIDEO_BITRATE, HFI_PROP_TOTAL_BITRATE, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {ENH_LAYER_COUNT, BITRATE_MODE}, {PEAK_BITRATE}, msm_vidc_adjust_bitrate, msm_vidc_set_bitrate}, @@ -374,7 +375,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 1, MAX_CONSTANT_QUALITY, 1, 90, V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY, HFI_PROP_CONSTANT_QUALITY, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {BITRATE_MODE}, {0}, NULL, msm_vidc_set_constant_quality}, @@ -382,7 +384,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 0, INT_MAX, 1, 2 * DEFAULT_FPS - 1, V4L2_CID_MPEG_VIDEO_GOP_SIZE, HFI_PROP_MAX_GOP_FRAMES, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {ENH_LAYER_COUNT}, {0}, msm_vidc_adjust_gop_size, msm_vidc_set_gop_size}, @@ -539,7 +542,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { (DEFAULT_BITRATE / PERCENT_PEAK_BITRATE_INCREASED)), V4L2_CID_MPEG_VIDEO_BITRATE_PEAK, HFI_PROP_TOTAL_PEAK_BITRATE, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {BITRATE_MODE, BIT_RATE}, {0}, msm_vidc_adjust_peak_bitrate, @@ -625,18 +629,12 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { MIN_QP_10BIT, MAX_QP, 1, MAX_QP, V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_MAX_QP}, - {HEVC_HIER_QP, ENC, HEVC|HEIC, - V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE, - 1, V4L2_MPEG_MSM_VIDC_DISABLE, - V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP, - HFI_PROP_QP_PACKED, - CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT}, - {I_FRAME_QP, ENC, HEVC|HEIC, MIN_QP_10BIT, MAX_QP, 1, DEFAULT_QP, V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP, HFI_PROP_QP_PACKED, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {PIX_FMTS, BITRATE_MODE}, {0}, msm_vidc_adjust_hevc_frame_qp, msm_vidc_set_frame_qp}, @@ -644,7 +642,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { MIN_QP_8BIT, MAX_QP, 1, DEFAULT_QP, V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP, HFI_PROP_QP_PACKED, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {BITRATE_MODE}, {0}, NULL, msm_vidc_set_frame_qp}, @@ -664,12 +663,6 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { MIN_QP_8BIT, MAX_QP, 1, DEFAULT_QP, V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP}, - {HIER_LAYER_QP, ENC, H264, - 0, 0x0060033, 1, 20, - V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP, - HFI_PROP_QP_PACKED, - CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT}, - {LAYER_TYPE, ENC, HEVC, V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B, V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P, @@ -701,7 +694,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 0, 5, 1, 0, V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER, HFI_PROP_LAYER_COUNT, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {BITRATE_MODE}, {GOP_SIZE, B_FRAME, BIT_RATE}, msm_vidc_adjust_layer_count, msm_vidc_set_layer_count_and_type}, @@ -710,7 +704,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 0, 5, 1, 0, V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER, HFI_PROP_LAYER_COUNT, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {BITRATE_MODE}, {GOP_SIZE, B_FRAME, BIT_RATE}, msm_vidc_adjust_layer_count, msm_vidc_set_layer_count_and_type}, @@ -723,7 +718,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 1, MAX_BITRATE, 1, DEFAULT_BITRATE, V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR, HFI_PROP_BITRATE_LAYER1, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {0}, {0}, msm_vidc_adjust_bitrate, msm_vidc_set_bitrate}, @@ -731,7 +727,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 1, MAX_BITRATE, 1, DEFAULT_BITRATE, V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR, HFI_PROP_BITRATE_LAYER2, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {0}, {0}, msm_vidc_adjust_bitrate, msm_vidc_set_bitrate}, @@ -739,7 +736,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 1, MAX_BITRATE, 1, DEFAULT_BITRATE, V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR, HFI_PROP_BITRATE_LAYER3, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {0}, {0}, msm_vidc_adjust_bitrate, msm_vidc_set_bitrate}, @@ -747,7 +745,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 1, MAX_BITRATE, 1, DEFAULT_BITRATE, V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR, HFI_PROP_BITRATE_LAYER4, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {0}, {0}, msm_vidc_adjust_bitrate, msm_vidc_set_bitrate}, @@ -755,7 +754,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 1, MAX_BITRATE, 1, DEFAULT_BITRATE, V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR, HFI_PROP_BITRATE_LAYER5, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {0}, {0}, msm_vidc_adjust_bitrate, msm_vidc_set_bitrate}, @@ -763,7 +763,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 1, MAX_BITRATE, 1, DEFAULT_BITRATE, V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR, HFI_PROP_BITRATE_LAYER6, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {0}, {0}, msm_vidc_adjust_bitrate, msm_vidc_set_bitrate}, @@ -771,7 +772,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 1, MAX_BITRATE, 1, DEFAULT_BITRATE, V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L0_BR, HFI_PROP_BITRATE_LAYER1, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {0}, {0}, msm_vidc_adjust_bitrate, msm_vidc_set_bitrate}, @@ -779,7 +781,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 1, MAX_BITRATE, 1, DEFAULT_BITRATE, V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L1_BR, HFI_PROP_BITRATE_LAYER2, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {0}, {0}, msm_vidc_adjust_bitrate, msm_vidc_set_bitrate}, @@ -787,7 +790,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 1, MAX_BITRATE, 1, DEFAULT_BITRATE, V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L2_BR, HFI_PROP_BITRATE_LAYER3, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {0}, {0}, msm_vidc_adjust_bitrate, msm_vidc_set_bitrate}, @@ -795,7 +799,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 1, MAX_BITRATE, 1, DEFAULT_BITRATE, V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L3_BR, HFI_PROP_BITRATE_LAYER4, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {0}, {0}, msm_vidc_adjust_bitrate, msm_vidc_set_bitrate}, @@ -803,7 +808,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 1, MAX_BITRATE, 1, DEFAULT_BITRATE, V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L4_BR, HFI_PROP_BITRATE_LAYER5, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {0}, {0}, msm_vidc_adjust_bitrate, msm_vidc_set_bitrate}, @@ -811,7 +817,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 1, MAX_BITRATE, 1, DEFAULT_BITRATE, V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L5_BR, HFI_PROP_BITRATE_LAYER6, - CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {0}, {0}, msm_vidc_adjust_bitrate, msm_vidc_set_bitrate}, @@ -1063,13 +1070,13 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 1, V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE, HFI_PROP_DECODE_ORDER_OUTPUT, - CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT}, + CAP_FLAG_ROOT | CAP_FLAG_INPUT_PORT}, {DISPLAY_DELAY, DEC, H264|HEVC|VP9, 0, 1, 1, 0, V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY, HFI_PROP_DECODE_ORDER_OUTPUT, - CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT}, + CAP_FLAG_ROOT | CAP_FLAG_INPUT_PORT}, /* conceal color */ {CONCEAL_COLOR_8BIT, DEC, CODECS_ALL, 0x0, 0xff3fcff, 1, @@ -1304,7 +1311,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 1, MAX_CONSTANT_QUALITY, 1, 100, V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY, HFI_PROP_CONSTANT_QUALITY, - CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, {BITRATE_MODE}, {0}, NULL, msm_vidc_set_constant_quality}, {GRID, ENC, HEIC, @@ -1319,7 +1327,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { 0, INT_MAX, 1, 0 /* all intra */, V4L2_CID_MPEG_VIDEO_GOP_SIZE, HFI_PROP_MAX_GOP_FRAMES, - CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | + CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, {0}, {0}, NULL, msm_vidc_set_u32}, {B_FRAME, ENC, HEIC, diff --git a/driver/vidc/inc/msm_vidc_control.h b/driver/vidc/inc/msm_vidc_control.h index 383f9a1252..80859bc2c9 100644 --- a/driver/vidc/inc/msm_vidc_control.h +++ b/driver/vidc/inc/msm_vidc_control.h @@ -79,8 +79,6 @@ int msm_vidc_set_session_priority(void *instance, enum msm_vidc_inst_capability_type cap_id); int msm_vidc_set_s32(void *instance, enum msm_vidc_inst_capability_type cap_id); -int msm_vidc_set_array(void *instance, - enum msm_vidc_inst_capability_type cap_id); int msm_vidc_set_q16(void *instance, enum msm_vidc_inst_capability_type cap_id); int msm_vidc_set_v4l2_properties(struct msm_vidc_inst *inst); diff --git a/driver/vidc/inc/msm_vidc_internal.h b/driver/vidc/inc/msm_vidc_internal.h index 9949c6da75..4af13ed14e 100644 --- a/driver/vidc/inc/msm_vidc_internal.h +++ b/driver/vidc/inc/msm_vidc_internal.h @@ -372,11 +372,9 @@ enum msm_vidc_inst_capability_type { I_FRAME_MAX_QP, P_FRAME_MAX_QP, B_FRAME_MAX_QP, - HEVC_HIER_QP, I_FRAME_QP, P_FRAME_QP, B_FRAME_QP, - HIER_LAYER_QP, LAYER_TYPE, LAYER_ENABLE, ENH_LAYER_COUNT, diff --git a/driver/vidc/src/msm_vdec.c b/driver/vidc/src/msm_vdec.c index 402021d19c..b068aa48be 100644 --- a/driver/vidc/src/msm_vdec.c +++ b/driver/vidc/src/msm_vdec.c @@ -588,14 +588,17 @@ static int msm_vdec_set_output_order(struct msm_vidc_inst *inst, enum msm_vidc_port_type port) { int rc = 0; - u32 output_order; + u32 output_order = 0; if (port != INPUT_PORT) { i_vpr_e(inst, "%s: invalid port %d\n", __func__, port); return -EINVAL; } - output_order = inst->capabilities->cap[DISPLAY_DELAY_ENABLE].value; + if (inst->capabilities->cap[DISPLAY_DELAY_ENABLE].value && + !inst->capabilities->cap[DISPLAY_DELAY].value) + output_order = 1; + i_vpr_h(inst, "%s: output order: %d", __func__, output_order); rc = venus_hfi_session_property(inst, HFI_PROP_DECODE_ORDER_OUTPUT, diff --git a/driver/vidc/src/msm_vidc_control.c b/driver/vidc/src/msm_vidc_control.c index ae5d541c04..21a625b9d0 100644 --- a/driver/vidc/src/msm_vidc_control.c +++ b/driver/vidc/src/msm_vidc_control.c @@ -111,11 +111,12 @@ static u32 msm_vidc_get_port_info(struct msm_vidc_inst *inst, if (capability->cap[cap_id].flags & CAP_FLAG_INPUT_PORT && capability->cap[cap_id].flags & CAP_FLAG_OUTPUT_PORT) { - i_vpr_e(inst, - "%s: both ports enabled. Default port set: BITSTREAM\n", - __func__); - return HFI_PORT_BITSTREAM; + if (inst->vb2q[OUTPUT_PORT].streaming) + return get_hfi_port(inst, INPUT_PORT); + else + return get_hfi_port(inst, OUTPUT_PORT); } + if (capability->cap[cap_id].flags & CAP_FLAG_INPUT_PORT) return get_hfi_port(inst, INPUT_PORT); else if (capability->cap[cap_id].flags & CAP_FLAG_OUTPUT_PORT) @@ -149,9 +150,9 @@ static int msm_vidc_packetize_control(struct msm_vidc_inst *inst, { int rc = 0; - i_vpr_l(inst, - "%s: hfi_id: %#x, value: %#x\n", func, - inst->capabilities->cap[cap_id].hfi_id, + i_vpr_h(inst, + "set cap: name: %24s, cap value: %#10x, hfi: %#10x\n", + cap_name(cap_id), inst->capabilities->cap[cap_id].value, *(s64 *)hfi_val); rc = venus_hfi_session_property(inst, @@ -163,8 +164,8 @@ static int msm_vidc_packetize_control(struct msm_vidc_inst *inst, sizeof(payload_size)); if (rc) i_vpr_e(inst, - "%s: failed to set cap_id: %d to fw\n", - __func__, cap_id); + "%s: failed to set cap[%d] %s to fw\n", + __func__, cap_id, cap_name(cap_id)); return rc; } @@ -199,8 +200,8 @@ static int msm_vidc_add_capid_to_list(struct msm_vidc_inst *inst, list_for_each_entry(curr_node, &inst->firmware.list, list) { if (curr_node->cap_id == cap_id) { i_vpr_l(inst, - "%s: cap %d already present in FW_LIST\n", - __func__, cap_id); + "%s: cap[%d] %s already present in FW_LIST\n", + __func__, cap_id, cap_name(cap_id)); return 0; } } @@ -294,8 +295,8 @@ static int msm_vidc_get_parent_value(struct msm_vidc_inst* inst, } } else { i_vpr_e(inst, - "%s: missing parent %d for cap %d, please correct database\n", - func, parent, cap); + "%s: missing parent %d for cap[%d] %s, fix database\n", + func, parent, cap, cap_name(cap)); rc = -EINVAL; } @@ -312,8 +313,8 @@ static int msm_vidc_adjust_hevc_qp(struct msm_vidc_inst *inst, if (!(inst->codec == MSM_VIDC_HEVC || inst->codec == MSM_VIDC_HEIC)) { i_vpr_e(inst, - "%s: incorrect entry in database for cap %d. fix the database\n", - __func__, cap_id); + "%s: incorrect cap[%d] %s entry in database, fix database\n", + __func__, cap_id, cap_name(cap_id)); return -EINVAL; } @@ -394,8 +395,8 @@ static int msm_vidc_adjust_dynamic_property(struct msm_vidc_inst *inst, */ if (!(capability->cap[cap_id].flags & CAP_FLAG_DYNAMIC_ALLOWED)) { i_vpr_e(inst, - "%s: dynamic setting of cap_id %d is not allowed\n", - __func__, cap_id); + "%s: dynamic setting of cap[%d] %s is not allowed\n", + __func__, cap_id, cap_name(cap_id)); msm_vidc_change_inst_state(inst, MSM_VIDC_ERROR, __func__); return -EINVAL; } @@ -406,8 +407,9 @@ static int msm_vidc_adjust_dynamic_property(struct msm_vidc_inst *inst, */ if (!ctrl && !capability->cap[cap_id].adjust) { i_vpr_e(inst, - "%s: child cap %d must have ajdust function\n", - __func__, capability->cap[cap_id].cap); + "%s: child cap[%d] %s must have ajdust function\n", + __func__, capability->cap[cap_id].cap, + cap_name(capability->cap[cap_id].cap)); return -EINVAL; } prev_value = capability->cap[cap_id].value; @@ -512,8 +514,8 @@ int msm_vidc_ctrl_init(struct msm_vidc_inst *inst) goto error; } i_vpr_h(inst, - "%s: cap idx %d, value %d min %d max %d step_or_mask %#x flags %#x v4l2_id %#x hfi_id %#x\n", - __func__, idx, + "%s: cap[%d] %24s, value %d min %d max %d step_or_mask %#x flags %#x v4l2_id %#x hfi_id %#x\n", + __func__, idx, cap_name(idx), capability->cap[idx].value, capability->cap[idx].min, capability->cap[idx].max, @@ -687,8 +689,8 @@ int msm_v4l2_op_s_ctrl(struct v4l2_ctrl *ctrl) if (inst->vb2q[OUTPUT_PORT].streaming && !(capability->cap[cap_id].flags & CAP_FLAG_DYNAMIC_ALLOWED)) { i_vpr_e(inst, - "%s: dynamic setting of cap_id %d is not allowed\n", - __func__, cap_id); + "%s: dynamic setting of cap[%d] %s is not allowed\n", + __func__, cap_id, cap_name(cap_id)); return -EBUSY; } @@ -1584,11 +1586,10 @@ int msm_vidc_set_header_mode(void *instance, if (hdr_metadata) hfi_value |= HFI_SEQ_HEADER_METADATA; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32_ENUM, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -1616,11 +1617,10 @@ int msm_vidc_set_deblock_mode(void *instance, alpha = inst->capabilities->cap[LF_ALPHA].value + lf_offset; hfi_value = (alpha << 16) | (beta << 8) | lf_mode; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_32_PACKED, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -1647,11 +1647,10 @@ int msm_vidc_set_constant_quality(void *instance, hfi_value = inst->capabilities->cap[cap_id].value; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -1678,11 +1677,10 @@ int msm_vidc_set_vbr_related_properties(void *instance, hfi_value = inst->capabilities->cap[cap_id].value; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -1710,11 +1708,10 @@ int msm_vidc_set_cbr_related_properties(void *instance, hfi_value = inst->capabilities->cap[cap_id].value; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -1731,16 +1728,18 @@ int msm_vidc_set_use_and_mark_ltr(void *instance, return -EINVAL; } - if (!inst->capabilities->cap[LTR_COUNT].value) + if (!inst->capabilities->cap[LTR_COUNT].value) { + i_vpr_h(inst, "%s: ltr count is 0, cap %s is not set\n", + __func__, cap_name(cap_id)); return 0; + } hfi_value = inst->capabilities->cap[cap_id].value; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -1772,8 +1771,12 @@ int msm_vidc_set_min_qp(void *instance, capability->cap[B_FRAME_MIN_QP].flags & CAP_FLAG_CLIENT_SET; client_qp_enable = i_qp_enable | p_qp_enable << 1 | b_qp_enable << 2; - if (!client_qp_enable) + if (!client_qp_enable) { + i_vpr_h(inst, + "%s: client did not set min qp, cap %s is not set\n", + __func__, cap_name(cap_id)); return 0; + } if (is_10bit_colorformat(capability->cap[PIX_FMTS].value)) offset = 12; @@ -1795,11 +1798,10 @@ int msm_vidc_set_min_qp(void *instance, hfi_value = i_frame_qp | p_frame_qp << 8 | b_frame_qp << 16 | client_qp_enable << 24; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_32_PACKED, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -1831,8 +1833,12 @@ int msm_vidc_set_max_qp(void *instance, capability->cap[B_FRAME_MIN_QP].flags & CAP_FLAG_CLIENT_SET; client_qp_enable = i_qp_enable | p_qp_enable << 1 | b_qp_enable << 2; - if (!client_qp_enable) + if (!client_qp_enable) { + i_vpr_h(inst, + "%s: client did not set max qp, cap %s is not set\n", + __func__, cap_name(cap_id)); return 0; + } if (is_10bit_colorformat(capability->cap[PIX_FMTS].value)) offset = 12; @@ -1854,11 +1860,10 @@ int msm_vidc_set_max_qp(void *instance, hfi_value = i_frame_qp | p_frame_qp << 8 | b_frame_qp << 16 | client_qp_enable << 24; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_32_PACKED, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -1898,8 +1903,12 @@ int msm_vidc_set_frame_qp(void *instance, } client_qp_enable = i_qp_enable | p_qp_enable << 1 | b_qp_enable << 2; - if (!client_qp_enable) + if (!client_qp_enable) { + i_vpr_h(inst, + "%s: client did not set frame qp, cap %s is not set\n", + __func__, cap_name(cap_id)); return 0; + } if (is_10bit_colorformat(capab->cap[PIX_FMTS].value)) offset = 12; @@ -1911,11 +1920,10 @@ int msm_vidc_set_frame_qp(void *instance, hfi_value = i_frame_qp | p_frame_qp << 8 | b_frame_qp << 16 | client_qp_enable << 24; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_32_PACKED, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -1939,11 +1947,10 @@ int msm_vidc_set_req_sync_frame(void *instance, else hfi_value = HFI_SYNC_FRAME_REQUEST_WITHOUT_SEQ_HDR; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32_ENUM, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -1969,11 +1976,10 @@ int msm_vidc_set_chroma_qp_index_offset(void *instance, chroma_qp = inst->capabilities->cap[cap_id].value + offset; hfi_value = chroma_qp_offset_mode | chroma_qp << 8 | chroma_qp << 16 ; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_32_PACKED, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -1994,7 +2000,7 @@ int msm_vidc_set_slice_count(void* instance, slice_mode = inst->capabilities->cap[SLICE_MODE].value; if (slice_mode == V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE) { - i_vpr_l(inst, "%s: slice mode is: %u, ignore setting to fw\n", + i_vpr_h(inst, "%s: slice mode is: %u, ignore setting to fw\n", __func__, slice_mode); return 0; } @@ -2005,11 +2011,11 @@ int msm_vidc_set_slice_count(void* instance, hfi_value = inst->capabilities->cap[SLICE_MAX_BYTES].value; set_cap_id = SLICE_MAX_BYTES; } - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); rc = msm_vidc_packetize_control(inst, set_cap_id, HFI_PAYLOAD_U32, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -2033,11 +2039,11 @@ int msm_vidc_set_nal_length(void* instance, if (rc) return -EINVAL; } - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32_ENUM, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -2077,9 +2083,6 @@ int msm_vidc_set_layer_count_and_type(void *instance, /* hfi baselayer starts from 1 */ hfi_layer_count = inst->capabilities->cap[ENH_LAYER_COUNT].value + 1; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_layer_count); - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32, &hfi_layer_count, sizeof(u32), __func__); if (rc) @@ -2111,11 +2114,11 @@ int msm_vidc_set_gop_size(void *instance, } hfi_value = inst->capabilities->cap[GOP_SIZE].value; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -2181,12 +2184,10 @@ int msm_vidc_set_bitrate(void *instance, set_total_bitrate: hfi_value = inst->capabilities->cap[BIT_RATE].value; - - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); - rc = msm_vidc_packetize_control(inst, BIT_RATE, HFI_PAYLOAD_U32, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; exit: return rc; } @@ -2205,11 +2206,10 @@ int msm_vidc_set_session_priority(void *instance, hfi_value = (inst->capabilities->cap[cap_id].value * 2) + inst->priority_level; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -2260,11 +2260,10 @@ int msm_vidc_set_q16(void *instance, hfi_value = inst->capabilities->cap[cap_id].value; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_Q16, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -2288,11 +2287,11 @@ int msm_vidc_set_u32(void *instance, } else { hfi_value = inst->capabilities->cap[cap_id].value; } - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -2313,11 +2312,10 @@ int msm_vidc_set_u32_enum(void *instance, if (rc) return -EINVAL; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32_ENUM, &hfi_value, sizeof(u32), __func__); + if (rc) + return rc; return rc; } @@ -2335,58 +2333,10 @@ int msm_vidc_set_s32(void *instance, } hfi_value = inst->capabilities->cap[cap_id].value; - i_vpr_h(inst, "set cap: name: %24s, value: %#10x, hfi: %#10x\n", cap_name(cap_id), - inst->capabilities->cap[cap_id].value, hfi_value); - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_S32, &hfi_value, sizeof(s32), __func__); - - return rc; -} - -/* Please ignore this function for now. TO DO*/ -int msm_vidc_set_array(void *instance, - enum msm_vidc_inst_capability_type cap_id) -{ - int rc = 0; - struct msm_vidc_inst_capability *capability; - struct msm_vidc_core *core; - - struct msm_vidc_inst *inst = (struct msm_vidc_inst *)instance; - - if (!inst || !inst->core || !inst->capabilities) { - d_vpr_e("%s: invalid params\n", __func__); - return -EINVAL; - } - - capability = inst->capabilities; - core = (struct msm_vidc_core *)inst->core; - - switch (cap_id) { - /* - * Needed if any control needs to be packed into a structure - * and sent for packetization. - * payload types may be: - * STRUCTURE, BLOB, STRING, PACKED, ARRAY, - * - case BITRATE_MODE: - i_vpr_h(inst, "%s: %d\n", __func__, hfi_value); - hfi_create_packet(inst->packet, inst->packet_size, - offset, - capability->cap[cap_id].hfi_id, - HFI_HOST_FLAGS_NONE, HFI_PAYLOAD_ENUM, - HFI_PORT_NONE, core->packet_id++, - &capability->cap[PROFILE].value, sizeof(u32)); - break; - } - */ - default: - i_vpr_e(inst, - "%s: Unknown cap id %d, cannot set to fw\n", - __func__, cap_id); - rc = -EINVAL; - break; - } + if (rc) + return rc; return rc; } diff --git a/driver/vidc/src/msm_vidc_driver.c b/driver/vidc/src/msm_vidc_driver.c index d09168a275..f751742ce0 100644 --- a/driver/vidc/src/msm_vidc_driver.c +++ b/driver/vidc/src/msm_vidc_driver.c @@ -116,11 +116,9 @@ static const struct msm_vidc_cap_name cap_name_arr[] = { {I_FRAME_MAX_QP, "I_FRAME_MAX_QP" }, {P_FRAME_MAX_QP, "P_FRAME_MAX_QP" }, {B_FRAME_MAX_QP, "B_FRAME_MAX_QP" }, - {HEVC_HIER_QP, "HEVC_HIER_QP" }, {I_FRAME_QP, "I_FRAME_QP" }, {P_FRAME_QP, "P_FRAME_QP" }, {B_FRAME_QP, "B_FRAME_QP" }, - {HIER_LAYER_QP, "HIER_LAYER_QP" }, {LAYER_TYPE, "LAYER_TYPE" }, {LAYER_ENABLE, "LAYER_ENABLE" }, {ENH_LAYER_COUNT, "ENH_LAYER_COUNT" },