[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:
herman.chen
2016-08-23 19:41:12 +08:00
parent 43bfdc6bdf
commit 4f8f63d16f
3 changed files with 13 additions and 7 deletions

View File

@@ -683,6 +683,7 @@ void MppBufferService::destroy_group(MppBufferGroupImpl *group)
mpp_assert(group->log_count == 0);
}
mpp_assert(group->allocator);
mpp_allocator_put(&group->allocator);
list_del_init(&group->list_group);
mpp_free(group);

View File

@@ -45,6 +45,7 @@ Mpp::Mpp()
mTaskGetCount(0),
mPacketGroup(NULL),
mFrameGroup(NULL),
mExternalFrameGroup(0),
mInputPort(NULL),
mOutputPort(NULL),
mInputTaskQueue(NULL),
@@ -213,11 +214,8 @@ void Mpp::clear()
mpp_buffer_group_put(mPacketGroup);
mPacketGroup = NULL;
}
if (mFrameGroup) {
MppBufferMode mode = mpp_buffer_group_mode(mFrameGroup);
if (MPP_BUFFER_INTERNAL == mode) {
mpp_buffer_group_put(mFrameGroup);
}
if (mFrameGroup && !mExternalFrameGroup) {
mpp_buffer_group_put(mFrameGroup);
mFrameGroup = NULL;
}
}
@@ -607,8 +605,14 @@ MPP_RET Mpp::control_dec(MpiCmd cmd, MppParam param)
} break;
case MPP_DEC_SET_EXT_BUF_GROUP: {
mFrameGroup = (MppBufferGroup)param;
ret = mpp_buffer_group_set_listener((MppBufferGroupImpl *)param, (void *)mThreadCodec);
mThreadCodec->signal();
if (param) {
mExternalFrameGroup = 1;
ret = mpp_buffer_group_set_listener((MppBufferGroupImpl *)param, (void *)mThreadCodec);
mThreadCodec->signal();
} else {
mExternalFrameGroup = 0;
ret = mpp_buffer_group_set_listener(NULL, (void *)mThreadCodec);
}
} break;
case MPP_DEC_SET_INFO_CHANGE_READY: {
ret = mpp_buf_slot_ready(mDec->frame_slots);

View File

@@ -97,6 +97,7 @@ public:
*/
MppBufferGroup mPacketGroup;
MppBufferGroup mFrameGroup;
RK_U32 mExternalFrameGroup;
/*
* Mpp task queue for advance task mode