[mpp_enc]: add more print to encoder configure process

git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@1070 6e48237b-75ef-9749-8fc9-41990f28c85a
This commit is contained in:
ChenHengming
2016-07-22 01:49:39 +00:00
parent 07352a511c
commit 34d8d5b04e
6 changed files with 77 additions and 94 deletions

View File

@@ -172,7 +172,6 @@ typedef struct MppEncConfig_t {
RK_S32 profile;
RK_S32 level;
RK_S32 cabac_en;
RK_S32 trans8x8_en;
} MppEncConfig;
/*

View File

@@ -221,8 +221,8 @@ typedef enum VPU_FRAME_ERR {
typedef struct EncParameter {
RK_S32 width;
RK_S32 height;
RK_S32 rc_mode;
RK_S32 bitRate;
RK_S32 rc_mode; /* 0 - CQP mode; 1 - CBR mode; */
RK_S32 bitRate; /* target bitrate */
RK_S32 framerate;
RK_S32 qp;
RK_S32 enableCabac;

View File

@@ -399,53 +399,52 @@ MPP_RET mpp_enc_control(MppEnc *enc, MpiCmd cmd, void *param)
}
// TODO
MppEncConfig *mppCfg = (MppEncConfig*)param;
MppEncConfig *mpp_cfg = (MppEncConfig*)param;
H264EncConfig *encCfg = &(enc->encCfg);
switch (cmd) {
case MPP_ENC_SET_CFG:
encCfg->streamType = H264ENC_BYTE_STREAM;//H264ENC_NAL_UNIT_STREAM; // decide whether stream start with start code,e.g."00 00 00 01"
//H264ENC_NAL_UNIT_STREAM; // decide whether stream start with start code,e.g."00 00 00 01"
encCfg->streamType = H264ENC_BYTE_STREAM;
encCfg->frameRateDenom = 1;
if (0 != mppCfg->profile)
encCfg->profile = (h264e_profile)mppCfg->profile;
if (mpp_cfg->profile)
encCfg->profile = (h264e_profile)mpp_cfg->profile;
else
encCfg->profile = H264_PROFILE_BASELINE;
if (0 != mppCfg->level)
encCfg->level = (H264EncLevel)mppCfg->level;
if (mpp_cfg->level)
encCfg->level = (H264EncLevel)mpp_cfg->level;
else
encCfg->level = H264ENC_LEVEL_4_0;
if (0 != mppCfg->width && 0 != mppCfg->height) {
encCfg->width = mppCfg->width;
encCfg->height = mppCfg->height;
mpp_log("width %d height %d", encCfg->width, encCfg->height);
if (mpp_cfg->width && mpp_cfg->height) {
encCfg->width = mpp_cfg->width;
encCfg->height = mpp_cfg->height;
} else
mpp_err("Width or height is not set, width %d height %d", mppCfg->width, mppCfg->height);
if (0 != mppCfg->fps_in)
encCfg->frameRateNum = mppCfg->fps_in;
mpp_err("width %d height %d is not available\n", mpp_cfg->width, mpp_cfg->height);
if (mpp_cfg->fps_in)
encCfg->frameRateNum = mpp_cfg->fps_in;
else
encCfg->frameRateNum = 30;
if (mppCfg->gop > 0)
encCfg->intraPicRate = mppCfg->gop;
if (mpp_cfg->gop > 0)
encCfg->intraPicRate = mpp_cfg->gop;
else
encCfg->intraPicRate = 30;
if (0 != mppCfg->cabac_en)
encCfg->enable_cabac = mppCfg->cabac_en; // TODO
if (mpp_cfg->cabac_en)
encCfg->enable_cabac = mpp_cfg->cabac_en;
else
encCfg->enable_cabac = 0;
if (0 != mppCfg->trans8x8_en)
encCfg->transform8x8_mode = mppCfg->trans8x8_en; // TODO
else
encCfg->transform8x8_mode = 0;
encCfg->transform8x8_mode = (encCfg->profile >= H264_PROFILE_HIGH) ? (1) : (0);
encCfg->chroma_qp_index_offset = 2; // TODO
encCfg->pic_init_qp = 26; // TODO
encCfg->pic_init_qp = mpp_cfg->qp; // TODO
encCfg->keyframe_max_interval = 150; // TODO
encCfg->second_chroma_qp_index_offset = 2; // TODO
encCfg->pps_id = 0; // TODO
encCfg->input_image_format = H264ENC_YUV420_SEMIPLANAR; // TODO
encCfg->pps_id = 0;
encCfg->input_image_format = H264ENC_YUV420_SEMIPLANAR;
controller_config(enc->controller, SET_ENC_CFG, (void *)encCfg);
mpp_extra_info_generate(&(enc->extra_info_cfg), &(enc->encCfg));
mpp_hal_control(enc->hal, MPP_ENC_SET_EXTRA_INFO, (void*)(&(enc->extra_info_cfg)));
mpp_hal_control(enc->hal, MPP_ENC_GET_EXTRA_INFO, (void*)(&(enc->extra_info)));

View File

@@ -31,6 +31,20 @@
RK_U32 vpu_api_debug = 0;
static RK_U32 hevc_ver_align_8(RK_U32 val)
{
return MPP_ALIGN(val, 8);
}
static RK_U32 hevc_ver_align_256_odd(RK_U32 val)
{
return MPP_ALIGN(val, 256) | 256;
}
static RK_U32 default_align_16(RK_U32 val)
{
return MPP_ALIGN(val, 16);
}
VpuApiLegacy::VpuApiLegacy() :
mpp_ctx(NULL),
@@ -43,7 +57,6 @@ VpuApiLegacy::VpuApiLegacy() :
memGroup(NULL),
pictureMem(NULL),
outbufMem(NULL),
outData(NULL),
use_fd_flag(0),
mEosSet(0)
{
@@ -76,10 +89,7 @@ VpuApiLegacy::~VpuApiLegacy()
mpp_err("memGroup deInit");
mpp_buffer_group_put(memGroup);
}
if (outData != NULL) {
free(outData);
outData = NULL;
}
mpp_destroy(mpp_ctx);
vpu_api_dbg_func("leave\n");
@@ -133,28 +143,40 @@ RK_S32 VpuApiLegacy::init(VpuCodecContext *ctx, RK_U8 *extraData, RK_U32 extra_s
return ret;
}
if (MPP_CTX_ENC == type && mpp_ctx) {
EncParameter_t *encParam = (EncParameter_t*)ctx->private_data;
MppEncConfig encCfg;
memset(&encCfg, 0, sizeof(MppEncConfig));
// TODO
if (0 != encParam->width && 0 != encParam->height) {
encCfg.width = encParam->width;
encCfg.height = encParam->height;
} else
mpp_err("Width and height is not set.");
outData = (RK_U8*)malloc(encParam->width * encParam->height);
if (0 != encParam->levelIdc)
encCfg.level = encParam->levelIdc;
if (0 != encParam->framerate)
encCfg.fps_in = encParam->framerate;
if (0 != encParam->framerateout)
encCfg.fps_out = encParam->framerateout;
if (MPP_CTX_ENC == type) {
EncParameter_t *param = (EncParameter_t*)ctx->private_data;
MppEncConfig mpp_cfg;
memset(&mpp_cfg, 0, sizeof(mpp_cfg));
mpp_log("setup encoder rate control config:\n");
mpp_log("width %4d height %4d format %d\n", param->width, param->height, param->format);
mpp_log("rc_mode %s qp %d bps %d\n", (param->rc_mode) ? ("VBR") : ("CQP"), param->qp, param->bitRate);
mpp_log("fps in %d fps out %d gop %d\n", param->framerate, param->framerateout, param->intraPicRate);
mpp_log("setup encoder stream feature config:\n");
mpp_log("profile %d level %d cabac %d\n", param->profileIdc, param->levelIdc, param->enableCabac);
mpp_assert(param->width);
mpp_assert(param->height);
mpp_cfg.width = param->width;
mpp_cfg.height = param->height;
mpp_cfg.format = param->format;
mpp_cfg.rc_mode = param->rc_mode;
mpp_cfg.bps = param->bitRate;
mpp_cfg.fps_in = param->framerate;
if (param->framerateout)
mpp_cfg.fps_out = param->framerateout;
else
encCfg.fps_out = encParam->framerate;
if (0 != encParam->intraPicRate)
encCfg.gop = encParam->intraPicRate;
mpi->control(mpp_ctx, MPP_ENC_SET_CFG, &encCfg); // input parameter config
mpp_cfg.fps_out = param->framerate;
mpp_cfg.qp = (param->qp) ? (param->qp) : (26);
mpp_cfg.gop = param->intraPicRate;
mpp_cfg.profile = param->profileIdc;
mpp_cfg.level = param->levelIdc;
mpp_cfg.cabac_en = param->enableCabac;
mpi->control(mpp_ctx, MPP_ENC_SET_CFG, &mpp_cfg);
if (mpp_enc_get_extra_data_size(mpp_ctx) > 0) {
ctx->extradata_size = mpp_enc_get_extra_data_size(mpp_ctx);
@@ -577,9 +599,8 @@ RK_S32 VpuApiLegacy::encoder_sendframe(VpuCodecContext *ctx, EncInputStream_t *a
info.size = aEncInStrm->size;
info.fd = aEncInStrm->bufPhyAddr;
mpp_log_f("aEncInStrm->nFlags %d size %d pts %lld\n",
aEncInStrm->nFlags, aEncInStrm->size, aEncInStrm->timeUs);
vpu_api_dbg_input("input info fd %d size %d\n", info.fd, info.size);
vpu_api_dbg_input("input fd %d size %d flag %d pts %lld\n",
info.fd, info.size, aEncInStrm->timeUs, aEncInStrm->nFlags);
ret = mpp_frame_init(&frame);
if (MPP_OK != ret) {
@@ -683,20 +704,6 @@ RK_S32 VpuApiLegacy::perform(RK_U32 cmd, RK_U32 *data)
return 0;
}
static RK_U32 hevc_ver_align_8(RK_U32 val)
{
return MPP_ALIGN(val, 8);
}
static RK_U32 hevc_ver_align_256_odd(RK_U32 val)
{
return MPP_ALIGN(val, 256) | 256;
}
static RK_U32 default_align_16(RK_U32 val)
{
return MPP_ALIGN(val, 16);
}
RK_S32 VpuApiLegacy::control(VpuCodecContext *ctx, VPU_API_CMD cmd, void *param)
{
vpu_api_dbg_func("enter\n");

View File

@@ -498,27 +498,6 @@ MPP_RET Mpp::control(MpiCmd cmd, MppParam param)
return ret;
}
MPP_RET Mpp::config(MpiCmd cmd, MppEncConfig cfg)
{
switch (cmd) {
case MPP_ENC_SET_CFG:
mEnc = mpp_calloc(MppEnc, 1);
if (NULL == mEnc) {
mpp_err_f("failed to malloc context\n");
return MPP_ERR_NULL_PTR;
}
mEnc->mpp = this; // TODO put these code into config function
mpp_enc_control(mEnc, cmd, &cfg);
break;
default:
mpp_log("MpiCmd is not found in mpi_config.");
break;
}
return MPP_OK;
}
MPP_RET Mpp::reset()
{
if (!mInitDone)
@@ -667,7 +646,7 @@ MPP_RET Mpp::control_enc(MpiCmd cmd, MppParam param)
switch (cmd) {
case MPP_ENC_SET_CFG : {
if (mEnc)
mpp_assert(mEnc);
ret = mpp_enc_control(mEnc, cmd, param);
} break;
default : {

View File

@@ -76,7 +76,6 @@ public:
MPP_RET reset();
MPP_RET control(MpiCmd cmd, MppParam param);
MPP_RET config(MpiCmd cmd, MppEncConfig cfg);
mpp_list *mPackets;
mpp_list *mFrames;