[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->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);

View File

@@ -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);

View File

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