[mpp_buffer]: add signal function on mpp_buffer return to group

git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@495 6e48237b-75ef-9749-8fc9-41990f28c85a
This commit is contained in:
ChenHengming
2015-12-02 23:00:04 +00:00
parent e354461a1c
commit d211b7d9c5
3 changed files with 22 additions and 0 deletions

View File

@@ -25,6 +25,7 @@
#include "mpp_dec.h"
#include "mpp_enc.h"
#include "mpp_hal.h"
#include "mpp_buffer_impl.h"
#include "mpp_frame_impl.h"
#include "mpp_packet.h"
#include "mpp_packet_impl.h"
@@ -242,6 +243,7 @@ MPP_RET Mpp::control(MpiCmd cmd, MppParam param)
case MPP_DEC_SET_EXT_BUF_GROUP: {
mpp_log("mpi_control group %p\n", param);
mFrameGroup = (MppBufferGroup)param;
mpp_buffer_group_set_listener((MppBufferGroupImpl *)param, (void *)mThreadCodec);
mpp_log("signal codec thread\n");
mThreadCodec->signal();
break;

View File

@@ -279,6 +279,10 @@ MPP_RET mpp_buffer_ref_dec(MppBufferImpl *buffer)
}
}
group->count_used--;
if (group->listener) {
MppThread *thread = (MppThread *)group->listener;
thread->signal();
}
}
}
@@ -422,6 +426,18 @@ MPP_RET mpp_buffer_group_reset(MppBufferGroupImpl *p)
return MPP_OK;
}
MPP_RET mpp_buffer_group_set_listener(MppBufferGroupImpl *p, void *listener)
{
if (NULL == p || NULL == listener) {
mpp_err_f("found NULL pointer\n");
return MPP_ERR_NULL_PTR;
}
p->listener = listener;
return MPP_OK;
}
void mpp_buffer_group_dump(MppBufferGroupImpl *group)
{
mpp_log("\ndumping buffer group %p id %d\n", group, group->group_id);

View File

@@ -78,6 +78,9 @@ struct MppBufferGroupImpl_t {
RK_S32 count_used;
RK_S32 count_unused;
// thread that will be signal on buffer return
void *listener;
// buffer log function
RK_U32 log_runtime_en;
RK_U32 log_history_en;
@@ -129,6 +132,7 @@ MppBufferImpl *mpp_buffer_get_unused(MppBufferGroupImpl *p, size_t size);
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_reset(MppBufferGroupImpl *p);
MPP_RET mpp_buffer_group_set_listener(MppBufferGroupImpl *p, void *listener);
void mpp_buffer_group_dump(MppBufferGroupImpl *p);
MppBufferGroupImpl *mpp_buffer_legacy_group();