diff --git a/inc/rk_venc_cmd.h b/inc/rk_venc_cmd.h index 4918037d..a06dba72 100644 --- a/inc/rk_venc_cmd.h +++ b/inc/rk_venc_cmd.h @@ -911,6 +911,7 @@ typedef struct MppEncJpegCfg_t { */ typedef enum MppEncVP8CfgChange_e { MPP_ENC_VP8_CFG_CHANGE_QP = (1 << 0), + MPP_ENC_VP8_CFG_CHANGE_DIS_IVF = (1 << 1), MPP_ENC_VP8_CFG_CHANGE_ALL = (0xFFFFFFFF), } MppEncVP8CfgChange; @@ -924,6 +925,7 @@ typedef struct MppEncVp8Cfg_t { RK_S32 qp_min; RK_S32 qp_min_i; RK_S32 qp_max_step; + RK_S32 disable_ivf; } MppEncVp8Cfg; /** diff --git a/mpp/base/mpp_enc_cfg.cpp b/mpp/base/mpp_enc_cfg.cpp index d7efd247..3e766bb9 100644 --- a/mpp/base/mpp_enc_cfg.cpp +++ b/mpp/base/mpp_enc_cfg.cpp @@ -234,6 +234,7 @@ static const char *cfg_func_names[] = { ENTRY(vp8, qp_max_i, S32, RK_S32, MPP_ENC_VP8_CFG_CHANGE_QP, codec.vp8, qp_max_i) \ ENTRY(vp8, qp_min_i, S32, RK_S32, MPP_ENC_VP8_CFG_CHANGE_QP, codec.vp8, qp_min_i) \ ENTRY(vp8, qp_step, S32, RK_S32, MPP_ENC_VP8_CFG_CHANGE_QP, codec.vp8, qp_max_step) \ + ENTRY(vp8, disable_ivf, S32, RK_S32, MPP_ENC_VP8_CFG_CHANGE_DIS_IVF, codec.vp8, disable_ivf) \ /* jpeg config */ \ ENTRY(jpeg, quant, S32, RK_S32, MPP_ENC_JPEG_CFG_CHANGE_QP, codec.jpeg, quant) \ ENTRY(jpeg, qtable_y, PTR, RK_U8*, MPP_ENC_JPEG_CFG_CHANGE_QTABLE, codec.jpeg, qtable_y) \ @@ -258,7 +259,7 @@ RK_S32 const_strlen(const char* str) return *str ? 1 + const_strlen(str + 1) : 0; } -static RK_S32 node_len = ENTRY_TABLE(EXPAND_AS_STRLEN) - 62; +static RK_S32 node_len = ENTRY_TABLE(EXPAND_AS_STRLEN) - 55; class MppEncCfgService { diff --git a/mpp/codec/enc/vp8/vp8e_api_v2.c b/mpp/codec/enc/vp8/vp8e_api_v2.c index 281b06e1..a1388e8f 100644 --- a/mpp/codec/enc/vp8/vp8e_api_v2.c +++ b/mpp/codec/enc/vp8/vp8e_api_v2.c @@ -100,7 +100,7 @@ static MPP_RET vp8e_init(void *ctx, EncImplCfg *ctrl_cfg) rc_cfg->fps_out_num = 30; rc_cfg->fps_out_denorm = 1; rc_cfg->gop = 60; - rc_cfg->max_reenc_times = 1; + rc_cfg->max_reenc_times = 0; p->rc = mpp_calloc(Vp8eRc, 1); memset(p->rc, 0, sizeof(Vp8eRc)); @@ -175,8 +175,8 @@ static MPP_RET vp8e_proc_prep_cfg(MppEncPrepCfg *dst, MppEncPrepCfg *src) dst->format = src->format; } dst->change |= src->change; - vp8e_dbg_cfg("width %d height %d ver_srtride %d format 0x%x\n", - dst->width, dst->height, dst->ver_stride, dst->hor_stride, dst->format); + vp8e_dbg_cfg("width %d height %d hor_stride %d ver_srtride %d format 0x%x\n", + dst->width, dst->height, dst->hor_stride, dst->ver_stride, dst->format); } return ret; } @@ -284,8 +284,11 @@ static MPP_RET vp8e_proc_vp8_cfg(MppEncVp8Cfg *dst, MppEncVp8Cfg *src) dst->qp_max_i = src->qp_max_i; dst->qp_min_i = src->qp_min_i; } - vp8e_dbg_cfg("rc cfg qp_init %d qp_max %d qp_min %d qp_max_i %d qp_min_i %d\n", - dst->qp_init, dst->qp_max, dst->qp_min, dst->qp_max_i, dst->qp_min_i); + if (change & MPP_ENC_VP8_CFG_CHANGE_DIS_IVF) { + dst->disable_ivf = src->disable_ivf; + } + vp8e_dbg_cfg("rc cfg qp_init %d qp_max %d qp_min %d qp_max_i %d qp_min_i %d, disable_ivf %d\n", + dst->qp_init, dst->qp_max, dst->qp_min, dst->qp_max_i, dst->qp_min_i, dst->disable_ivf); dst->change |= src->change; return MPP_OK; } diff --git a/mpp/hal/vpu/vp8e/hal_vp8e_base.c b/mpp/hal/vpu/vp8e/hal_vp8e_base.c index a3eb8b9e..bd037c94 100644 --- a/mpp/hal/vpu/vp8e/hal_vp8e_base.c +++ b/mpp/hal/vpu/vp8e/hal_vp8e_base.c @@ -1589,19 +1589,22 @@ MPP_RET hal_vp8e_update_buffers(void *hal, HalEncTask *task) { HalEncTask *enc_task = task; RK_U8 *p_out = mpp_buffer_get_ptr(enc_task->output); + RK_S32 disable_ivf = ctx->cfg->codec.vp8.disable_ivf; - if (ctx->frame_cnt == 0) { - write_ivf_header(hal, p_out); + if (!disable_ivf) { + if (ctx->frame_cnt == 0) { + write_ivf_header(hal, p_out); - p_out += IVF_HDR_BYTES; - enc_task->length += IVF_HDR_BYTES; - } + p_out += IVF_HDR_BYTES; + enc_task->length += IVF_HDR_BYTES; + } - if (ctx->frame_size) { - write_ivf_frame(ctx, p_out); + if (ctx->frame_size) { + write_ivf_frame(ctx, p_out); - p_out += IVF_FRM_BYTES; - enc_task->length += IVF_FRM_BYTES; + p_out += IVF_FRM_BYTES; + enc_task->length += IVF_FRM_BYTES; + } } memcpy(p_out, ctx->p_out_buf[0], ctx->stream_size[0]);