11#include "NGIAgoraExtensionControl.h"
13AGORA_API
void AGORA_CALL declareProviderVersion(
15typedef void(*agora_ext_entry_func_t)(void);
16AGORA_API
void AGORA_CALL registerProviderEntry(
const char*, agora_ext_entry_func_t);
18#define DECLARE_CREATE_AND_REGISTER_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, PROVIDER_INTERFACE_USED, ...) \
19static void register_##PROVIDER_NAME##_to_agora() { \
20 auto control = getAgoraExtensionControl(); \
21 agora::rtc::ExtensionVersion version = \
22 agora::rtc::ExtensionInterfaceVersion<PROVIDER_INTERFACE_USED>::Version(); \
23 declareProviderVersion(#PROVIDER_NAME, version); \
24 if (#PROVIDER_NAME && control) { \
25 control->registerProvider(#PROVIDER_NAME, \
26 new agora::RefCountedObject<PROVIDER_CLASS>(__VA_ARGS__)); \
30#define DECLARE_CREATE_AND_REGISTER_PROVIDER_PTR(PROVIDER_NAME, PROVIDER_INTERFACE_USED, PROVIDER_REF_PTR) \
31static void register_##PROVIDER_NAME##_to_agora() { \
32 auto control = getAgoraExtensionControl(); \
33 agora::rtc::ExtensionVersion version = \
34 agora::rtc::ExtensionInterfaceVersion<PROVIDER_INTERFACE_USED>::Version(); \
35 declareProviderVersion(#PROVIDER_NAME, version); \
36 if (#PROVIDER_NAME && control) { \
37 control->registerProvider(#PROVIDER_NAME, PROVIDER_REF_PTR); \
43#define REGISTER_AGORA_EXTENSION_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, PROVIDER_INTERFACE_USED, ...) \
44DECLARE_CREATE_AND_REGISTER_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, PROVIDER_INTERFACE_USED, __VA_ARGS__); \
45__attribute__((constructor, used)) \
46static void _##PROVIDER_NAME##_provider_entry() { \
47 registerProviderEntry(#PROVIDER_NAME, register_##PROVIDER_NAME##_to_agora); \
50#define REGISTER_AGORA_EXTENSION_PROVIDER_PTR(PROVIDER_NAME, PROVIDER_INTERFACE_USED, PROVIDER_REF_PTR) \
51DECLARE_CREATE_AND_REGISTER_PROVIDER_PTR(PROVIDER_NAME, PROVIDER_INTERFACE_USED, PROVIDER_REF_PTR); \
52__attribute__((constructor, used)) \
53static void _##PROVIDER_NAME##_provider_entry() { \
54 registerProviderEntry(#PROVIDER_NAME, register_##PROVIDER_NAME##_to_agora); \
58#elif defined (_MSC_VER)
59#define REGISTER_AGORA_EXTENSION_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, PROVIDER_INTERFACE_USED, ...) \
60DECLARE_CREATE_AND_REGISTER_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, PROVIDER_INTERFACE_USED, __VA_ARGS__); \
61static int _##PROVIDER_NAME##_provider_entry() { \
62 registerProviderEntry(#PROVIDER_NAME, register_##PROVIDER_NAME##_to_agora); \
65const int DUMMY_AGORA_REGEXT_##PROVIDE_NAME##_VAR = _##PROVIDER_NAME##_provider_entry(); \
67#define REGISTER_AGORA_EXTENSION_PROVIDER_PTR(PROVIDER_NAME, PROVIDER_INTERFACE_USED, PROVIDER_REF_PTR) \
68DECLARE_CREATE_AND_REGISTER_PROVIDER_PTR(PROVIDER_NAME, PROVIDER_INTERFACE_USED, PROVIDER_REF_PTR); \
69static int _##PROVIDER_NAME##_provider_entry() { \
70 registerProviderEntry(#PROVIDER_NAME, register_##PROVIDER_NAME##_to_agora); \
73const int DUMMY_AGORA_REGEXT_##PROVIDE_NAME##_VAR = _##PROVIDER_NAME##_provider_entry(); \
76#error Unsupported Compilation Toolchain!
Definition NGIAgoraExtensionControl.h:22
Definition AgoraExtensionVersion.h:14