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 profile;
|
||||||
RK_S32 level;
|
RK_S32 level;
|
||||||
RK_S32 cabac_en;
|
RK_S32 cabac_en;
|
||||||
RK_S32 trans8x8_en;
|
|
||||||
} MppEncConfig;
|
} MppEncConfig;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -221,8 +221,8 @@ typedef enum VPU_FRAME_ERR {
|
|||||||
typedef struct EncParameter {
|
typedef struct EncParameter {
|
||||||
RK_S32 width;
|
RK_S32 width;
|
||||||
RK_S32 height;
|
RK_S32 height;
|
||||||
RK_S32 rc_mode;
|
RK_S32 rc_mode; /* 0 - CQP mode; 1 - CBR mode; */
|
||||||
RK_S32 bitRate;
|
RK_S32 bitRate; /* target bitrate */
|
||||||
RK_S32 framerate;
|
RK_S32 framerate;
|
||||||
RK_S32 qp;
|
RK_S32 qp;
|
||||||
RK_S32 enableCabac;
|
RK_S32 enableCabac;
|
||||||
|
@@ -399,53 +399,52 @@ MPP_RET mpp_enc_control(MppEnc *enc, MpiCmd cmd, void *param)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
MppEncConfig *mppCfg = (MppEncConfig*)param;
|
MppEncConfig *mpp_cfg = (MppEncConfig*)param;
|
||||||
H264EncConfig *encCfg = &(enc->encCfg);
|
H264EncConfig *encCfg = &(enc->encCfg);
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case MPP_ENC_SET_CFG:
|
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;
|
encCfg->frameRateDenom = 1;
|
||||||
if (0 != mppCfg->profile)
|
if (mpp_cfg->profile)
|
||||||
encCfg->profile = (h264e_profile)mppCfg->profile;
|
encCfg->profile = (h264e_profile)mpp_cfg->profile;
|
||||||
else
|
else
|
||||||
encCfg->profile = H264_PROFILE_BASELINE;
|
encCfg->profile = H264_PROFILE_BASELINE;
|
||||||
if (0 != mppCfg->level)
|
if (mpp_cfg->level)
|
||||||
encCfg->level = (H264EncLevel)mppCfg->level;
|
encCfg->level = (H264EncLevel)mpp_cfg->level;
|
||||||
else
|
else
|
||||||
encCfg->level = H264ENC_LEVEL_4_0;
|
encCfg->level = H264ENC_LEVEL_4_0;
|
||||||
if (0 != mppCfg->width && 0 != mppCfg->height) {
|
if (mpp_cfg->width && mpp_cfg->height) {
|
||||||
encCfg->width = mppCfg->width;
|
encCfg->width = mpp_cfg->width;
|
||||||
encCfg->height = mppCfg->height;
|
encCfg->height = mpp_cfg->height;
|
||||||
mpp_log("width %d height %d", encCfg->width, encCfg->height);
|
|
||||||
} else
|
} else
|
||||||
mpp_err("Width or height is not set, width %d height %d", mppCfg->width, mppCfg->height);
|
mpp_err("width %d height %d is not available\n", mpp_cfg->width, mpp_cfg->height);
|
||||||
if (0 != mppCfg->fps_in)
|
if (mpp_cfg->fps_in)
|
||||||
encCfg->frameRateNum = mppCfg->fps_in;
|
encCfg->frameRateNum = mpp_cfg->fps_in;
|
||||||
else
|
else
|
||||||
encCfg->frameRateNum = 30;
|
encCfg->frameRateNum = 30;
|
||||||
if (mppCfg->gop > 0)
|
if (mpp_cfg->gop > 0)
|
||||||
encCfg->intraPicRate = mppCfg->gop;
|
encCfg->intraPicRate = mpp_cfg->gop;
|
||||||
else
|
else
|
||||||
encCfg->intraPicRate = 30;
|
encCfg->intraPicRate = 30;
|
||||||
if (0 != mppCfg->cabac_en)
|
if (mpp_cfg->cabac_en)
|
||||||
encCfg->enable_cabac = mppCfg->cabac_en; // TODO
|
encCfg->enable_cabac = mpp_cfg->cabac_en;
|
||||||
else
|
else
|
||||||
encCfg->enable_cabac = 0;
|
encCfg->enable_cabac = 0;
|
||||||
if (0 != mppCfg->trans8x8_en)
|
|
||||||
encCfg->transform8x8_mode = mppCfg->trans8x8_en; // TODO
|
encCfg->transform8x8_mode = (encCfg->profile >= H264_PROFILE_HIGH) ? (1) : (0);
|
||||||
else
|
|
||||||
encCfg->transform8x8_mode = 0;
|
|
||||||
encCfg->chroma_qp_index_offset = 2; // TODO
|
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->keyframe_max_interval = 150; // TODO
|
||||||
encCfg->second_chroma_qp_index_offset = 2; // TODO
|
encCfg->second_chroma_qp_index_offset = 2; // TODO
|
||||||
encCfg->pps_id = 0; // TODO
|
encCfg->pps_id = 0;
|
||||||
encCfg->input_image_format = H264ENC_YUV420_SEMIPLANAR; // TODO
|
encCfg->input_image_format = H264ENC_YUV420_SEMIPLANAR;
|
||||||
|
|
||||||
controller_config(enc->controller, SET_ENC_CFG, (void *)encCfg);
|
controller_config(enc->controller, SET_ENC_CFG, (void *)encCfg);
|
||||||
|
|
||||||
mpp_extra_info_generate(&(enc->extra_info_cfg), &(enc->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_SET_EXTRA_INFO, (void*)(&(enc->extra_info_cfg)));
|
||||||
mpp_hal_control(enc->hal, MPP_ENC_GET_EXTRA_INFO, (void*)(&(enc->extra_info)));
|
mpp_hal_control(enc->hal, MPP_ENC_GET_EXTRA_INFO, (void*)(&(enc->extra_info)));
|
||||||
|
|
||||||
|
@@ -31,6 +31,20 @@
|
|||||||
|
|
||||||
RK_U32 vpu_api_debug = 0;
|
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() :
|
VpuApiLegacy::VpuApiLegacy() :
|
||||||
mpp_ctx(NULL),
|
mpp_ctx(NULL),
|
||||||
@@ -43,7 +57,6 @@ VpuApiLegacy::VpuApiLegacy() :
|
|||||||
memGroup(NULL),
|
memGroup(NULL),
|
||||||
pictureMem(NULL),
|
pictureMem(NULL),
|
||||||
outbufMem(NULL),
|
outbufMem(NULL),
|
||||||
outData(NULL),
|
|
||||||
use_fd_flag(0),
|
use_fd_flag(0),
|
||||||
mEosSet(0)
|
mEosSet(0)
|
||||||
{
|
{
|
||||||
@@ -76,10 +89,7 @@ VpuApiLegacy::~VpuApiLegacy()
|
|||||||
mpp_err("memGroup deInit");
|
mpp_err("memGroup deInit");
|
||||||
mpp_buffer_group_put(memGroup);
|
mpp_buffer_group_put(memGroup);
|
||||||
}
|
}
|
||||||
if (outData != NULL) {
|
|
||||||
free(outData);
|
|
||||||
outData = NULL;
|
|
||||||
}
|
|
||||||
mpp_destroy(mpp_ctx);
|
mpp_destroy(mpp_ctx);
|
||||||
|
|
||||||
vpu_api_dbg_func("leave\n");
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MPP_CTX_ENC == type && mpp_ctx) {
|
if (MPP_CTX_ENC == type) {
|
||||||
EncParameter_t *encParam = (EncParameter_t*)ctx->private_data;
|
EncParameter_t *param = (EncParameter_t*)ctx->private_data;
|
||||||
MppEncConfig encCfg;
|
MppEncConfig mpp_cfg;
|
||||||
memset(&encCfg, 0, sizeof(MppEncConfig));
|
|
||||||
// TODO
|
memset(&mpp_cfg, 0, sizeof(mpp_cfg));
|
||||||
if (0 != encParam->width && 0 != encParam->height) {
|
|
||||||
encCfg.width = encParam->width;
|
mpp_log("setup encoder rate control config:\n");
|
||||||
encCfg.height = encParam->height;
|
mpp_log("width %4d height %4d format %d\n", param->width, param->height, param->format);
|
||||||
} else
|
mpp_log("rc_mode %s qp %d bps %d\n", (param->rc_mode) ? ("VBR") : ("CQP"), param->qp, param->bitRate);
|
||||||
mpp_err("Width and height is not set.");
|
mpp_log("fps in %d fps out %d gop %d\n", param->framerate, param->framerateout, param->intraPicRate);
|
||||||
outData = (RK_U8*)malloc(encParam->width * encParam->height);
|
mpp_log("setup encoder stream feature config:\n");
|
||||||
if (0 != encParam->levelIdc)
|
mpp_log("profile %d level %d cabac %d\n", param->profileIdc, param->levelIdc, param->enableCabac);
|
||||||
encCfg.level = encParam->levelIdc;
|
|
||||||
if (0 != encParam->framerate)
|
mpp_assert(param->width);
|
||||||
encCfg.fps_in = encParam->framerate;
|
mpp_assert(param->height);
|
||||||
if (0 != encParam->framerateout)
|
|
||||||
encCfg.fps_out = encParam->framerateout;
|
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
|
else
|
||||||
encCfg.fps_out = encParam->framerate;
|
mpp_cfg.fps_out = param->framerate;
|
||||||
if (0 != encParam->intraPicRate)
|
mpp_cfg.qp = (param->qp) ? (param->qp) : (26);
|
||||||
encCfg.gop = encParam->intraPicRate;
|
mpp_cfg.gop = param->intraPicRate;
|
||||||
mpi->control(mpp_ctx, MPP_ENC_SET_CFG, &encCfg); // input parameter config
|
|
||||||
|
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) {
|
if (mpp_enc_get_extra_data_size(mpp_ctx) > 0) {
|
||||||
ctx->extradata_size = mpp_enc_get_extra_data_size(mpp_ctx);
|
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.size = aEncInStrm->size;
|
||||||
info.fd = aEncInStrm->bufPhyAddr;
|
info.fd = aEncInStrm->bufPhyAddr;
|
||||||
|
|
||||||
mpp_log_f("aEncInStrm->nFlags %d size %d pts %lld\n",
|
vpu_api_dbg_input("input fd %d size %d flag %d pts %lld\n",
|
||||||
aEncInStrm->nFlags, aEncInStrm->size, aEncInStrm->timeUs);
|
info.fd, info.size, aEncInStrm->timeUs, aEncInStrm->nFlags);
|
||||||
vpu_api_dbg_input("input info fd %d size %d\n", info.fd, info.size);
|
|
||||||
|
|
||||||
ret = mpp_frame_init(&frame);
|
ret = mpp_frame_init(&frame);
|
||||||
if (MPP_OK != ret) {
|
if (MPP_OK != ret) {
|
||||||
@@ -683,20 +704,6 @@ RK_S32 VpuApiLegacy::perform(RK_U32 cmd, RK_U32 *data)
|
|||||||
return 0;
|
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)
|
RK_S32 VpuApiLegacy::control(VpuCodecContext *ctx, VPU_API_CMD cmd, void *param)
|
||||||
{
|
{
|
||||||
vpu_api_dbg_func("enter\n");
|
vpu_api_dbg_func("enter\n");
|
||||||
|
25
mpp/mpp.cpp
25
mpp/mpp.cpp
@@ -498,27 +498,6 @@ MPP_RET Mpp::control(MpiCmd cmd, MppParam param)
|
|||||||
return ret;
|
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()
|
MPP_RET Mpp::reset()
|
||||||
{
|
{
|
||||||
if (!mInitDone)
|
if (!mInitDone)
|
||||||
@@ -667,8 +646,8 @@ MPP_RET Mpp::control_enc(MpiCmd cmd, MppParam param)
|
|||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case MPP_ENC_SET_CFG : {
|
case MPP_ENC_SET_CFG : {
|
||||||
if (mEnc)
|
mpp_assert(mEnc);
|
||||||
ret = mpp_enc_control(mEnc, cmd, param);
|
ret = mpp_enc_control(mEnc, cmd, param);
|
||||||
} break;
|
} break;
|
||||||
default : {
|
default : {
|
||||||
} break;
|
} break;
|
||||||
|
Reference in New Issue
Block a user