[mpp_buffer]: Fix error on buffer group reset

At buffer create stage and ref_count is still zero if buffer group reset
happens the just created buffer will be marked discard and cause error.

Change-Id: Idc163f81edd055d8cc33ce6d80ca041adc973878
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
Herman Chen 2021-05-12 20:17:04 +08:00
parent 825467160e
commit 2204012fb3

View file

@ -385,11 +385,20 @@ MPP_RET mpp_buffer_create(const char *tag, const char *caller,
pthread_mutex_lock(&group->buf_lock);
p->buffer_id = group->buffer_id++;
INIT_LIST_HEAD(&p->list_status);
list_add_tail(&p->list_status, &group->list_unused);
if (buffer) {
p->ref_count++;
p->used = 1;
list_add_tail(&p->list_status, &group->list_used);
group->count_used++;
*buffer = p;
} else {
list_add_tail(&p->list_status, &group->list_unused);
group->count_unused++;
}
group->usage += info->size;
group->buffer_count++;
group->count_unused++;
pthread_mutex_unlock(&group->buf_lock);
buf_add_log(p, (group->mode == MPP_BUFFER_INTERNAL) ? (BUF_CREATE) : (BUF_COMMIT), caller);
@ -397,11 +406,6 @@ MPP_RET mpp_buffer_create(const char *tag, const char *caller,
if (group->mode == MPP_BUFFER_INTERNAL)
MppBufferService::get_instance()->inc_total(info->size);
if (buffer) {
inc_buffer_ref(p, caller);
*buffer = p;
}
if (group->callback)
group->callback(group->arg, group);
RET:
@ -498,7 +502,15 @@ MppBufferImpl *mpp_buffer_get_unused(MppBufferGroupImpl *p, size_t size)
size, pos->buffer_id, pos->info.size);
if (pos->info.size >= size) {
buffer = pos;
inc_buffer_ref(buffer, __FUNCTION__);
pthread_mutex_lock(&buffer->lock);
buf_add_log(buffer, BUF_REF_INC, __FUNCTION__);
buffer->ref_count++;
buffer->used = 1;
list_del_init(&buffer->list_status);
list_add_tail(&buffer->list_status, &p->list_used);
p->count_used++;
p->count_unused--;
pthread_mutex_unlock(&buffer->lock);
found = 1;
break;
} else {