libmpd++
DASH MPD parsing and manipulation library
 
Loading...
Searching...
No Matches
Representation.hh
Go to the documentation of this file.
1#ifndef _BBC_PARSE_DASH_MPD_REPRESENTATION_HH_
2#define _BBC_PARSE_DASH_MPD_REPRESENTATION_HH_
3/*****************************************************************************
4 * DASH MPD parsing library in C++: Representation class
5 *****************************************************************************
6 * Copyright: (C) 2025 British Broadcasting Corporation
7 * Author(s): Dev Audsin <dev.audsin@bbc.co.uk>
8 * License: LGPLv3
9 *
10 * For full license terms please see the LICENSE file distributed with this
11 * library or refer to: https://www.gnu.org/licenses/lgpl-3.0.txt.
12 */
13#include <chrono>
14#include <list>
15#include <memory>
16#include <optional>
17#include <string>
18
19#include "macros.hh"
20#include "BaseURL.hh"
21#include "ContentProtection.hh"
22#include "Descriptor.hh"
23#include "EventStream.hh"
24#include "ExtendedBandwidth.hh"
25#include "Label.hh"
26#include "Preselection.hh"
27#include "RepresentationBase.hh"
29#include "SegmentBase.hh"
30#include "SegmentTemplate.hh"
31#include "SegmentList.hh"
32#include "ServiceDescription.hh"
33#include "SubRepresentation.hh"
34#include "Subset.hh"
35#include "XLink.hh"
36
39// Forward declarations for types only used by pointer or reference
40namespace xmlpp {
41 class Element;
42 class Node;
43}
46
48
56public:
57 using time_type = std::chrono::system_clock::time_point;
58 using duration_type = std::chrono::microseconds;
59
65
73
81
84 virtual ~Representation() {};
85
94
103
111 bool operator==(const Representation &to_compare) const;
112
124 const MPD *getMPD() const;
126
138 const Period *getPeriod() const;
140
141 const std::string &id() const { return m_id; };
142 Representation &id(const std::string &id) { m_id = id; return *this; };
143 Representation &id(std::string &&id) { m_id = std::move(id); return *this; };
144
145 unsigned int bandwidth() const { return m_bandwidth; };
146 Representation &bandwidth(unsigned int bandwidth) { m_bandwidth = bandwidth; return *this; };
147
148 bool hasQualityRanking() const { return m_qualityRanking.has_value(); };
149 const std::optional<unsigned int> &qualityRanking() const { return m_qualityRanking; };
150 Representation &qualityRanking(const std::nullopt_t &) { m_qualityRanking.reset(); return *this; };
151 Representation &qualityRanking(unsigned int qual_rank) { m_qualityRanking = qual_rank; return *this; };
152 Representation &qualityRanking(const std::optional<unsigned int> &qual_rank) { m_qualityRanking = qual_rank; return *this; };
153
154 const std::list<std::string> &dependencyId() const { return m_dependencyIds; };
155
156 const std::list<std::string> &associationId() const { return m_associationIds; };
157
158 const std::list<std::string> &associationType() const { return m_associationTypes; };
159
160 const std::list<std::string> &mediaStreamStructureId() const { return m_mediaStreamStructureIds; };
161
170 AdaptationSet *getAdaptationSet() { return m_adaptationSet; };
171 const AdaptationSet *getAdaptationSet() const { return m_adaptationSet; };
173
182 URI getMediaURL(unsigned long segment_number) const;
183
192 URI getMediaURL(time_type segment_time) const;
193
201
208 std::list<BaseURL> getBaseURLs() const;
209
214 bool isSelected() const;
215
227
237
239protected:
240 friend class AdaptationSet;
241 Representation(xmlpp::Node&);
242 void setXMLElement(xmlpp::Element&) const;
243 void setAdaptationSet(AdaptationSet *);
245
246private:
247 SegmentTemplate::Variables getTemplateVars() const;
248 SegmentTemplate::Variables getTemplateVars(unsigned long segment_number) const;
249 SegmentTemplate::Variables getTemplateVars(const time_type &time) const;
250 time_type getPeriodStartTime() const;
251 std::optional<duration_type> getPeriodDuration() const;
252 const MultipleSegmentBase &getMultiSegmentBase() const;
253
254 AdaptationSet *m_adaptationSet;
255
256 // Representation attributes (ISO 23009-1:2022 Table 9)
257 std::string m_id;
258 unsigned int m_bandwidth;
259 std::optional<unsigned int> m_qualityRanking;
260 std::list<std::string> m_dependencyIds;
261 std::list<std::string> m_associationIds;
262 std::list<std::string> m_associationTypes;
263 std::list<std::string> m_mediaStreamStructureIds;
264
265 // Representation child elements (ISO 23009-1:2022 Table 9)
266 std::list<BaseURL> m_baseURLs;
267 std::list<ExtendedBandwidth> m_extendedBandwidths;
268 std::list<SubRepresentation> m_subRepresentations;
269 std::optional<SegmentBase> m_segmentBase;
270 std::optional<SegmentList> m_segmentList;
271 std::optional<SegmentTemplate> m_segmentTemplate;
272};
273
275
276/* vim:ts=8:sts=4:sw=4:expandtab:
277 */
278#endif /*_BBC_PARSE_DASH_MPD_REPRESENTATION_HH_*/
279
AdaptationSet class.
Definition AdaptationSet.hh:60
Definition MPD.hh:49
Definition MultipleSegmentBase.hh:39
Definition Period.hh:53
unsigned int bandwidth() const
Definition Representation.hh:145
const std::optional< unsigned int > & qualityRanking() const
Definition Representation.hh:149
std::chrono::microseconds duration_type
The type used to represent duration values in this class.
Definition Representation.hh:58
SegmentAvailability initialisationSegmentAvailability() const
const std::list< std::string > & associationId() const
Definition Representation.hh:156
bool operator==(const Representation &to_compare) const
URI getMediaURL(unsigned long segment_number) const
Representation(Representation &&to_move)
bool hasQualityRanking() const
Definition Representation.hh:148
Representation & bandwidth(unsigned int bandwidth)
Definition Representation.hh:146
const std::string & id() const
Definition Representation.hh:141
const std::list< std::string > & mediaStreamStructureId() const
Definition Representation.hh:160
const std::list< std::string > & dependencyId() const
Definition Representation.hh:154
Representation & operator=(Representation &&to_move)
const std::list< std::string > & associationType() const
Definition Representation.hh:158
AdaptationSet * getAdaptationSet()
Definition Representation.hh:170
URI getMediaURL(time_type segment_time) const
Representation & operator=(const Representation &to_copy)
SegmentAvailability segmentAvailability(const time_type &query_time) const
virtual ~Representation()
Definition Representation.hh:84
std::list< BaseURL > getBaseURLs() const
const Period * getPeriod() const
Representation(const Representation &to_copy)
Representation & qualityRanking(unsigned int qual_rank)
Definition Representation.hh:151
Representation & qualityRanking(const std::optional< unsigned int > &qual_rank)
Definition Representation.hh:152
Representation & qualityRanking(const std::nullopt_t &)
Definition Representation.hh:150
const AdaptationSet * getAdaptationSet() const
Definition Representation.hh:171
Representation & id(const std::string &id)
Definition Representation.hh:142
std::chrono::system_clock::time_point time_type
The type used to represent date-time values in this class.
Definition Representation.hh:57
Representation & id(std::string &&id)
Definition Representation.hh:143
Definition SegmentAvailability.hh:27
Definition SegmentTemplate.hh:46
Definition URI.hh:40
#define LIBMPDPP_NAMESPACE_END
Definition macros.hh:54
#define LIBMPDPP_PUBLIC_API
Used to mark something as part of the public API.
Definition macros.hh:21
#define LIBMPDPP_NAMESPACE_BEGIN
Definition macros.hh:50