From c360c70be2cf10d710556b81b0ee85f9a5f54798 Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Mon, 12 Jun 2017 16:04:24 +0800 Subject: [PATCH] [h264e]: Add parameter check for H.264 encoder Check rc mode, quality and bps parameter. NOTE: current H.264 bitrate only accept range from 10K to 100M. Change-Id: I7cacf2e3f7093bc55e1f5686f06b0efdbf865a4d Signed-off-by: Herman Chen --- mpp/codec/enc/h264/src/h264e_api.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/mpp/codec/enc/h264/src/h264e_api.c b/mpp/codec/enc/h264/src/h264e_api.c index 38b38a08..e557816b 100644 --- a/mpp/codec/enc/h264/src/h264e_api.c +++ b/mpp/codec/enc/h264/src/h264e_api.c @@ -213,9 +213,32 @@ MPP_RET h264e_config(void *ctx, RK_S32 cmd, void *param) p->idr_request++; } break; case MPP_ENC_SET_RC_CFG : { - mpp_log_f("MPP_ENC_SET_RC_CFG bps %d [%d : %d]\n", p->set->rc.bps_target, - p->set->rc.bps_min, p->set->rc.bps_max); - p->rc_ready = 1; + MppEncRcCfg *rc = &p->set->rc; + + if (rc->rc_mode >= MPP_ENC_RC_MODE_BUTT) { + mpp_err("invalid rc mode %d should be RC_MODE_VBR or RC_MODE_CBR\n", + rc->rc_mode); + ret = MPP_ERR_VALUE; + } + if (rc->quality >= MPP_ENC_RC_QUALITY_BUTT) { + mpp_err("invalid quality %d should be from QUALITY_WORST to QUALITY_BEST\n", + rc->quality); + ret = MPP_ERR_VALUE; + } + if ((rc->bps_target >= 100 * SZ_1M || rc->bps_target <= 1 * SZ_1K) || + (rc->bps_max >= 100 * SZ_1M || rc->bps_max <= 1 * SZ_1K) || + (rc->bps_min >= 100 * SZ_1M || rc->bps_min <= 1 * SZ_1K)) { + mpp_err("invalid bit per second %d [%d:%d] out of range 1K~100M\n", + rc->bps_target, rc->bps_min, rc->bps_max); + ret = MPP_ERR_VALUE; + } + + if (!ret) { + mpp_log_f("MPP_ENC_SET_RC_CFG bps %d [%d : %d]\n", + rc->bps_target, rc->bps_min, rc->bps_max); + p->rc_ready = 1; + } else + mpp_err_f("failed to accept new rc config\n"); } break; default: mpp_err("No correspond cmd found, and can not config!");