mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 17:16:50 +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) \
|
||||
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, ...) \
|
||||
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);
|
||||
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);
|
||||
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,
|
||||
const char *tag, const char *caller);
|
||||
|
@@ -49,6 +49,7 @@ struct MppBufferImpl_t {
|
||||
MppBufferMode mode;
|
||||
|
||||
MppBufferInfo info;
|
||||
size_t offset;
|
||||
|
||||
/* used for buf on group reset mode
|
||||
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_dec(MppBufferImpl *buffer, const char* caller);
|
||||
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_deinit(MppBufferGroupImpl *p);
|
||||
|
@@ -235,6 +235,30 @@ MPP_RET mpp_buffer_set_index_with_caller(MppBuffer buffer, int index,
|
||||
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)
|
||||
{
|
||||
|
@@ -446,6 +446,30 @@ MppBufferImpl *mpp_buffer_get_unused(MppBufferGroupImpl *p, size_t size)
|
||||
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,
|
||||
MppBufferMode mode, MppBufferType type)
|
||||
{
|
||||
|
Reference in New Issue
Block a user