[hal_jpegd]: Check output format before decoding

Change-Id: I035297695a4ff027814507e829adba1a767f61e8
Signed-off-by: Johnson Ding <johnson.ding@rock-chips.com>
This commit is contained in:
Johnson Ding
2021-08-19 16:42:26 +08:00
committed by Herman Chen
parent 516fd94a0b
commit 0faeb9413f
5 changed files with 32 additions and 8 deletions

View File

@@ -348,7 +348,11 @@ MPP_RET mpp_dec_proc_cfg(MppDecImpl *dec, MpiCmd cmd, void *param)
MPP_RET ret = MPP_OK; MPP_RET ret = MPP_OK;
mpp_parser_control(dec->parser, cmd, param); mpp_parser_control(dec->parser, cmd, param);
mpp_hal_control(dec->hal, cmd, param);
ret = mpp_hal_control(dec->hal, cmd, param);
if (ret)
goto RET;
switch (cmd) { switch (cmd) {
case MPP_DEC_SET_FRAME_INFO : { case MPP_DEC_SET_FRAME_INFO : {
@@ -423,6 +427,7 @@ MPP_RET mpp_dec_proc_cfg(MppDecImpl *dec, MpiCmd cmd, void *param)
} break; } break;
} }
RET:
return ret; return ret;
} }

View File

@@ -779,13 +779,17 @@ MPP_RET hal_jpegd_rkv_control(void *hal, MpiCmd cmd_type, void *param)
JpegHalCtx->output_fmt = *((MppFrameFormat *)param); JpegHalCtx->output_fmt = *((MppFrameFormat *)param);
JpegHalCtx->set_output_fmt_flag = 1; JpegHalCtx->set_output_fmt_flag = 1;
jpegd_dbg_hal("output_format:%d\n", JpegHalCtx->output_fmt); jpegd_dbg_hal("output_format:%d\n", JpegHalCtx->output_fmt);
if (!MPP_FRAME_FMT_IS_YUV(JpegHalCtx->output_fmt) && !MPP_FRAME_FMT_IS_RGB(JpegHalCtx->output_fmt)) {
mpp_err_f("output format %d is invalid.\n", JpegHalCtx->output_fmt);
ret = MPP_ERR_VALUE;
}
} break; } break;
//TODO support scale and tile output //TODO support scale and tile output
default : default :
ret = MPP_NOK;
break; break;
} }
jpegd_dbg_func("exit\n"); jpegd_dbg_func("exit ret %d\n", ret);
return ret; return ret;
} }

View File

@@ -1054,10 +1054,15 @@ MPP_RET hal_jpegd_vdpu1_control(void *hal, MpiCmd cmd_type, void *param)
JpegHalCtx->output_fmt = *((MppFrameFormat *)param); JpegHalCtx->output_fmt = *((MppFrameFormat *)param);
JpegHalCtx->set_output_fmt_flag = 1; JpegHalCtx->set_output_fmt_flag = 1;
jpegd_dbg_hal("output_format:%d\n", JpegHalCtx->output_fmt); jpegd_dbg_hal("output_format:%d\n", JpegHalCtx->output_fmt);
if (!MPP_FRAME_FMT_IS_YUV(JpegHalCtx->output_fmt) && !MPP_FRAME_FMT_IS_RGB(JpegHalCtx->output_fmt)) {
mpp_err_f("output format %d is invalid.\n", JpegHalCtx->output_fmt);
ret = MPP_ERR_VALUE;
}
} break; } break;
default : default :
ret = MPP_NOK; break;
} }
jpegd_dbg_func("exit\n"); jpegd_dbg_func("exit ret %d\n", ret);
return ret; return ret;
} }

View File

@@ -1034,11 +1034,16 @@ MPP_RET hal_jpegd_vdpu2_control(void *hal, MpiCmd cmd_type,
JpegHalCtx->output_fmt = *((MppFrameFormat *)param); JpegHalCtx->output_fmt = *((MppFrameFormat *)param);
JpegHalCtx->set_output_fmt_flag = 1; JpegHalCtx->set_output_fmt_flag = 1;
jpegd_dbg_hal("output_format:%d\n", JpegHalCtx->output_fmt); jpegd_dbg_hal("output_format:%d\n", JpegHalCtx->output_fmt);
if (!MPP_FRAME_FMT_IS_YUV(JpegHalCtx->output_fmt) && !MPP_FRAME_FMT_IS_RGB(JpegHalCtx->output_fmt)) {
mpp_err_f("output format %d is invalid.\n", JpegHalCtx->output_fmt);
ret = MPP_ERR_VALUE;
}
} break; } break;
default : default :
ret = MPP_NOK; break;
} }
jpegd_dbg_func("exit\n"); jpegd_dbg_func("exit ret %d\n", ret);
return ret; return ret;
} }

View File

@@ -664,8 +664,13 @@ int dec_decode(MpiDecTestCmd *cmd)
} }
} else { } else {
/* NOTE: change output format before jpeg decoding */ /* NOTE: change output format before jpeg decoding */
if (cmd->format < MPP_FMT_BUTT) if (MPP_FRAME_FMT_IS_YUV(cmd->format) || MPP_FRAME_FMT_IS_RGB(cmd->format)) {
ret = mpi->control(ctx, MPP_DEC_SET_OUTPUT_FORMAT, &cmd->format); ret = mpi->control(ctx, MPP_DEC_SET_OUTPUT_FORMAT, &cmd->format);
if (ret) {
mpp_err("Failed to set output format %d\n", cmd->format);
goto MPP_TEST_OUT;
}
}
while (!data.eos) { while (!data.eos) {
dec_advanced(&data); dec_advanced(&data);