mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-04 16:52:40 +08:00
[enc_utils]: Add tsvc demo (control by gop_mode)
Change-Id: I034d631b3d6c473b82d12e3434860c7f8e9f9318 Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
@@ -419,14 +419,14 @@ MPP_RET test_mpp_setup_legacy(MpiEncTestData *p)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RK_U32 gop_mode = 0;
|
RK_U32 gop_mode = p->gop_mode;
|
||||||
|
|
||||||
mpp_env_get_u32("gop_mode", &gop_mode, 0);
|
mpp_env_get_u32("gop_mode", &gop_mode, gop_mode);
|
||||||
if (p->gop_mode || gop_mode) {
|
if (gop_mode) {
|
||||||
MppEncRefCfg ref;
|
MppEncRefCfg ref;
|
||||||
|
|
||||||
mpp_enc_ref_cfg_init(&ref);
|
mpp_enc_ref_cfg_init(&ref);
|
||||||
mpi_enc_gen_ref_cfg(ref);
|
mpi_enc_gen_ref_cfg(ref, gop_mode);
|
||||||
ret = mpi->control(ctx, MPP_ENC_SET_REF_CFG, ref);
|
ret = mpi->control(ctx, MPP_ENC_SET_REF_CFG, ref);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
mpp_err("mpi control enc set ref cfg failed ret %d\n", ret);
|
mpp_err("mpi control enc set ref cfg failed ret %d\n", ret);
|
||||||
@@ -604,14 +604,14 @@ MPP_RET test_mpp_enc_cfg_setup(MpiEncTestData *p)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RK_U32 gop_mode = 0;
|
RK_U32 gop_mode = p->gop_mode;
|
||||||
|
|
||||||
mpp_env_get_u32("gop_mode", &gop_mode, 0);
|
mpp_env_get_u32("gop_mode", &gop_mode, gop_mode);
|
||||||
if (p->gop_mode || gop_mode) {
|
if (gop_mode) {
|
||||||
MppEncRefCfg ref;
|
MppEncRefCfg ref;
|
||||||
|
|
||||||
mpp_enc_ref_cfg_init(&ref);
|
mpp_enc_ref_cfg_init(&ref);
|
||||||
mpi_enc_gen_ref_cfg(ref);
|
mpi_enc_gen_ref_cfg(ref, gop_mode);
|
||||||
ret = mpi->control(ctx, MPP_ENC_SET_REF_CFG, ref);
|
ret = mpi->control(ctx, MPP_ENC_SET_REF_CFG, ref);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
mpp_err("mpi control enc set ref cfg failed ret %d\n", ret);
|
mpp_err("mpi control enc set ref cfg failed ret %d\n", ret);
|
||||||
|
@@ -319,18 +319,28 @@ MPP_RET mpi_enc_test_cmd_put(MpiEncTestArgs* cmd)
|
|||||||
return MPP_OK;
|
return MPP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
MPP_RET mpi_enc_gen_ref_cfg(MppEncRefCfg ref)
|
MPP_RET mpi_enc_gen_ref_cfg(MppEncRefCfg ref, RK_S32 gop_mode)
|
||||||
{
|
{
|
||||||
MppEncRefLtFrmCfg lt_ref[4];
|
MppEncRefLtFrmCfg lt_ref[4];
|
||||||
MppEncRefStFrmCfg st_ref[16];
|
MppEncRefStFrmCfg st_ref[16];
|
||||||
RK_S32 lt_cnt = 1;
|
RK_S32 lt_cnt = 0;
|
||||||
RK_S32 st_cnt = 9;
|
RK_S32 st_cnt = 0;
|
||||||
MPP_RET ret = MPP_OK;
|
MPP_RET ret = MPP_OK;
|
||||||
|
|
||||||
memset(<_ref, 0, sizeof(lt_ref));
|
memset(<_ref, 0, sizeof(lt_ref));
|
||||||
memset(&st_ref, 0, sizeof(st_ref));
|
memset(&st_ref, 0, sizeof(st_ref));
|
||||||
|
|
||||||
ret = mpp_enc_ref_cfg_set_cfg_cnt(ref, lt_cnt, st_cnt);
|
switch (gop_mode) {
|
||||||
|
case 3 : {
|
||||||
|
// tsvc4
|
||||||
|
// /-> P1 /-> P3 /-> P5 /-> P7
|
||||||
|
// / / / /
|
||||||
|
// //--------> P2 //--------> P6
|
||||||
|
// // //
|
||||||
|
// ///---------------------> P4
|
||||||
|
// ///
|
||||||
|
// P0 ------------------------------------------------> P8
|
||||||
|
lt_cnt = 1;
|
||||||
|
|
||||||
/* set 8 frame lt-ref gap */
|
/* set 8 frame lt-ref gap */
|
||||||
lt_ref[0].lt_idx = 0;
|
lt_ref[0].lt_idx = 0;
|
||||||
@@ -339,8 +349,7 @@ MPP_RET mpi_enc_gen_ref_cfg(MppEncRefCfg ref)
|
|||||||
lt_ref[0].lt_gap = 8;
|
lt_ref[0].lt_gap = 8;
|
||||||
lt_ref[0].lt_delay = 0;
|
lt_ref[0].lt_delay = 0;
|
||||||
|
|
||||||
ret = mpp_enc_ref_cfg_add_lt_cfg(ref, 1, lt_ref);
|
st_cnt = 9;
|
||||||
|
|
||||||
/* set tsvc4 st-ref struct */
|
/* set tsvc4 st-ref struct */
|
||||||
/* st 0 layer 0 - ref */
|
/* st 0 layer 0 - ref */
|
||||||
st_ref[0].is_non_ref = 0;
|
st_ref[0].is_non_ref = 0;
|
||||||
@@ -396,11 +405,94 @@ MPP_RET mpi_enc_gen_ref_cfg(MppEncRefCfg ref)
|
|||||||
st_ref[8].ref_mode = REF_TO_TEMPORAL_LAYER;
|
st_ref[8].ref_mode = REF_TO_TEMPORAL_LAYER;
|
||||||
st_ref[8].ref_arg = 0;
|
st_ref[8].ref_arg = 0;
|
||||||
st_ref[8].repeat = 0;
|
st_ref[8].repeat = 0;
|
||||||
|
} break;
|
||||||
|
case 2 : {
|
||||||
|
// tsvc3
|
||||||
|
// /-> P1 /-> P3
|
||||||
|
// / /
|
||||||
|
// //--------> P2
|
||||||
|
// //
|
||||||
|
// P0/---------------------> P4
|
||||||
|
lt_cnt = 0;
|
||||||
|
|
||||||
ret = mpp_enc_ref_cfg_add_st_cfg(ref, 9, st_ref);
|
st_cnt = 5;
|
||||||
|
/* set tsvc4 st-ref struct */
|
||||||
|
/* st 0 layer 0 - ref */
|
||||||
|
st_ref[0].is_non_ref = 0;
|
||||||
|
st_ref[0].temporal_id = 0;
|
||||||
|
st_ref[0].ref_mode = REF_TO_TEMPORAL_LAYER;
|
||||||
|
st_ref[0].ref_arg = 0;
|
||||||
|
st_ref[0].repeat = 0;
|
||||||
|
/* st 1 layer 2 - non-ref */
|
||||||
|
st_ref[1].is_non_ref = 1;
|
||||||
|
st_ref[1].temporal_id = 2;
|
||||||
|
st_ref[1].ref_mode = REF_TO_PREV_REF_FRM;
|
||||||
|
st_ref[1].ref_arg = 0;
|
||||||
|
st_ref[1].repeat = 0;
|
||||||
|
/* st 2 layer 1 - ref */
|
||||||
|
st_ref[2].is_non_ref = 0;
|
||||||
|
st_ref[2].temporal_id = 1;
|
||||||
|
st_ref[2].ref_mode = REF_TO_PREV_REF_FRM;
|
||||||
|
st_ref[2].ref_arg = 0;
|
||||||
|
st_ref[2].repeat = 0;
|
||||||
|
/* st 3 layer 2 - non-ref */
|
||||||
|
st_ref[3].is_non_ref = 1;
|
||||||
|
st_ref[3].temporal_id = 2;
|
||||||
|
st_ref[3].ref_mode = REF_TO_PREV_REF_FRM;
|
||||||
|
st_ref[3].ref_arg = 0;
|
||||||
|
st_ref[3].repeat = 0;
|
||||||
|
/* st 4 layer 0 - ref */
|
||||||
|
st_ref[4].is_non_ref = 0;
|
||||||
|
st_ref[4].temporal_id = 0;
|
||||||
|
st_ref[4].ref_mode = REF_TO_TEMPORAL_LAYER;
|
||||||
|
st_ref[4].ref_arg = 0;
|
||||||
|
st_ref[4].repeat = 0;
|
||||||
|
} break;
|
||||||
|
case 1 : {
|
||||||
|
// tsvc2
|
||||||
|
// /-> P1
|
||||||
|
// /
|
||||||
|
// P0--------> P2
|
||||||
|
lt_cnt = 0;
|
||||||
|
|
||||||
|
st_cnt = 3;
|
||||||
|
/* set tsvc4 st-ref struct */
|
||||||
|
/* st 0 layer 0 - ref */
|
||||||
|
st_ref[0].is_non_ref = 0;
|
||||||
|
st_ref[0].temporal_id = 0;
|
||||||
|
st_ref[0].ref_mode = REF_TO_TEMPORAL_LAYER;
|
||||||
|
st_ref[0].ref_arg = 0;
|
||||||
|
st_ref[0].repeat = 0;
|
||||||
|
/* st 1 layer 2 - non-ref */
|
||||||
|
st_ref[1].is_non_ref = 1;
|
||||||
|
st_ref[1].temporal_id = 1;
|
||||||
|
st_ref[1].ref_mode = REF_TO_PREV_REF_FRM;
|
||||||
|
st_ref[1].ref_arg = 0;
|
||||||
|
st_ref[1].repeat = 0;
|
||||||
|
/* st 2 layer 1 - ref */
|
||||||
|
st_ref[2].is_non_ref = 0;
|
||||||
|
st_ref[2].temporal_id = 0;
|
||||||
|
st_ref[2].ref_mode = REF_TO_PREV_REF_FRM;
|
||||||
|
st_ref[2].ref_arg = 0;
|
||||||
|
st_ref[2].repeat = 0;
|
||||||
|
} break;
|
||||||
|
default : {
|
||||||
|
mpp_err_f("unsupport gop mode %d\n", gop_mode);
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lt_cnt || st_cnt) {
|
||||||
|
ret = mpp_enc_ref_cfg_set_cfg_cnt(ref, lt_cnt, st_cnt);
|
||||||
|
|
||||||
|
if (lt_cnt)
|
||||||
|
ret = mpp_enc_ref_cfg_add_lt_cfg(ref, lt_cnt, lt_ref);
|
||||||
|
|
||||||
|
if (st_cnt)
|
||||||
|
ret = mpp_enc_ref_cfg_add_st_cfg(ref, st_cnt, st_ref);
|
||||||
|
|
||||||
/* check and get dpb size */
|
/* check and get dpb size */
|
||||||
ret = mpp_enc_ref_cfg_check(ref);
|
ret = mpp_enc_ref_cfg_check(ref);
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@@ -55,7 +55,7 @@ extern "C" {
|
|||||||
|
|
||||||
RK_S32 mpi_enc_width_default_stride(RK_S32 width, MppFrameFormat fmt);
|
RK_S32 mpi_enc_width_default_stride(RK_S32 width, MppFrameFormat fmt);
|
||||||
|
|
||||||
MPP_RET mpi_enc_gen_ref_cfg(MppEncRefCfg ref);
|
MPP_RET mpi_enc_gen_ref_cfg(MppEncRefCfg ref, RK_S32 gop_mode);
|
||||||
MPP_RET mpi_enc_gen_osd_data(MppEncOSDData *osd_data, MppBuffer osd_buf, RK_U32 frame_cnt);
|
MPP_RET mpi_enc_gen_osd_data(MppEncOSDData *osd_data, MppBuffer osd_buf, RK_U32 frame_cnt);
|
||||||
MPP_RET mpi_enc_gen_osd_plt(MppEncOSDPlt *osd_plt, RK_U32 *table);
|
MPP_RET mpi_enc_gen_osd_plt(MppEncOSDPlt *osd_plt, RK_U32 *table);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user