[PVR][Estuary] Timer settings dialog: Show client name in timer type selection dialog...
[xbmc.git] / xbmc / utils / StreamDetails.h
blobbc3aacdd74d2c04d0c14362d13e43db30c5aa3e4
1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #pragma once
11 #include "ISerializable.h"
12 #include "cores/VideoPlayer/Interface/StreamInfo.h"
13 #include "utils/IArchivable.h"
15 #include <memory>
16 #include <string>
17 #include <vector>
19 class CStreamDetails;
20 class CVariant;
21 struct VideoStreamInfo;
22 struct AudioStreamInfo;
23 struct SubtitleStreamInfo;
25 class CStreamDetail : public IArchivable, public ISerializable
27 public:
28 enum StreamType {
29 VIDEO,
30 AUDIO,
31 SUBTITLE
34 explicit CStreamDetail(StreamType type) : m_eType(type), m_pParent(NULL) {}
35 virtual ~CStreamDetail() = default;
36 virtual bool IsWorseThan(const CStreamDetail &that) const = 0;
38 const StreamType m_eType;
40 protected:
41 CStreamDetails *m_pParent;
42 friend class CStreamDetails;
45 class CStreamDetailVideo final : public CStreamDetail
47 public:
48 CStreamDetailVideo();
49 CStreamDetailVideo(const VideoStreamInfo &info, int duration = 0);
50 void Archive(CArchive& ar) override;
51 void Serialize(CVariant& value) const override;
52 bool IsWorseThan(const CStreamDetail &that) const override;
54 int m_iWidth = 0;
55 int m_iHeight = 0;
56 float m_fAspect = 0.0;
57 int m_iDuration = 0;
58 std::string m_strCodec;
59 std::string m_strStereoMode;
60 std::string m_strLanguage;
61 std::string m_strHdrType;
64 class CStreamDetailAudio final : public CStreamDetail
66 public:
67 CStreamDetailAudio();
68 CStreamDetailAudio(const AudioStreamInfo &info);
69 void Archive(CArchive& ar) override;
70 void Serialize(CVariant& value) const override;
71 bool IsWorseThan(const CStreamDetail &that) const override;
73 int m_iChannels = -1;
74 std::string m_strCodec;
75 std::string m_strLanguage;
78 class CStreamDetailSubtitle final : public CStreamDetail
80 public:
81 CStreamDetailSubtitle();
82 CStreamDetailSubtitle(const SubtitleStreamInfo &info);
83 CStreamDetailSubtitle(const CStreamDetailSubtitle&) = default;
84 CStreamDetailSubtitle& operator=(const CStreamDetailSubtitle &that);
85 void Archive(CArchive& ar) override;
86 void Serialize(CVariant& value) const override;
87 bool IsWorseThan(const CStreamDetail &that) const override;
89 std::string m_strLanguage;
92 class CStreamDetails final : public IArchivable, public ISerializable
94 public:
95 CStreamDetails() { Reset(); }
96 CStreamDetails(const CStreamDetails &that);
97 CStreamDetails& operator=(const CStreamDetails &that);
98 bool operator ==(const CStreamDetails &that) const;
99 bool operator !=(const CStreamDetails &that) const;
101 static std::string VideoDimsToResolutionDescription(int iWidth, int iHeight);
102 static std::string VideoAspectToAspectDescription(float fAspect);
104 bool HasItems(void) const { return m_vecItems.size() > 0; }
105 int GetStreamCount(CStreamDetail::StreamType type) const;
106 int GetVideoStreamCount(void) const;
107 int GetAudioStreamCount(void) const;
108 int GetSubtitleStreamCount(void) const;
109 static std::string HdrTypeToString(StreamHdrType hdrType);
110 const CStreamDetail* GetNthStream(CStreamDetail::StreamType type, int idx) const;
112 std::string GetVideoCodec(int idx = 0) const;
113 float GetVideoAspect(int idx = 0) const;
114 int GetVideoWidth(int idx = 0) const;
115 int GetVideoHeight(int idx = 0) const;
116 std::string GetVideoHdrType (int idx = 0) const;
117 int GetVideoDuration(int idx = 0) const;
118 void SetVideoDuration(int idx, const int duration);
119 std::string GetStereoMode(int idx = 0) const;
120 std::string GetVideoLanguage(int idx = 0) const;
122 std::string GetAudioCodec(int idx = 0) const;
123 std::string GetAudioLanguage(int idx = 0) const;
124 int GetAudioChannels(int idx = 0) const;
126 std::string GetSubtitleLanguage(int idx = 0) const;
128 void AddStream(CStreamDetail *item);
129 void Reset(void);
130 void DetermineBestStreams(void);
132 void Archive(CArchive& ar) override;
133 void Serialize(CVariant& value) const override;
135 bool SetStreams(const VideoStreamInfo& videoInfo, int videoDuration, const AudioStreamInfo& audioInfo, const SubtitleStreamInfo& subtitleInfo);
136 private:
137 CStreamDetail *NewStream(CStreamDetail::StreamType type);
138 std::vector<std::unique_ptr<CStreamDetail>> m_vecItems;
139 const CStreamDetailVideo *m_pBestVideo;
140 const CStreamDetailAudio *m_pBestAudio;
141 const CStreamDetailSubtitle *m_pBestSubtitle;