mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 17:16:50 +08:00
[mpp_enc]: fix crash in vpu_api_legacy.cpp
[mpi]: use new control macro system git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@1050 6e48237b-75ef-9749-8fc9-41990f28c85a
This commit is contained in:
61
inc/rk_mpi.h
61
inc/rk_mpi.h
@@ -22,6 +22,7 @@
|
||||
typedef enum {
|
||||
MPP_CTX_DEC,
|
||||
MPP_CTX_ENC,
|
||||
MPP_CTX_ISP,
|
||||
MPP_CTX_BUTT,
|
||||
} MppCtxType;
|
||||
|
||||
@@ -58,36 +59,62 @@ typedef enum {
|
||||
MPP_VIDEO_CodingMax = 0x7FFFFFFF
|
||||
} MppCodingType;
|
||||
|
||||
/*
|
||||
* Command id bit usage is defined as follows:
|
||||
* bit 20 - 23 - module id
|
||||
* bit 16 - 19 - contex id
|
||||
* bit 0 - 15 - command id
|
||||
*/
|
||||
#define CMD_MODULE_ID_MASK (0x00F00000)
|
||||
#define CMD_MODULE_OSAL (0x00100000)
|
||||
#define CMD_MODULE_MPP (0x00200000)
|
||||
#define CMD_MODULE_CODEC (0x00300000)
|
||||
#define CMD_MODULE_HAL (0x00400000)
|
||||
#define CMD_CTX_ID_MASK (0x000F0000)
|
||||
#define CMD_CTX_ID_DEC (0x00010000)
|
||||
#define CMD_CTX_ID_ENC (0x00020000)
|
||||
#define CMD_CTX_ID_ISP (0x00030000)
|
||||
#define CMD_ID_MASK (0x0000FFFF)
|
||||
|
||||
typedef enum {
|
||||
MPP_CMD_BASE = 0,
|
||||
MPP_OSAL_CMD_BASE = CMD_MODULE_OSAL,
|
||||
MPP_OSAL_CMD_END,
|
||||
|
||||
MPP_CMD_BASE = CMD_MODULE_MPP,
|
||||
MPP_ENABLE_DEINTERLACE,
|
||||
MPP_SET_OUTPUT_BLOCK,
|
||||
MPP_CMD_END,
|
||||
|
||||
MPP_HAL_CMD_BASE = 0x10000,
|
||||
|
||||
MPP_OSAL_CMD_BASE = 0x20000,
|
||||
|
||||
MPP_CODEC_CMD_BASE = 0x30000,
|
||||
MPP_CODEC_SET_INFO_CHANGE_READY,
|
||||
MPP_CODEC_SET_FRAME_INFO,
|
||||
MPP_CODEC_CMD_BASE = CMD_MODULE_CODEC,
|
||||
MPP_CODEC_GET_FRAME_INFO,
|
||||
MPP_CODEC_GET_VPUMEM_USED_COUNT,
|
||||
MPP_CODEC_CMD_END,
|
||||
|
||||
MPP_DEC_CMD_BASE = 0x40000,
|
||||
MPP_DEC_CMD_BASE = CMD_MODULE_CODEC | CMD_CTX_ID_DEC,
|
||||
MPP_DEC_SET_FRAME_INFO, /* vpu api legacy control for buffer slot dimension init */
|
||||
MPP_DEC_SET_EXT_BUF_GROUP, /* IMPORTANT: set external buffer group to mpp decoder */
|
||||
MPP_DEC_SET_INFO_CHANGE_READY,
|
||||
MPP_DEC_SET_INTERNAL_PTS_ENABLE,
|
||||
MPP_DEC_SET_VC1_EXTRA_DATA,
|
||||
MPP_DEC_SET_PARSER_SPLIT_MODE, /* Need to setup before init */
|
||||
MPP_DEC_SET_PARSER_FAST_MODE, /* Need to setup before init */
|
||||
MPP_DEC_GET_STREAM_COUNT,
|
||||
MPP_DEC_GET_VPUMEM_USED_COUNT,
|
||||
MPP_DEC_SET_VC1_EXTRA_DATA,
|
||||
MPP_DEC_CMD_END,
|
||||
|
||||
MPP_ENC_CMD_BASE = 0x50000,
|
||||
MPP_ENC_CMD_BASE = CMD_MODULE_CODEC | CMD_CTX_ID_ENC,
|
||||
MPP_ENC_SET_CFG,
|
||||
MPP_ENC_GET_CFG,
|
||||
MPP_ENC_SET_EXTRA_INFO,
|
||||
MPP_ENC_GET_EXTRA_INFO,
|
||||
MPP_ENC_SETCFG,
|
||||
MPP_ENC_GETCFG,
|
||||
MPP_ENC_SETFORMAT,
|
||||
MPP_ENC_SETIDRFRAME,
|
||||
MPP_ENC_SET_FORMAT,
|
||||
MPP_ENC_SET_IDR_FRAME,
|
||||
MPP_ENC_CMD_END,
|
||||
|
||||
MPP_ISP_CMD_BASE = CMD_MODULE_CODEC | CMD_CTX_ID_ISP,
|
||||
MPP_ISP_CMD_END,
|
||||
|
||||
MPP_HAL_CMD_BASE = CMD_MODULE_HAL,
|
||||
MPP_HAL_CMD_END,
|
||||
|
||||
MPI_CMD_BUTT,
|
||||
} MpiCmd;
|
||||
@@ -177,7 +204,6 @@ typedef struct MppEncConfig_t {
|
||||
* reset : discard all packet and frame, reset all component,
|
||||
* for both decoder and encoder
|
||||
* control : control function for mpp property setting
|
||||
* config : config function for encoder, not implement yet.
|
||||
*/
|
||||
typedef struct MppApi_t {
|
||||
RK_U32 size;
|
||||
@@ -203,7 +229,6 @@ typedef struct MppApi_t {
|
||||
// control interface
|
||||
MPP_RET (*reset)(MppCtx ctx);
|
||||
MPP_RET (*control)(MppCtx ctx, MpiCmd cmd, MppParam param);
|
||||
MPP_RET (*config)(MppCtx ctx, MpiCmd cmd, MppEncConfig cfg);
|
||||
|
||||
RK_U32 reserv[16];
|
||||
} MppApi;
|
||||
|
@@ -53,7 +53,7 @@ void *mpp_enc_hal_thread(void *data);
|
||||
|
||||
MPP_RET mpp_enc_init(MppEnc *enc, MppCodingType coding);
|
||||
MPP_RET mpp_enc_deinit(MppEnc *enc);
|
||||
MPP_RET mpp_enc_config(MppEnc *enc, MpiCmd cmd, void *param);
|
||||
MPP_RET mpp_enc_control(MppEnc *enc, MpiCmd cmd, void *param);
|
||||
MPP_RET mpp_enc_notify(void *ctx, void *info);
|
||||
MPP_RET mpp_enc_reset(MppEnc *enc);
|
||||
|
||||
|
@@ -958,7 +958,7 @@ MPP_RET mpp_dec_control(MppDec *dec, MpiCmd cmd, void *param)
|
||||
mpp_hal_control(dec->hal, cmd, param);
|
||||
|
||||
switch (cmd) {
|
||||
case MPP_CODEC_SET_FRAME_INFO : {
|
||||
case MPP_DEC_SET_FRAME_INFO : {
|
||||
VPU_GENERIC *p = (VPU_GENERIC *)param;
|
||||
MppFrame frame = NULL;
|
||||
mpp_frame_init(&frame);
|
||||
@@ -971,7 +971,7 @@ MPP_RET mpp_dec_control(MppDec *dec, MpiCmd cmd, void *param)
|
||||
mpp_slots_set_prop(dec->frame_slots, SLOTS_FRAME_INFO, frame);
|
||||
mpp_frame_deinit(&frame);
|
||||
} break;
|
||||
case MPP_CODEC_GET_VPUMEM_USED_COUNT: {
|
||||
case MPP_DEC_GET_VPUMEM_USED_COUNT: {
|
||||
RK_S32 *p = (RK_S32 *)param;
|
||||
*p = mpp_buf_slot_get_used_size(dec->frame_slots);
|
||||
} break;
|
||||
|
@@ -299,7 +299,7 @@ MPP_RET mpp_enc_notify(void *ctx, void *info)
|
||||
return MPP_OK;
|
||||
}
|
||||
|
||||
MPP_RET mpp_enc_config(MppEnc *enc, MpiCmd cmd, void *param)
|
||||
MPP_RET mpp_enc_control(MppEnc *enc, MpiCmd cmd, void *param)
|
||||
{
|
||||
if (NULL == enc) {
|
||||
mpp_err_f("found NULL input enc %p\n", enc);
|
||||
@@ -311,7 +311,7 @@ MPP_RET mpp_enc_config(MppEnc *enc, MpiCmd cmd, void *param)
|
||||
H264EncConfig *encCfg = &(enc->encCfg);
|
||||
|
||||
switch (cmd) {
|
||||
case MPP_ENC_SETCFG:
|
||||
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"
|
||||
encCfg->frameRateDenom = 1;
|
||||
if (0 != mppCfg->profile)
|
||||
|
@@ -539,7 +539,7 @@ MPP_RET rkv_h264d_control(void *hal, RK_S32 cmd_type, void *param)
|
||||
INP_CHECK(ret, NULL == p_hal);
|
||||
FunctionIn(p_hal->logctx.parr[RUN_HAL]);
|
||||
switch ((MpiCmd)cmd_type) {
|
||||
case MPP_CODEC_SET_FRAME_INFO: {
|
||||
case MPP_DEC_SET_FRAME_INFO: {
|
||||
VPU_GENERIC *p = (VPU_GENERIC *)param;
|
||||
if (p->CodecType == MPP_FMT_YUV422SP) {
|
||||
mpp_slots_set_prop(p_hal->frame_slots, SLOTS_LEN_ALIGN, rkv_len_align_422);
|
||||
|
@@ -117,7 +117,14 @@ RK_S32 VpuApiLegacy::init(VpuCodecContext *ctx, RK_U8 *extraData, RK_U32 extra_s
|
||||
mpp_err("found invalid context input");
|
||||
return MPP_ERR_NULL_PTR;
|
||||
}
|
||||
if (MPP_CTX_ENC == type) {
|
||||
|
||||
ret = mpp_init(mpp_ctx, type, (MppCodingType)ctx->videoCoding);
|
||||
if (ret) {
|
||||
mpp_err_f(" init error. \n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (MPP_CTX_ENC == type && mpp_ctx) {
|
||||
EncParameter_t *encParam = (EncParameter_t*)ctx->private_data;
|
||||
MppEncConfig encCfg;
|
||||
memset(&encCfg, 0, sizeof(MppEncConfig));
|
||||
@@ -138,15 +145,8 @@ RK_S32 VpuApiLegacy::init(VpuCodecContext *ctx, RK_U8 *extraData, RK_U32 extra_s
|
||||
encCfg.fps_out = encParam->framerate;
|
||||
if (0 != encParam->intraPicRate)
|
||||
encCfg.gop = encParam->intraPicRate;
|
||||
mpi->config(mpp_ctx, MPP_ENC_SETCFG, encCfg); // input parameter config
|
||||
}
|
||||
ret = mpp_init(mpp_ctx, type, (MppCodingType)ctx->videoCoding);
|
||||
if (ret) {
|
||||
mpp_err_f(" init error. \n");
|
||||
return ret;
|
||||
}
|
||||
// TODO
|
||||
if(MPP_CTX_ENC == type) {
|
||||
mpi->control(mpp_ctx, MPP_ENC_SET_CFG, &encCfg); // input parameter config
|
||||
|
||||
if (mpp_enc_get_extra_data_size(mpp_ctx) > 0) {
|
||||
ctx->extradata_size = mpp_enc_get_extra_data_size(mpp_ctx);
|
||||
ctx->extradata = mpp_enc_get_extra_data(mpp_ctx);
|
||||
@@ -603,7 +603,7 @@ RK_S32 VpuApiLegacy::control(VpuCodecContext *ctx, VPU_API_CMD cmd, void *param)
|
||||
case VPU_API_SET_DEFAULT_WIDTH_HEIGH: {
|
||||
RK_U32 ImgWidth = 0;
|
||||
VPU_GENERIC *p = (VPU_GENERIC *)param;
|
||||
mpicmd = MPP_CODEC_SET_FRAME_INFO;
|
||||
mpicmd = MPP_DEC_SET_FRAME_INFO;
|
||||
/**hightest of p->ImgWidth bit show current dec bitdepth
|
||||
* 0 - 8bit
|
||||
* 1 - 10bit
|
||||
@@ -628,7 +628,7 @@ RK_S32 VpuApiLegacy::control(VpuCodecContext *ctx, VPU_API_CMD cmd, void *param)
|
||||
break;
|
||||
}
|
||||
case VPU_API_SET_INFO_CHANGE: {
|
||||
mpicmd = MPP_CODEC_SET_INFO_CHANGE_READY;
|
||||
mpicmd = MPP_DEC_SET_INFO_CHANGE_READY;
|
||||
break;
|
||||
}
|
||||
case VPU_API_USE_FAST_MODE: {
|
||||
@@ -640,7 +640,7 @@ RK_S32 VpuApiLegacy::control(VpuCodecContext *ctx, VPU_API_CMD cmd, void *param)
|
||||
break;
|
||||
}
|
||||
case VPU_API_GET_VPUMEM_USED_COUNT: {
|
||||
mpicmd = MPP_CODEC_GET_VPUMEM_USED_COUNT;
|
||||
mpicmd = MPP_DEC_GET_VPUMEM_USED_COUNT;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
|
19
mpp/mpi.cpp
19
mpp/mpi.cpp
@@ -57,24 +57,6 @@ static MPP_RET _check_mpp_ctx(MpiImpl *p, const char *caller)
|
||||
return MPP_OK;
|
||||
}
|
||||
|
||||
static MPP_RET mpi_config(MppCtx ctx, MpiCmd cmd, MppEncConfig cfg)
|
||||
{
|
||||
MPP_RET ret = MPP_NOK;
|
||||
MpiImpl *p = (MpiImpl *)ctx;
|
||||
|
||||
mpi_dbg_func("enter ctx %p cfg %p\n", ctx, cfg);
|
||||
do {
|
||||
ret = check_mpp_ctx(p);
|
||||
if (ret)
|
||||
break;
|
||||
|
||||
ret = p->ctx->config(cmd, cfg); // configure parameter set
|
||||
} while (0);
|
||||
|
||||
mpi_dbg_func("leave ret %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static MPP_RET mpi_decode(MppCtx ctx, MppPacket packet, MppFrame *frame)
|
||||
{
|
||||
MPP_RET ret = MPP_NOK;
|
||||
@@ -351,7 +333,6 @@ static MppApi mpp_api = {
|
||||
mpi_enqueue,
|
||||
mpi_reset,
|
||||
mpi_control,
|
||||
mpi_config,
|
||||
{0},
|
||||
};
|
||||
|
||||
|
219
mpp/mpp.cpp
219
mpp/mpp.cpp
@@ -363,74 +363,54 @@ MPP_RET Mpp::enqueue(MppPortType type, MppTask task)
|
||||
|
||||
MPP_RET Mpp::control(MpiCmd cmd, MppParam param)
|
||||
{
|
||||
switch (cmd) {
|
||||
case MPP_DEC_SET_EXT_BUF_GROUP: {
|
||||
mpp_log("mpi_control group %p\n", param);
|
||||
mFrameGroup = (MppBufferGroup)param;
|
||||
mpp_buffer_group_set_listener((MppBufferGroupImpl *)param, (void *)mThreadCodec);
|
||||
mpp_log("signal codec thread\n");
|
||||
mThreadCodec->signal();
|
||||
break;
|
||||
}
|
||||
case MPP_SET_OUTPUT_BLOCK: {
|
||||
RK_U32 block = *((RK_U32 *)param);
|
||||
mOutputBlock = block;
|
||||
break;
|
||||
}
|
||||
case MPP_CODEC_SET_INFO_CHANGE_READY: {
|
||||
if (mType == MPP_CTX_DEC) {
|
||||
mpp_buf_slot_ready(mDec->frame_slots);
|
||||
MPP_RET ret = MPP_NOK;
|
||||
|
||||
switch (cmd & CMD_MODULE_ID_MASK) {
|
||||
case CMD_MODULE_OSAL : {
|
||||
ret = control_osal(cmd, param);
|
||||
} break;
|
||||
case CMD_MODULE_MPP : {
|
||||
ret = control_mpp(cmd, param);
|
||||
} break;
|
||||
case CMD_MODULE_CODEC : {
|
||||
switch (cmd & CMD_CTX_ID_MASK) {
|
||||
case CMD_CTX_ID_DEC : {
|
||||
mpp_assert(mType == MPP_CTX_DEC);
|
||||
mpp_assert(cmd > MPP_DEC_CMD_BASE);
|
||||
mpp_assert(cmd < MPP_DEC_CMD_END);
|
||||
|
||||
ret = control_dec(cmd, param);
|
||||
} break;
|
||||
case CMD_CTX_ID_ENC : {
|
||||
mpp_assert(mType == MPP_CTX_ENC);
|
||||
mpp_assert(cmd > MPP_ENC_CMD_BASE);
|
||||
mpp_assert(cmd < MPP_ENC_CMD_END);
|
||||
|
||||
ret = control_enc(cmd, param);
|
||||
} break;
|
||||
case CMD_CTX_ID_ISP : {
|
||||
mpp_assert(mType == MPP_CTX_ISP);
|
||||
ret = control_isp(cmd, param);
|
||||
} break;
|
||||
default : {
|
||||
ret = control_codec(cmd, param);
|
||||
} break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MPP_CODEC_SET_FRAME_INFO: {
|
||||
mpp_assert(mType == MPP_CTX_DEC);
|
||||
mpp_dec_control(mDec, cmd, param);
|
||||
break;
|
||||
}
|
||||
case MPP_DEC_SET_INTERNAL_PTS_ENABLE: {
|
||||
if (mType == MPP_CTX_DEC &&
|
||||
(mCoding == MPP_VIDEO_CodingMPEG2 ||
|
||||
mCoding == MPP_VIDEO_CodingMPEG4)) {
|
||||
mpp_dec_control(mDec, cmd, param);
|
||||
} else {
|
||||
mpp_err("type %x coding %x does not support use internal pts control\n");
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MPP_DEC_SET_PARSER_SPLIT_MODE: {
|
||||
RK_U32 flag = *((RK_U32 *)param);
|
||||
mParserNeedSplit = flag;
|
||||
break;
|
||||
}
|
||||
case MPP_DEC_SET_PARSER_FAST_MODE: {
|
||||
RK_U32 flag = *((RK_U32 *)param);
|
||||
mParserFastMode = flag;
|
||||
break;
|
||||
}
|
||||
case MPP_DEC_GET_STREAM_COUNT: {
|
||||
AutoMutex autoLock(mPackets->mutex());
|
||||
mpp_assert(mType == MPP_CTX_DEC);
|
||||
*((RK_S32 *)param) = mPackets->list_size();
|
||||
break;
|
||||
}
|
||||
case MPP_CODEC_GET_VPUMEM_USED_COUNT: {
|
||||
AutoMutex autoLock(mPackets->mutex());
|
||||
if (mType == MPP_CTX_DEC) {
|
||||
mpp_dec_control(mDec, cmd, param);
|
||||
}
|
||||
break;
|
||||
}
|
||||
} break;
|
||||
default : {
|
||||
} break;
|
||||
}
|
||||
return MPP_OK;
|
||||
|
||||
if (ret)
|
||||
mpp_err("command %x param %p ret %d\n", cmd, param, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
MPP_RET Mpp::config(MpiCmd cmd, MppEncConfig cfg)
|
||||
{
|
||||
switch (cmd) {
|
||||
case MPP_ENC_SETCFG:
|
||||
case MPP_ENC_SET_CFG:
|
||||
mEnc = mpp_calloc(MppEnc, 1);
|
||||
if (NULL == mEnc) {
|
||||
mpp_err_f("failed to malloc context\n");
|
||||
@@ -438,7 +418,7 @@ MPP_RET Mpp::config(MpiCmd cmd, MppEncConfig cfg)
|
||||
}
|
||||
mEnc->mpp = this; // TODO put these code into config function
|
||||
|
||||
mpp_enc_config(mEnc, cmd, &cfg);
|
||||
mpp_enc_control(mEnc, cmd, &cfg);
|
||||
break;
|
||||
default:
|
||||
mpp_log("MpiCmd is not found in mpi_config.");
|
||||
@@ -499,3 +479,122 @@ MPP_RET Mpp::reset()
|
||||
return MPP_OK;
|
||||
}
|
||||
|
||||
|
||||
MPP_RET Mpp::control_mpp(MpiCmd cmd, MppParam param)
|
||||
{
|
||||
MPP_RET ret = MPP_NOK;
|
||||
|
||||
mpp_assert(cmd > MPP_CMD_BASE);
|
||||
mpp_assert(cmd < MPP_CMD_END);
|
||||
|
||||
switch (cmd) {
|
||||
case MPP_SET_OUTPUT_BLOCK: {
|
||||
RK_U32 block = *((RK_U32 *)param);
|
||||
mOutputBlock = block;
|
||||
} break;
|
||||
default : {
|
||||
} break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
MPP_RET Mpp::control_osal(MpiCmd cmd, MppParam param)
|
||||
{
|
||||
MPP_RET ret = MPP_NOK;
|
||||
|
||||
mpp_assert(cmd > MPP_OSAL_CMD_BASE);
|
||||
mpp_assert(cmd < MPP_OSAL_CMD_END);
|
||||
|
||||
(void)cmd;
|
||||
(void)param;
|
||||
return ret;
|
||||
}
|
||||
|
||||
MPP_RET Mpp::control_codec(MpiCmd cmd, MppParam param)
|
||||
{
|
||||
MPP_RET ret = MPP_NOK;
|
||||
|
||||
mpp_assert(cmd > MPP_CODEC_CMD_BASE);
|
||||
mpp_assert(cmd < MPP_CODEC_CMD_END);
|
||||
|
||||
(void)cmd;
|
||||
(void)param;
|
||||
return ret;
|
||||
}
|
||||
|
||||
MPP_RET Mpp::control_dec(MpiCmd cmd, MppParam param)
|
||||
{
|
||||
MPP_RET ret = MPP_NOK;
|
||||
|
||||
switch (cmd) {
|
||||
case MPP_DEC_SET_FRAME_INFO: {
|
||||
ret = mpp_dec_control(mDec, cmd, param);
|
||||
} break;
|
||||
case MPP_DEC_SET_EXT_BUF_GROUP: {
|
||||
mpp_log("mpi_control group %p\n", param);
|
||||
mFrameGroup = (MppBufferGroup)param;
|
||||
ret = mpp_buffer_group_set_listener((MppBufferGroupImpl *)param, (void *)mThreadCodec);
|
||||
mpp_log("signal codec thread\n");
|
||||
mThreadCodec->signal();
|
||||
} break;
|
||||
case MPP_DEC_SET_INFO_CHANGE_READY: {
|
||||
ret = mpp_buf_slot_ready(mDec->frame_slots);
|
||||
} break;
|
||||
case MPP_DEC_SET_INTERNAL_PTS_ENABLE: {
|
||||
if (mCoding == MPP_VIDEO_CodingMPEG2 || mCoding == MPP_VIDEO_CodingMPEG4) {
|
||||
ret = mpp_dec_control(mDec, cmd, param);
|
||||
} else {
|
||||
mpp_err("coding %x does not support use internal pts control\n", mCoding);
|
||||
}
|
||||
} break;
|
||||
case MPP_DEC_SET_PARSER_SPLIT_MODE: {
|
||||
RK_U32 flag = *((RK_U32 *)param);
|
||||
mParserNeedSplit = flag;
|
||||
ret = MPP_OK;
|
||||
} break;
|
||||
case MPP_DEC_SET_PARSER_FAST_MODE: {
|
||||
RK_U32 flag = *((RK_U32 *)param);
|
||||
mParserFastMode = flag;
|
||||
ret = MPP_OK;
|
||||
} break;
|
||||
case MPP_DEC_GET_STREAM_COUNT: {
|
||||
AutoMutex autoLock(mPackets->mutex());
|
||||
*((RK_S32 *)param) = mPackets->list_size();
|
||||
ret = MPP_OK;
|
||||
} break;
|
||||
case MPP_DEC_GET_VPUMEM_USED_COUNT: {
|
||||
ret = mpp_dec_control(mDec, cmd, param);
|
||||
} break;
|
||||
default : {
|
||||
} break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
MPP_RET Mpp::control_enc(MpiCmd cmd, MppParam param)
|
||||
{
|
||||
MPP_RET ret = MPP_NOK;
|
||||
|
||||
switch (cmd) {
|
||||
case MPP_ENC_SET_CFG : {
|
||||
if (mEnc)
|
||||
ret = mpp_enc_control(mEnc, cmd, param);
|
||||
} break;
|
||||
default : {
|
||||
} break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
MPP_RET Mpp::control_isp(MpiCmd cmd, MppParam param)
|
||||
{
|
||||
MPP_RET ret = MPP_NOK;
|
||||
|
||||
mpp_assert(cmd > MPP_ISP_CMD_BASE);
|
||||
mpp_assert(cmd < MPP_ISP_CMD_END);
|
||||
|
||||
(void)cmd;
|
||||
(void)param;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@@ -140,6 +140,13 @@ private:
|
||||
RK_U32 mParserNeedSplit;
|
||||
RK_U32 mParserInternalPts; /* for MPEG2/MPEG4 */
|
||||
|
||||
MPP_RET control_mpp(MpiCmd cmd, MppParam param);
|
||||
MPP_RET control_osal(MpiCmd cmd, MppParam param);
|
||||
MPP_RET control_codec(MpiCmd cmd, MppParam param);
|
||||
MPP_RET control_dec(MpiCmd cmd, MppParam param);
|
||||
MPP_RET control_enc(MpiCmd cmd, MppParam param);
|
||||
MPP_RET control_isp(MpiCmd cmd, MppParam param);
|
||||
|
||||
Mpp(const Mpp &);
|
||||
Mpp &operator=(const Mpp &);
|
||||
};
|
||||
|
@@ -45,8 +45,7 @@ int pthread_setname_np(pthread_t thread, const char *name);
|
||||
#include <semaphore.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#ifdef ARMLINUX
|
||||
#elif defined(ANDROID)
|
||||
#ifndef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
|
||||
#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP PTHREAD_RECURSIVE_MUTEX_INITIALIZER
|
||||
#endif
|
||||
|
||||
|
@@ -155,7 +155,7 @@ int mpi_test()
|
||||
mpp_log("decode_get_frame get info changed found\n");
|
||||
|
||||
// if work in external buffer mode re-commit buffer here
|
||||
mpi->control(ctx, MPP_CODEC_SET_INFO_CHANGE_READY, NULL);
|
||||
mpi->control(ctx, MPP_DEC_SET_INFO_CHANGE_READY, NULL);
|
||||
} else
|
||||
i++;
|
||||
|
||||
@@ -192,11 +192,8 @@ int mpi_test()
|
||||
|
||||
memset(&cfg, 0, sizeof(cfg));
|
||||
|
||||
ret = mpi->config(ctx, MPP_ENC_SETCFG, cfg);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("mpi->config failed\n");
|
||||
goto MPP_TEST_FAILED;
|
||||
}
|
||||
cmd = MPP_ENC_SET_CFG;
|
||||
param = &cfg;
|
||||
|
||||
ret = mpi->control(ctx, cmd, param);
|
||||
if (MPP_OK != ret) {
|
||||
@@ -204,8 +201,6 @@ int mpi_test()
|
||||
goto MPP_TEST_FAILED;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// interface with both input and output
|
||||
for (i = 0; i < MPI_ENC_LOOP_COUNT; i++) {
|
||||
mpp_frame_init(&enc_in);
|
||||
|
Reference in New Issue
Block a user