xbmc
InputStreamAddon.h
1 /*
2  * Copyright (C) 2005-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "DVDInputStream.h"
12 #include "IVideoPlayer.h"
13 #include "addons/AddonProvider.h"
14 #include "addons/binary-addons/AddonInstanceHandler.h"
15 #include "addons/kodi-dev-kit/include/kodi/addon-instance/Inputstream.h"
16 
17 #include <memory>
18 #include <vector>
19 
21  : public ADDON::IAddonProvider
22 {
23 public:
24  CInputStreamProvider(const ADDON::AddonInfoPtr& addonInfo, KODI_HANDLE parentInstance);
25 
26  void GetAddonInstance(INSTANCE_TYPE instance_type,
27  ADDON::AddonInfoPtr& addonInfo,
28  KODI_HANDLE& parentInstance) override;
29 
30 private:
31  ADDON::AddonInfoPtr m_addonInfo;
32  KODI_HANDLE m_parentInstance;
33 };
34 
38  , public CDVDInputStream
44 {
45 public:
46  CInputStreamAddon(const ADDON::AddonInfoPtr& addonInfo,
47  IVideoPlayer* player,
48  const CFileItem& fileitem,
49  const std::string& instanceId);
50  ~CInputStreamAddon() override;
51 
52  static bool Supports(const ADDON::AddonInfoPtr& addonInfo, const CFileItem& fileitem);
53 
54  // CDVDInputStream
55  bool Open() override;
56  void Close() override;
57  int Read(uint8_t* buf, int buf_size) override;
58  int64_t Seek(int64_t offset, int whence) override;
59  int64_t GetLength() override;
60  int GetBlockSize() override;
61  bool IsEOF() override;
62  bool CanSeek() override;
63  bool CanPause() override;
64 
65  // IDisplayTime
66  CDVDInputStream::IDisplayTime* GetIDisplayTime() override;
67  int GetTotalTime() override;
68  int GetTime() override;
69 
70  // ITime
71  CDVDInputStream::ITimes* GetITimes() override;
72  bool GetTimes(Times &times) override;
73 
74  // IPosTime
75  CDVDInputStream::IPosTime* GetIPosTime() override;
76  bool PosTime(int ms) override;
77 
78  // IDemux
79  CDVDInputStream::IDemux* GetIDemux() override;
80  bool OpenDemux() override;
81  DemuxPacket* ReadDemux() override;
82  CDemuxStream* GetStream(int streamId) const override;
83  std::vector<CDemuxStream*> GetStreams() const override;
84  void EnableStream(int streamId, bool enable) override;
85  bool OpenStream(int streamid) override;
86 
87  int GetNrOfStreams() const override;
88  void SetSpeed(int speed) override;
89  bool SeekTime(double time, bool backward = false, double* startpts = nullptr) override;
90  void AbortDemux() override;
91  void FlushDemux() override;
92  void SetVideoResolution(unsigned int width,
93  unsigned int height,
94  unsigned int maxWidth,
95  unsigned int maxHeight) override;
96  bool IsRealtime() override;
97 
98  // IChapter
99  CDVDInputStream::IChapter* GetIChapter() override;
100  int GetChapter() override;
101  int GetChapterCount() override;
102  void GetChapterName(std::string& name, int ch = -1) override;
103  int64_t GetChapterPos(int ch = -1) override;
104  bool SeekChapter(int ch) override;
105 
106 protected:
107  static int ConvertVideoCodecProfile(STREAMCODEC_PROFILE profile);
108 
109  IVideoPlayer* m_player;
110 
111 private:
112  void DetectScreenResolution();
113 
114  unsigned int m_currentVideoWidth{0};
115  unsigned int m_currentVideoHeight{0};
116 
117  std::vector<std::string> m_fileItemProps;
119 
120  int m_streamCount = 0;
121 
122  std::shared_ptr<CInputStreamProvider> m_subAddonProvider;
123 
134  static DEMUX_PACKET* cb_allocate_demux_packet(void* kodiInstance, int iDataSize = 0);
135 
143  static DEMUX_PACKET* cb_allocate_encrypted_demux_packet(void* kodiInstance,
144  unsigned int dataSize,
145  unsigned int encryptedSubsampleCount);
146 
152  static void cb_free_demux_packet(void* kodiInstance, DEMUX_PACKET* pPacket);
153 
165  static KODI_HANDLE cb_get_stream_transfer(KODI_HANDLE handle,
166  int streamId,
167  INPUTSTREAM_INFO* stream);
169 };
Definition: IVideoPlayer.h:28
Definition: DVDInputStream.h:50
Definition: InputStreamAddon.h:20
Definition: DVDInputStream.h:131
Definition: DVDInputStream.h:54
Definition: DVDInputStream.h:83
Definition: AddonInstanceHandler.h:33
Definition: AddonProvider.h:26
InputStream add-on capabilities. All capabilities are set to "false" as default.
Definition: inputstream.h:94
Definition: DVDInputStream.h:65
Definition: DVDInputStream.h:62
Definition: demux_packet.h:45
Definition: DVDDemux.h:70
Input stream class.
Definition: InputStreamAddon.h:36
stream properties
Definition: inputstream.h:503
Definition: DemuxPacket.h:22
Definition: DVDInputStream.h:76
STREAMCODEC_PROFILE
Definition: stream_codec.h:24
Represents a file on a share.
Definition: FileItem.h:102