mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 17:16:50 +08:00
[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:
@@ -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,
|
||||||
|
|
||||||
|
14
mpp/mpi.cpp
14
mpp/mpi.cpp
@@ -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 = {
|
||||||
|
23
mpp/mpp.cpp
23
mpp/mpp.cpp
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user