mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-08 18:40:03 +08:00
[mpp_dec]: check wait frame first,if no frame in group,will no generate task, fix seek case in deadloop for wait frame buf
[mpp_buffer]: add a discard value when group reset,post release used buffer git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@431 6e48237b-75ef-9749-8fc9-41990f28c85a
This commit is contained in:
@@ -171,7 +171,7 @@ void *mpp_dec_parser_thread(void *data)
|
|||||||
/*
|
/*
|
||||||
* wait for stream input
|
* wait for stream input
|
||||||
*/
|
*/
|
||||||
if (dec->reset_flag && !wait.dec_pic_buf) {
|
if (dec->reset_flag) {
|
||||||
if (reset_dec_task(mpp, task_dec, &wait, &status))
|
if (reset_dec_task(mpp, task_dec, &wait, &status))
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -182,6 +182,10 @@ void *mpp_dec_parser_thread(void *data)
|
|||||||
parser->wait();
|
parser->wait();
|
||||||
parser->unlock();
|
parser->unlock();
|
||||||
|
|
||||||
|
wait.dec_pic_buf = (mpp_buffer_group_unused(mpp->mFrameGroup) < 1);
|
||||||
|
|
||||||
|
if(wait.dec_pic_buf)
|
||||||
|
continue;
|
||||||
/*
|
/*
|
||||||
* 1. get task handle from hal for parsing one frame
|
* 1. get task handle from hal for parsing one frame
|
||||||
*/
|
*/
|
||||||
|
@@ -96,7 +96,7 @@ static RK_S32 get_free_memory_num(vpu_display_mem_pool *p)
|
|||||||
static RK_S32 reset_vpu_mem_pool(vpu_display_mem_pool *p)
|
static RK_S32 reset_vpu_mem_pool(vpu_display_mem_pool *p)
|
||||||
{
|
{
|
||||||
|
|
||||||
mpp_err("reset_vpu_mem_pool xxxxxxxxxxxxxxx");
|
|
||||||
vpu_display_mem_pool_impl *p_mempool = (vpu_display_mem_pool_impl *)p;
|
vpu_display_mem_pool_impl *p_mempool = (vpu_display_mem_pool_impl *)p;
|
||||||
mpp_buffer_group_clear(p_mempool->group);
|
mpp_buffer_group_clear(p_mempool->group);
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -209,7 +209,7 @@ RK_S32 mpp_buffer_group_unused(MppBufferGroup group)
|
|||||||
}
|
}
|
||||||
|
|
||||||
MppBufferGroupImpl *p = (MppBufferGroupImpl *)group;
|
MppBufferGroupImpl *p = (MppBufferGroupImpl *)group;
|
||||||
return p->count_unused;
|
return (p->mode == MPP_BUFFER_INTERNAL ? 1 : p->count_unused);
|
||||||
}
|
}
|
||||||
|
|
||||||
MppBufferMode mpp_buffer_group_mode(MppBufferGroup group)
|
MppBufferMode mpp_buffer_group_mode(MppBufferGroup group)
|
||||||
|
@@ -81,6 +81,8 @@ MPP_RET deinit_buffer_no_lock(MppBufferImpl *buffer)
|
|||||||
func(group->allocator, &buffer->info);
|
func(group->allocator, &buffer->info);
|
||||||
group->usage -= buffer->info.size;
|
group->usage -= buffer->info.size;
|
||||||
group->count--;
|
group->count--;
|
||||||
|
if(!buffer->discard)
|
||||||
|
group->count_unused--;
|
||||||
} else {
|
} else {
|
||||||
group = SEARCH_GROUP_ORPHAN(buffer->group_id);
|
group = SEARCH_GROUP_ORPHAN(buffer->group_id);
|
||||||
mpp_assert(group);
|
mpp_assert(group);
|
||||||
@@ -205,9 +207,13 @@ MPP_RET mpp_buffer_ref_dec(MppBufferImpl *buffer)
|
|||||||
if (group == service.mLegacyGroup) {
|
if (group == service.mLegacyGroup) {
|
||||||
deinit_buffer_no_lock(buffer);
|
deinit_buffer_no_lock(buffer);
|
||||||
} else {
|
} else {
|
||||||
|
if(buffer->discard){
|
||||||
|
deinit_buffer_no_lock(buffer);
|
||||||
|
}else{
|
||||||
list_add_tail(&buffer->list_status, &group->list_unused);
|
list_add_tail(&buffer->list_status, &group->list_unused);
|
||||||
group->count_unused++;
|
group->count_unused++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
group->count_used--;
|
group->count_used--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -324,7 +330,8 @@ MPP_RET mpp_buffer_group_reset(MppBufferGroupImpl *p)
|
|||||||
if (!list_empty(&p->list_used)) {
|
if (!list_empty(&p->list_used)) {
|
||||||
MppBufferImpl *pos, *n;
|
MppBufferImpl *pos, *n;
|
||||||
list_for_each_entry_safe(pos, n, &p->list_used, MppBufferImpl, list_status) {
|
list_for_each_entry_safe(pos, n, &p->list_used, MppBufferImpl, list_status) {
|
||||||
mpp_buffer_ref_dec(pos);
|
// mpp_buffer_ref_dec(pos);
|
||||||
|
pos->discard = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -42,6 +42,12 @@ struct MppBufferImpl_t {
|
|||||||
|
|
||||||
MppBufferInfo info;
|
MppBufferInfo info;
|
||||||
|
|
||||||
|
/* used for buf on group reset mode
|
||||||
|
set disard value to 1 when frame refcount no zero ,
|
||||||
|
we will delay relesase buffer after refcount to zero,
|
||||||
|
not put this buf to unused list
|
||||||
|
*/
|
||||||
|
RK_S32 discard;
|
||||||
// used flag is for used/unused list detection
|
// used flag is for used/unused list detection
|
||||||
RK_U32 used;
|
RK_U32 used;
|
||||||
RK_U32 internal;
|
RK_U32 internal;
|
||||||
|
Reference in New Issue
Block a user