mirror of
https://github.com/androidx/media.git
synced 2025-05-07 23:50:44 +08:00
Support negative value of the @r attrbute of S in SegmentTimeline element
This commit is contained in:
parent
b4a1d55fe4
commit
33eb49ca0d
@ -243,7 +243,7 @@ public class DashManifestParser extends DefaultHandler
|
|||||||
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentBase")) {
|
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentBase")) {
|
||||||
segmentBase = parseSegmentBase(xpp, null);
|
segmentBase = parseSegmentBase(xpp, null);
|
||||||
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentList")) {
|
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentList")) {
|
||||||
segmentBase = parseSegmentList(xpp, null);
|
segmentBase = parseSegmentList(xpp, null,durationMs);
|
||||||
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentTemplate")) {
|
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentTemplate")) {
|
||||||
segmentBase = parseSegmentTemplate(xpp, null, Collections.emptyList(), durationMs);
|
segmentBase = parseSegmentTemplate(xpp, null, Collections.emptyList(), durationMs);
|
||||||
} else {
|
} else {
|
||||||
@ -336,7 +336,7 @@ public class DashManifestParser extends DefaultHandler
|
|||||||
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentBase")) {
|
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentBase")) {
|
||||||
segmentBase = parseSegmentBase(xpp, (SingleSegmentBase) segmentBase);
|
segmentBase = parseSegmentBase(xpp, (SingleSegmentBase) segmentBase);
|
||||||
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentList")) {
|
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentList")) {
|
||||||
segmentBase = parseSegmentList(xpp, (SegmentList) segmentBase);
|
segmentBase = parseSegmentList(xpp, (SegmentList) segmentBase, periodDurationMs);
|
||||||
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentTemplate")) {
|
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentTemplate")) {
|
||||||
segmentBase =
|
segmentBase =
|
||||||
parseSegmentTemplate(xpp, (SegmentTemplate) segmentBase, supplementalProperties,
|
parseSegmentTemplate(xpp, (SegmentTemplate) segmentBase, supplementalProperties,
|
||||||
@ -524,7 +524,7 @@ public class DashManifestParser extends DefaultHandler
|
|||||||
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentBase")) {
|
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentBase")) {
|
||||||
segmentBase = parseSegmentBase(xpp, (SingleSegmentBase) segmentBase);
|
segmentBase = parseSegmentBase(xpp, (SingleSegmentBase) segmentBase);
|
||||||
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentList")) {
|
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentList")) {
|
||||||
segmentBase = parseSegmentList(xpp, (SegmentList) segmentBase);
|
segmentBase = parseSegmentList(xpp, (SegmentList) segmentBase, periodDurationMs);
|
||||||
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentTemplate")) {
|
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentTemplate")) {
|
||||||
segmentBase =
|
segmentBase =
|
||||||
parseSegmentTemplate(
|
parseSegmentTemplate(
|
||||||
@ -720,7 +720,8 @@ public class DashManifestParser extends DefaultHandler
|
|||||||
indexLength);
|
indexLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected SegmentList parseSegmentList(XmlPullParser xpp, @Nullable SegmentList parent)
|
protected SegmentList parseSegmentList(XmlPullParser xpp, @Nullable SegmentList parent,
|
||||||
|
long periodDurationMs)
|
||||||
throws XmlPullParserException, IOException {
|
throws XmlPullParserException, IOException {
|
||||||
|
|
||||||
long timescale = parseLong(xpp, "timescale", parent != null ? parent.timescale : 1);
|
long timescale = parseLong(xpp, "timescale", parent != null ? parent.timescale : 1);
|
||||||
@ -738,7 +739,7 @@ public class DashManifestParser extends DefaultHandler
|
|||||||
if (XmlPullParserUtil.isStartTag(xpp, "Initialization")) {
|
if (XmlPullParserUtil.isStartTag(xpp, "Initialization")) {
|
||||||
initialization = parseInitialization(xpp);
|
initialization = parseInitialization(xpp);
|
||||||
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentTimeline")) {
|
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentTimeline")) {
|
||||||
timeline = parseSegmentTimeline(xpp,timescale,duration);
|
timeline = parseSegmentTimeline(xpp,timescale,periodDurationMs);
|
||||||
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentURL")) {
|
} else if (XmlPullParserUtil.isStartTag(xpp, "SegmentURL")) {
|
||||||
if (segments == null) {
|
if (segments == null) {
|
||||||
segments = new ArrayList<>();
|
segments = new ArrayList<>();
|
||||||
@ -1004,10 +1005,10 @@ public class DashManifestParser extends DefaultHandler
|
|||||||
elapsedTime = parseLong(xpp, "t", elapsedTime);
|
elapsedTime = parseLong(xpp, "t", elapsedTime);
|
||||||
long duration = parseLong(xpp, "d", C.TIME_UNSET);
|
long duration = parseLong(xpp, "d", C.TIME_UNSET);
|
||||||
|
|
||||||
//if repeat is -1 : length of each segment = duration / timescale and
|
//if repeat is negative : length of each segment = duration / timescale and
|
||||||
// number of segments = periodDuration / length of each segment
|
// number of segments = periodDuration / length of each segment
|
||||||
int repeat = parseInt(xpp,"r",0);
|
int repeat = parseInt(xpp,"r",0);
|
||||||
int count = repeat != -1? 1 + repeat : (int) (((periodDurationMs / 1000) * timescale) / duration);
|
int count = repeat >= 0? 1 + repeat : (int) (((periodDurationMs / 1000) * timescale) / duration);
|
||||||
|
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
segmentTimeline.add(buildSegmentTimelineElement(elapsedTime, duration));
|
segmentTimeline.add(buildSegmentTimelineElement(elapsedTime, duration));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user