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