xref: /rockchip-linux_mpp/kmpp/base/kmpp_frame.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 #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