mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 17:16:50 +08:00
[mpp_enc]: implement more encoder control function
git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@1119 6e48237b-75ef-9749-8fc9-41990f28c85a
This commit is contained in:
@@ -134,6 +134,8 @@ typedef struct MppEncConfig_t {
|
|||||||
*/
|
*/
|
||||||
RK_S32 width;
|
RK_S32 width;
|
||||||
RK_S32 height;
|
RK_S32 height;
|
||||||
|
RK_S32 hor_stride;
|
||||||
|
RK_S32 ver_stride;
|
||||||
RK_S32 format;
|
RK_S32 format;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -43,6 +43,22 @@
|
|||||||
#define VPU_OUTPUT_FORMAT_BIT_14 (0x00030000)
|
#define VPU_OUTPUT_FORMAT_BIT_14 (0x00030000)
|
||||||
#define VPU_OUTPUT_FORMAT_BIT_16 (0x00040000)
|
#define VPU_OUTPUT_FORMAT_BIT_16 (0x00040000)
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
ENC_INPUT_YUV420_PLANAR = 0, /* YYYY... UUUU... VVVV */
|
||||||
|
ENC_INPUT_YUV420_SEMIPLANAR = 1, /* YYYY... UVUVUV... */
|
||||||
|
ENC_INPUT_YUV422_INTERLEAVED_YUYV = 2, /* YUYVYUYV... */
|
||||||
|
ENC_INPUT_YUV422_INTERLEAVED_UYVY = 3, /* UYVYUYVY... */
|
||||||
|
ENC_INPUT_RGB565 = 4, /* 16-bit RGB */
|
||||||
|
ENC_INPUT_BGR565 = 5, /* 16-bit RGB */
|
||||||
|
ENC_INPUT_RGB555 = 6, /* 15-bit RGB */
|
||||||
|
ENC_INPUT_BGR555 = 7, /* 15-bit RGB */
|
||||||
|
ENC_INPUT_RGB444 = 8, /* 12-bit RGB */
|
||||||
|
ENC_INPUT_BGR444 = 9, /* 12-bit RGB */
|
||||||
|
ENC_INPUT_RGB888 = 10, /* 24-bit RGB */
|
||||||
|
ENC_INPUT_BGR888 = 11, /* 24-bit RGB */
|
||||||
|
ENC_INPUT_RGB101010 = 12, /* 30-bit RGB */
|
||||||
|
ENC_INPUT_BGR101010 = 13 /* 30-bit RGB */
|
||||||
|
} EncInputPictureType;
|
||||||
|
|
||||||
typedef enum VPU_API_CMD {
|
typedef enum VPU_API_CMD {
|
||||||
VPU_API_ENC_SETCFG,
|
VPU_API_ENC_SETCFG,
|
||||||
@@ -144,23 +160,6 @@ typedef struct EncoderOut {
|
|||||||
|
|
||||||
} EncoderOut_t;
|
} EncoderOut_t;
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
VPU_H264ENC_YUV420_PLANAR = 0, /* YYYY... UUUU... VVVV */
|
|
||||||
VPU_H264ENC_YUV420_SEMIPLANAR = 1, /* YYYY... UVUVUV... */
|
|
||||||
VPU_H264ENC_YUV422_INTERLEAVED_YUYV = 2, /* YUYVYUYV... */
|
|
||||||
VPU_H264ENC_YUV422_INTERLEAVED_UYVY = 3, /* UYVYUYVY... */
|
|
||||||
VPU_H264ENC_RGB565 = 4, /* 16-bit RGB */
|
|
||||||
VPU_H264ENC_BGR565 = 5, /* 16-bit RGB */
|
|
||||||
VPU_H264ENC_RGB555 = 6, /* 15-bit RGB */
|
|
||||||
VPU_H264ENC_BGR555 = 7, /* 15-bit RGB */
|
|
||||||
VPU_H264ENC_RGB444 = 8, /* 12-bit RGB */
|
|
||||||
VPU_H264ENC_BGR444 = 9, /* 12-bit RGB */
|
|
||||||
VPU_H264ENC_RGB888 = 10, /* 24-bit RGB */
|
|
||||||
VPU_H264ENC_BGR888 = 11, /* 24-bit RGB */
|
|
||||||
VPU_H264ENC_RGB101010 = 12, /* 30-bit RGB */
|
|
||||||
VPU_H264ENC_BGR101010 = 13 /* 30-bit RGB */
|
|
||||||
} H264EncPictureType;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Enumeration used to define the possible video compression codings.
|
* Enumeration used to define the possible video compression codings.
|
||||||
* NOTE: This essentially refers to file extensions. If the coding is
|
* NOTE: This essentially refers to file extensions. If the coding is
|
||||||
|
@@ -39,6 +39,7 @@ struct MppEnc_t {
|
|||||||
/*
|
/*
|
||||||
* configuration parameter to controller and hal
|
* configuration parameter to controller and hal
|
||||||
*/
|
*/
|
||||||
|
MppEncConfig mpp_cfg;
|
||||||
H264EncConfig enc_cfg;
|
H264EncConfig enc_cfg;
|
||||||
H264EncRateCtrl enc_rc_cfg;
|
H264EncRateCtrl enc_rc_cfg;
|
||||||
h264e_control_extra_info_cfg extra_info_cfg;
|
h264e_control_extra_info_cfg extra_info_cfg;
|
||||||
|
@@ -413,6 +413,8 @@ MPP_RET mpp_enc_control(MppEnc *enc, MpiCmd cmd, void *param)
|
|||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case MPP_ENC_SET_CFG : {
|
case MPP_ENC_SET_CFG : {
|
||||||
//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"
|
||||||
|
enc->mpp_cfg = *mpp_cfg;
|
||||||
|
|
||||||
enc_cfg->streamType = H264ENC_BYTE_STREAM;
|
enc_cfg->streamType = H264ENC_BYTE_STREAM;
|
||||||
enc_cfg->frameRateDenom = 1;
|
enc_cfg->frameRateDenom = 1;
|
||||||
if (mpp_cfg->profile)
|
if (mpp_cfg->profile)
|
||||||
@@ -489,6 +491,9 @@ MPP_RET mpp_enc_control(MppEnc *enc, MpiCmd cmd, void *param)
|
|||||||
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)));
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
case MPP_ENC_GET_CFG : {
|
||||||
|
*mpp_cfg = enc->mpp_cfg;
|
||||||
|
} break;
|
||||||
case MPP_ENC_GET_EXTRA_INFO : {
|
case MPP_ENC_GET_EXTRA_INFO : {
|
||||||
mpp_hal_control(enc->hal, cmd, param);
|
mpp_hal_control(enc->hal, cmd, param);
|
||||||
} break;
|
} break;
|
||||||
|
@@ -63,7 +63,7 @@ VpuApiLegacy::VpuApiLegacy() :
|
|||||||
pictureMem(NULL),
|
pictureMem(NULL),
|
||||||
outbufMem(NULL),
|
outbufMem(NULL),
|
||||||
outData(NULL),
|
outData(NULL),
|
||||||
use_fd_flag(0),
|
enc_in_fmt(ENC_INPUT_YUV420_PLANAR),
|
||||||
mEosSet(0)
|
mEosSet(0)
|
||||||
{
|
{
|
||||||
mpp_env_get_u32("vpu_api_debug", &vpu_api_debug, 0);
|
mpp_env_get_u32("vpu_api_debug", &vpu_api_debug, 0);
|
||||||
@@ -96,8 +96,8 @@ VpuApiLegacy::~VpuApiLegacy()
|
|||||||
outData = NULL;
|
outData = NULL;
|
||||||
}
|
}
|
||||||
if (memGroup) {
|
if (memGroup) {
|
||||||
mpp_err("memGroup deInit");
|
|
||||||
mpp_buffer_group_put(memGroup);
|
mpp_buffer_group_put(memGroup);
|
||||||
|
memGroup = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
mpp_destroy(mpp_ctx);
|
mpp_destroy(mpp_ctx);
|
||||||
@@ -196,9 +196,6 @@ RK_S32 VpuApiLegacy::init(VpuCodecContext *ctx, RK_U8 *extraData, RK_U32 extra_s
|
|||||||
if (pkt) {
|
if (pkt) {
|
||||||
ctx->extradata_size = mpp_packet_get_length(pkt);
|
ctx->extradata_size = mpp_packet_get_length(pkt);
|
||||||
ctx->extradata = mpp_packet_get_data(pkt);
|
ctx->extradata = mpp_packet_get_data(pkt);
|
||||||
mpp_log("Mpp generate extra data!");
|
|
||||||
} else {
|
|
||||||
mpp_err("No extra data generate!");
|
|
||||||
}
|
}
|
||||||
pkt = NULL;
|
pkt = NULL;
|
||||||
}
|
}
|
||||||
@@ -448,6 +445,7 @@ RK_S32 VpuApiLegacy::encode(VpuCodecContext *ctx, EncInputStream_t *aEncInStrm,
|
|||||||
/* try import input buffer and output buffer */
|
/* try import input buffer and output buffer */
|
||||||
MppBufferInfo inputCommit;
|
MppBufferInfo inputCommit;
|
||||||
MppBufferInfo outputCommit;
|
MppBufferInfo outputCommit;
|
||||||
|
RK_U32 use_fd_flag = 0;
|
||||||
|
|
||||||
memset(&inputCommit, 0, sizeof(inputCommit));
|
memset(&inputCommit, 0, sizeof(inputCommit));
|
||||||
memset(&outputCommit, 0, sizeof(outputCommit));
|
memset(&outputCommit, 0, sizeof(outputCommit));
|
||||||
@@ -802,6 +800,15 @@ RK_S32 VpuApiLegacy::control(VpuCodecContext *ctx, VPU_API_CMD cmd, void *param)
|
|||||||
|
|
||||||
MpiCmd mpicmd = MPI_CMD_BUTT;
|
MpiCmd mpicmd = MPI_CMD_BUTT;
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
|
case VPU_API_ENC_SETCFG : {
|
||||||
|
mpicmd = MPP_ENC_SET_CFG;
|
||||||
|
} break;
|
||||||
|
case VPU_API_ENC_GETCFG : {
|
||||||
|
mpicmd = MPP_ENC_GET_CFG;
|
||||||
|
} break;
|
||||||
|
case VPU_API_ENC_SETFORMAT : {
|
||||||
|
enc_in_fmt = *((EncInputPictureType *)param);
|
||||||
|
} break;
|
||||||
case VPU_API_SET_VPUMEM_CONTEXT: {
|
case VPU_API_SET_VPUMEM_CONTEXT: {
|
||||||
mpicmd = MPP_DEC_SET_EXT_BUF_GROUP;
|
mpicmd = MPP_DEC_SET_EXT_BUF_GROUP;
|
||||||
break;
|
break;
|
||||||
@@ -858,18 +865,18 @@ RK_S32 VpuApiLegacy::control(VpuCodecContext *ctx, VPU_API_CMD cmd, void *param)
|
|||||||
mpicmd = MPP_DEC_GET_VPUMEM_USED_COUNT;
|
mpicmd = MPP_DEC_GET_VPUMEM_USED_COUNT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VPU_API_DEC_GET_EOS_STATUS: {
|
case VPU_API_DEC_GETFORMAT: {
|
||||||
*(RK_S32 *)param = mEosSet;
|
|
||||||
mpicmd = MPI_CMD_BUTT;
|
mpicmd = MPI_CMD_BUTT;
|
||||||
|
getDecoderFormat(ctx, (DecoderFormat_t *)param);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VPU_API_SET_OUTPUT_BLOCK: {
|
case VPU_API_SET_OUTPUT_BLOCK: {
|
||||||
mpicmd = MPP_SET_OUTPUT_BLOCK;
|
mpicmd = MPP_SET_OUTPUT_BLOCK;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VPU_API_DEC_GETFORMAT: {
|
case VPU_API_DEC_GET_EOS_STATUS: {
|
||||||
|
*(RK_S32 *)param = mEosSet;
|
||||||
mpicmd = MPI_CMD_BUTT;
|
mpicmd = MPI_CMD_BUTT;
|
||||||
getDecoderFormat(ctx, (DecoderFormat_t *)param);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
|
@@ -71,11 +71,13 @@ private:
|
|||||||
RK_U32 set_eos;
|
RK_U32 set_eos;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
RK_U8 *fp_buf;
|
RK_U8 *fp_buf;
|
||||||
|
|
||||||
|
/* encoder parameters */
|
||||||
MppBufferGroup memGroup;
|
MppBufferGroup memGroup;
|
||||||
MppBuffer pictureMem;
|
MppBuffer pictureMem;
|
||||||
MppBuffer outbufMem;
|
MppBuffer outbufMem;
|
||||||
RK_U8* outData;
|
RK_U8* outData;
|
||||||
RK_U32 use_fd_flag;
|
EncInputPictureType enc_in_fmt;
|
||||||
|
|
||||||
RK_U32 mEosSet;
|
RK_U32 mEosSet;
|
||||||
};
|
};
|
||||||
|
@@ -155,7 +155,7 @@ int mpi_enc_test(MpiEncTestCmd *cmd)
|
|||||||
memset(&mpp_cfg, 0, sizeof(mpp_cfg));
|
memset(&mpp_cfg, 0, sizeof(mpp_cfg));
|
||||||
mpp_cfg.width = width;
|
mpp_cfg.width = width;
|
||||||
mpp_cfg.height = height;
|
mpp_cfg.height = height;
|
||||||
mpp_cfg.format = VPU_H264ENC_YUV420_PLANAR;
|
mpp_cfg.format = ENC_INPUT_YUV420_PLANAR;
|
||||||
mpp_cfg.rc_mode = 1;
|
mpp_cfg.rc_mode = 1;
|
||||||
mpp_cfg.skip_cnt = 0;
|
mpp_cfg.skip_cnt = 0;
|
||||||
mpp_cfg.bps = SZ_4M * 8;
|
mpp_cfg.bps = SZ_4M * 8;
|
||||||
|
@@ -263,7 +263,7 @@ static RK_S32 vpu_encode_demo(VpuApiDemoCmdContext_t *cmd)
|
|||||||
memset(ctx, 0, sizeof(struct VpuCodecContext));
|
memset(ctx, 0, sizeof(struct VpuCodecContext));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int Format = VPU_H264ENC_YUV420_PLANAR;//VPU_H264ENC_YUV420_SEMIPLANAR;
|
int Format = ENC_INPUT_YUV420_PLANAR;
|
||||||
|
|
||||||
if (cmd == NULL) {
|
if (cmd == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
@@ -306,6 +306,7 @@ static RK_S32 vpu_encode_demo(VpuApiDemoCmdContext_t *cmd)
|
|||||||
ctx->width = cmd->width;
|
ctx->width = cmd->width;
|
||||||
ctx->height = cmd->height;
|
ctx->height = cmd->height;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
fseek(pInFile, 0L, SEEK_END);
|
fseek(pInFile, 0L, SEEK_END);
|
||||||
fileSize = ftell(pInFile);
|
fileSize = ftell(pInFile);
|
||||||
fseek(pInFile, 0L, SEEK_SET);
|
fseek(pInFile, 0L, SEEK_SET);
|
||||||
@@ -342,9 +343,10 @@ static RK_S32 vpu_encode_demo(VpuApiDemoCmdContext_t *cmd)
|
|||||||
enc_param = (EncParameter_t*)ctx->private_data;
|
enc_param = (EncParameter_t*)ctx->private_data;
|
||||||
enc_param->width = cmd->width;
|
enc_param->width = cmd->width;
|
||||||
enc_param->height = cmd->height;
|
enc_param->height = cmd->height;
|
||||||
|
enc_param->rc_mode = 0;
|
||||||
enc_param->bitRate = 100000;
|
enc_param->bitRate = 100000;
|
||||||
enc_param->framerate = 25;
|
enc_param->framerate = 25;
|
||||||
enc_param->enableCabac = 0;
|
enc_param->enableCabac = 1;
|
||||||
enc_param->cabacInitIdc = 0;
|
enc_param->cabacInitIdc = 0;
|
||||||
enc_param->intraPicRate = 30;
|
enc_param->intraPicRate = 30;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user