mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 01:02:39 +08:00
[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:

committed by
Herman Chen

parent
516fd94a0b
commit
0faeb9413f
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user