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"