kodi
DemuxMultiSource.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 "DVDDemux.h"
12 #include "DVDInputStreams/InputStreamMultiSource.h"
13 
14 #include <map>
15 #include <queue>
16 #include <string>
17 #include <utility>
18 #include <vector>
19 
20 typedef std::shared_ptr<CDVDDemux> DemuxPtr;
21 
22 struct comparator{
23  bool operator()(const std::pair<double, DemuxPtr>& x, const std::pair<double, DemuxPtr>& y) const
24  {
25  return x.first > y.first;
26  }
27 };
28 
29 typedef std::priority_queue<std::pair<double, DemuxPtr>, std::vector<std::pair<double, DemuxPtr>>, comparator> DemuxQueue;
30 
32 {
33 
34 public:
36  ~CDemuxMultiSource() override;
37 
38  bool Open(const std::shared_ptr<CDVDInputStream>& pInput);
39 
40  // implementation of CDVDDemux
41  void Abort() override;
42  void EnableStream(int64_t demuxerId, int id, bool enable) override;
43  void Flush() override;
44  int GetNrOfStreams() const override;
45  CDemuxStream* GetStream(int64_t demuxerId, int iStreamId) const override;
46  std::vector<CDemuxStream*> GetStreams() const override;
47  std::string GetStreamCodecName(int64_t demuxerId, int iStreamId) override;
48  int GetStreamLength() override;
49  DemuxPacket* Read() override;
50  bool Reset() override;
51  bool SeekTime(double time, bool backwards = false, double* startpts = NULL) override;
52 
53 protected:
54  CDemuxStream* GetStream(int iStreamId) const override { return nullptr; }
55 
56 private:
57  void Dispose();
58  void SetMissingStreamDetails(const DemuxPtr& demuxer);
59 
60  std::shared_ptr<InputStreamMultiStreams> m_pInput = NULL;
61  std::map<DemuxPtr, InputStreamPtr> m_DemuxerToInputStreamMap;
62  DemuxQueue m_demuxerQueue;
63  std::map<int64_t, DemuxPtr> m_demuxerMap;
64 };
Definition: DVDDemux.h:221
Definition: DemuxMultiSource.h:31
Definition: DVDDemux.h:72
Definition: DemuxMultiSource.h:22
Definition: DemuxPacket.h:22