diff --git a/inc/mpp_buffer.h b/inc/mpp_buffer.h index 26b8994c..5aa2bb9a 100644 --- a/inc/mpp_buffer.h +++ b/inc/mpp_buffer.h @@ -214,6 +214,9 @@ MPP_RET mpp_buffer_group_get(const char *tag, MppBufferMode mode, MppBufferGroup MPP_RET mpp_buffer_group_put(MppBufferGroup group); MPP_RET mpp_buffer_group_clear(MppBufferGroup group); RK_S32 mpp_buffer_group_unused(MppBufferGroup group); +MppBufferMode mpp_buffer_group_mode(MppBufferGroup group); +MppBufferType mpp_buffer_group_type(MppBufferGroup group); + /* * size : 0 - no limit, other - max buffer size * count : 0 - no limit, other - max buffer count diff --git a/mpp/mpp.cpp b/mpp/mpp.cpp index 702d77f4..b334c75c 100644 --- a/mpp/mpp.cpp +++ b/mpp/mpp.cpp @@ -152,7 +152,10 @@ void Mpp::clear() mPacketGroup = NULL; } if (mFrameGroup) { - mpp_buffer_group_put(mFrameGroup); + MppBufferMode mode = mpp_buffer_group_mode(mFrameGroup); + if (MPP_BUFFER_INTERNAL == mode) { + mpp_buffer_group_put(mFrameGroup); + } mFrameGroup = NULL; } } diff --git a/mpp/mpp_buffer.cpp b/mpp/mpp_buffer.cpp index b370b678..72af0a21 100644 --- a/mpp/mpp_buffer.cpp +++ b/mpp/mpp_buffer.cpp @@ -205,6 +205,28 @@ RK_S32 mpp_buffer_group_unused(MppBufferGroup group) return p->count_unused; } +MppBufferMode mpp_buffer_group_mode(MppBufferGroup group) +{ + if (NULL == group) { + mpp_err_f("input invalid group %p\n", group); + return MPP_BUFFER_MODE_BUTT; + } + + MppBufferGroupImpl *p = (MppBufferGroupImpl *)group; + return p->mode; +} + +MppBufferType mpp_buffer_group_type(MppBufferGroup group) +{ + if (NULL == group) { + mpp_err_f("input invalid group %p\n", group); + return MPP_BUFFER_TYPE_BUTT; + } + + MppBufferGroupImpl *p = (MppBufferGroupImpl *)group; + return p->type; +} + MPP_RET mpp_buffer_group_limit_config(MppBufferGroup group, size_t size, RK_S32 count) { if (NULL == group) {