mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-11 20:10:18 +08:00
[mpp_buffer]: fix issue of destroy external commit frame buffer group twice
Change-Id: I496f493fbeb038ca72425d946c65a4e7cce6b684 Signed-off-by: herman.chen <herman.chen@rock-chips.com>
This commit is contained in:
@@ -683,6 +683,7 @@ void MppBufferService::destroy_group(MppBufferGroupImpl *group)
|
|||||||
mpp_assert(group->log_count == 0);
|
mpp_assert(group->log_count == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mpp_assert(group->allocator);
|
||||||
mpp_allocator_put(&group->allocator);
|
mpp_allocator_put(&group->allocator);
|
||||||
list_del_init(&group->list_group);
|
list_del_init(&group->list_group);
|
||||||
mpp_free(group);
|
mpp_free(group);
|
||||||
|
12
mpp/mpp.cpp
12
mpp/mpp.cpp
@@ -45,6 +45,7 @@ Mpp::Mpp()
|
|||||||
mTaskGetCount(0),
|
mTaskGetCount(0),
|
||||||
mPacketGroup(NULL),
|
mPacketGroup(NULL),
|
||||||
mFrameGroup(NULL),
|
mFrameGroup(NULL),
|
||||||
|
mExternalFrameGroup(0),
|
||||||
mInputPort(NULL),
|
mInputPort(NULL),
|
||||||
mOutputPort(NULL),
|
mOutputPort(NULL),
|
||||||
mInputTaskQueue(NULL),
|
mInputTaskQueue(NULL),
|
||||||
@@ -213,11 +214,8 @@ void Mpp::clear()
|
|||||||
mpp_buffer_group_put(mPacketGroup);
|
mpp_buffer_group_put(mPacketGroup);
|
||||||
mPacketGroup = NULL;
|
mPacketGroup = NULL;
|
||||||
}
|
}
|
||||||
if (mFrameGroup) {
|
if (mFrameGroup && !mExternalFrameGroup) {
|
||||||
MppBufferMode mode = mpp_buffer_group_mode(mFrameGroup);
|
|
||||||
if (MPP_BUFFER_INTERNAL == mode) {
|
|
||||||
mpp_buffer_group_put(mFrameGroup);
|
mpp_buffer_group_put(mFrameGroup);
|
||||||
}
|
|
||||||
mFrameGroup = NULL;
|
mFrameGroup = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -607,8 +605,14 @@ MPP_RET Mpp::control_dec(MpiCmd cmd, MppParam param)
|
|||||||
} break;
|
} break;
|
||||||
case MPP_DEC_SET_EXT_BUF_GROUP: {
|
case MPP_DEC_SET_EXT_BUF_GROUP: {
|
||||||
mFrameGroup = (MppBufferGroup)param;
|
mFrameGroup = (MppBufferGroup)param;
|
||||||
|
if (param) {
|
||||||
|
mExternalFrameGroup = 1;
|
||||||
ret = mpp_buffer_group_set_listener((MppBufferGroupImpl *)param, (void *)mThreadCodec);
|
ret = mpp_buffer_group_set_listener((MppBufferGroupImpl *)param, (void *)mThreadCodec);
|
||||||
mThreadCodec->signal();
|
mThreadCodec->signal();
|
||||||
|
} else {
|
||||||
|
mExternalFrameGroup = 0;
|
||||||
|
ret = mpp_buffer_group_set_listener(NULL, (void *)mThreadCodec);
|
||||||
|
}
|
||||||
} break;
|
} break;
|
||||||
case MPP_DEC_SET_INFO_CHANGE_READY: {
|
case MPP_DEC_SET_INFO_CHANGE_READY: {
|
||||||
ret = mpp_buf_slot_ready(mDec->frame_slots);
|
ret = mpp_buf_slot_ready(mDec->frame_slots);
|
||||||
|
Reference in New Issue
Block a user