From 9fc8b732737f139d3e466510d75668ab45578960 Mon Sep 17 00:00:00 2001 From: manuel Date: Tue, 8 Mar 2016 21:02:53 +0100 Subject: sync with upstream --- .../include/kodi/kodi_inputstream_dll.h | 257 +++++++++++++++++++++ 1 file changed, 257 insertions(+) create mode 100644 xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_dll.h (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_dll.h') diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_dll.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_dll.h new file mode 100644 index 0000000..6ecf566 --- /dev/null +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_dll.h @@ -0,0 +1,257 @@ +#pragma once + +/* +* Copyright (C) 2005-2016 Team Kodi +* http://kodi.tv +* +* This Program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2, or (at your option) +* any later version. +* +* This Program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with Kodi; see the file COPYING. If not, see +* . +* +*/ + +#include "kodi_inputstream_types.h" +#include "xbmc_addon_dll.h" + +/*! +* Functions that the InputStream client add-on must implement, but some can be empty. +* +* The 'remarks' field indicates which methods should be implemented, and which ones are optional. +*/ + +extern "C" +{ + /*! + * Open a stream. + * @param props + * @return True if the stream has been opened successfully, false otherwise. + * @remarks + */ + bool Open(INPUTSTREAM& props); + + /*! + * Close an open stream. + * @remarks + */ + void Close(void); + + /*! + * Get path/url for this addon. + * @remarks + */ + const char* GetPathList(void); + + /*! + * Get Capabilities of this addon. + * @remarks + */ + struct INPUTSTREAM_CAPABILITIES GetCapabilities(); + + + /*! + * Get IDs of available streams + * @remarks + */ + INPUTSTREAM_IDS GetStreamIds(); + + /*! + * Get stream properties of a stream. + * @param streamId unique id of stream + * @return struc of stream properties + * @remarks + */ + INPUTSTREAM_INFO GetStream(int streamid); + + /*! + * Enable or disable a stream. + * A disabled stream does not send demux packets + * @param streamId unique id of stream + * @param enable true for enable, false for disable + * @remarks + */ + void EnableStream(int streamid, bool enable); + + /*! + * Enables a stream at the given PTS. + * @param streamId unique id of stream + * @param pts position in stream in microseconds + * @remarks will only be called if CAPABILITIES::m_supportsEnableAtPTS is set to true + */ + void EnableStreamAtPTS(int streamid, uint64_t pts); + + /*! + * Reset the demultiplexer in the add-on. + * @remarks Required if bHandlesDemuxing is set to true. + */ + void DemuxReset(void); + + /*! + * Abort the demultiplexer thread in the add-on. + * @remarks Required if bHandlesDemuxing is set to true. + */ + void DemuxAbort(void); + + /*! + * Flush all data that's currently in the demultiplexer buffer in the add-on. + * @remarks Required if bHandlesDemuxing is set to true. + */ + void DemuxFlush(void); + + /*! + * Read the next packet from the demultiplexer, if there is one. + * @return The next packet. + * If there is no next packet, then the add-on should return the + * packet created by calling AllocateDemuxPacket(0) on the callback. + * If the stream changed and XBMC's player needs to be reinitialised, + * then, the add-on should call AllocateDemuxPacket(0) on the + * callback, and set the streamid to DMX_SPECIALID_STREAMCHANGE and + * return the value. + * The add-on should return NULL if an error occured. + * @remarks Return NULL if this add-on won't provide this function. + */ + DemuxPacket* DemuxRead(void); + + /*! + * Notify the InputStream addon/demuxer that XBMC wishes to seek the stream by time + * Demuxer is required to set stream to an IDR frame + * @param time The absolute time since stream start + * @param backwards True to seek to keyframe BEFORE time, else AFTER + * @param startpts can be updated to point to where display should start + * @return True if the seek operation was possible + * @remarks Optional, and only used if addon has its own demuxer. + */ + bool DemuxSeekTime(int time, bool backwards, double *startpts); + + /*! + * Notify the InputStream addon/demuxer that XBMC wishes to change playback speed + * @param speed The requested playback speed + * @remarks Optional, and only used if addon has its own demuxer. + */ + void DemuxSetSpeed(int speed); + + + /*! + * Totel time in ms + * @remarks + */ + int GetTotalTime(); + + /*! + * Playing time in ms + * @remarks + */ + int GetTime(); + + /*! + * Positions inputstream to playing time given in ms + * @remarks + */ + bool PosTime(int ms); + + + /*! + * Check if the backend support pausing the currently playing stream + * This will enable/disable the pause button in XBMC based on the return value + * @return false if the InputStream addon/backend does not support pausing, true if possible + */ + bool CanPauseStream(); + + /*! + * Check if the backend supports seeking for the currently playing stream + * This will enable/disable the rewind/forward buttons in XBMC based on the return value + * @return false if the InputStream addon/backend does not support seeking, true if possible + */ + bool CanSeekStream(); + + + /*! + * Read from an open stream. + * @param pBuffer The buffer to store the data in. + * @param iBufferSize The amount of bytes to read. + * @return The amount of bytes that were actually read from the stream. + * @remarks Return -1 if this add-on won't provide this function. + */ + int ReadStream(uint8_t* pBuffer, unsigned int iBufferSize); + + /*! + * Seek in a stream. + * @param iPosition The position to seek to. + * @param iWhence ? + * @return The new position. + * @remarks Return -1 if this add-on won't provide this function. + */ + int64_t SeekStream(int64_t iPosition, int iWhence = SEEK_SET); + + /*! + * @return The position in the stream that's currently being read. + * @remarks Return -1 if this add-on won't provide this function. + */ + int64_t PositionStream(void); + + /*! + * @return The total length of the stream that's currently being read. + * @remarks Return -1 if this add-on won't provide this function. + */ + int64_t LengthStream(void); + + + /*! + * @brief Notify the InputStream addon that XBMC (un)paused the currently playing stream + */ + void PauseStream(double time); + + + /*! + * Check for real-time streaming + * @return true if current stream is real-time + */ + bool IsRealTimeStream(); + + /*! + * Called by XBMC to assign the function pointers of this add-on to pClient. + * @param pClient The struct to assign the function pointers to. + */ + void __declspec(dllexport) get_addon(struct InputStreamAddonFunctions* pClient) + { + pClient->Open = Open; + pClient->Close = Close; + pClient->GetPathList = GetPathList; + pClient->GetCapabilities = GetCapabilities; + + pClient->GetStreamIds = GetStreamIds; + pClient->GetStream = GetStream; + pClient->EnableStream = EnableStream; + pClient->EnableStreamAtPTS = EnableStreamAtPTS; + pClient->DemuxReset = DemuxReset; + pClient->DemuxAbort = DemuxAbort; + pClient->DemuxFlush = DemuxFlush; + pClient->DemuxRead = DemuxRead; + pClient->DemuxSeekTime = DemuxSeekTime; + pClient->DemuxSetSpeed = DemuxSetSpeed; + + pClient->GetTotalTime = GetTotalTime; + pClient->GetTime = GetTime; + + pClient->PosTime = PosTime; + + pClient->CanPauseStream = CanPauseStream; + pClient->CanSeekStream = CanSeekStream; + + pClient->ReadStream = ReadStream; + pClient->SeekStream = SeekStream; + pClient->PositionStream = PositionStream; + pClient->LengthStream = LengthStream; + pClient->PauseStream = PauseStream; + pClient->IsRealTimeStream = IsRealTimeStream; + }; +}; -- cgit v1.2.3