[mpp]: add output block control

git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@367 6e48237b-75ef-9749-8fc9-41990f28c85a
This commit is contained in:
ChenHengming
2015-10-12 23:04:27 +00:00
parent 7fa4bce3de
commit 17f1b26cc3
4 changed files with 24 additions and 16 deletions

View File

@@ -62,6 +62,7 @@ typedef enum {
typedef enum { typedef enum {
MPP_CMD_BASE = 0, MPP_CMD_BASE = 0,
MPP_ENABLE_DEINTERLACE, MPP_ENABLE_DEINTERLACE,
MPP_SET_OUTPUT_BLOCK,
MPP_HAL_CMD_BASE = 0x10000, MPP_HAL_CMD_BASE = 0x10000,

View File

@@ -138,19 +138,9 @@ static MPP_RET mpi_control(MppCtx ctx, MpiCmd cmd, MppParam param)
{ {
MPI_FUNCTION_ENTER(); MPI_FUNCTION_ENTER();
MpiImpl *p = (MpiImpl *)ctx; MpiImpl *p = (MpiImpl *)ctx;
switch (cmd) { MPP_RET ret = p->ctx->control(cmd, param);
case MPP_DEC_SET_EXT_BUF_GROUP: {
mpp_log("mpi_control group %p", param);
p->ctx->mFrameGroup = (MppBufferGroup)param;
break;
}
default: {
break;
}
}
MPI_FUNCTION_LEAVE(); MPI_FUNCTION_LEAVE();
return MPP_OK; return ret;
} }
static MppApi mpp_api = { static MppApi mpp_api = {

View File

@@ -51,8 +51,7 @@ Mpp::Mpp(MppCtxType type, MppCodingType coding)
mThreadHal(NULL), mThreadHal(NULL),
mType(type), mType(type),
mCoding(coding), mCoding(coding),
mPacketBlock(0), mOutputBlock(0),
mFrameBlock(0),
mMultiFrame(0), mMultiFrame(0),
mStatus(0), mStatus(0),
mDec(NULL), mDec(NULL),
@@ -180,7 +179,7 @@ MPP_RET Mpp::get_frame(MppFrame *frame)
if (0 == mFrames->list_size()) { if (0 == mFrames->list_size()) {
mThreadCodec->signal(); mThreadCodec->signal();
if (mFrameBlock) if (mOutputBlock)
mFrames->wait(); mFrames->wait();
} }
@@ -220,6 +219,12 @@ MPP_RET Mpp::put_frame(MppFrame frame)
MPP_RET Mpp::get_packet(MppPacket *packet) MPP_RET Mpp::get_packet(MppPacket *packet)
{ {
Mutex::Autolock autoLock(mPackets->mutex()); Mutex::Autolock autoLock(mPackets->mutex());
if (0 == mPackets->list_size()) {
mThreadCodec->signal();
if (mOutputBlock)
mPackets->wait();
}
if (mPackets->list_size()) { if (mPackets->list_size()) {
mPackets->del_at_head(packet, sizeof(packet)); mPackets->del_at_head(packet, sizeof(packet));
mPacketGetCount++; mPacketGetCount++;
@@ -228,6 +233,18 @@ MPP_RET Mpp::get_packet(MppPacket *packet)
} }
MPP_RET Mpp::control(MpiCmd cmd, MppParam param) 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; return MPP_OK;
} }

View File

@@ -100,7 +100,7 @@ public:
MppCodingType mCoding; MppCodingType mCoding;
RK_U32 mPacketBlock; RK_U32 mPacketBlock;
RK_U32 mFrameBlock; RK_U32 mOutputBlock;
RK_U32 mMultiFrame; RK_U32 mMultiFrame;
RK_U32 mStatus; RK_U32 mStatus;