mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-06 01:26:49 +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];
|
syntax_data->target_error[iCount] = val->targetError[iCount];
|
||||||
}
|
}
|
||||||
for (iCount = 0; iCount < 7; ++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;
|
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);
|
*((RK_U32*)param) = getOutputStreamSize(enc);
|
||||||
ret = MPP_OK;
|
ret = MPP_OK;
|
||||||
} break;
|
} break;
|
||||||
|
case SET_IDR_FRAME : {
|
||||||
|
H264EncRateCtrl *enc_rc_cfg = &enc->enc_rc_cfg;
|
||||||
|
enc->intraPeriodCnt = enc_rc_cfg->intraPicRate;
|
||||||
|
ret = MPP_OK;
|
||||||
|
} break;
|
||||||
default:
|
default:
|
||||||
mpp_err("No correspond cmd found, and can not config!");
|
mpp_err("No correspond cmd found, and can not config!");
|
||||||
break;
|
break;
|
||||||
|
@@ -31,6 +31,7 @@ typedef enum EncCfgCmd_t {
|
|||||||
SET_ENC_RC_CFG,
|
SET_ENC_RC_CFG,
|
||||||
GET_ENC_EXTRA_INFO,
|
GET_ENC_EXTRA_INFO,
|
||||||
GET_OUTPUT_STREAM_SIZE,
|
GET_OUTPUT_STREAM_SIZE,
|
||||||
|
SET_IDR_FRAME,
|
||||||
} EncCfgCmd;
|
} EncCfgCmd;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -420,10 +420,12 @@ MPP_RET mpp_enc_control(MppEnc *enc, MpiCmd cmd, void *param)
|
|||||||
*mpp_cfg = enc->mpp_cfg;
|
*mpp_cfg = enc->mpp_cfg;
|
||||||
ret = MPP_OK;
|
ret = MPP_OK;
|
||||||
} break;
|
} 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_GET_EXTRA_INFO :
|
||||||
case MPP_ENC_SET_RC_CFG :
|
case MPP_ENC_SET_RC_CFG :
|
||||||
case MPP_ENC_GET_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_PLT_CFG :
|
||||||
case MPP_ENC_SET_OSD_DATA_CFG :
|
case MPP_ENC_SET_OSD_DATA_CFG :
|
||||||
case MPP_ENC_SET_SEI_CFG :
|
case MPP_ENC_SET_SEI_CFG :
|
||||||
|
@@ -35,6 +35,8 @@
|
|||||||
#define MPI_ENC_IO_COUNT (4)
|
#define MPI_ENC_IO_COUNT (4)
|
||||||
#define MAX_FILE_NAME_LENGTH 256
|
#define MAX_FILE_NAME_LENGTH 256
|
||||||
|
|
||||||
|
#define MPI_ENC_TEST_SET_IDR_FRAME 0
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char file_input[MAX_FILE_NAME_LENGTH];
|
char file_input[MAX_FILE_NAME_LENGTH];
|
||||||
char file_output[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_packet(task, KEY_OUTPUT_PACKET, packet);
|
||||||
mpp_task_meta_set_buffer(task, KEY_MOTION_INFO, md_info_buf);
|
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 */
|
/* gen and cfg osd plt */
|
||||||
mpi_enc_gen_osd_data(&osd_data, osd_data_buf, frame_count);
|
mpi_enc_gen_osd_data(&osd_data, osd_data_buf, frame_count);
|
||||||
ret = mpi->control(ctx, MPP_ENC_SET_OSD_DATA_CFG, &osd_data);
|
ret = mpi->control(ctx, MPP_ENC_SET_OSD_DATA_CFG, &osd_data);
|
||||||
|
Reference in New Issue
Block a user