From 9036159c768dbae3fa0a1de7bdb5c7e90d2c72bf Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Mon, 30 Aug 2021 16:36:32 +0800 Subject: [PATCH] [jpegd_vdpu2]: Fix error on first jpegd vdpu2 task The first jpegd vdpu2 will send codec info with normal register access operation. But some old kernel will not support the codec info cmd 403. Then kernel will discard the whole ioctl operation and let the first decoding task failed. So we separate codec info cmd from the normal register access cmd. Change-Id: Ic364c90367a0493f132dc78e76fae3d4fd6011ca Signed-off-by: Herman Chen --- mpp/hal/vpu/jpegd/hal_jpegd_vdpu2.c | 2 +- osal/driver/mpp_service.c | 31 +++++++++++++++-------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/mpp/hal/vpu/jpegd/hal_jpegd_vdpu2.c b/mpp/hal/vpu/jpegd/hal_jpegd_vdpu2.c index 8162be04..898e9c21 100644 --- a/mpp/hal/vpu/jpegd/hal_jpegd_vdpu2.c +++ b/mpp/hal/vpu/jpegd/hal_jpegd_vdpu2.c @@ -587,7 +587,7 @@ static MPP_RET jpegd_setup_pp(JpegdHalCtx *ctx, JpegdSyntax *syntax) reg->reg41.sw_pp_pipeline_e = ctx->pp_info.pp_enable; - mpp_log_f("pp_enable %d\n", ctx->pp_info.pp_enable); + jpegd_dbg_hal("pp_enable %d\n", ctx->pp_info.pp_enable); if (ctx->pp_info.pp_enable) { reg->reg41.sw_pp_pipeline_e = 1; diff --git a/osal/driver/mpp_service.c b/osal/driver/mpp_service.c index b68c88a4..e6c76153 100644 --- a/osal/driver/mpp_service.c +++ b/osal/driver/mpp_service.c @@ -387,6 +387,22 @@ MPP_RET mpp_service_cmd_send(void *ctx) return MPP_ERR_VALUE; } + if (p->info_count) { + if (p->support_set_info) { + MppReqV1 mpp_req; + + mpp_req.cmd = MPP_CMD_SEND_CODEC_INFO; + mpp_req.flag = MPP_FLAGS_LAST_MSG; + mpp_req.size = p->info_count * sizeof(p->info[0]); + mpp_req.offset = 0; + mpp_req.data_ptr = REQ_DATA_PTR(p->info); + ret = mpp_service_ioctl_request(p->server, &mpp_req); + if (ret) + p->support_set_info = 0; + } + p->info_count = 0; + } + /* set fd trans info if needed */ if (p->reg_offset_count) { MppReqV1 *mpp_req = &p->reqs[p->req_cnt]; @@ -411,21 +427,6 @@ MPP_RET mpp_service_cmd_send(void *ctx) p->req_cnt++; } - if (p->info_count) { - if (p->support_set_info) { - MppReqV1 *mpp_req = &p->reqs[p->req_cnt];; - - mpp_req->cmd = MPP_CMD_SEND_CODEC_INFO; - mpp_req->flag = 0; - mpp_req->size = p->info_count * sizeof(p->info[0]); - mpp_req->offset = 0; - mpp_req->data_ptr = REQ_DATA_PTR(p->info); - - p->req_cnt++; - } - p->info_count = 0; - } - /* setup flag for multi message request */ if (p->req_cnt > 1) { RK_S32 i;