mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 09:06:50 +08:00
[vp8e]: Fix vp8e reencode and ivf problems
1. Not do reencode in vp8 enc 2. Add api to control whether need to add ivf header (default: have ivf header) Signed-off-by: yandong.lin <yandong.lin@rock-chips.com> Change-Id: I59a3a7193abead6c73e6e1eed593a115add77888
This commit is contained in:
@@ -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;
|
||||
|
||||
/**
|
||||
|
@@ -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
|
||||
{
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -1589,7 +1589,9 @@ 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 (!disable_ivf) {
|
||||
if (ctx->frame_cnt == 0) {
|
||||
write_ivf_header(hal, p_out);
|
||||
|
||||
@@ -1603,6 +1605,7 @@ MPP_RET hal_vp8e_update_buffers(void *hal, HalEncTask *task)
|
||||
p_out += IVF_FRM_BYTES;
|
||||
enc_task->length += IVF_FRM_BYTES;
|
||||
}
|
||||
}
|
||||
|
||||
memcpy(p_out, ctx->p_out_buf[0], ctx->stream_size[0]);
|
||||
p_out += ctx->stream_size[0];
|
||||
|
Reference in New Issue
Block a user