mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 09:06:50 +08:00
[h264e_controller]: add set idr frame interface
Change-Id: I3fdaccd95b6570b2994d7a8ddb1db5d4cc066600 Signed-off-by: Lin Kesheng <lks@rock-chips.com>
This commit is contained in:
@@ -102,7 +102,7 @@ void EncAsicFrameStart(void * inst, regValues_s * val, h264e_syntax *syntax_data
|
||||
syntax_data->target_error[iCount] = val->targetError[iCount];
|
||||
}
|
||||
for (iCount = 0; iCount < 7; ++iCount) {
|
||||
syntax_data->delta_qp[iCount] = val->deltaQp[6-iCount];
|
||||
syntax_data->delta_qp[iCount] = val->deltaQp[6 - iCount];
|
||||
}
|
||||
}
|
||||
syntax_data->output_strm_limit_size = val->outputStrmSize;
|
||||
|
@@ -388,6 +388,11 @@ MPP_RET h264e_config(void *ctx, RK_S32 cmd, void *param)
|
||||
*((RK_U32*)param) = getOutputStreamSize(enc);
|
||||
ret = MPP_OK;
|
||||
} break;
|
||||
case SET_IDR_FRAME : {
|
||||
H264EncRateCtrl *enc_rc_cfg = &enc->enc_rc_cfg;
|
||||
enc->intraPeriodCnt = enc_rc_cfg->intraPicRate;
|
||||
ret = MPP_OK;
|
||||
} break;
|
||||
default:
|
||||
mpp_err("No correspond cmd found, and can not config!");
|
||||
break;
|
||||
|
@@ -31,6 +31,7 @@ typedef enum EncCfgCmd_t {
|
||||
SET_ENC_RC_CFG,
|
||||
GET_ENC_EXTRA_INFO,
|
||||
GET_OUTPUT_STREAM_SIZE,
|
||||
SET_IDR_FRAME,
|
||||
} EncCfgCmd;
|
||||
|
||||
/*
|
||||
|
@@ -420,10 +420,12 @@ MPP_RET mpp_enc_control(MppEnc *enc, MpiCmd cmd, void *param)
|
||||
*mpp_cfg = enc->mpp_cfg;
|
||||
ret = MPP_OK;
|
||||
} break;
|
||||
case MPP_ENC_SET_IDR_FRAME : {
|
||||
ret = controller_config(enc->controller, SET_IDR_FRAME, param);
|
||||
} break;
|
||||
case MPP_ENC_GET_EXTRA_INFO :
|
||||
case MPP_ENC_SET_RC_CFG :
|
||||
case MPP_ENC_GET_RC_CFG :
|
||||
case MPP_ENC_SET_IDR_FRAME :
|
||||
case MPP_ENC_SET_OSD_PLT_CFG :
|
||||
case MPP_ENC_SET_OSD_DATA_CFG :
|
||||
case MPP_ENC_SET_SEI_CFG :
|
||||
|
@@ -35,6 +35,8 @@
|
||||
#define MPI_ENC_IO_COUNT (4)
|
||||
#define MAX_FILE_NAME_LENGTH 256
|
||||
|
||||
#define MPI_ENC_TEST_SET_IDR_FRAME 0
|
||||
|
||||
typedef struct {
|
||||
char file_input[MAX_FILE_NAME_LENGTH];
|
||||
char file_output[MAX_FILE_NAME_LENGTH];
|
||||
@@ -409,6 +411,17 @@ int mpi_enc_test(MpiEncTestCmd *cmd)
|
||||
mpp_task_meta_set_packet(task, KEY_OUTPUT_PACKET, packet);
|
||||
mpp_task_meta_set_buffer(task, KEY_MOTION_INFO, md_info_buf);
|
||||
|
||||
/* set idr frame */
|
||||
#if MPI_ENC_TEST_SET_IDR_FRAME
|
||||
if (frame_count && frame_count % (mpp_cfg.gop / 4) == 0) {
|
||||
ret = mpi->control(ctx, MPP_ENC_SET_IDR_FRAME, NULL);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("mpi control enc set idr frame failed\n");
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* gen and cfg osd plt */
|
||||
mpi_enc_gen_osd_data(&osd_data, osd_data_buf, frame_count);
|
||||
ret = mpi->control(ctx, MPP_ENC_SET_OSD_DATA_CFG, &osd_data);
|
||||
|
Reference in New Issue
Block a user