Clear gapless playback metadata for clipped media
Also pass an unresolved end point to ClippingMediaPeriod. This removes some assertions checking timestamps in the ClippingMediaPeriod, but makes it possible to identify when the end point is at the end of the media. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=167683358
This commit is contained in:
parent
fb023da529
commit
8ef6a2e7bd
@ -270,7 +270,14 @@ public final class ClippingMediaPeriod implements MediaPeriod, MediaPeriod.Callb
|
|||||||
return C.RESULT_BUFFER_READ;
|
return C.RESULT_BUFFER_READ;
|
||||||
}
|
}
|
||||||
int result = stream.readData(formatHolder, buffer, requireFormat);
|
int result = stream.readData(formatHolder, buffer, requireFormat);
|
||||||
// TODO: Clear gapless playback metadata if a format was read (if applicable).
|
if (result == C.RESULT_FORMAT_READ) {
|
||||||
|
// Clear gapless playback metadata if the start/end points don't match the media.
|
||||||
|
Format format = formatHolder.format;
|
||||||
|
int encoderDelay = startUs != 0 ? 0 : format.encoderDelay;
|
||||||
|
int encoderPadding = endUs != C.TIME_END_OF_SOURCE ? 0 : format.encoderPadding;
|
||||||
|
formatHolder.format = format.copyWithGaplessInfo(encoderDelay, encoderPadding);
|
||||||
|
return C.RESULT_FORMAT_READ;
|
||||||
|
}
|
||||||
if (endUs != C.TIME_END_OF_SOURCE && ((result == C.RESULT_BUFFER_READ
|
if (endUs != C.TIME_END_OF_SOURCE && ((result == C.RESULT_BUFFER_READ
|
||||||
&& buffer.timeUs >= endUs) || (result == C.RESULT_NOTHING_READ
|
&& buffer.timeUs >= endUs) || (result == C.RESULT_NOTHING_READ
|
||||||
&& mediaPeriod.getBufferedPositionUs() == C.TIME_END_OF_SOURCE))) {
|
&& mediaPeriod.getBufferedPositionUs() == C.TIME_END_OF_SOURCE))) {
|
||||||
|
@ -98,7 +98,7 @@ public final class ClippingMediaSource implements MediaSource, MediaSource.Liste
|
|||||||
ClippingMediaPeriod mediaPeriod = new ClippingMediaPeriod(
|
ClippingMediaPeriod mediaPeriod = new ClippingMediaPeriod(
|
||||||
mediaSource.createPeriod(id, allocator), enableInitialDiscontinuity);
|
mediaSource.createPeriod(id, allocator), enableInitialDiscontinuity);
|
||||||
mediaPeriods.add(mediaPeriod);
|
mediaPeriods.add(mediaPeriod);
|
||||||
mediaPeriod.setClipping(clippingTimeline.startUs, clippingTimeline.endUs);
|
mediaPeriod.setClipping(startUs, endUs);
|
||||||
return mediaPeriod;
|
return mediaPeriod;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,9 +119,6 @@ public final class ClippingMediaSource implements MediaSource, MediaSource.Liste
|
|||||||
public void onSourceInfoRefreshed(Timeline timeline, Object manifest) {
|
public void onSourceInfoRefreshed(Timeline timeline, Object manifest) {
|
||||||
clippingTimeline = new ClippingTimeline(timeline, startUs, endUs);
|
clippingTimeline = new ClippingTimeline(timeline, startUs, endUs);
|
||||||
sourceListener.onSourceInfoRefreshed(clippingTimeline, manifest);
|
sourceListener.onSourceInfoRefreshed(clippingTimeline, manifest);
|
||||||
long startUs = clippingTimeline.startUs;
|
|
||||||
long endUs = clippingTimeline.endUs == C.TIME_UNSET ? C.TIME_END_OF_SOURCE
|
|
||||||
: clippingTimeline.endUs;
|
|
||||||
int count = mediaPeriods.size();
|
int count = mediaPeriods.size();
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
mediaPeriods.get(i).setClipping(startUs, endUs);
|
mediaPeriods.get(i).setClipping(startUs, endUs);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user