mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-06 01:26:49 +08:00
[mpp_buffer]: Add offset property
1. Add offset set / get function to MppBuffer 2. Add U32 register address converstion function. Change-Id: Id297b7a05e47d4e249f5e33c1924a0539729c808 Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
@@ -251,6 +251,12 @@ typedef struct MppBufferInfo_t {
|
|||||||
#define mpp_buffer_set_index(buffer, index) \
|
#define mpp_buffer_set_index(buffer, index) \
|
||||||
mpp_buffer_set_index_with_caller(buffer, index, __FUNCTION__)
|
mpp_buffer_set_index_with_caller(buffer, index, __FUNCTION__)
|
||||||
|
|
||||||
|
#define mpp_buffer_get_offset(buffer) \
|
||||||
|
mpp_buffer_get_offset_with_caller(buffer, __FUNCTION__)
|
||||||
|
|
||||||
|
#define mpp_buffer_set_offset(buffer, offset) \
|
||||||
|
mpp_buffer_set_offset_with_caller(buffer, offset, __FUNCTION__)
|
||||||
|
|
||||||
#define mpp_buffer_group_get_internal(group, type, ...) \
|
#define mpp_buffer_group_get_internal(group, type, ...) \
|
||||||
mpp_buffer_group_get(group, type, MPP_BUFFER_INTERNAL, MODULE_TAG, __FUNCTION__)
|
mpp_buffer_group_get(group, type, MPP_BUFFER_INTERNAL, MODULE_TAG, __FUNCTION__)
|
||||||
|
|
||||||
@@ -285,6 +291,8 @@ int mpp_buffer_get_fd_with_caller(MppBuffer buffer, const char *caller);
|
|||||||
size_t mpp_buffer_get_size_with_caller(MppBuffer buffer, const char *caller);
|
size_t mpp_buffer_get_size_with_caller(MppBuffer buffer, const char *caller);
|
||||||
int mpp_buffer_get_index_with_caller(MppBuffer buffer, const char *caller);
|
int mpp_buffer_get_index_with_caller(MppBuffer buffer, const char *caller);
|
||||||
MPP_RET mpp_buffer_set_index_with_caller(MppBuffer buffer, int index, const char *caller);
|
MPP_RET mpp_buffer_set_index_with_caller(MppBuffer buffer, int index, const char *caller);
|
||||||
|
size_t mpp_buffer_get_offset_with_caller(MppBuffer buffer, const char *caller);
|
||||||
|
MPP_RET mpp_buffer_set_offset_with_caller(MppBuffer buffer, size_t offset, const char *caller);
|
||||||
|
|
||||||
MPP_RET mpp_buffer_group_get(MppBufferGroup *group, MppBufferType type, MppBufferMode mode,
|
MPP_RET mpp_buffer_group_get(MppBufferGroup *group, MppBufferType type, MppBufferMode mode,
|
||||||
const char *tag, const char *caller);
|
const char *tag, const char *caller);
|
||||||
|
@@ -49,6 +49,7 @@ struct MppBufferImpl_t {
|
|||||||
MppBufferMode mode;
|
MppBufferMode mode;
|
||||||
|
|
||||||
MppBufferInfo info;
|
MppBufferInfo info;
|
||||||
|
size_t offset;
|
||||||
|
|
||||||
/* used for buf on group reset mode
|
/* used for buf on group reset mode
|
||||||
set disard value to 1 when frame refcount no zero ,
|
set disard value to 1 when frame refcount no zero ,
|
||||||
@@ -143,6 +144,7 @@ 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_inc(MppBufferImpl *buffer, const char* caller);
|
||||||
MPP_RET mpp_buffer_ref_dec(MppBufferImpl *buffer, const char* caller);
|
MPP_RET mpp_buffer_ref_dec(MppBufferImpl *buffer, const char* caller);
|
||||||
MppBufferImpl *mpp_buffer_get_unused(MppBufferGroupImpl *p, size_t size);
|
MppBufferImpl *mpp_buffer_get_unused(MppBufferGroupImpl *p, size_t size);
|
||||||
|
RK_U32 mpp_buffer_to_addr(MppBuffer buffer, size_t offset);
|
||||||
|
|
||||||
MPP_RET mpp_buffer_group_init(MppBufferGroupImpl **group, const char *tag, const char *caller, MppBufferMode mode, MppBufferType type);
|
MPP_RET mpp_buffer_group_init(MppBufferGroupImpl **group, const char *tag, const char *caller, MppBufferMode mode, MppBufferType type);
|
||||||
MPP_RET mpp_buffer_group_deinit(MppBufferGroupImpl *p);
|
MPP_RET mpp_buffer_group_deinit(MppBufferGroupImpl *p);
|
||||||
|
@@ -235,6 +235,30 @@ MPP_RET mpp_buffer_set_index_with_caller(MppBuffer buffer, int index,
|
|||||||
return MPP_OK;
|
return MPP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t mpp_buffer_get_offset_with_caller(MppBuffer buffer, const char *caller)
|
||||||
|
{
|
||||||
|
if (NULL == buffer) {
|
||||||
|
mpp_err_f("invalid NULL input\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
MppBufferImpl *p = (MppBufferImpl*)buffer;
|
||||||
|
(void)caller;
|
||||||
|
return p->offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
MPP_RET mpp_buffer_set_offset_with_caller(MppBuffer buffer, size_t offset, const char *caller)
|
||||||
|
{
|
||||||
|
if (NULL == buffer) {
|
||||||
|
mpp_err_f("invalid NULL input\n");
|
||||||
|
return MPP_ERR_UNKNOW;
|
||||||
|
}
|
||||||
|
|
||||||
|
MppBufferImpl *p = (MppBufferImpl*)buffer;
|
||||||
|
p->offset = offset;
|
||||||
|
(void)caller;
|
||||||
|
return MPP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
MPP_RET mpp_buffer_info_get_with_caller(MppBuffer buffer, MppBufferInfo *info, const char *caller)
|
MPP_RET mpp_buffer_info_get_with_caller(MppBuffer buffer, MppBufferInfo *info, const char *caller)
|
||||||
{
|
{
|
||||||
|
@@ -446,6 +446,30 @@ MppBufferImpl *mpp_buffer_get_unused(MppBufferGroupImpl *p, size_t size)
|
|||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RK_U32 mpp_buffer_to_addr(MppBuffer buffer, size_t offset)
|
||||||
|
{
|
||||||
|
MppBufferImpl *impl = (MppBufferImpl *)buffer;
|
||||||
|
|
||||||
|
if (NULL == impl) {
|
||||||
|
mpp_err_f("NULL buffer convert to zero address\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (impl->info.fd >= (1 << 10)) {
|
||||||
|
mpp_err_f("buffer fd %d is too large\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (impl->offset + offset >= SZ_4M) {
|
||||||
|
mpp_err_f("offset %d + %d is larger than 4M use extra info to send offset\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
RK_U32 addr = impl->info.fd + ((impl->offset + offset) << 10);
|
||||||
|
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
MPP_RET mpp_buffer_group_init(MppBufferGroupImpl **group, const char *tag, const char *caller,
|
MPP_RET mpp_buffer_group_init(MppBufferGroupImpl **group, const char *tag, const char *caller,
|
||||||
MppBufferMode mode, MppBufferType type)
|
MppBufferMode mode, MppBufferType type)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user