video: driver: refine queue work functionality

[1] remove unwanted switch cases to reduce code complexity
[2] refine queue_response_work functionality.

Change-Id: I91aabb2eb4c64caea09a26895358544972a7d427
Signed-off-by: Govindaraj Rajagopal <grajagop@codeaurora.org>
这个提交包含在:
Govindaraj Rajagopal
2021-03-08 21:49:09 +05:30
父节点 74f2907a9f
当前提交 6d97dd3795
修改 8 个文件,包含 752 行新增790 行删除

查看文件

@@ -455,91 +455,69 @@ static u32 msm_vidc_encoder_vpss_size_iris2(struct msm_vidc_inst* inst)
return size;
}
struct msm_vidc_buf_type_handle {
enum msm_vidc_buffer_type type;
u32 (*handle)(struct msm_vidc_inst *inst);
};
int msm_buffer_size_iris2(struct msm_vidc_inst *inst,
enum msm_vidc_buffer_type buffer_type)
{
int size = 0;
int i, size = 0;
u32 buf_type_handle_size = 0;
const struct msm_vidc_buf_type_handle *buf_type_handle_arr = NULL;
static const struct msm_vidc_buf_type_handle dec_buf_type_handle[] = {
{MSM_VIDC_BUF_INPUT, msm_vidc_decoder_input_size },
{MSM_VIDC_BUF_OUTPUT, msm_vidc_decoder_output_size },
{MSM_VIDC_BUF_INPUT_META, msm_vidc_decoder_input_meta_size },
{MSM_VIDC_BUF_OUTPUT_META, msm_vidc_decoder_output_meta_size },
{MSM_VIDC_BUF_BIN, msm_vidc_decoder_bin_size_iris2 },
{MSM_VIDC_BUF_COMV, msm_vidc_decoder_comv_size_iris2 },
{MSM_VIDC_BUF_NON_COMV, msm_vidc_decoder_non_comv_size_iris2 },
{MSM_VIDC_BUF_LINE, msm_vidc_decoder_line_size_iris2 },
{MSM_VIDC_BUF_PERSIST, msm_vidc_decoder_persist_size_iris2 },
{MSM_VIDC_BUF_DPB, msm_vidc_decoder_dpb_size_iris2 },
};
static const struct msm_vidc_buf_type_handle enc_buf_type_handle[] = {
{MSM_VIDC_BUF_INPUT, msm_vidc_encoder_input_size },
{MSM_VIDC_BUF_OUTPUT, msm_vidc_encoder_output_size },
{MSM_VIDC_BUF_INPUT_META, msm_vidc_encoder_input_meta_size },
{MSM_VIDC_BUF_OUTPUT_META, msm_vidc_encoder_output_meta_size },
{MSM_VIDC_BUF_BIN, msm_vidc_encoder_bin_size_iris2 },
{MSM_VIDC_BUF_COMV, msm_vidc_encoder_comv_size_iris2 },
{MSM_VIDC_BUF_NON_COMV, msm_vidc_encoder_non_comv_size_iris2 },
{MSM_VIDC_BUF_LINE, msm_vidc_encoder_line_size_iris2 },
{MSM_VIDC_BUF_DPB, msm_vidc_encoder_dpb_size_iris2 },
{MSM_VIDC_BUF_ARP, msm_vidc_encoder_arp_size_iris2 },
{MSM_VIDC_BUF_VPSS, msm_vidc_encoder_vpss_size_iris2 },
};
if (!inst) {
d_vpr_e("%s: invalid params\n", __func__);
if (is_decode_session(inst)) {
buf_type_handle_size = ARRAY_SIZE(dec_buf_type_handle);
buf_type_handle_arr = dec_buf_type_handle;
} else if (is_encode_session(inst)) {
buf_type_handle_size = ARRAY_SIZE(enc_buf_type_handle);
buf_type_handle_arr = enc_buf_type_handle;
}
/* handle invalid session */
if (!buf_type_handle_arr || !buf_type_handle_size) {
i_vpr_e(inst, "%s: invalid session %d\n", __func__, inst->domain);
return size;
}
if (is_decode_session(inst)) {
switch (buffer_type) {
case MSM_VIDC_BUF_INPUT:
size = msm_vidc_decoder_input_size(inst);
break;
case MSM_VIDC_BUF_OUTPUT:
size = msm_vidc_decoder_output_size(inst);
break;
case MSM_VIDC_BUF_INPUT_META:
size = msm_vidc_decoder_input_meta_size(inst);
break;
case MSM_VIDC_BUF_OUTPUT_META:
size = msm_vidc_decoder_output_meta_size(inst);
break;
case MSM_VIDC_BUF_BIN:
size = msm_vidc_decoder_bin_size_iris2(inst);
break;
case MSM_VIDC_BUF_COMV:
size = msm_vidc_decoder_comv_size_iris2(inst);
break;
case MSM_VIDC_BUF_NON_COMV:
size = msm_vidc_decoder_non_comv_size_iris2(inst);
break;
case MSM_VIDC_BUF_LINE:
size = msm_vidc_decoder_line_size_iris2(inst);
break;
case MSM_VIDC_BUF_PERSIST:
size = msm_vidc_decoder_persist_size_iris2(inst);
break;
case MSM_VIDC_BUF_DPB:
size = msm_vidc_decoder_dpb_size_iris2(inst);
break;
default:
break;
}
} else if (is_encode_session(inst)) {
switch (buffer_type) {
case MSM_VIDC_BUF_INPUT:
size = msm_vidc_encoder_input_size(inst);
break;
case MSM_VIDC_BUF_OUTPUT:
size = msm_vidc_encoder_output_size(inst);
break;
case MSM_VIDC_BUF_INPUT_META:
size = msm_vidc_encoder_input_meta_size(inst);
break;
case MSM_VIDC_BUF_OUTPUT_META:
size = msm_vidc_encoder_output_meta_size(inst);
break;
case MSM_VIDC_BUF_BIN:
size = msm_vidc_encoder_bin_size_iris2(inst);
break;
case MSM_VIDC_BUF_COMV:
size = msm_vidc_encoder_comv_size_iris2(inst);
break;
case MSM_VIDC_BUF_NON_COMV:
size = msm_vidc_encoder_non_comv_size_iris2(inst);
break;
case MSM_VIDC_BUF_LINE:
size = msm_vidc_encoder_line_size_iris2(inst);
break;
case MSM_VIDC_BUF_DPB:
size = msm_vidc_encoder_dpb_size_iris2(inst);
break;
case MSM_VIDC_BUF_ARP:
size = msm_vidc_encoder_arp_size_iris2(inst);
break;
case MSM_VIDC_BUF_VPSS:
size = msm_vidc_encoder_vpss_size_iris2(inst);
break;
default:
/* fetch buffer size */
for (i = 0; i < buf_type_handle_size; i++) {
if (buf_type_handle_arr[i].type == buffer_type) {
size = buf_type_handle_arr[i].handle(inst);
break;
}
}
/* handle unknown buffer type */
if (i == buf_type_handle_size)
i_vpr_e(inst, "%s: unknown buffer type %#x\n", __func__, buffer_type);
return size;
}