From 5f8335c1e49ce108ef3481863833c98efa00411b Mon Sep 17 00:00:00 2001 From: manuel Date: Thu, 2 Jul 2020 23:09:26 +0200 Subject: sync with upstream --- .../include/kodi/c-api/addon-instance/pvr.h | 327 +++++++++++++++++++++ 1 file changed, 327 insertions(+) create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/c-api/addon-instance/pvr.h (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/c-api/addon-instance/pvr.h') diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/c-api/addon-instance/pvr.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/c-api/addon-instance/pvr.h new file mode 100644 index 0000000..2d255ad --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/c-api/addon-instance/pvr.h @@ -0,0 +1,327 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include "../../AddonBase.h" +#include "pvr/pvr_channel_groups.h" +#include "pvr/pvr_channels.h" +#include "pvr/pvr_defines.h" +#include "pvr/pvr_edl.h" +#include "pvr/pvr_epg.h" +#include "pvr/pvr_general.h" +#include "pvr/pvr_menu_hook.h" +#include "pvr/pvr_recordings.h" +#include "pvr/pvr_stream.h" +#include "pvr/pvr_timers.h" + +//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ +// "C" main interface function tables between Kodi and addon +// +// Values related to all parts and not used direct on addon, are to define here. +// +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + + /*! + * @internal + * @brief PVR "C" basis API interface + * + * This field contains things that are exchanged between Kodi and Addon + * and is the basis of the PVR-side "C" API. + * + * @warning Care should be taken when making changes in this fields!\n + * Changes can destroy API in addons that have already been created. If a + * necessary change or new feature is added, the version of the PVR + * at @ref ADDON_INSTANCE_VERSION_PVR_MIN must be increased too.\n + * \n + * Conditional changes can be made in some places, without min PVR version + * increase. The add-on should then use CreateInstanceEx and add partial tests + * for this in the C++ header. + * + * Have by add of new parts a look about **Doxygen** `\\ingroup`, so that + * added parts included in documentation. + * + * If you add addon side related documentation, where his dev need know, + * use `///`. For parts only for Kodi make it like here. + * + * @endinternal + */ + + struct AddonInstance_PVR; + + /*! + * @brief Structure to define typical standard values + */ + typedef struct AddonProperties_PVR + { + const char* strUserPath; + const char* strClientPath; + int iEpgMaxDays; + } AddonProperties_PVR; + + /*! + * @brief Structure to transfer the methods from Kodi to addon + */ + typedef struct AddonToKodiFuncTable_PVR + { + // Pointer inside Kodi where used from him to find his class + KODI_HANDLE kodiInstance; + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // General callback functions + void (*AddMenuHook)(void* kodiInstance, const struct PVR_MENUHOOK* hook); + void (*RecordingNotification)(void* kodiInstance, + const char* name, + const char* fileName, + bool on); + void (*ConnectionStateChange)(void* kodiInstance, + const char* strConnectionString, + enum PVR_CONNECTION_STATE newState, + const char* strMessage); + void (*EpgEventStateChange)(void* kodiInstance, + struct EPG_TAG* tag, + enum EPG_EVENT_STATE newState); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Transfer functions where give data back to Kodi, e.g. GetChannels calls TransferChannelEntry + void (*TransferChannelEntry)(void* kodiInstance, + const ADDON_HANDLE handle, + const struct PVR_CHANNEL* chan); + void (*TransferChannelGroup)(void* kodiInstance, + const ADDON_HANDLE handle, + const struct PVR_CHANNEL_GROUP* group); + void (*TransferChannelGroupMember)(void* kodiInstance, + const ADDON_HANDLE handle, + const struct PVR_CHANNEL_GROUP_MEMBER* member); + void (*TransferEpgEntry)(void* kodiInstance, + const ADDON_HANDLE handle, + const struct EPG_TAG* epgentry); + void (*TransferRecordingEntry)(void* kodiInstance, + const ADDON_HANDLE handle, + const struct PVR_RECORDING* recording); + void (*TransferTimerEntry)(void* kodiInstance, + const ADDON_HANDLE handle, + const struct PVR_TIMER* timer); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Kodi inform interface functions + void (*TriggerChannelUpdate)(void* kodiInstance); + void (*TriggerChannelGroupsUpdate)(void* kodiInstance); + void (*TriggerEpgUpdate)(void* kodiInstance, unsigned int iChannelUid); + void (*TriggerRecordingUpdate)(void* kodiInstance); + void (*TriggerTimerUpdate)(void* kodiInstance); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Stream demux interface functions + void (*FreeDemuxPacket)(void* kodiInstance, struct DemuxPacket* pPacket); + struct DemuxPacket* (*AllocateDemuxPacket)(void* kodiInstance, int iDataSize); + struct PVR_CODEC (*GetCodecByName)(const void* kodiInstance, const char* strCodecName); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // New functions becomes added below and can be on another API change (where + // breaks min API version) moved up. + } AddonToKodiFuncTable_PVR; + + /*! + * @brief Structure to transfer the methods from addon to Kodi + */ + typedef struct KodiToAddonFuncTable_PVR + { + // Pointer inside addon where used on them to find his instance class (currently unused!) + KODI_HANDLE addonInstance; + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // General interface functions + enum PVR_ERROR(__cdecl* GetCapabilities)(const struct AddonInstance_PVR*, + struct PVR_ADDON_CAPABILITIES*); + enum PVR_ERROR(__cdecl* GetBackendName)(const struct AddonInstance_PVR*, char*, int); + enum PVR_ERROR(__cdecl* GetBackendVersion)(const struct AddonInstance_PVR*, char*, int); + enum PVR_ERROR(__cdecl* GetBackendHostname)(const struct AddonInstance_PVR*, char*, int); + enum PVR_ERROR(__cdecl* GetConnectionString)(const struct AddonInstance_PVR*, char*, int); + enum PVR_ERROR(__cdecl* GetDriveSpace)(const struct AddonInstance_PVR*, uint64_t*, uint64_t*); + enum PVR_ERROR(__cdecl* CallSettingsMenuHook)(const struct AddonInstance_PVR*, + const struct PVR_MENUHOOK*); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Channel interface functions + + enum PVR_ERROR(__cdecl* GetChannelsAmount)(const struct AddonInstance_PVR*, int*); + enum PVR_ERROR(__cdecl* GetChannels)(const struct AddonInstance_PVR*, ADDON_HANDLE, bool); + enum PVR_ERROR(__cdecl* GetChannelStreamProperties)(const struct AddonInstance_PVR*, + const struct PVR_CHANNEL*, + struct PVR_NAMED_VALUE*, + unsigned int*); + enum PVR_ERROR(__cdecl* GetSignalStatus)(const struct AddonInstance_PVR*, + int, + struct PVR_SIGNAL_STATUS*); + enum PVR_ERROR(__cdecl* GetDescrambleInfo)(const struct AddonInstance_PVR*, + int, + struct PVR_DESCRAMBLE_INFO*); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Channel group interface functions + enum PVR_ERROR(__cdecl* GetChannelGroupsAmount)(const struct AddonInstance_PVR*, int*); + enum PVR_ERROR(__cdecl* GetChannelGroups)(const struct AddonInstance_PVR*, ADDON_HANDLE, bool); + enum PVR_ERROR(__cdecl* GetChannelGroupMembers)(const struct AddonInstance_PVR*, + ADDON_HANDLE, + const struct PVR_CHANNEL_GROUP*); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Channel edit interface functions + enum PVR_ERROR(__cdecl* DeleteChannel)(const struct AddonInstance_PVR*, + const struct PVR_CHANNEL*); + enum PVR_ERROR(__cdecl* RenameChannel)(const struct AddonInstance_PVR*, + const struct PVR_CHANNEL*); + enum PVR_ERROR(__cdecl* OpenDialogChannelSettings)(const struct AddonInstance_PVR*, + const struct PVR_CHANNEL*); + enum PVR_ERROR(__cdecl* OpenDialogChannelAdd)(const struct AddonInstance_PVR*, + const struct PVR_CHANNEL*); + enum PVR_ERROR(__cdecl* OpenDialogChannelScan)(const struct AddonInstance_PVR*); + enum PVR_ERROR(__cdecl* CallChannelMenuHook)(const struct AddonInstance_PVR*, + const PVR_MENUHOOK*, + const PVR_CHANNEL*); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // EPG interface functions + enum PVR_ERROR(__cdecl* GetEPGForChannel)( + const struct AddonInstance_PVR*, ADDON_HANDLE, int, time_t, time_t); + enum PVR_ERROR(__cdecl* IsEPGTagRecordable)(const struct AddonInstance_PVR*, + const struct EPG_TAG*, + bool*); + enum PVR_ERROR(__cdecl* IsEPGTagPlayable)(const struct AddonInstance_PVR*, + const struct EPG_TAG*, + bool*); + enum PVR_ERROR(__cdecl* GetEPGTagEdl)(const struct AddonInstance_PVR*, + const struct EPG_TAG*, + struct PVR_EDL_ENTRY[], + int*); + enum PVR_ERROR(__cdecl* GetEPGTagStreamProperties)(const struct AddonInstance_PVR*, + const struct EPG_TAG*, + struct PVR_NAMED_VALUE*, + unsigned int*); + enum PVR_ERROR(__cdecl* SetEPGTimeFrame)(const struct AddonInstance_PVR*, int); + enum PVR_ERROR(__cdecl* CallEPGMenuHook)(const struct AddonInstance_PVR*, + const struct PVR_MENUHOOK*, + const struct EPG_TAG*); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Recording interface functions + enum PVR_ERROR(__cdecl* GetRecordingsAmount)(const struct AddonInstance_PVR*, bool, int*); + enum PVR_ERROR(__cdecl* GetRecordings)(const struct AddonInstance_PVR*, ADDON_HANDLE, bool); + enum PVR_ERROR(__cdecl* DeleteRecording)(const struct AddonInstance_PVR*, + const struct PVR_RECORDING*); + enum PVR_ERROR(__cdecl* UndeleteRecording)(const struct AddonInstance_PVR*, + const struct PVR_RECORDING*); + enum PVR_ERROR(__cdecl* DeleteAllRecordingsFromTrash)(const struct AddonInstance_PVR*); + enum PVR_ERROR(__cdecl* RenameRecording)(const struct AddonInstance_PVR*, + const struct PVR_RECORDING*); + enum PVR_ERROR(__cdecl* SetRecordingLifetime)(const struct AddonInstance_PVR*, + const struct PVR_RECORDING*); + enum PVR_ERROR(__cdecl* SetRecordingPlayCount)(const struct AddonInstance_PVR*, + const struct PVR_RECORDING*, + int); + enum PVR_ERROR(__cdecl* SetRecordingLastPlayedPosition)(const struct AddonInstance_PVR*, + const struct PVR_RECORDING*, + int); + enum PVR_ERROR(__cdecl* GetRecordingLastPlayedPosition)(const struct AddonInstance_PVR*, + const struct PVR_RECORDING*, + int*); + enum PVR_ERROR(__cdecl* GetRecordingEdl)(const struct AddonInstance_PVR*, + const struct PVR_RECORDING*, + struct PVR_EDL_ENTRY[], + int*); + enum PVR_ERROR(__cdecl* GetRecordingSize)(const struct AddonInstance_PVR*, + const PVR_RECORDING*, + int64_t*); + enum PVR_ERROR(__cdecl* GetRecordingStreamProperties)(const struct AddonInstance_PVR*, + const struct PVR_RECORDING*, + struct PVR_NAMED_VALUE*, + unsigned int*); + enum PVR_ERROR(__cdecl* CallRecordingMenuHook)(const struct AddonInstance_PVR*, + const struct PVR_MENUHOOK*, + const struct PVR_RECORDING*); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Timer interface functions + enum PVR_ERROR(__cdecl* GetTimerTypes)(const struct AddonInstance_PVR*, + struct PVR_TIMER_TYPE[], + int*); + enum PVR_ERROR(__cdecl* GetTimersAmount)(const struct AddonInstance_PVR*, int*); + enum PVR_ERROR(__cdecl* GetTimers)(const struct AddonInstance_PVR*, ADDON_HANDLE); + enum PVR_ERROR(__cdecl* AddTimer)(const struct AddonInstance_PVR*, const struct PVR_TIMER*); + enum PVR_ERROR(__cdecl* DeleteTimer)(const struct AddonInstance_PVR*, + const struct PVR_TIMER*, + bool); + enum PVR_ERROR(__cdecl* UpdateTimer)(const struct AddonInstance_PVR*, const struct PVR_TIMER*); + enum PVR_ERROR(__cdecl* CallTimerMenuHook)(const struct AddonInstance_PVR*, + const struct PVR_MENUHOOK*, + const struct PVR_TIMER*); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Powersaving interface functions + enum PVR_ERROR(__cdecl* OnSystemSleep)(const struct AddonInstance_PVR*); + enum PVR_ERROR(__cdecl* OnSystemWake)(const struct AddonInstance_PVR*); + enum PVR_ERROR(__cdecl* OnPowerSavingActivated)(const struct AddonInstance_PVR*); + enum PVR_ERROR(__cdecl* OnPowerSavingDeactivated)(const struct AddonInstance_PVR*); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Live stream read interface functions + bool(__cdecl* OpenLiveStream)(const struct AddonInstance_PVR*, const struct PVR_CHANNEL*); + void(__cdecl* CloseLiveStream)(const struct AddonInstance_PVR*); + int(__cdecl* ReadLiveStream)(const struct AddonInstance_PVR*, unsigned char*, unsigned int); + int64_t(__cdecl* SeekLiveStream)(const struct AddonInstance_PVR*, int64_t, int); + int64_t(__cdecl* LengthLiveStream)(const struct AddonInstance_PVR*); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Recording stream read interface functions + bool(__cdecl* OpenRecordedStream)(const struct AddonInstance_PVR*, const struct PVR_RECORDING*); + void(__cdecl* CloseRecordedStream)(const struct AddonInstance_PVR*); + int(__cdecl* ReadRecordedStream)(const struct AddonInstance_PVR*, unsigned char*, unsigned int); + int64_t(__cdecl* SeekRecordedStream)(const struct AddonInstance_PVR*, int64_t, int); + int64_t(__cdecl* LengthRecordedStream)(const struct AddonInstance_PVR*); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // Stream demux interface functions + enum PVR_ERROR(__cdecl* GetStreamProperties)(const struct AddonInstance_PVR*, + struct PVR_STREAM_PROPERTIES*); + struct DemuxPacket*(__cdecl* DemuxRead)(const struct AddonInstance_PVR*); + void(__cdecl* DemuxReset)(const struct AddonInstance_PVR*); + void(__cdecl* DemuxAbort)(const struct AddonInstance_PVR*); + void(__cdecl* DemuxFlush)(const struct AddonInstance_PVR*); + void(__cdecl* SetSpeed)(const struct AddonInstance_PVR*, int); + void(__cdecl* FillBuffer)(const struct AddonInstance_PVR*, bool); + bool(__cdecl* SeekTime)(const struct AddonInstance_PVR*, double, bool, double*); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // General stream interface functions + bool(__cdecl* CanPauseStream)(const struct AddonInstance_PVR*); + void(__cdecl* PauseStream)(const struct AddonInstance_PVR*, bool); + bool(__cdecl* CanSeekStream)(const struct AddonInstance_PVR*); + bool(__cdecl* IsRealTimeStream)(const struct AddonInstance_PVR*); + enum PVR_ERROR(__cdecl* GetStreamTimes)(const struct AddonInstance_PVR*, + struct PVR_STREAM_TIMES*); + enum PVR_ERROR(__cdecl* GetStreamReadChunkSize)(const struct AddonInstance_PVR*, int*); + + //--==----==----==----==----==----==----==----==----==----==----==----==----== + // New functions becomes added below and can be on another API change (where + // breaks min API version) moved up. + } KodiToAddonFuncTable_PVR; + + typedef struct AddonInstance_PVR + { + struct AddonProperties_PVR* props; + struct AddonToKodiFuncTable_PVR* toKodi; + struct KodiToAddonFuncTable_PVR* toAddon; + } AddonInstance_PVR; + +#ifdef __cplusplus +} +#endif /* __cplusplus */ -- cgit v1.2.3