Files
mpp/osal/inc/mpp_singleton.h
Hongjin Li ed3995dc32 refactor[osal]: Refactor C++ mpp_server to C
Signed-off-by: Chandler Chen <chandler.chen@rock-chips.com>
Signed-off-by: Hongjin Li <vic.hong@rock-chips.com>
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: I80ef1b56d588003d712b94d8db58540de36c9245
2025-06-13 16:21:27 +08:00

75 lines
1.8 KiB
C

/* SPDX-License-Identifier: Apache-2.0 OR MIT */
/*
* Copyright (c) 2024 Rockchip Electronics Co., Ltd.
*/
#ifndef __MPP_SINGLETON_H__
#define __MPP_SINGLETON_H__
#include "rk_type.h"
typedef enum MppSingletonId_e {
MPP_SGLN_BASE = 0,
/* osal base module */
MPP_SGLN_OS_LOG = MPP_SGLN_BASE,
MPP_SGLN_OS_MEM,
MPP_SGLN_TRACE,
MPP_SGLN_OS_ALLOCATOR,
MPP_SGLN_MEM_POOL,
/* hardware platform */
MPP_SGLN_SOC,
MPP_SGLN_PLATFORM,
MPP_SGLN_SERVER,
/* software platform */
MPP_SGLN_RUNTIME,
/* base module */
MPP_SGLN_BUFFER,
MPP_SGLN_META,
MPP_SGLN_FRAME,
MPP_SGLN_PACKET,
/* system module */
MPP_SGLN_KOBJ,
MPP_SGLN_ENC_CFG,
MPP_SGLN_DEC_CFG,
MPP_SGLN_DEC_RC_API,
/* max count for start init process */
MPP_SGLN_MAX_CNT,
} MppSingletonId;
typedef struct MppSingletonInfo_t {
MppSingletonId id;
const char *name;
void (*init)(void);
void (*deinit)(void);
} MppSingletonInfo;
#define SNGL_TO_STR(x) #x
#define SNGL_TO_FUNC(x) __mpp_singleton_add_##x
/* warning: constructor priorities from 0 to 100 are reserved for the implementation */
#define SNGL_BASE_ID 101
#define MPP_SINGLETON(id, name, init, deinit) \
/* increase id from base id to avoid compiler warning */ \
__attribute__((constructor(SNGL_BASE_ID + id))) \
static void SNGL_TO_FUNC(name)(void) { \
MppSingletonInfo info = { \
id, \
SNGL_TO_STR(name), \
init, \
deinit, \
}; \
mpp_singleton_add(&info, __FUNCTION__); \
}
#ifdef __cplusplus
extern "C" {
#endif
rk_s32 mpp_singleton_add(MppSingletonInfo *info, const char *caller);
#ifdef __cplusplus
}
#endif
#endif /* __MPP_SINGLETON_H__ */