Agora C++ API Reference for All Platforms
extension_provider_i.h
1 //
2 // Agora SDK
3 //
4 // Copyright (c) 2021 Agora.io. All rights reserved.
5 //
6 
7 #pragma once
8 
9 #include <string>
10 
11 #include "NGIAgoraExtensionProvider.h"
12 #include "NGIAgoraExtensionScreenSource.h"
13 #include "api2/AgoraRefCountedObject.h"
14 
15 namespace agora {
16 namespace rtc {
17 
19  public:
20  virtual void* createCustomExtension(const char* name) = 0;
21  virtual void destroyCustomExtension(const char* name, void* object) = 0;
23  return NULL;
24  }
25 };
26 
27 #define RESERVED_INTERNAL_MAJOR_VERSION 999
28 
29 template <>
32  return ExtensionVersion(RESERVED_INTERNAL_MAJOR_VERSION, 0, 0);
33  }
34 };
35 
36 template <class ExtInterface>
38  public:
40  const char* extension, bool refcounted)
41  : provider_(provider), ext_name_(extension) {
42  assert(provider_ && !ext_name_.empty());
43  if (refcounted) {
44  ref_ptr_ = static_cast<RefCountedObject<ExtInterface>*>(
45  provider_->createCustomExtension(extension));
46  } else {
47  raw_ptr_ = static_cast<ExtInterface*>(provider_->createCustomExtension(extension));
48  }
49  }
50 
52  if (raw_ptr_) {
53  assert(provider_ && !ext_name_.empty());
54  provider_->destroyCustomExtension(ext_name_.c_str(), raw_ptr_);
55  }
56  }
57 
62 
63  ExtInterface* get() {
64  return raw_ptr_? raw_ptr_ : ref_ptr_.get();
65  }
66 
68  return ref_ptr_;
69  }
70 
71  private:
72  std::string ext_name_;
73  ICustomExtensionProvider* provider_ = nullptr;
74  agora_refptr<ExtInterface> ref_ptr_ = nullptr;
75  ExtInterface* raw_ptr_ = nullptr;
76 };
77 
78 } // namespace rtc
79 } // namespace agora
agora::rtc::ICustomExtensionProvider::destroyCustomExtension
virtual void destroyCustomExtension(const char *name, void *object)=0
agora::rtc::ExtensionVersion
Definition: AgoraExtensionVersion.h:14
agora::agora_refptr
Definition: AgoraRefPtr.h:44
agora::agora_refptr::get
T * get() const
Definition: AgoraRefPtr.h:77
agora::rtc::CustomExtensionWrapper::CustomExtensionWrapper
CustomExtensionWrapper(const CustomExtensionWrapper &)=default
agora::rtc::ExtensionInterfaceVersion< ICustomExtensionProvider >::Version
static ExtensionVersion Version()
Definition: extension_provider_i.h:31
agora::rtc::CustomExtensionWrapper::~CustomExtensionWrapper
~CustomExtensionWrapper()
Definition: extension_provider_i.h:51
agora::rtc::CustomExtensionWrapper
Definition: extension_provider_i.h:37
agora::rtc::CustomExtensionWrapper::get
ExtInterface * get()
Definition: extension_provider_i.h:63
agora::rtc::ICustomExtensionProvider
Definition: extension_provider_i.h:18
agora::RefCountedObject
Definition: AgoraRefCountedObject.h:63
agora
Definition: AgoraAtomicOps.h:21
agora::rtc::CustomExtensionWrapper::getRefPtr
agora_refptr< ExtInterface > getRefPtr()
Definition: extension_provider_i.h:67
agora::rtc::IExtensionProvider
Definition: NGIAgoraExtensionProvider.h:35
agora::rtc::CustomExtensionWrapper::CustomExtensionWrapper
CustomExtensionWrapper(ICustomExtensionProvider *provider, const char *extension, bool refcounted)
Definition: extension_provider_i.h:39
agora::rtc::CustomExtensionWrapper::operator=
CustomExtensionWrapper & operator=(const CustomExtensionWrapper &)=default
agora::rtc::CustomExtensionWrapper::CustomExtensionWrapper
CustomExtensionWrapper(CustomExtensionWrapper &&)=default
agora::rtc::ICustomExtensionProvider::createLipSyncFilter
virtual agora_refptr< ILipSyncFilter > createLipSyncFilter(const char *name)
Definition: extension_provider_i.h:22
agora::rtc::CustomExtensionWrapper::operator=
CustomExtensionWrapper & operator=(CustomExtensionWrapper &&)=default
agora::rtc::ExtensionInterfaceVersion
Definition: AgoraExtensionVersion.h:65
rtc
Definition: video_node_i.h:26
agora::rtc::ICustomExtensionProvider::createCustomExtension
virtual void * createCustomExtension(const char *name)=0