mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 09:06:50 +08:00
[mpp]: Combine block control and timeout control
Use MppPollType as block control MPP_SET_INPUT_TIMEOUT and MPP_SET_OUTPUT_TIMEOUT 's parameter. Deprecate old block/block_timeout control. Next step is to change MppPollType to RK_S64 for compatible in different platform. Change-Id: I02974f0b8eeb23ff43687448d6c3271ea7dd0a2c Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
@@ -102,9 +102,21 @@ typedef enum {
|
||||
MPP_POLL_BUTT = -2,
|
||||
MPP_POLL_BLOCK = -1,
|
||||
MPP_POLL_NON_BLOCK = 0,
|
||||
MPP_POLL_MAX = 1000,
|
||||
MPP_POLL_MAX = 8000,
|
||||
} MppPollType;
|
||||
|
||||
/*
|
||||
* Mpp timeout define
|
||||
* MPP_TIMEOUT_BLOCK - for block poll
|
||||
* MPP_TIMEOUT_NON_BLOCK - for non-block poll
|
||||
* small than MPP_TIMEOUT_MAX - for poll with timeout in ms
|
||||
* small than MPP_TIMEOUT_BUTT or larger than MPP_TIMEOUT_MAX is invalid value
|
||||
*/
|
||||
#define MPP_TIMEOUT_BUTT (-2L)
|
||||
#define MPP_TIMEOUT_BLOCK (-1L)
|
||||
#define MPP_TIMEOUT_NON_BLOCK (0L)
|
||||
#define MPP_TIMEOUT_MAX (8000L)
|
||||
|
||||
/*
|
||||
* MppTask is descriptor of a task which send to mpp for process
|
||||
* mpp can support different type of work mode, for example:
|
||||
|
@@ -75,10 +75,18 @@ typedef enum {
|
||||
|
||||
MPP_CMD_BASE = CMD_MODULE_MPP,
|
||||
MPP_ENABLE_DEINTERLACE,
|
||||
MPP_SET_INPUT_BLOCK,
|
||||
MPP_SET_INTPUT_BLOCK_TIMEOUT,
|
||||
MPP_SET_OUTPUT_BLOCK,
|
||||
MPP_SET_OUTPUT_BLOCK_TIMEOUT,
|
||||
MPP_SET_INPUT_BLOCK, /* deprecated */
|
||||
MPP_SET_INTPUT_BLOCK_TIMEOUT, /* deprecated */
|
||||
MPP_SET_OUTPUT_BLOCK, /* deprecated */
|
||||
MPP_SET_OUTPUT_BLOCK_TIMEOUT, /* deprecated */
|
||||
/*
|
||||
* timeout setup, refer to MPP_TIMEOUT_XXX
|
||||
* zero - non block
|
||||
* negative - block with no timeout
|
||||
* positive - timeout in milisecond
|
||||
*/
|
||||
MPP_SET_INPUT_TIMEOUT, /* parameter type RK_S64 */
|
||||
MPP_SET_OUTPUT_TIMEOUT, /* parameter type RK_S64 */
|
||||
MPP_CMD_END,
|
||||
|
||||
MPP_CODEC_CMD_BASE = CMD_MODULE_CODEC,
|
||||
|
@@ -109,9 +109,8 @@ public:
|
||||
MppTaskQueue mInputTaskQueue;
|
||||
MppTaskQueue mOutputTaskQueue;
|
||||
|
||||
MppPollType mInputBlock;
|
||||
MppPollType mOutputBlock;
|
||||
RK_S64 mOutputBlockTimeout;
|
||||
MppPollType mInputTimeout;
|
||||
MppPollType mOutputTimeout;
|
||||
|
||||
MppTask mInputTask;
|
||||
/*
|
||||
|
@@ -447,9 +447,9 @@ RK_S32 VpuApiLegacy::init(VpuCodecContext *ctx, RK_U8 *extraData, RK_U32 extra_s
|
||||
MppPollType block = MPP_POLL_BLOCK;
|
||||
|
||||
/* setup input / output block mode */
|
||||
ret = mpi->control(mpp_ctx, MPP_SET_INPUT_BLOCK, (MppParam)&block);
|
||||
ret = mpi->control(mpp_ctx, MPP_SET_INPUT_TIMEOUT, (MppParam)&block);
|
||||
if (MPP_OK != ret)
|
||||
mpp_err("mpi->control MPP_SET_INPUT_BLOCK failed\n");
|
||||
mpp_err("mpi->control MPP_SET_INPUT_TIMEOUT failed\n");
|
||||
|
||||
if (memGroup == NULL) {
|
||||
ret = mpp_buffer_group_get_internal(&memGroup, MPP_BUFFER_TYPE_ION);
|
||||
@@ -1440,7 +1440,19 @@ RK_S32 VpuApiLegacy::control(VpuCodecContext *ctx, VPU_API_CMD cmd, void *param)
|
||||
mpicmd = MPP_DEC_GET_VPUMEM_USED_COUNT;
|
||||
} break;
|
||||
case VPU_API_SET_OUTPUT_BLOCK: {
|
||||
mpicmd = MPP_SET_OUTPUT_BLOCK;
|
||||
mpicmd = MPP_SET_OUTPUT_TIMEOUT;
|
||||
if (param) {
|
||||
RK_S32 timeout = *((RK_S32*)param);
|
||||
|
||||
if (timeout) {
|
||||
if (timeout < 0)
|
||||
mpp_log("set output mode to block\n");
|
||||
else
|
||||
mpp_log("set output timeout %d ms\n", timeout);
|
||||
} else {
|
||||
mpp_log("set output mode to non-block\n");
|
||||
}
|
||||
}
|
||||
} break;
|
||||
case VPU_API_GET_EOS_STATUS: {
|
||||
*((RK_S32 *)param) = mEosSet;
|
||||
|
@@ -107,7 +107,7 @@ static MPP_RET mpi_decode(MppCtx ctx, MppPacket packet, MppFrame *frame)
|
||||
* If there is frame to return get the frame first
|
||||
* But if the output mode is block then we need to send packet first
|
||||
*/
|
||||
if (!mpp->mOutputBlock || packet_done) {
|
||||
if (!mpp->mOutputTimeout || packet_done) {
|
||||
ret = mpp->get_frame(frame);
|
||||
if (ret || *frame)
|
||||
break;
|
||||
@@ -118,7 +118,7 @@ static MPP_RET mpi_decode(MppCtx ctx, MppPacket packet, MppFrame *frame)
|
||||
break;
|
||||
|
||||
/*
|
||||
* then send input stream with block mode
|
||||
* then send input stream with timeout mode
|
||||
*/
|
||||
ret = mpp->put_packet(packet);
|
||||
if (MPP_OK == ret)
|
||||
|
72
mpp/mpp.cpp
72
mpp/mpp.cpp
@@ -51,9 +51,8 @@ Mpp::Mpp()
|
||||
mOutputPort(NULL),
|
||||
mInputTaskQueue(NULL),
|
||||
mOutputTaskQueue(NULL),
|
||||
mInputBlock(MPP_POLL_NON_BLOCK),
|
||||
mOutputBlock(MPP_POLL_NON_BLOCK),
|
||||
mOutputBlockTimeout(-1),
|
||||
mInputTimeout(MPP_POLL_NON_BLOCK),
|
||||
mOutputTimeout(MPP_POLL_NON_BLOCK),
|
||||
mInputTask(NULL),
|
||||
mThreadCodec(NULL),
|
||||
mThreadHal(NULL),
|
||||
@@ -294,8 +293,6 @@ MPP_RET Mpp::put_packet(MppPacket packet)
|
||||
|
||||
MPP_RET Mpp::get_frame(MppFrame *frame)
|
||||
{
|
||||
RK_S32 ret;
|
||||
|
||||
if (!mInitDone)
|
||||
return MPP_ERR_INIT;
|
||||
|
||||
@@ -303,20 +300,21 @@ MPP_RET Mpp::get_frame(MppFrame *frame)
|
||||
MppFrame first = NULL;
|
||||
|
||||
if (0 == mFrames->list_size()) {
|
||||
if (mOutputBlock == MPP_POLL_BLOCK) {
|
||||
if (mOutputBlockTimeout >= 0) {
|
||||
ret = mFrames->wait(mOutputBlockTimeout);
|
||||
if (mOutputTimeout) {
|
||||
if (mOutputTimeout < 0) {
|
||||
/* block wait */
|
||||
mFrames->wait();
|
||||
} else {
|
||||
RK_S32 ret = mFrames->wait(mOutputTimeout);
|
||||
if (ret) {
|
||||
if (ret == ETIMEDOUT)
|
||||
return MPP_ERR_TIMEOUT;
|
||||
else
|
||||
return MPP_NOK;
|
||||
}
|
||||
} else {
|
||||
mFrames->wait();
|
||||
}
|
||||
} else {
|
||||
/* NOTE: this sleep is to avoid user's dead loop */
|
||||
/* NOTE: in non-block mode the sleep is to avoid user's dead loop */
|
||||
msleep(1);
|
||||
}
|
||||
}
|
||||
@@ -362,9 +360,9 @@ MPP_RET Mpp::put_frame(MppFrame frame)
|
||||
|
||||
if (mInputTask == NULL) {
|
||||
/* poll input port for valid task */
|
||||
ret = poll(MPP_PORT_INPUT, mInputBlock);
|
||||
ret = poll(MPP_PORT_INPUT, mInputTimeout);
|
||||
if (ret) {
|
||||
mpp_log_f("poll on set timeout %d ret %d\n", mInputBlock, ret);
|
||||
mpp_log_f("poll on set timeout %d ret %d\n", mInputTimeout, ret);
|
||||
goto RET;
|
||||
}
|
||||
|
||||
@@ -395,7 +393,7 @@ MPP_RET Mpp::put_frame(MppFrame frame)
|
||||
/* wait enqueued task finished */
|
||||
ret = poll(MPP_PORT_INPUT, MPP_POLL_BLOCK);
|
||||
if (ret) {
|
||||
mpp_log_f("poll on get timeout %d ret %d\n", mInputBlock, ret);
|
||||
mpp_log_f("poll on get timeout %d ret %d\n", mInputTimeout, ret);
|
||||
goto RET;
|
||||
}
|
||||
|
||||
@@ -429,7 +427,7 @@ MPP_RET Mpp::get_packet(MppPacket *packet)
|
||||
MPP_RET ret = MPP_OK;
|
||||
MppTask task = NULL;
|
||||
|
||||
ret = poll(MPP_PORT_OUTPUT, mOutputBlock);
|
||||
ret = poll(MPP_PORT_OUTPUT, mOutputTimeout);
|
||||
if (ret) {
|
||||
// NOTE: Do not treat poll failure as error. Just clear output
|
||||
ret = MPP_OK;
|
||||
@@ -655,17 +653,43 @@ MPP_RET Mpp::control_mpp(MpiCmd cmd, MppParam param)
|
||||
MPP_RET ret = MPP_OK;
|
||||
|
||||
switch (cmd) {
|
||||
case MPP_SET_INPUT_BLOCK: {
|
||||
MppPollType block = *((MppPollType *)param);
|
||||
mInputBlock = block;
|
||||
} break;
|
||||
case MPP_SET_OUTPUT_BLOCK: {
|
||||
MppPollType block = *((MppPollType *)param);
|
||||
mOutputBlock = block;
|
||||
} break;
|
||||
case MPP_SET_INPUT_BLOCK :
|
||||
case MPP_SET_OUTPUT_BLOCK :
|
||||
case MPP_SET_INTPUT_BLOCK_TIMEOUT :
|
||||
case MPP_SET_OUTPUT_BLOCK_TIMEOUT : {
|
||||
mOutputBlockTimeout = *((RK_S64 *)param);
|
||||
MppPollType block = (param) ? *((MppPollType *)param) : MPP_POLL_NON_BLOCK;
|
||||
|
||||
if (block <= MPP_POLL_BUTT || block > MPP_POLL_MAX) {
|
||||
mpp_err("invalid output timeout type %d should be in range [%d, %d]\n",
|
||||
block, MPP_POLL_BUTT, MPP_POLL_MAX);
|
||||
ret = MPP_ERR_VALUE;
|
||||
break;
|
||||
}
|
||||
if (cmd == MPP_SET_INPUT_BLOCK || cmd == MPP_SET_INTPUT_BLOCK_TIMEOUT)
|
||||
mInputTimeout = block;
|
||||
else
|
||||
mOutputTimeout = block;
|
||||
|
||||
mpp_log("deprecated block control, use timeout control instead\n");
|
||||
} break;
|
||||
|
||||
case MPP_SET_INPUT_TIMEOUT:
|
||||
case MPP_SET_OUTPUT_TIMEOUT: {
|
||||
MppPollType timeout = (param) ? *((MppPollType *)param) : MPP_POLL_NON_BLOCK;
|
||||
|
||||
if (timeout <= MPP_POLL_BUTT || timeout > MPP_POLL_MAX) {
|
||||
mpp_err("invalid output timeout type %d should be in range [%d, %d]\n",
|
||||
timeout, MPP_POLL_BUTT, MPP_POLL_MAX);
|
||||
ret = MPP_ERR_VALUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (cmd == MPP_SET_INPUT_TIMEOUT)
|
||||
mInputTimeout = timeout;
|
||||
else
|
||||
mOutputTimeout = timeout;
|
||||
} break;
|
||||
|
||||
default : {
|
||||
ret = MPP_NOK;
|
||||
} break;
|
||||
|
@@ -281,8 +281,7 @@ int mpi_dec_test_decode(MpiDecTestCmd *cmd)
|
||||
MpiCmd mpi_cmd = MPP_CMD_BASE;
|
||||
MppParam param = NULL;
|
||||
RK_U32 need_split = 1;
|
||||
RK_U32 output_block = MPP_POLL_BLOCK;
|
||||
RK_S64 block_timeout = cmd->timeout;
|
||||
MppPollType timeout = cmd->timeout;
|
||||
|
||||
// paramter for resource malloc
|
||||
RK_U32 width = cmd->width;
|
||||
@@ -353,22 +352,15 @@ int mpi_dec_test_decode(MpiDecTestCmd *cmd)
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
// output timeout setup
|
||||
// if timeout is 0 then it is non-block mode
|
||||
// if timeout is -1 then it is block mode
|
||||
// if timeout is positive value then it is timeout time in ms
|
||||
if (block_timeout) {
|
||||
param = &output_block;
|
||||
ret = mpi->control(ctx, MPP_SET_OUTPUT_BLOCK, param);
|
||||
// NOTE: timeout value please refer to MppPollType definition
|
||||
// 0 - non-block call (default)
|
||||
// -1 - block call
|
||||
// +val - timeout value in ms
|
||||
if (timeout) {
|
||||
param = &timeout;
|
||||
ret = mpi->control(ctx, MPP_SET_OUTPUT_TIMEOUT, param);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("Failed to set blocking mode on MPI (code = %d).\n", ret);
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
param = &block_timeout;
|
||||
ret = mpi->control(ctx, MPP_SET_OUTPUT_BLOCK_TIMEOUT, param);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("Failed to set blocking mode on MPI (code = %d).\n", ret);
|
||||
mpp_err("Failed to set output timeout %d ret %d\n", timeout, ret);
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
}
|
||||
|
@@ -386,8 +386,7 @@ void* mpi_dec_test_decode(void *cmd_ctx)
|
||||
MpiCmd mpi_cmd = MPP_CMD_BASE;
|
||||
MppParam param = NULL;
|
||||
RK_U32 need_split = 1;
|
||||
RK_U32 output_block = MPP_POLL_BLOCK;
|
||||
RK_S64 block_timeout = cmd->timeout;
|
||||
MppPollType timeout = cmd->timeout;
|
||||
|
||||
// paramter for resource malloc
|
||||
RK_U32 width = cmd->width;
|
||||
@@ -505,18 +504,15 @@ void* mpi_dec_test_decode(void *cmd_ctx)
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
if (block_timeout) {
|
||||
param = &output_block;
|
||||
ret = mpi->control(ctx, MPP_SET_OUTPUT_BLOCK, param);
|
||||
// NOTE: timeout value please refer to MppPollType definition
|
||||
// 0 - non-block call (default)
|
||||
// -1 - block call
|
||||
// +val - timeout value in ms
|
||||
if (timeout) {
|
||||
param = &timeout;
|
||||
ret = mpi->control(ctx, MPP_SET_OUTPUT_TIMEOUT, param);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("Failed to set blocking mode on MPI (code = %d).\n", ret);
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
param = &block_timeout;
|
||||
ret = mpi->control(ctx, MPP_SET_OUTPUT_BLOCK_TIMEOUT, param);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("Failed to set blocking mode on MPI (code = %d).\n", ret);
|
||||
mpp_err("Failed to set output timeout %d ret %d\n", timeout, ret);
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
}
|
||||
|
@@ -431,8 +431,7 @@ int mpi_dec_test_decode(MpiDecTestCmd *cmd)
|
||||
MpiCmd mpi_cmd = MPP_CMD_BASE;
|
||||
MppParam param = NULL;
|
||||
RK_U32 need_split = 1;
|
||||
RK_U32 output_block = MPP_POLL_BLOCK;
|
||||
RK_S64 block_timeout = cmd->timeout;
|
||||
MppPollType timeout = cmd->timeout;
|
||||
|
||||
// paramter for resource malloc
|
||||
RK_U32 width = cmd->width;
|
||||
@@ -553,18 +552,15 @@ int mpi_dec_test_decode(MpiDecTestCmd *cmd)
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
if (block_timeout) {
|
||||
param = &output_block;
|
||||
ret = mpi->control(ctx, MPP_SET_OUTPUT_BLOCK, param);
|
||||
// NOTE: timeout value please refer to MppPollType definition
|
||||
// 0 - non-block call (default)
|
||||
// -1 - block call
|
||||
// +val - timeout value in ms
|
||||
if (timeout) {
|
||||
param = &timeout;
|
||||
ret = mpi->control(ctx, MPP_SET_OUTPUT_TIMEOUT, param);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("Failed to set blocking mode on MPI (code = %d).\n", ret);
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
param = &block_timeout;
|
||||
ret = mpi->control(ctx, MPP_SET_OUTPUT_BLOCK_TIMEOUT, param);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("Failed to set blocking mode on MPI (code = %d).\n", ret);
|
||||
mpp_err("Failed to set output timeout %d ret %d\n", timeout, ret);
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
}
|
||||
|
@@ -508,7 +508,7 @@ static MPP_RET mpi_rc_enc_init(MpiRc2TestCtx *ctx)
|
||||
MppCtx *enc_ctx = &ctx->enc_ctx;
|
||||
MppApi *enc_mpi;
|
||||
MpiRcTestCmd *cmd = &ctx->cmd;
|
||||
int block;
|
||||
MppPollType block = MPP_POLL_NON_BLOCK;
|
||||
|
||||
MppCodingType type = cmd->type;
|
||||
|
||||
@@ -527,15 +527,14 @@ static MPP_RET mpi_rc_enc_init(MpiRc2TestCtx *ctx)
|
||||
|
||||
enc_mpi = ctx->enc_mpi;
|
||||
|
||||
block = 0;
|
||||
ret = enc_mpi->control(*enc_ctx, MPP_SET_INPUT_BLOCK, (MppParam)&block);
|
||||
ret = enc_mpi->control(*enc_ctx, MPP_SET_INPUT_TIMEOUT, (MppParam)&block);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("enc_mpi->control MPP_SET_INPUT_BLOCK failed\n");
|
||||
mpp_err("enc_mpi->control MPP_SET_INPUT_TIMEOUT failed\n");
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
ret = enc_mpi->control(*enc_ctx, MPP_SET_OUTPUT_BLOCK, (MppParam)&block);
|
||||
ret = enc_mpi->control(*enc_ctx, MPP_SET_OUTPUT_TIMEOUT, (MppParam)&block);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("enc_mpi->control MPP_SET_OUTPUT_BLOCK failed\n");
|
||||
mpp_err("enc_mpi->control MPP_SET_OUTPUT_TIMEOUT failed\n");
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
@@ -704,7 +703,7 @@ static MPP_RET mpi_rc_post_dec_init(MpiRc2TestCtx *ctx)
|
||||
MpiRcTestCmd *cmd = &ctx->cmd;
|
||||
MppCodingType type = cmd->type;
|
||||
RK_U32 need_split = 0;
|
||||
int block;
|
||||
MppPollType block = MPP_POLL_NON_BLOCK;
|
||||
|
||||
// decoder init
|
||||
ret = mpp_create(&ctx->dec_ctx_post, &ctx->dec_mpi_post);
|
||||
@@ -727,19 +726,18 @@ static MPP_RET mpi_rc_post_dec_init(MpiRc2TestCtx *ctx)
|
||||
mpp_err("dec_mpi->control failed\n");
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
block = 0;
|
||||
ret = ctx->dec_mpi_post->control(ctx->dec_ctx_post, MPP_SET_INPUT_BLOCK,
|
||||
ret = ctx->dec_mpi_post->control(ctx->dec_ctx_post, MPP_SET_INPUT_TIMEOUT,
|
||||
(MppParam)&block);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("dec_mpi->control dec MPP_SET_INPUT_BLOCK failed\n");
|
||||
mpp_err("dec_mpi->control dec MPP_SET_INPUT_TIMEOUT failed\n");
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
block = 1;
|
||||
ret = ctx->dec_mpi_post->control(ctx->dec_ctx_post, MPP_SET_OUTPUT_BLOCK,
|
||||
block = MPP_POLL_BLOCK;
|
||||
ret = ctx->dec_mpi_post->control(ctx->dec_ctx_post, MPP_SET_OUTPUT_TIMEOUT,
|
||||
(MppParam)&block);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("dec_mpi->control MPP_SET_OUTPUT_BLOCK failed\n");
|
||||
mpp_err("dec_mpi->control MPP_SET_OUTPUT_TIMEOUT failed\n");
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
@@ -825,7 +823,7 @@ static MPP_RET mpi_rc_pre_dec_init(MpiRc2TestCtx *ctx)
|
||||
MPP_RET ret = MPP_OK;
|
||||
MpiRcTestCmd *cmd = &ctx->cmd;
|
||||
RK_U32 need_split = 1;
|
||||
RK_S32 block;
|
||||
MppPollType block = MPP_POLL_NON_BLOCK;
|
||||
MppApi *mpi = NULL;
|
||||
|
||||
// decoder init
|
||||
@@ -850,18 +848,18 @@ static MPP_RET mpi_rc_pre_dec_init(MpiRc2TestCtx *ctx)
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
block = 0;
|
||||
ret = mpi->control(ctx->dec_ctx_pre, MPP_SET_INPUT_BLOCK, (MppParam)&block);
|
||||
ret = mpi->control(ctx->dec_ctx_pre, MPP_SET_INPUT_TIMEOUT,
|
||||
(MppParam)&block);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("dec_mpi->control dec MPP_SET_INPUT_BLOCK failed\n");
|
||||
mpp_err("dec_mpi->control dec MPP_SET_INPUT_TIMEOUT failed\n");
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
block = 1;
|
||||
ret = mpi->control(ctx->dec_ctx_pre, MPP_SET_OUTPUT_BLOCK,
|
||||
block = MPP_POLL_BLOCK;
|
||||
ret = mpi->control(ctx->dec_ctx_pre, MPP_SET_OUTPUT_TIMEOUT,
|
||||
(MppParam)&block);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("dec_mpi->control MPP_SET_OUTPUT_BLOCK failed\n");
|
||||
mpp_err("dec_mpi->control MPP_SET_OUTPUT_TIMEOUT failed\n");
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
|
@@ -417,8 +417,7 @@ static MPP_RET mpi_rc_codec(MpiRcTestCtx *ctx)
|
||||
FILE *fp_stat = file->fp_stat;
|
||||
RK_U8 *dec_in_buf = NULL;
|
||||
RK_U32 need_split = 0;
|
||||
RK_U32 block_input = 0;
|
||||
RK_U32 block_output = 0;
|
||||
MppPollType block = MPP_POLL_NON_BLOCK;
|
||||
|
||||
// base flow context
|
||||
MppCtx enc_ctx = NULL;
|
||||
@@ -514,16 +513,18 @@ static MPP_RET mpi_rc_codec(MpiRcTestCtx *ctx)
|
||||
mpp_err("dec_mpi->control failed\n");
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
block_input = 0;
|
||||
block_output = 1;
|
||||
ret = dec_mpi->control(dec_ctx, MPP_SET_INPUT_BLOCK, (MppParam)&block_input);
|
||||
|
||||
block = MPP_POLL_NON_BLOCK;
|
||||
ret = dec_mpi->control(dec_ctx, MPP_SET_INPUT_TIMEOUT, (MppParam)&block);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("dec_mpi->control dec MPP_SET_INPUT_BLOCK failed\n");
|
||||
mpp_err("dec_mpi->control dec MPP_SET_INPUT_TIMEOUT failed\n");
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
ret = dec_mpi->control(dec_ctx, MPP_SET_OUTPUT_BLOCK, (MppParam)&block_output);
|
||||
|
||||
block = MPP_POLL_BLOCK;
|
||||
ret = dec_mpi->control(dec_ctx, MPP_SET_OUTPUT_TIMEOUT, (MppParam)&block);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("dec_mpi->control MPP_SET_OUTPUT_BLOCK failed\n");
|
||||
mpp_err("dec_mpi->control MPP_SET_OUTPUT_TIMEOUT failed\n");
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
@@ -552,16 +553,17 @@ static MPP_RET mpi_rc_codec(MpiRcTestCtx *ctx)
|
||||
mpp_err("mpp_create encoder failed\n");
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
block_input = 0;
|
||||
block_output = 0;
|
||||
ret = enc_mpi->control(enc_ctx, MPP_SET_INPUT_BLOCK, (MppParam)&block_input);
|
||||
|
||||
block = MPP_POLL_NON_BLOCK;
|
||||
ret = enc_mpi->control(enc_ctx, MPP_SET_INPUT_TIMEOUT, (MppParam)&block);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("enc_mpi->control MPP_SET_INPUT_BLOCK failed\n");
|
||||
mpp_err("enc_mpi->control MPP_SET_INPUT_TIMEOUT failed\n");
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
ret = enc_mpi->control(enc_ctx, MPP_SET_OUTPUT_BLOCK, (MppParam)&block_output);
|
||||
|
||||
ret = enc_mpi->control(enc_ctx, MPP_SET_OUTPUT_TIMEOUT, (MppParam)&block);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("enc_mpi->control MPP_SET_OUTPUT_BLOCK failed\n");
|
||||
mpp_err("enc_mpi->control MPP_SET_OUTPUT_TIMEOUT failed\n");
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
|
@@ -45,7 +45,7 @@ int mpi_test()
|
||||
|
||||
MpiCmd cmd = MPP_CMD_BASE;
|
||||
MppParam param = NULL;
|
||||
RK_U32 output_block = 1;
|
||||
MppPollType block = MPP_POLL_BLOCK;
|
||||
|
||||
RK_S32 i;
|
||||
char *buf = NULL;
|
||||
@@ -75,8 +75,8 @@ int mpi_test()
|
||||
}
|
||||
|
||||
// NOTE: decoder do not need control function
|
||||
cmd = MPP_SET_OUTPUT_BLOCK;
|
||||
param = &output_block;
|
||||
cmd = MPP_SET_OUTPUT_TIMEOUT;
|
||||
param = █
|
||||
ret = mpi->control(ctx, cmd, param);
|
||||
if (MPP_OK != ret) {
|
||||
mpp_err("mpi->control failed\n");
|
||||
|
Reference in New Issue
Block a user