diff options
| author | manuel <manuel@mausz.at> | 2019-04-29 12:22:05 +0200 |
|---|---|---|
| committer | manuel <manuel@mausz.at> | 2019-04-29 12:22:05 +0200 |
| commit | e317daf081a1048904fdf0b548946fa3ba6593a7 (patch) | |
| tree | 285a58fe8c6b4a95c9a6020afbe7bcc9cb913ea7 /xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h | |
| parent | 483c0b88bfc1b798396c31a4dd2f5239399ce59e (diff) | |
| download | kodi-pvr-build-e317daf081a1048904fdf0b548946fa3ba6593a7.tar.gz kodi-pvr-build-e317daf081a1048904fdf0b548946fa3ba6593a7.tar.bz2 kodi-pvr-build-e317daf081a1048904fdf0b548946fa3ba6593a7.zip | |
sync with upstream
Diffstat (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h')
| -rw-r--r-- | xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h | 55 |
1 files changed, 50 insertions, 5 deletions
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h index 42ce2e7..db39f86 100644 --- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h | |||
| @@ -43,6 +43,20 @@ | |||
| 43 | #define ATTRIBUTE_HIDDEN | 43 | #define ATTRIBUTE_HIDDEN |
| 44 | #endif | 44 | #endif |
| 45 | 45 | ||
| 46 | #ifdef _MSC_VER | ||
| 47 | #define ATTRIBUTE_FORCEINLINE __forceinline | ||
| 48 | #elif defined(__GNUC__) | ||
| 49 | #define ATTRIBUTE_FORCEINLINE inline __attribute__((__always_inline__)) | ||
| 50 | #elif defined(__CLANG__) | ||
| 51 | #if __has_attribute(__always_inline__) | ||
| 52 | #define ATTRIBUTE_FORCEINLINE inline __attribute__((__always_inline__)) | ||
| 53 | #else | ||
| 54 | #define ATTRIBUTE_FORCEINLINE inline | ||
| 55 | #endif | ||
| 56 | #else | ||
| 57 | #define ATTRIBUTE_FORCEINLINE inline | ||
| 58 | #endif | ||
| 59 | |||
| 46 | #include "versions.h" | 60 | #include "versions.h" |
| 47 | 61 | ||
| 48 | namespace kodi { namespace addon { class CAddonBase; }} | 62 | namespace kodi { namespace addon { class CAddonBase; }} |
| @@ -179,6 +193,7 @@ typedef struct KodiToAddonFuncTable_Addon | |||
| 179 | ADDON_STATUS (*create_instance)(int instanceType, const char* instanceID, KODI_HANDLE instance, KODI_HANDLE* addonInstance, KODI_HANDLE parent); | 193 | ADDON_STATUS (*create_instance)(int instanceType, const char* instanceID, KODI_HANDLE instance, KODI_HANDLE* addonInstance, KODI_HANDLE parent); |
| 180 | void (*destroy_instance)(int instanceType, KODI_HANDLE instance); | 194 | void (*destroy_instance)(int instanceType, KODI_HANDLE instance); |
| 181 | ADDON_STATUS (*set_setting)(const char *settingName, const void *settingValue); | 195 | ADDON_STATUS (*set_setting)(const char *settingName, const void *settingValue); |
| 196 | ADDON_STATUS(*create_instance_ex)(int instanceType, const char* instanceID, KODI_HANDLE instance, KODI_HANDLE* addonInstance, KODI_HANDLE parent, const char* version); | ||
| 182 | } KodiToAddonFuncTable_Addon; | 197 | } KodiToAddonFuncTable_Addon; |
| 183 | 198 | ||
| 184 | /* | 199 | /* |
| @@ -237,6 +252,11 @@ public: | |||
| 237 | return ADDON_STATUS_NOT_IMPLEMENTED; | 252 | return ADDON_STATUS_NOT_IMPLEMENTED; |
| 238 | } | 253 | } |
| 239 | 254 | ||
| 255 | virtual ADDON_STATUS CreateInstanceEx(int instanceType, std::string instanceID, KODI_HANDLE instance, KODI_HANDLE& addonInstance, const std::string &version) | ||
| 256 | { | ||
| 257 | return CreateInstance(instanceType, instanceID, instance, addonInstance); | ||
| 258 | } | ||
| 259 | |||
| 240 | const ADDON_TYPE m_type; | 260 | const ADDON_TYPE m_type; |
| 241 | }; | 261 | }; |
| 242 | } /* namespace addon */ | 262 | } /* namespace addon */ |
| @@ -278,6 +298,9 @@ public: | |||
| 278 | CAddonBase::m_interface->toAddon->create_instance = ADDONBASE_CreateInstance; | 298 | CAddonBase::m_interface->toAddon->create_instance = ADDONBASE_CreateInstance; |
| 279 | CAddonBase::m_interface->toAddon->destroy_instance = ADDONBASE_DestroyInstance; | 299 | CAddonBase::m_interface->toAddon->destroy_instance = ADDONBASE_DestroyInstance; |
| 280 | CAddonBase::m_interface->toAddon->set_setting = ADDONBASE_SetSetting; | 300 | CAddonBase::m_interface->toAddon->set_setting = ADDONBASE_SetSetting; |
| 301 | // If version is present, we know that kodi has create_instance_ex implemented | ||
| 302 | if (!CAddonBase::m_strGlobalApiVersion.empty()) | ||
| 303 | CAddonBase::m_interface->toAddon->create_instance_ex = ADDONBASE_CreateInstanceEx; | ||
| 281 | } | 304 | } |
| 282 | 305 | ||
| 283 | virtual ~CAddonBase() = default; | 306 | virtual ~CAddonBase() = default; |
| @@ -306,8 +329,14 @@ public: | |||
| 306 | return ADDON_STATUS_UNKNOWN; | 329 | return ADDON_STATUS_UNKNOWN; |
| 307 | } | 330 | } |
| 308 | 331 | ||
| 332 | virtual ADDON_STATUS CreateInstanceEx(int instanceType, std::string instanceID, KODI_HANDLE instance, KODI_HANDLE& addonInstance, const std::string &version) | ||
| 333 | { | ||
| 334 | return CreateInstance(instanceType, instanceID, instance, addonInstance); | ||
| 335 | } | ||
| 336 | |||
| 309 | /* Global variables of class */ | 337 | /* Global variables of class */ |
| 310 | static AddonGlobalInterface* m_interface; // Interface function table to hold addresses on add-on and from kodi | 338 | static AddonGlobalInterface* m_interface; // Interface function table to hold addresses on add-on and from kodi |
| 339 | static std::string m_strGlobalApiVersion; | ||
| 311 | 340 | ||
| 312 | /*private:*/ /* Needed public as long the old call functions becomes used! */ | 341 | /*private:*/ /* Needed public as long the old call functions becomes used! */ |
| 313 | static inline void ADDONBASE_Destroy() | 342 | static inline void ADDONBASE_Destroy() |
| @@ -325,16 +354,21 @@ public: | |||
| 325 | 354 | ||
| 326 | static inline ADDON_STATUS ADDONBASE_CreateInstance(int instanceType, const char* instanceID, KODI_HANDLE instance, KODI_HANDLE* addonInstance, KODI_HANDLE parent) | 355 | static inline ADDON_STATUS ADDONBASE_CreateInstance(int instanceType, const char* instanceID, KODI_HANDLE instance, KODI_HANDLE* addonInstance, KODI_HANDLE parent) |
| 327 | { | 356 | { |
| 357 | return ADDONBASE_CreateInstanceEx(instanceType, instanceID, instance, addonInstance, parent, ""); | ||
| 358 | } | ||
| 359 | |||
| 360 | static inline ADDON_STATUS ADDONBASE_CreateInstanceEx(int instanceType, const char* instanceID, KODI_HANDLE instance, KODI_HANDLE* addonInstance, KODI_HANDLE parent, const char* version) | ||
| 361 | { | ||
| 328 | ADDON_STATUS status = ADDON_STATUS_NOT_IMPLEMENTED; | 362 | ADDON_STATUS status = ADDON_STATUS_NOT_IMPLEMENTED; |
| 329 | if (parent != nullptr) | 363 | if (parent != nullptr) |
| 330 | status = static_cast<IAddonInstance*>(parent)->CreateInstance(instanceType, instanceID, instance, *addonInstance); | 364 | status = static_cast<IAddonInstance*>(parent)->CreateInstanceEx(instanceType, instanceID, instance, *addonInstance, version); |
| 331 | if (status == ADDON_STATUS_NOT_IMPLEMENTED) | 365 | if (status == ADDON_STATUS_NOT_IMPLEMENTED) |
| 332 | status = CAddonBase::m_interface->addonBase->CreateInstance(instanceType, instanceID, instance, *addonInstance); | 366 | status = CAddonBase::m_interface->addonBase->CreateInstanceEx(instanceType, instanceID, instance, *addonInstance, version); |
| 333 | if (*addonInstance == nullptr) | 367 | if (*addonInstance == nullptr) |
| 334 | throw std::logic_error("kodi::addon::CAddonBase CreateInstance returns a empty instance pointer!"); | 368 | throw std::logic_error("kodi::addon::CAddonBase CreateInstanceEx returns a empty instance pointer!"); |
| 335 | 369 | ||
| 336 | if (static_cast<::kodi::addon::IAddonInstance*>(*addonInstance)->m_type != instanceType) | 370 | if (static_cast<::kodi::addon::IAddonInstance*>(*addonInstance)->m_type != instanceType) |
| 337 | throw std::logic_error("kodi::addon::CAddonBase CreateInstance with difference on given and returned instance type!"); | 371 | throw std::logic_error("kodi::addon::CAddonBase CreateInstanceEx with difference on given and returned instance type!"); |
| 338 | 372 | ||
| 339 | return status; | 373 | return status; |
| 340 | } | 374 | } |
| @@ -636,6 +670,11 @@ inline void* GetInterface(const std::string &name, const std::string &version) | |||
| 636 | kodi::addon::CAddonBase::m_interface->addonBase = new AddonClass; \ | 670 | kodi::addon::CAddonBase::m_interface->addonBase = new AddonClass; \ |
| 637 | return kodi::addon::CAddonBase::m_interface->addonBase->Create(); \ | 671 | return kodi::addon::CAddonBase::m_interface->addonBase->Create(); \ |
| 638 | } \ | 672 | } \ |
| 673 | extern "C" __declspec(dllexport) ADDON_STATUS ADDON_CreateEx(KODI_HANDLE addonInterface, const char* globalApiVersion, void *unused) \ | ||
| 674 | { \ | ||
| 675 | kodi::addon::CAddonBase::m_strGlobalApiVersion = globalApiVersion; \ | ||
| 676 | return ADDON_Create(addonInterface, unused); \ | ||
| 677 | } \ | ||
| 639 | extern "C" __declspec(dllexport) void ADDON_Destroy() \ | 678 | extern "C" __declspec(dllexport) void ADDON_Destroy() \ |
| 640 | { \ | 679 | { \ |
| 641 | kodi::addon::CAddonBase::ADDONBASE_Destroy(); \ | 680 | kodi::addon::CAddonBase::ADDONBASE_Destroy(); \ |
| @@ -652,4 +691,10 @@ inline void* GetInterface(const std::string &name, const std::string &version) | |||
| 652 | { \ | 691 | { \ |
| 653 | return kodi::addon::GetTypeVersion(type); \ | 692 | return kodi::addon::GetTypeVersion(type); \ |
| 654 | } \ | 693 | } \ |
| 655 | AddonGlobalInterface* kodi::addon::CAddonBase::m_interface = nullptr; | 694 | extern "C" __declspec(dllexport) const char* ADDON_GetTypeMinVersion(int type) \ |
| 695 | { \ | ||
| 696 | return kodi::addon::GetTypeMinVersion(type); \ | ||
| 697 | } \ | ||
| 698 | AddonGlobalInterface* kodi::addon::CAddonBase::m_interface = nullptr; \ | ||
| 699 | std::string kodi::addon::CAddonBase::m_strGlobalApiVersion; | ||
| 700 | |||
