Agora C++ API Reference for All Platforms

Loading...
Searching...
No Matches
AgoraExtensionProviderEntry.h
1//
2// Copyright (c) 2020 Agora.io. All rights reserved
3
4// This program is confidential and proprietary to Agora.io.
5// And may not be copied, reproduced, modified, disclosed to others, published
6// or used, in whole or in part, without the express prior written permission
7// of Agora.io.
8
9#pragma once // NOLINT(build/header_guard)
10
11#include "NGIAgoraExtensionControl.h"
12AGORA_API agora::rtc::IExtensionControl* AGORA_CALL getAgoraExtensionControl();
13AGORA_API void AGORA_CALL declareProviderVersion(
14 const char*, const agora::rtc::ExtensionVersion&);
15typedef void(*agora_ext_entry_func_t)(void);
16AGORA_API void AGORA_CALL registerProviderEntry(const char*, agora_ext_entry_func_t);
17
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__)); \
27 } \
28} \
29
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); \
38 } \
39} \
40
41
42#if defined (__GNUC__)
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); \
48} \
49
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); \
55} \
56
57
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); \
63 return 0; \
64} \
65const int DUMMY_AGORA_REGEXT_##PROVIDE_NAME##_VAR = _##PROVIDER_NAME##_provider_entry(); \
66
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); \
71 return 0; \
72} \
73const int DUMMY_AGORA_REGEXT_##PROVIDE_NAME##_VAR = _##PROVIDER_NAME##_provider_entry(); \
74
75#else
76#error Unsupported Compilation Toolchain!
77#endif
agora::rtc::IExtensionControl
Definition NGIAgoraExtensionControl.h:22
agora::rtc::ExtensionVersion
Definition AgoraExtensionVersion.h:14