xref: /rockchip-linux_mpp/kmpp/base/kmpp_frame.c (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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