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; 20 struct PVR_STREAM_PROPERTIES; 21 22 namespace PVR 23 { 24 class CPVRClient; 25 } 26 27 class CInputStreamPVRBase 28 : public CDVDInputStream 29 , public CDVDInputStream::ITimes 30 , public CDVDInputStream::IDemux 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 GetITimes()46 CDVDInputStream::ITimes* GetITimes() override { return this; } 47 bool GetTimes(Times ×) override; 48 49 bool CanSeek() override; //! @todo drop this 50 bool CanPause() override; 51 void Pause(bool bPaused); 52 53 // Demux interface GetIDemux()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; 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 }; 84