mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 01:02:39 +08:00
[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:
@@ -172,7 +172,6 @@ typedef struct MppEncConfig_t {
|
||||
RK_S32 profile;
|
||||
RK_S32 level;
|
||||
RK_S32 cabac_en;
|
||||
RK_S32 trans8x8_en;
|
||||
} MppEncConfig;
|
||||
|
||||
/*
|
||||
|
@@ -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;
|
||||
|
@@ -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)));
|
||||
|
||||
|
@@ -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");
|
||||
|
23
mpp/mpp.cpp
23
mpp/mpp.cpp
@@ -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 : {
|
||||
|
Reference in New Issue
Block a user