mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-12-26 11:17:44 +01:00
fix[kmpp_obj]: Fix kmpp frm/pkt self meta erro
Change-Id: Ibfb4409962e4f35fdcc73cf239253b44a86a52ce Signed-off-by: Yanjun Liao <yanjun.liao@rock-chips.com>
This commit is contained in:
parent
8dcf903d9e
commit
7fbdfbe3c1
5 changed files with 120 additions and 21 deletions
|
|
@ -84,4 +84,8 @@ typedef struct KmppFrameImpl_t {
|
|||
KmppMeta self_meta;
|
||||
} KmppFrameImpl;
|
||||
|
||||
typedef struct KmppFramePriv_t {
|
||||
KmppMeta meta;
|
||||
} KmppFramePriv;
|
||||
|
||||
#endif /* __KMPP_FRAME_IMPL_H__ */
|
||||
|
|
|
|||
|
|
@ -29,6 +29,8 @@ extern "C" {
|
|||
#define KMPP_OBJ_ENTRY_TABLE KMPP_PACKET_ENTRY_TABLE
|
||||
#include "kmpp_obj_func.h"
|
||||
|
||||
rk_s32 kmpp_packet_get_meta(KmppPacket packet, KmppMeta *meta);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -56,4 +56,8 @@ typedef struct KmppPacketImpl_t {
|
|||
RingBuf buf;
|
||||
} KmppPacketImpl;
|
||||
|
||||
typedef struct KmppPacketPriv_t {
|
||||
KmppMeta meta;
|
||||
} KmppPacketPriv;
|
||||
|
||||
#endif /* __KMPP_PACKET_IMPL_H__ */
|
||||
|
|
@ -6,53 +6,76 @@
|
|||
#define MODULE_TAG "kmpp_frame"
|
||||
|
||||
#include "kmpp_frame_impl.h"
|
||||
#include "kmpp_obj_impl.h"
|
||||
|
||||
static rk_s32 kmpp_frame_impl_deinit(void *entry, KmppObj obj, const char *caller)
|
||||
{
|
||||
KmppFrameImpl *impl = (KmppFrameImpl *)entry;
|
||||
(void)obj;
|
||||
|
||||
if (impl->self_meta) {
|
||||
kmpp_obj_put_impl(impl->self_meta, caller);
|
||||
impl->self_meta = NULL;
|
||||
}
|
||||
|
||||
return rk_ok;
|
||||
}
|
||||
|
||||
rk_s32 kmpp_frame_get_meta(KmppFrame frame, KmppMeta *meta)
|
||||
{
|
||||
KmppFrameImpl *impl = (KmppFrameImpl *)kmpp_obj_to_entry(frame);
|
||||
KmppFramePriv *priv = NULL;
|
||||
KmppShmPtr sptr;
|
||||
rk_s32 ret;
|
||||
|
||||
if (!impl || !meta) {
|
||||
mpp_loge_f("invalid impl %p or meta %p\n", impl, meta);
|
||||
if (!frame || !meta) {
|
||||
mpp_loge_f("invalid frame %p meta %p\n", frame, meta);
|
||||
return rk_nok;
|
||||
}
|
||||
|
||||
if (impl->self_meta) {
|
||||
*meta = impl->self_meta;
|
||||
priv = (KmppFramePriv *)kmpp_obj_to_priv(frame);
|
||||
if (priv->meta) {
|
||||
*meta = priv->meta;
|
||||
return rk_ok;
|
||||
}
|
||||
|
||||
kmpp_obj_get_shm(frame, "meta", &sptr);
|
||||
ret = kmpp_obj_get_by_sptr_f(&impl->self_meta, &sptr);
|
||||
ret = kmpp_obj_get_by_sptr_f(&priv->meta, &sptr);
|
||||
if (ret) {
|
||||
*meta = NULL;
|
||||
mpp_loge_f("self_meta get obj by sptr failed, ret %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
*meta = impl->self_meta;
|
||||
*meta = priv->meta;
|
||||
|
||||
return rk_ok;
|
||||
}
|
||||
|
||||
static rk_s32 kmpp_frame_impl_init(void *entry, KmppObj obj, const char *caller)
|
||||
{
|
||||
KmppFramePriv *priv = (KmppFramePriv *)kmpp_obj_to_priv(obj);
|
||||
(void)entry;
|
||||
|
||||
if (!priv) {
|
||||
mpp_loge_f("invalid %p without priv at %s\n", obj, caller);
|
||||
return rk_nok;
|
||||
}
|
||||
|
||||
priv->meta = NULL;
|
||||
|
||||
return rk_ok;
|
||||
}
|
||||
|
||||
static rk_s32 kmpp_frame_impl_deinit(void *entry, KmppObj obj, const char *caller)
|
||||
{
|
||||
KmppFramePriv *priv = (KmppFramePriv *)kmpp_obj_to_priv(obj);
|
||||
(void)entry;
|
||||
|
||||
if (!priv) {
|
||||
mpp_loge_f("invalid %p without priv at %s\n", obj, caller);
|
||||
return rk_nok;
|
||||
}
|
||||
|
||||
if (priv->meta) {
|
||||
kmpp_obj_put_impl(priv->meta, caller);
|
||||
priv->meta = NULL;
|
||||
}
|
||||
|
||||
return rk_ok;
|
||||
}
|
||||
|
||||
#define KMPP_OBJ_NAME kmpp_frame
|
||||
#define KMPP_OBJ_INTF_TYPE KmppFrame
|
||||
#define KMPP_OBJ_IMPL_TYPE KmppFrameImpl
|
||||
#define KMPP_OBJ_FUNC_INIT kmpp_frame_impl_init
|
||||
#define KMPP_OBJ_FUNC_DEINIT kmpp_frame_impl_deinit
|
||||
#define KMPP_OBJ_SGLN_ID MPP_SGLN_KMPP_FRAME
|
||||
#define KMPP_OBJ_ENTRY_TABLE KMPP_FRAME_ENTRY_TABLE
|
||||
#define KMPP_OBJ_PRIV_SIZE sizeof(KmppFramePriv)
|
||||
#include "kmpp_obj_helper.h"
|
||||
|
|
|
|||
|
|
@ -5,9 +5,75 @@
|
|||
|
||||
#include "kmpp_packet_impl.h"
|
||||
|
||||
rk_s32 kmpp_packet_get_meta(KmppPacket packet, KmppMeta *meta)
|
||||
{
|
||||
KmppPacketPriv *priv = NULL;
|
||||
KmppShmPtr sptr;
|
||||
rk_s32 ret;
|
||||
|
||||
if (!packet || !meta) {
|
||||
mpp_loge_f("invalid packet %p meta %p\n", packet, meta);
|
||||
return rk_nok;
|
||||
}
|
||||
|
||||
priv = (KmppPacketPriv *)kmpp_obj_to_priv(packet);
|
||||
if (priv->meta) {
|
||||
*meta = priv->meta;
|
||||
return rk_ok;
|
||||
}
|
||||
|
||||
kmpp_obj_get_shm(packet, "meta", &sptr);
|
||||
ret = kmpp_obj_get_by_sptr_f(priv->meta, &sptr);
|
||||
if (ret) {
|
||||
*meta = NULL;
|
||||
mpp_loge_f("self_meta get obj by sptr failed, ret %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
*meta = priv->meta;
|
||||
|
||||
return rk_ok;
|
||||
}
|
||||
|
||||
static rk_s32 kmpp_packet_impl_init(void *entry, KmppObj obj, const char *caller)
|
||||
{
|
||||
KmppPacketPriv *priv = (KmppPacketPriv *)kmpp_obj_to_priv(obj);
|
||||
(void)entry;
|
||||
|
||||
if (!priv) {
|
||||
mpp_loge_f("invalid %p without priv at %s\n", obj, caller);
|
||||
return rk_nok;
|
||||
}
|
||||
|
||||
priv->meta = NULL;
|
||||
|
||||
return rk_ok;
|
||||
}
|
||||
|
||||
static rk_s32 kmpp_packet_impl_deinit(void *entry, KmppObj obj, const char *caller)
|
||||
{
|
||||
KmppPacketPriv *priv = (KmppPacketPriv *)kmpp_obj_to_priv(obj);
|
||||
(void)entry;
|
||||
|
||||
if (!priv) {
|
||||
mpp_loge_f("invalid %p without priv at %s\n", obj, caller);
|
||||
return rk_nok;
|
||||
}
|
||||
|
||||
if (priv->meta) {
|
||||
kmpp_obj_put_impl(priv->meta, caller);
|
||||
priv->meta = NULL;
|
||||
}
|
||||
|
||||
return rk_ok;
|
||||
}
|
||||
|
||||
#define KMPP_OBJ_NAME kmpp_packet
|
||||
#define KMPP_OBJ_INTF_TYPE KmppPacket
|
||||
#define KMPP_OBJ_IMPL_TYPE KmppPacketImpl
|
||||
#define KMPP_OBJ_FUNC_INIT kmpp_packet_impl_init
|
||||
#define KMPP_OBJ_FUNC_DEINIT kmpp_packet_impl_deinit
|
||||
#define KMPP_OBJ_SGLN_ID MPP_SGLN_KMPP_PACKET
|
||||
#define KMPP_OBJ_ENTRY_TABLE KMPP_PACKET_ENTRY_TABLE
|
||||
#define KMPP_OBJ_PRIV_SIZE sizeof(KmppPacketPriv)
|
||||
#include "kmpp_obj_helper.h"
|
||||
Loading…
Add table
Add a link
Reference in a new issue