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 #define MODULE_TAG "kmpp_frame"
7*437bfbebSnyanmisaka
8*437bfbebSnyanmisaka #include "kmpp_frame_impl.h"
9*437bfbebSnyanmisaka
kmpp_frame_get_meta(KmppFrame frame,KmppMeta * meta)10*437bfbebSnyanmisaka rk_s32 kmpp_frame_get_meta(KmppFrame frame, KmppMeta *meta)
11*437bfbebSnyanmisaka {
12*437bfbebSnyanmisaka KmppFramePriv *priv = NULL;
13*437bfbebSnyanmisaka KmppShmPtr sptr;
14*437bfbebSnyanmisaka rk_s32 ret;
15*437bfbebSnyanmisaka
16*437bfbebSnyanmisaka if (!frame || !meta) {
17*437bfbebSnyanmisaka mpp_loge_f("invalid frame %p meta %p\n", frame, meta);
18*437bfbebSnyanmisaka return rk_nok;
19*437bfbebSnyanmisaka }
20*437bfbebSnyanmisaka
21*437bfbebSnyanmisaka priv = (KmppFramePriv *)kmpp_obj_to_priv(frame);
22*437bfbebSnyanmisaka if (priv->meta) {
23*437bfbebSnyanmisaka *meta = priv->meta;
24*437bfbebSnyanmisaka return rk_ok;
25*437bfbebSnyanmisaka }
26*437bfbebSnyanmisaka
27*437bfbebSnyanmisaka kmpp_obj_get_shm(frame, "meta", &sptr);
28*437bfbebSnyanmisaka ret = kmpp_obj_get_by_sptr_f(&priv->meta, &sptr);
29*437bfbebSnyanmisaka if (ret) {
30*437bfbebSnyanmisaka *meta = NULL;
31*437bfbebSnyanmisaka mpp_loge_f("self_meta get obj by sptr failed, ret %d\n", ret);
32*437bfbebSnyanmisaka return ret;
33*437bfbebSnyanmisaka }
34*437bfbebSnyanmisaka
35*437bfbebSnyanmisaka *meta = priv->meta;
36*437bfbebSnyanmisaka
37*437bfbebSnyanmisaka return rk_ok;
38*437bfbebSnyanmisaka }
39*437bfbebSnyanmisaka
kmpp_frame_impl_init(void * entry,KmppObj obj,const char * caller)40*437bfbebSnyanmisaka static rk_s32 kmpp_frame_impl_init(void *entry, KmppObj obj, const char *caller)
41*437bfbebSnyanmisaka {
42*437bfbebSnyanmisaka KmppFramePriv *priv = (KmppFramePriv *)kmpp_obj_to_priv(obj);
43*437bfbebSnyanmisaka (void)entry;
44*437bfbebSnyanmisaka
45*437bfbebSnyanmisaka if (!priv) {
46*437bfbebSnyanmisaka mpp_loge_f("invalid %p without priv at %s\n", obj, caller);
47*437bfbebSnyanmisaka return rk_nok;
48*437bfbebSnyanmisaka }
49*437bfbebSnyanmisaka
50*437bfbebSnyanmisaka priv->meta = NULL;
51*437bfbebSnyanmisaka
52*437bfbebSnyanmisaka return rk_ok;
53*437bfbebSnyanmisaka }
54*437bfbebSnyanmisaka
kmpp_frame_impl_deinit(void * entry,KmppObj obj,const char * caller)55*437bfbebSnyanmisaka static rk_s32 kmpp_frame_impl_deinit(void *entry, KmppObj obj, const char *caller)
56*437bfbebSnyanmisaka {
57*437bfbebSnyanmisaka KmppFramePriv *priv = (KmppFramePriv *)kmpp_obj_to_priv(obj);
58*437bfbebSnyanmisaka (void)entry;
59*437bfbebSnyanmisaka
60*437bfbebSnyanmisaka if (!priv) {
61*437bfbebSnyanmisaka mpp_loge_f("invalid %p without priv at %s\n", obj, caller);
62*437bfbebSnyanmisaka return rk_nok;
63*437bfbebSnyanmisaka }
64*437bfbebSnyanmisaka
65*437bfbebSnyanmisaka if (priv->meta) {
66*437bfbebSnyanmisaka kmpp_obj_impl_put(priv->meta, caller);
67*437bfbebSnyanmisaka priv->meta = NULL;
68*437bfbebSnyanmisaka }
69*437bfbebSnyanmisaka
70*437bfbebSnyanmisaka return rk_ok;
71*437bfbebSnyanmisaka }
72*437bfbebSnyanmisaka
73*437bfbebSnyanmisaka #define KMPP_OBJ_NAME kmpp_frame
74*437bfbebSnyanmisaka #define KMPP_OBJ_INTF_TYPE KmppFrame
75*437bfbebSnyanmisaka #define KMPP_OBJ_IMPL_TYPE KmppFrameImpl
76*437bfbebSnyanmisaka #define KMPP_OBJ_FUNC_INIT kmpp_frame_impl_init
77*437bfbebSnyanmisaka #define KMPP_OBJ_FUNC_DEINIT kmpp_frame_impl_deinit
78*437bfbebSnyanmisaka #define KMPP_OBJ_SGLN_ID MPP_SGLN_KMPP_FRAME
79*437bfbebSnyanmisaka #define KMPP_OBJ_ENTRY_TABLE KMPP_FRAME_ENTRY_TABLE
80*437bfbebSnyanmisaka #define KMPP_OBJ_PRIV_SIZE sizeof(KmppFramePriv)
81*437bfbebSnyanmisaka #include "kmpp_obj_helper.h"
82