105class QMediaTimeRangePrivate :
public QSharedData
108 QMediaTimeRangePrivate() =
default;
109 QMediaTimeRangePrivate(
const QMediaTimeRange::Interval &interval);
111 QList<QMediaTimeRange::Interval> intervals;
113 void addInterval(
const QMediaTimeRange::Interval &interval);
114 void removeInterval(
const QMediaTimeRange::Interval &interval);
125void QMediaTimeRangePrivate::addInterval(
const QMediaTimeRange::Interval &interval)
128 if (!interval.isNormal())
133 for (i = 0; i < intervals.size(); i++) {
135 if(interval.s < intervals[i].s) {
136 intervals.insert(i, interval);
142 if (i == intervals.size())
143 intervals.append(interval);
146 if (i > 0 && intervals[i - 1].e >= interval.s - 1)
150 while (i < intervals.size() - 1
151 && intervals[i].e >= intervals[i + 1].s - 1) {
152 intervals[i].e = qMax(intervals[i].e, intervals[i + 1].e);
153 intervals.removeAt(i + 1);
157void QMediaTimeRangePrivate::removeInterval(
const QMediaTimeRange::Interval &interval)
160 if (!interval.isNormal())
163 for (
int i = 0; i < intervals.size(); i++) {
164 const QMediaTimeRange::Interval r = intervals.at(i);
166 if (r.e < interval.s) {
169 }
else if (interval.e < r.s) {
172 }
else if (r.s < interval.s && interval.e < r.e) {
174 intervals[i].e = interval.s -1;
175 addInterval(QMediaTimeRange::Interval(interval.e + 1, r.e));
177 }
else if (r.s < interval.s) {
179 intervals[i].e = interval.s - 1;
180 }
else if (interval.e < r.e) {
182 intervals[i].s = interval.e + 1;
186 intervals.removeAt(i);