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