Agora Java API Reference for Android
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"
12 AGORA_API agora::rtc::IExtensionControl* AGORA_CALL getAgoraExtensionControl();
13 
14 #define DECLARE_CREATE_AND_REGISTER_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, ...) \
15 static void register_##PROVIDER_NAME##_to_agora() { \
16  auto control = getAgoraExtensionControl(); \
17  if (#PROVIDER_NAME && control) { \
18  control->registerProvider(#PROVIDER_NAME, \
19  new agora::RefCountedObject<PROVIDER_CLASS>(__VA_ARGS__)); \
20  } \
21 } \
22 
23 #if defined (__GNUC__)
24 #define REGISTER_AGORA_EXTENSION_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, ...) \
25 DECLARE_CREATE_AND_REGISTER_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, __VA_ARGS__); \
26 typedef void(*agora_ext_entry_func_t)(void); \
27 AGORA_API void AGORA_CALL registerProviderEntry(const char*, agora_ext_entry_func_t); \
28 __attribute__((constructor, used)) \
29 static void _##PROVIDER_NAME##_provider_entry() { \
30  registerProviderEntry(#PROVIDER_NAME, register_##PROVIDER_NAME##_to_agora); \
31 } \
32 
33 #elif defined (_MSC_VER)
34 #define REGISTER_AGORA_EXTENSION_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, ...) \
35 DECLARE_CREATE_AND_REGISTER_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, __VA_ARGS__); \
36 typedef void(*agora_ext_entry_func_t)(void); \
37 AGORA_API void AGORA_CALL registerProviderEntry(const char*, agora_ext_entry_func_t); \
38 BOOL APIENTRY DllMain( HMODULE hModule, \
39  DWORD ul_reason_for_call, \
40  LPVOID lpReserved) { \
41  switch (ul_reason_for_call) { \
42  case DLL_PROCESS_ATTACH: \
43  registerProviderEntry(#PROVIDER_NAME, register_##PROVIDER_NAME##_to_agora); \
44  break; \
45  default: \
46  break; \
47  } \
48  return TRUE; \
49 } \
50 
51 #define REGISTER_AGORA_EXTENSION_PROVIDER_WITH_CUSTOM_DLLMAIN(PROVIDER_NAME, PROVIDER_CLASS, DLLMAINFUNC, ...) \
52 DECLARE_CREATE_AND_REGISTER_PROVIDER(PROVIDER_NAME, PROVIDER_CLASS, __VA_ARGS__); \
53 typedef void(*agora_ext_entry_func_t)(void); \
54 AGORA_API void AGORA_CALL registerProviderEntry(const char*, agora_ext_entry_func_t); \
55 BOOL APIENTRY DllMain( HMODULE hModule, \
56  DWORD ul_reason_for_call, \
57  LPVOID lpReserved) { \
58  if (!DLLMAINFUNC(hModule, ul_reason_for_call, lpReserved)) { \
59  return FALSE; \
60  } \
61  switch (ul_reason_for_call) { \
62  case DLL_PROCESS_ATTACH: \
63  registerProviderEntry(#PROVIDER_NAME, register_##PROVIDER_NAME##_to_agora); \
64  break; \
65  default: \
66  break; \
67  } \
68  return TRUE; \
69 } \
70 
71 #else
72 #error Unsupported Compilation Toolchain!
73 #endif
agora::rtc::IExtensionControl
Definition: NGIAgoraExtensionControl.h:23