feat[mpp_buffer]: Add mpp_buffer discard function

Mark a single buffer to discard status.

Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: I86e9501ace8c2b11c60360905e9f6c9466e38eea
This commit is contained in:
Herman Chen
2025-06-11 17:34:11 +08:00
parent eba256b154
commit 3d530016fb
4 changed files with 41 additions and 0 deletions

View File

@@ -258,6 +258,9 @@ typedef struct MppBufferInfo_t {
#define mpp_buffer_set_offset(buffer, offset) \
mpp_buffer_set_offset_with_caller(buffer, offset, __FUNCTION__)
#define mpp_buffer_set_discard(buffer) \
mpp_buffer_discard_with_caller(buffer, __FUNCTION__)
#define mpp_buffer_sync_begin(buffer) \
mpp_buffer_sync_begin_f(buffer, 0, __FUNCTION__)
#define mpp_buffer_sync_end(buffer) \
@@ -301,6 +304,7 @@ MPP_RET mpp_buffer_get_with_tag(MppBufferGroup group, MppBuffer *buffer, size_t
const char *tag, const char *caller);
MPP_RET mpp_buffer_put_with_caller(MppBuffer buffer, const char *caller);
MPP_RET mpp_buffer_inc_ref_with_caller(MppBuffer buffer, const char *caller);
MPP_RET mpp_buffer_discard_with_caller(MppBuffer buffer, const char *caller);
MPP_RET mpp_buffer_info_get_with_caller(MppBuffer buffer, MppBufferInfo *info, const char *caller);
MPP_RET mpp_buffer_read_with_caller(MppBuffer buffer, size_t offset, void *data, size_t size, const char *caller);

View File

@@ -194,6 +194,7 @@ MPP_RET mpp_buffer_create(const char *tag, const char *caller, MppBufferGroupImp
MPP_RET mpp_buffer_mmap(MppBufferImpl *buffer, const char* caller);
MPP_RET mpp_buffer_ref_inc(MppBufferImpl *buffer, const char* caller);
MPP_RET mpp_buffer_ref_dec(MppBufferImpl *buffer, const char* caller);
MPP_RET mpp_buffer_discard(MppBufferImpl *buffer, const char* caller);
MppBufferImpl *mpp_buffer_get_unused(MppBufferGroupImpl *p, size_t size, const char* caller);
RK_U32 mpp_buffer_to_addr(MppBuffer buffer, size_t offset);
MPP_RET mpp_buffer_attach_dev_f(const char *caller, MppBuffer buffer, MppDev dev);

View File

@@ -105,6 +105,16 @@ MPP_RET mpp_buffer_inc_ref_with_caller(MppBuffer buffer, const char *caller)
return mpp_buffer_ref_inc((MppBufferImpl*)buffer, caller);
}
MPP_RET mpp_buffer_discard_with_caller(MppBuffer buffer, const char *caller)
{
if (NULL == buffer) {
mpp_err("mpp_buffer_discard invalid input: buffer NULL from %s\n", caller);
return MPP_ERR_UNKNOW;
}
return mpp_buffer_discard((MppBufferImpl*)buffer, caller);
}
MPP_RET mpp_buffer_read_with_caller(MppBuffer buffer, size_t offset, void *data, size_t size, const char *caller)
{
if (NULL == buffer || NULL == data) {

View File

@@ -614,6 +614,32 @@ done:
return ret;
}
MPP_RET mpp_buffer_discard(MppBufferImpl *buffer, const char* caller)
{
MppBufferService *srv = get_srv_buffer();
MppBufferGroupImpl *group = NULL;
MPP_BUF_FUNCTION_ENTER();
if (srv) {
mpp_mutex_lock(&srv->lock);
group = SEARCH_GROUP_BY_ID(srv, buffer->group_id);
mpp_mutex_unlock(&srv->lock);
}
mpp_assert(group);
if (group) {
pthread_mutex_lock(&group->buf_lock);
buffer->discard = 1;
buf_add_log(buffer, BUF_DISCARD, caller);
pthread_mutex_unlock(&group->buf_lock);
}
MPP_BUF_FUNCTION_LEAVE();
return MPP_OK;
}
MppBufferImpl *mpp_buffer_get_unused(MppBufferGroupImpl *p, size_t size, const char* caller)
{
MppBufferImpl *buffer = NULL;