From 1a2551ec3e039730bf819972b1d2316ae86a0e30 Mon Sep 17 00:00:00 2001 From: ChenHengming Date: Wed, 20 Jul 2016 07:54:31 +0000 Subject: [PATCH] [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 --- inc/rk_mpi.h | 61 +++++-- mpp/codec/inc/mpp_enc.h | 2 +- mpp/codec/mpp_dec.cpp | 4 +- mpp/codec/mpp_enc.cpp | 4 +- mpp/hal/rkdec/h264d/hal_h264d_rkv_reg.c | 2 +- mpp/legacy/vpu_api_legacy.cpp | 26 +-- mpp/mpi.cpp | 19 -- mpp/mpp.cpp | 219 +++++++++++++++++------- mpp/mpp.h | 7 + osal/inc/mpp_thread.h | 3 +- test/mpi_test.c | 11 +- 11 files changed, 232 insertions(+), 126 deletions(-) diff --git a/inc/rk_mpi.h b/inc/rk_mpi.h index 0a2167b6..15ca3272 100644 --- a/inc/rk_mpi.h +++ b/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; diff --git a/mpp/codec/inc/mpp_enc.h b/mpp/codec/inc/mpp_enc.h index 9f9dc865..b432844a 100644 --- a/mpp/codec/inc/mpp_enc.h +++ b/mpp/codec/inc/mpp_enc.h @@ -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); diff --git a/mpp/codec/mpp_dec.cpp b/mpp/codec/mpp_dec.cpp index 6284becf..da3a9e8a 100644 --- a/mpp/codec/mpp_dec.cpp +++ b/mpp/codec/mpp_dec.cpp @@ -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; diff --git a/mpp/codec/mpp_enc.cpp b/mpp/codec/mpp_enc.cpp index 6e369231..950f36f9 100644 --- a/mpp/codec/mpp_enc.cpp +++ b/mpp/codec/mpp_enc.cpp @@ -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) diff --git a/mpp/hal/rkdec/h264d/hal_h264d_rkv_reg.c b/mpp/hal/rkdec/h264d/hal_h264d_rkv_reg.c index 4c5919ee..10682ca5 100644 --- a/mpp/hal/rkdec/h264d/hal_h264d_rkv_reg.c +++ b/mpp/hal/rkdec/h264d/hal_h264d_rkv_reg.c @@ -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); diff --git a/mpp/legacy/vpu_api_legacy.cpp b/mpp/legacy/vpu_api_legacy.cpp index 61fb2342..082f32dc 100644 --- a/mpp/legacy/vpu_api_legacy.cpp +++ b/mpp/legacy/vpu_api_legacy.cpp @@ -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: { diff --git a/mpp/mpi.cpp b/mpp/mpi.cpp index acdeb075..d80a787d 100644 --- a/mpp/mpi.cpp +++ b/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}, }; diff --git a/mpp/mpp.cpp b/mpp/mpp.cpp index f2832b96..7cd73c20 100644 --- a/mpp/mpp.cpp +++ b/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; +} + diff --git a/mpp/mpp.h b/mpp/mpp.h index 6c6dbea9..8a6354de 100644 --- a/mpp/mpp.h +++ b/mpp/mpp.h @@ -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 &); }; diff --git a/osal/inc/mpp_thread.h b/osal/inc/mpp_thread.h index 03c67ccf..cbad7830 100644 --- a/osal/inc/mpp_thread.h +++ b/osal/inc/mpp_thread.h @@ -45,8 +45,7 @@ int pthread_setname_np(pthread_t thread, const char *name); #include #include -#ifdef ARMLINUX -#elif defined(ANDROID) +#ifndef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP #define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP PTHREAD_RECURSIVE_MUTEX_INITIALIZER #endif diff --git a/test/mpi_test.c b/test/mpi_test.c index b111ae69..193365b9 100644 --- a/test/mpi_test.c +++ b/test/mpi_test.c @@ -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);