libmpd++
DASH MPD parsing and manipulation library
 
Loading...
Searching...
No Matches
MultipleSegmentBase.hh
Go to the documentation of this file.
1#ifndef _BBC_PARSE_DASH_MPD_MULTIPLE_SEGMENT_BASE_HH_
2#define _BBC_PARSE_DASH_MPD_MULTIPLE_SEGMENT_BASE_HH_
3/*****************************************************************************
4 * DASH MPD parsing library in C++: MultipleSegmentBase class
5 *****************************************************************************
6 * Copyright: (C) 2025 British Broadcasting Corporation
7 * Author(s): David Waring <david.waring2@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 <optional>
14
15#include "macros.hh"
16#include "SegmentBase.hh"
17#include "SegmentTimeline.hh"
18#include "URL.hh"
19
22// Forward declarations for types only used by pointer or reference
23namespace xmlpp {
24 class Element;
25 class Node;
26}
29
31
40public:
42
46
48
51
52 bool operator==(const MultipleSegmentBase &other) const;
53
54 // @duration
55 bool hasDuration() const { return m_duration.has_value(); };
56 const std::optional<unsigned int> &duration() const { return m_duration; };
57 MultipleSegmentBase &duration(const std::nullopt_t&) { m_duration.reset(); return *this; };
58 MultipleSegmentBase &duration(unsigned int val) { m_duration = val; return *this; };
60
61 // @startNumber
62 bool hasStartNumber() const { return m_startNumber.has_value(); };
63 const std::optional<unsigned int> &startNumber() const { return m_startNumber; };
64 MultipleSegmentBase &startNumber(const std::nullopt_t&) { m_startNumber.reset(); return *this; };
65 MultipleSegmentBase &startNumber(unsigned int val) { m_startNumber = val; return *this; };
66
67 // @endNumber
68 bool hasEndNumber() const { return m_endNumber.has_value(); };
69 const std::optional<unsigned int> &endNumber() const { return m_endNumber; };
70 MultipleSegmentBase &endNumber(const std::nullopt_t&) { m_endNumber.reset(); return *this; };
71 MultipleSegmentBase &endNumber(unsigned int val) { m_endNumber = val; return *this; };
72
73 // SegmentTimeline child
74 bool hasSegmentTimeline() const { return m_segmentTimeline.has_value(); };
75 const std::optional<SegmentTimeline> &segmentTimeline() const { return m_segmentTimeline; };
76 MultipleSegmentBase &segmentTimeline(const std::nullopt_t&) { m_segmentTimeline.reset(); return *this; };
77 MultipleSegmentBase &segmentTimeline(const SegmentTimeline &val) { m_segmentTimeline = val; return *this; };
78 MultipleSegmentBase &segmentTimeline(SegmentTimeline &&val) { m_segmentTimeline = std::move(val); return *this; };
79
80 // BitstreamSwitching child
81 bool hasBitstreamSwitching() const { return m_bitstreamSwitching.has_value(); };
82 const std::optional<URL> &bitstreamSwitching() const { return m_bitstreamSwitching; };
83 MultipleSegmentBase &bitstreamSwitching(const std::nullopt_t&) { m_bitstreamSwitching.reset(); return *this; };
84 MultipleSegmentBase &bitstreamSwitching(const URL &val) { m_bitstreamSwitching = val; return *this; };
85 MultipleSegmentBase &bitstreamSwitching(URL &&val) { m_bitstreamSwitching = std::move(val); return *this; };
86
87 // Get time offset of a segment from Period start in the current timescale
88 unsigned long segmentNumberToTime(unsigned long segment_number) const;
89
90 // Get wallclock duration of a segment from Period start
91 duration_type segmentNumberToDurationType(unsigned long segment_number) const;
92
93 // Get segment number from offset from Period start in the current timescale
94 unsigned long timeOffsetToSegmentNumber(unsigned long time_offset) const;
95
96 // Get segment number that contains the wallclock duration since Period start
97 unsigned long durationTypeToSegmentNumber(const duration_type &offset) const;
98
100protected:
101 MultipleSegmentBase(xmlpp::Node&);
102 void setXMLElement(xmlpp::Element&) const;
104
105private:
106 // MultipleSegmentBase element from ISO 23009-1:2022 Clause 5.3.9.2.3
107 // Attributes
108 std::optional<unsigned int> m_duration;
109 std::optional<unsigned int> m_startNumber;
110 std::optional<unsigned int> m_endNumber;
111 // Elements
112 std::optional<SegmentTimeline> m_segmentTimeline;
113 std::optional<URL> m_bitstreamSwitching;
114};
115
117
118/* vim:ts=8:sts=4:sw=4:expandtab:
119 */
120#endif /*_BBC_PARSE_DASH_MPD_MULTIPLE_SEGMENT_BASE_HH_*/
const std::optional< SegmentTimeline > & segmentTimeline() const
Definition MultipleSegmentBase.hh:75
MultipleSegmentBase & duration(unsigned int val)
Definition MultipleSegmentBase.hh:58
const std::optional< URL > & bitstreamSwitching() const
Definition MultipleSegmentBase.hh:82
MultipleSegmentBase & segmentTimeline(SegmentTimeline &&val)
Definition MultipleSegmentBase.hh:78
MultipleSegmentBase & bitstreamSwitching(URL &&val)
Definition MultipleSegmentBase.hh:85
MultipleSegmentBase & startNumber(unsigned int val)
Definition MultipleSegmentBase.hh:65
bool hasStartNumber() const
Definition MultipleSegmentBase.hh:62
MultipleSegmentBase(const MultipleSegmentBase &other)
MultipleSegmentBase & segmentTimeline(const std::nullopt_t &)
Definition MultipleSegmentBase.hh:76
bool hasEndNumber() const
Definition MultipleSegmentBase.hh:68
const std::optional< unsigned int > & duration() const
Definition MultipleSegmentBase.hh:56
MultipleSegmentBase & endNumber(unsigned int val)
Definition MultipleSegmentBase.hh:71
MultipleSegmentBase & startNumber(const std::nullopt_t &)
Definition MultipleSegmentBase.hh:64
MultipleSegmentBase(MultipleSegmentBase &&other)
bool operator==(const MultipleSegmentBase &other) const
MultipleSegmentBase & operator=(const MultipleSegmentBase &other)
const std::optional< unsigned int > & startNumber() const
Definition MultipleSegmentBase.hh:63
bool hasDuration() const
Definition MultipleSegmentBase.hh:55
unsigned long timeOffsetToSegmentNumber(unsigned long time_offset) const
bool hasBitstreamSwitching() const
Definition MultipleSegmentBase.hh:81
duration_type durationAsDurationType() const
bool hasSegmentTimeline() const
Definition MultipleSegmentBase.hh:74
MultipleSegmentBase & segmentTimeline(const SegmentTimeline &val)
Definition MultipleSegmentBase.hh:77
virtual ~MultipleSegmentBase()
Definition MultipleSegmentBase.hh:47
unsigned long segmentNumberToTime(unsigned long segment_number) const
SegmentBase::duration_type duration_type
Definition MultipleSegmentBase.hh:41
MultipleSegmentBase & endNumber(const std::nullopt_t &)
Definition MultipleSegmentBase.hh:70
MultipleSegmentBase & operator=(MultipleSegmentBase &&other)
MultipleSegmentBase & bitstreamSwitching(const URL &val)
Definition MultipleSegmentBase.hh:84
const std::optional< unsigned int > & endNumber() const
Definition MultipleSegmentBase.hh:69
MultipleSegmentBase & bitstreamSwitching(const std::nullopt_t &)
Definition MultipleSegmentBase.hh:83
MultipleSegmentBase & duration(const std::nullopt_t &)
Definition MultipleSegmentBase.hh:57
duration_type segmentNumberToDurationType(unsigned long segment_number) const
unsigned long durationTypeToSegmentNumber(const duration_type &offset) const
std::chrono::microseconds duration_type
Definition SegmentBase.hh:43
Definition SegmentTimeline.hh:39
Definition URL.hh:37
#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