diff --git a/inc/mpp_buffer.h b/inc/mpp_buffer.h index 96cbc2fe..862b9f5d 100644 --- a/inc/mpp_buffer.h +++ b/inc/mpp_buffer.h @@ -203,7 +203,11 @@ MPP_RET mpp_buffer_commit(MppBufferGroup group, MppBufferInfo *info); MPP_RET mpp_buffer_get_with_tag(const char *tag, MppBufferGroup group, MppBuffer *buffer, size_t size); MPP_RET mpp_buffer_put(MppBuffer buffer); MPP_RET mpp_buffer_inc_ref(MppBuffer buffer); +MPP_RET mpp_buffer_read(MppBuffer buffer, void *data, size_t size); +MPP_RET mpp_buffer_write(MppBuffer buffer, void *data, size_t size); MPP_RET mpp_buffer_info_get(MppBuffer buffer, MppBufferInfo *info); +void *mpp_buffer_get_ptr(MppBuffer buffer); +int mpp_buffer_get_fd(MppBuffer buffer); MPP_RET mpp_buffer_group_get(const char *tag, MppBufferMode mode, MppBufferGroup *group, MppBufferType type); MPP_RET mpp_buffer_group_put(MppBufferGroup group); diff --git a/mpp/mpp_buffer.cpp b/mpp/mpp_buffer.cpp index 9f99bd56..d9ff050c 100644 --- a/mpp/mpp_buffer.cpp +++ b/mpp/mpp_buffer.cpp @@ -88,6 +88,66 @@ MPP_RET mpp_buffer_inc_ref(MppBuffer buffer) return mpp_buffer_ref_inc((MppBufferImpl*)buffer); } +MPP_RET mpp_buffer_read(MppBuffer buffer, void *data, size_t size) +{ + if (NULL == buffer || NULL == data) { + mpp_err("%s invalid input: buffer %p data %p\n", __FUNCTION__, buffer, data); + return MPP_ERR_UNKNOW; + } + + if (0 == size) + return MPP_OK; + + MppBufferImpl *p = (MppBufferImpl*)buffer; + void *src = p->info.ptr; + mpp_assert(src != NULL); + memcpy(data, src, size); + return MPP_OK; +} + +MPP_RET mpp_buffer_write(MppBuffer buffer, void *data, size_t size) +{ + if (NULL == buffer || NULL == data) { + mpp_err("%s invalid input: buffer %p data %p\n", __FUNCTION__, buffer, data); + return MPP_ERR_UNKNOW; + } + + if (0 == size) + return MPP_OK; + + MppBufferImpl *p = (MppBufferImpl*)buffer; + void *dst = p->info.ptr; + mpp_assert(dst != NULL); + memcpy(dst, data, size); + return MPP_OK; +} + +void *mpp_buffer_get_ptr(MppBuffer buffer) +{ + if (NULL == buffer) { + mpp_err("%s invalid input: buffer %p data %p\n", __FUNCTION__, buffer); + return NULL; + } + + MppBufferImpl *p = (MppBufferImpl*)buffer; + void *ptr = p->info.ptr; + mpp_assert(ptr != NULL); + return ptr; +} + +int mpp_buffer_get_fd(MppBuffer buffer) +{ + if (NULL == buffer) { + mpp_err("%s invalid input: buffer %p data %p\n", __FUNCTION__, buffer); + return -1; + } + + MppBufferImpl *p = (MppBufferImpl*)buffer; + int fd = p->info.fd; + mpp_assert(fd >= 0); + return fd; +} + MPP_RET mpp_buffer_info_get(MppBuffer buffer, MppBufferInfo *info) { if (NULL == buffer || NULL == info) {