mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-09-26 21:15:53 +08:00
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:
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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) {
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user