xref: /rockchip-linux_mpp/kmpp/base/kmpp_packet.c (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1 /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2 /*
3  * Copyright (c) 2025 Rockchip Electronics Co., Ltd.
4  */
5 
6 #include "kmpp_packet_impl.h"
7 
kmpp_packet_get_meta(KmppPacket packet,KmppMeta * meta)8 rk_s32 kmpp_packet_get_meta(KmppPacket packet, KmppMeta *meta)
9 {
10     KmppPacketPriv *priv = NULL;
11     KmppShmPtr sptr;
12     rk_s32 ret;
13 
14     if (!packet || !meta) {
15         mpp_loge_f("invalid packet %p meta %p\n", packet, meta);
16         return rk_nok;
17     }
18 
19     priv = (KmppPacketPriv *)kmpp_obj_to_priv(packet);
20     if (priv->meta) {
21         *meta = priv->meta;
22         return rk_ok;
23     }
24 
25     kmpp_obj_get_shm(packet, "meta", &sptr);
26     ret = kmpp_obj_get_by_sptr_f(priv->meta, &sptr);
27     if (ret) {
28         *meta = NULL;
29         mpp_loge_f("self_meta get obj by sptr failed, ret %d\n", ret);
30         return ret;
31     }
32 
33     *meta = priv->meta;
34 
35     return rk_ok;
36 }
37 
kmpp_packet_impl_init(void * entry,KmppObj obj,const char * caller)38 static rk_s32 kmpp_packet_impl_init(void *entry, KmppObj obj, const char *caller)
39 {
40     KmppPacketPriv *priv = (KmppPacketPriv *)kmpp_obj_to_priv(obj);
41     (void)entry;
42 
43     if (!priv) {
44         mpp_loge_f("invalid %p without priv at %s\n", obj, caller);
45         return rk_nok;
46     }
47 
48     priv->meta = NULL;
49 
50     return rk_ok;
51 }
52 
kmpp_packet_impl_deinit(void * entry,KmppObj obj,const char * caller)53 static rk_s32 kmpp_packet_impl_deinit(void *entry, KmppObj obj, const char *caller)
54 {
55     KmppPacketPriv *priv = (KmppPacketPriv *)kmpp_obj_to_priv(obj);
56     (void)entry;
57 
58     if (!priv) {
59         mpp_loge_f("invalid %p without priv at %s\n", obj, caller);
60         return rk_nok;
61     }
62 
63     if (priv->meta) {
64         kmpp_obj_impl_put(priv->meta, caller);
65         priv->meta = NULL;
66     }
67 
68     return rk_ok;
69 }
70 
71 #define KMPP_OBJ_NAME               kmpp_packet
72 #define KMPP_OBJ_INTF_TYPE          KmppPacket
73 #define KMPP_OBJ_IMPL_TYPE          KmppPacketImpl
74 #define KMPP_OBJ_FUNC_INIT          kmpp_packet_impl_init
75 #define KMPP_OBJ_FUNC_DEINIT        kmpp_packet_impl_deinit
76 #define KMPP_OBJ_SGLN_ID            MPP_SGLN_KMPP_PACKET
77 #define KMPP_OBJ_ENTRY_TABLE        KMPP_PACKET_ENTRY_TABLE
78 #define KMPP_OBJ_PRIV_SIZE          sizeof(KmppPacketPriv)
79 #include "kmpp_obj_helper.h"