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.
11 #include "ISerializable.h"
12 #include "cores/VideoPlayer/Interface/StreamInfo.h"
13 #include "utils/IArchivable.h"
21 struct VideoStreamInfo
;
22 struct AudioStreamInfo
;
23 struct SubtitleStreamInfo
;
25 class CStreamDetail
: public IArchivable
, public ISerializable
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
;
41 CStreamDetails
*m_pParent
;
42 friend class CStreamDetails
;
45 class CStreamDetailVideo final
: public CStreamDetail
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
;
56 float m_fAspect
= 0.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
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
;
74 std::string m_strCodec
;
75 std::string m_strLanguage
;
78 class CStreamDetailSubtitle final
: public CStreamDetail
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
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
);
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
);
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
;