From 17f1b26cc3eb6fce014a00b8e4596c8bd5f80dc4 Mon Sep 17 00:00:00 2001 From: ChenHengming Date: Mon, 12 Oct 2015 23:04:27 +0000 Subject: [PATCH] [mpp]: add output block control git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@367 6e48237b-75ef-9749-8fc9-41990f28c85a --- inc/rk_mpi.h | 1 + mpp/mpi.cpp | 14 ++------------ mpp/mpp.cpp | 23 ++++++++++++++++++++--- mpp/mpp.h | 2 +- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/inc/rk_mpi.h b/inc/rk_mpi.h index c1b344d4..16b83a2e 100644 --- a/inc/rk_mpi.h +++ b/inc/rk_mpi.h @@ -62,6 +62,7 @@ typedef enum { typedef enum { MPP_CMD_BASE = 0, MPP_ENABLE_DEINTERLACE, + MPP_SET_OUTPUT_BLOCK, MPP_HAL_CMD_BASE = 0x10000, diff --git a/mpp/mpi.cpp b/mpp/mpi.cpp index 2cc650e8..bcea2346 100644 --- a/mpp/mpi.cpp +++ b/mpp/mpi.cpp @@ -138,19 +138,9 @@ static MPP_RET mpi_control(MppCtx ctx, MpiCmd cmd, MppParam param) { MPI_FUNCTION_ENTER(); MpiImpl *p = (MpiImpl *)ctx; - switch (cmd) { - case MPP_DEC_SET_EXT_BUF_GROUP: { - mpp_log("mpi_control group %p", param); - p->ctx->mFrameGroup = (MppBufferGroup)param; - break; - } - default: { - break; - } - } - + MPP_RET ret = p->ctx->control(cmd, param); MPI_FUNCTION_LEAVE(); - return MPP_OK; + return ret; } static MppApi mpp_api = { diff --git a/mpp/mpp.cpp b/mpp/mpp.cpp index e879ae09..73005c06 100644 --- a/mpp/mpp.cpp +++ b/mpp/mpp.cpp @@ -51,8 +51,7 @@ Mpp::Mpp(MppCtxType type, MppCodingType coding) mThreadHal(NULL), mType(type), mCoding(coding), - mPacketBlock(0), - mFrameBlock(0), + mOutputBlock(0), mMultiFrame(0), mStatus(0), mDec(NULL), @@ -180,7 +179,7 @@ MPP_RET Mpp::get_frame(MppFrame *frame) if (0 == mFrames->list_size()) { mThreadCodec->signal(); - if (mFrameBlock) + if (mOutputBlock) mFrames->wait(); } @@ -220,6 +219,12 @@ MPP_RET Mpp::put_frame(MppFrame frame) MPP_RET Mpp::get_packet(MppPacket *packet) { Mutex::Autolock autoLock(mPackets->mutex()); + if (0 == mPackets->list_size()) { + mThreadCodec->signal(); + if (mOutputBlock) + mPackets->wait(); + } + if (mPackets->list_size()) { mPackets->del_at_head(packet, sizeof(packet)); mPacketGetCount++; @@ -228,6 +233,18 @@ MPP_RET Mpp::get_packet(MppPacket *packet) } MPP_RET Mpp::control(MpiCmd cmd, MppParam param) { + switch (cmd) { + case MPP_DEC_SET_EXT_BUF_GROUP: { + mpp_log("mpi_control group %p", param); + mFrameGroup = (MppBufferGroup)param; + break; + } + case MPP_SET_OUTPUT_BLOCK: { + RK_U32 block = *((RK_U32 *)param); + mOutputBlock = block; + break; + } + } return MPP_OK; } diff --git a/mpp/mpp.h b/mpp/mpp.h index d6deebbe..4a61be2e 100644 --- a/mpp/mpp.h +++ b/mpp/mpp.h @@ -100,7 +100,7 @@ public: MppCodingType mCoding; RK_U32 mPacketBlock; - RK_U32 mFrameBlock; + RK_U32 mOutputBlock; RK_U32 mMultiFrame; RK_U32 mStatus;