xbmc
InputStreamPVRBase.h
1 /*
2  * Copyright (C) 2012-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 
13 #include <map>
14 #include <memory>
15 #include <vector>
16 
17 class CFileItem;
18 class IDemux;
19 class IVideoPlayer;
21 
22 namespace PVR
23 {
24  class CPVRClient;
25 }
26 
28  : public CDVDInputStream
31 {
32 public:
33  CInputStreamPVRBase(IVideoPlayer* pPlayer, const CFileItem& fileitem);
34  ~CInputStreamPVRBase() override;
35  bool Open() override;
36  void Close() override;
37  int Read(uint8_t* buf, int buf_size) override;
38  int64_t Seek(int64_t offset, int whence) override;
39  bool IsEOF() override;
40  int64_t GetLength() override;
41  int GetBlockSize() override;
42 
43  ENextStream NextStream() override;
44  bool IsRealtime() override;
45 
46  CDVDInputStream::ITimes* GetITimes() override { return this; }
47  bool GetTimes(Times &times) override;
48 
49  bool CanSeek() override;
50  bool CanPause() override;
51  void Pause(bool bPaused);
52 
53  // Demux interface
54  CDVDInputStream::IDemux* GetIDemux() override { return nullptr; }
55  bool OpenDemux() override;
56  DemuxPacket* ReadDemux() override;
57  CDemuxStream* GetStream(int iStreamId) const override;
58  std::vector<CDemuxStream*> GetStreams() const override;
59  int GetNrOfStreams() const override;
60  void SetSpeed(int iSpeed) override;
61  void FillBuffer(bool mode) override;
62  bool SeekTime(double time, bool backward = false, double* startpts = NULL) override;
63  void AbortDemux() override;
64  void FlushDemux() override;
65 
66 protected:
67  void UpdateStreamMap();
68  std::shared_ptr<CDemuxStream> GetStreamInternal(int iStreamId);
69 
70  virtual bool OpenPVRStream() = 0;
71  virtual void ClosePVRStream() = 0;
72  virtual int ReadPVRStream(uint8_t* buf, int buf_size) = 0;
73  virtual int64_t SeekPVRStream(int64_t offset, int whence) = 0;
74  virtual int64_t GetPVRStreamLength() = 0;
75  virtual ENextStream NextPVRStream() = 0;
76  virtual bool CanPausePVRStream() = 0;
77  virtual bool CanSeekPVRStream() = 0;
78 
79  bool m_eof = true;
80  std::shared_ptr<PVR_STREAM_PROPERTIES> m_StreamProps;
81  std::map<int, std::shared_ptr<CDemuxStream>> m_streamMap;
82  std::shared_ptr<PVR::CPVRClient> m_client;
83 };
Definition: IVideoPlayer.h:28
Definition: DVDInputStream.h:50
Definition: ContextMenuManager.h:24
Definition: DVDInputStream.h:131
Definition: DVDInputStream.h:65
Definition: DVDInputStream.h:62
"C" Stream properties
Definition: pvr_stream.h:114
Definition: DVDDemux.h:72
Definition: DemuxPacket.h:22
Definition: InputStreamPVRBase.h:27
Represents a file on a share.
Definition: FileItem.h:102