Fix preroll sample handling for non-keyframe media start positions

When processing edit lists in MP4 files, the media start position may be a non-keyframe. To ensure proper playback, the decoder must preroll to the preceding keyframe, as these preroll samples are essential for decoding but are not rendered.

Issue: google/ExoPlayer#1659

#cherrypick

PiperOrigin-RevId: 673457615
This commit is contained in:
rohks 2024-09-11 10:58:54 -07:00 committed by Copybara-Service
parent d9a678483b
commit f133e8d1f2
18 changed files with 978 additions and 421 deletions

View File

@ -13,6 +13,9 @@
* Transformer:
* Track Selection:
* Extractors:
* Fix preroll sample handling for non-keyframe media start positions when
processing edit lists in MP4 files
([#1659](https://github.com/google/ExoPlayer/issues/1659)).
* DataSource:
* Audio:
* Video:

View File

@ -166,6 +166,7 @@ public final class Format {
@Nullable private List<byte[]> initializationData;
@Nullable private DrmInitData drmInitData;
private long subsampleOffsetUs;
private boolean hasPrerollSamples;
// Video specific.
@ -256,6 +257,7 @@ public final class Format {
this.initializationData = format.initializationData;
this.drmInitData = format.drmInitData;
this.subsampleOffsetUs = format.subsampleOffsetUs;
this.hasPrerollSamples = format.hasPrerollSamples;
// Video specific.
this.width = format.width;
this.height = format.height;
@ -543,6 +545,18 @@ public final class Format {
return this;
}
/**
* Sets {@link Format#hasPrerollSamples}. The default value is {@code false}.
*
* @param hasPrerollSamples The {@link Format#hasPrerollSamples}.
* @return The builder.
*/
@CanIgnoreReturnValue
public Builder setHasPrerollSamples(boolean hasPrerollSamples) {
this.hasPrerollSamples = hasPrerollSamples;
return this;
}
// Video specific.
/**
@ -952,6 +966,15 @@ public final class Format {
*/
@UnstableApi public final long subsampleOffsetUs;
/**
* Indicates whether the stream contains preroll samples.
*
* <p>When this field is set to {@code true}, it means that the stream includes decode-only
* samples that occur before the intended playback start position. These samples are necessary for
* decoding but are not meant to be rendered and should be skipped after decoding.
*/
@UnstableApi public final boolean hasPrerollSamples;
// Video specific.
/** The width of the video in pixels, or {@link #NO_VALUE} if unknown or not applicable. */
@ -1092,6 +1115,7 @@ public final class Format {
builder.initializationData == null ? Collections.emptyList() : builder.initializationData;
drmInitData = builder.drmInitData;
subsampleOffsetUs = builder.subsampleOffsetUs;
hasPrerollSamples = builder.hasPrerollSamples;
// Video specific.
width = builder.width;
height = builder.height;

View File

@ -143,6 +143,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private boolean seenFirstTrackSelection;
private boolean notifyDiscontinuity;
private boolean pendingInitialDiscontinuity;
private int enabledTrackCount;
private boolean isLengthKnown;
@ -295,6 +296,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
Assertions.checkState(!trackEnabledStates[track]);
enabledTrackCount++;
trackEnabledStates[track] = true;
pendingInitialDiscontinuity |= selection.getSelectedFormat().hasPrerollSamples;
streams[i] = new SampleStreamImpl(track);
streamResetFlags[i] = true;
// If there's still a chance of avoiding a seek, try and seek within the sample queue.
@ -312,6 +314,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
if (enabledTrackCount == 0) {
pendingDeferredRetry = false;
notifyDiscontinuity = false;
pendingInitialDiscontinuity = false;
if (loader.isLoading()) {
// Discard as much as we can synchronously.
for (SampleQueue sampleQueue : sampleQueues) {
@ -387,6 +390,11 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
@Override
public long readDiscontinuity() {
if (pendingInitialDiscontinuity) {
pendingInitialDiscontinuity = false;
return lastSeekPositionUs;
}
if (notifyDiscontinuity
&& (loadingFinished || getExtractedSamplesCount() > extractedSamplesCountAtStartOfLoad)) {
notifyDiscontinuity = false;
@ -451,6 +459,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
pendingDeferredRetry = false;
pendingResetPositionUs = positionUs;
loadingFinished = false;
pendingInitialDiscontinuity = false;
if (loader.isLoading()) {
// Discard as much as we can synchronously.
for (SampleQueue sampleQueue : sampleQueues) {
@ -810,6 +819,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
}
trackFormat = trackFormat.copyWithCryptoType(drmSessionManager.getCryptoType(trackFormat));
trackArray[i] = new TrackGroup(/* id= */ Integer.toString(i), trackFormat);
pendingInitialDiscontinuity |= trackFormat.hasPrerollSamples;
}
trackState = new TrackState(new TrackGroupArray(trackArray), trackIsAudioVideoFlags);
if (isSingleSample && durationUs == C.TIME_UNSET) {

View File

@ -714,9 +714,8 @@ public final class BoxParser {
// sorted, but will ensure that a) all sync frames are in-order and b) any out-of-order
// frames are after their respective sync frames. This means that although the result of
// this binary search might be slightly incorrect (due to out-of-order timestamps), the loop
// below that walks forward to find the next sync frame will result in a correct start
// index. The start index would also be correct if we walk backwards to the previous sync
// frame (https://github.com/google/ExoPlayer/issues/1659).
// below that walks backward to find the previous sync frame will result in a correct start
// index.
startIndices[i] =
Util.binarySearchFloor(
timestamps, editMediaTime, /* inclusive= */ true, /* stayInBounds= */ true);
@ -726,13 +725,8 @@ public final class BoxParser {
editMediaTime + editDuration,
/* inclusive= */ omitZeroDurationClippedSample,
/* stayInBounds= */ false);
while (startIndices[i] < endIndices[i]
&& (flags[startIndices[i]] & C.BUFFER_FLAG_KEY_FRAME) == 0) {
// Applying the edit correctly would require prerolling from the previous sync sample. In
// the current implementation we advance to the next sync sample instead. Only other
// tracks (i.e. audio) will be rendered until the time of the first sync sample.
// See https://github.com/google/ExoPlayer/issues/1659.
startIndices[i]++;
while (startIndices[i] >= 0 && (flags[startIndices[i]] & C.BUFFER_FLAG_KEY_FRAME) == 0) {
startIndices[i]--;
}
editedSampleCount += endIndices[i] - startIndices[i];
copyMetadata |= nextSampleIndex != startIndices[i];
@ -749,6 +743,7 @@ public final class BoxParser {
long[] editedTimestamps = new long[editedSampleCount];
long pts = 0;
int sampleIndex = 0;
boolean hasPrerollSamples = false;
for (int i = 0; i < track.editListDurations.length; i++) {
long editMediaTime = track.editListMediaTimes[i];
int startIndex = startIndices[i];
@ -764,8 +759,8 @@ public final class BoxParser {
long timeInSegmentUs =
Util.scaleLargeTimestamp(
timestamps[j] - editMediaTime, C.MICROS_PER_SECOND, track.timescale);
if (canTrimSamplesWithTimestampChange(track.type)) {
timeInSegmentUs = max(0, timeInSegmentUs);
if (timeInSegmentUs < 0) {
hasPrerollSamples = true;
}
editedTimestamps[sampleIndex] = ptsUs + timeInSegmentUs;
if (copyMetadata && editedSizes[sampleIndex] > editedMaximumSize) {
@ -777,6 +772,10 @@ public final class BoxParser {
}
long editedDurationUs =
Util.scaleLargeTimestamp(pts, C.MICROS_PER_SECOND, track.movieTimescale);
if (hasPrerollSamples) {
Format format = track.format.buildUpon().setHasPrerollSamples(true).build();
track = track.copyWithFormat(format);
}
return new TrackSampleTable(
track,
editedOffsets,
@ -787,12 +786,6 @@ public final class BoxParser {
editedDurationUs);
}
private static boolean canTrimSamplesWithTimestampChange(@C.TrackType int trackType) {
// Audio samples have an inherent duration and we can't trim data by changing the sample
// timestamp alone.
return trackType != C.TRACK_TYPE_AUDIO;
}
@Nullable
private static Metadata parseUdtaMeta(ParsableByteArray meta, int limit) {
meta.skipBytes(Mp4Box.HEADER_SIZE);

View File

@ -1,14 +1,14 @@
seekMap:
isSeekable = true
duration = 2548333
getPosition(0) = [[timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=611666, position=16205]]
getPosition(0) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1274166) = [[timeUs=611666, position=16205], [timeUs=1680000, position=34939]]
getPosition(2548333) = [[timeUs=1680000, position=34939]]
numberOfTracks = 2
track 0:
total output bytes = 2168517
sample count = 60
total output bytes = 3112471
sample count = 83
format 0:
id = 1
sampleMimeType = video/dolby-vision
@ -17,7 +17,7 @@ track 0:
maxNumReorderSamples = 2
width = 1920
height = 1080
frameRate = 23.544804
frameRate = 32.570312
rotationDegrees = 90
colorInfo:
colorSpace = 6
@ -29,242 +29,334 @@ track 0:
initializationData:
data = length 97, hash 32FB3D18
sample 0:
time = -455000
flags = 1
data = length 78829, hash 9265686F
sample 1:
time = -321667
flags = 0
data = length 32262, hash 1AD10F61
sample 2:
time = -388334
flags = 0
data = length 18055, hash C6BED1E3
sample 3:
time = -188334
flags = 0
data = length 65604, hash AA006B06
sample 4:
time = -255000
flags = 0
data = length 25841, hash 5643AEFF
sample 5:
time = -55000
flags = 0
data = length 72552, hash 9535951C
sample 6:
time = -121667
flags = 0
data = length 23756, hash 4074D5AE
sample 7:
time = 78333
flags = 0
data = length 98274, hash 7BE5F53A
sample 8:
time = 11666
flags = 0
data = length 55804, hash D559D074
sample 9:
time = -21667
flags = 0
data = length 12955, hash 35EE397F
sample 10:
time = 45000
flags = 0
data = length 12066, hash 31FB52BD
sample 11:
time = 211666
flags = 0
data = length 86506, hash 2FA2334C
sample 12:
time = 145000
flags = 0
data = length 35691, hash 37C2A1B3
sample 13:
time = 111666
flags = 0
data = length 9029, hash D49A1FBC
sample 14:
time = 178333
flags = 0
data = length 12198, hash BA7F090B
sample 15:
time = 345000
flags = 0
data = length 99669, hash 69FD95FB
sample 16:
time = 278333
flags = 0
data = length 35931, hash 7F52D49D
sample 17:
time = 245000
flags = 0
data = length 13955, hash 520B5A6A
sample 18:
time = 311666
flags = 0
data = length 12407, hash 5326719B
sample 19:
time = 478333
flags = 0
data = length 89991, hash A4198F94
sample 20:
time = 411666
flags = 0
data = length 25706, hash F2A4B2A4
sample 21:
time = 378333
flags = 0
data = length 11924, hash 508042C8
sample 22:
time = 445000
flags = 0
data = length 14949, hash 212C7161
sample 23:
time = 611666
flags = 1
data = length 196349, hash 484B3706
sample 1:
sample 24:
time = 545000
flags = 0
data = length 36093, hash 9964470A
sample 2:
sample 25:
time = 511666
flags = 0
data = length 9196, hash 124A821F
sample 3:
sample 26:
time = 578333
flags = 0
data = length 11337, hash 2A61C44F
sample 4:
sample 27:
time = 745000
flags = 0
data = length 89197, hash E331760E
sample 5:
sample 28:
time = 678333
flags = 0
data = length 27802, hash 280175A2
sample 6:
sample 29:
time = 645000
flags = 0
data = length 9295, hash 1CC71F4D
sample 7:
sample 30:
time = 711666
flags = 0
data = length 11844, hash 595DBFFA
sample 8:
sample 31:
time = 878333
flags = 0
data = length 78369, hash 958807CA
sample 9:
sample 32:
time = 811666
flags = 0
data = length 28320, hash 8B5DAC6A
sample 10:
sample 33:
time = 778333
flags = 0
data = length 13845, hash 868C5F96
sample 11:
sample 34:
time = 845000
flags = 0
data = length 13734, hash 2BF28058
sample 12:
sample 35:
time = 1011666
flags = 0
data = length 60140, hash 4DCE6D29
sample 13:
sample 36:
time = 945000
flags = 0
data = length 28024, hash 2808AC27
sample 14:
sample 37:
time = 911666
flags = 0
data = length 14865, hash DA936298
sample 15:
sample 38:
time = 978333
flags = 0
data = length 15631, hash F11D2528
sample 16:
sample 39:
time = 1145000
flags = 0
data = length 59293, hash 1C3296CD
sample 17:
sample 40:
time = 1078333
flags = 0
data = length 27545, hash 189E13B8
sample 18:
sample 41:
time = 1045000
flags = 0
data = length 14959, hash A47356EF
sample 19:
sample 42:
time = 1111666
flags = 0
data = length 15621, hash C391E893
sample 20:
sample 43:
time = 1278333
flags = 0
data = length 66112, hash 54A454C4
sample 21:
sample 44:
time = 1211666
flags = 0
data = length 33610, hash 4C3F57F2
sample 22:
sample 45:
time = 1178333
flags = 0
data = length 13205, hash EC181CA7
sample 23:
sample 46:
time = 1245000
flags = 0
data = length 18525, hash 20D8FE9D
sample 24:
sample 47:
time = 1411666
flags = 0
data = length 63613, hash B807DB7E
sample 25:
sample 48:
time = 1345000
flags = 0
data = length 40816, hash 2D023C8F
sample 26:
sample 49:
time = 1311666
flags = 0
data = length 17728, hash B07033B9
sample 27:
sample 50:
time = 1378333
flags = 0
data = length 13105, hash 4E3B7245
sample 28:
sample 51:
time = 1546666
flags = 0
data = length 54500, hash 88F3013F
sample 29:
sample 52:
time = 1478333
flags = 0
data = length 34711, hash 9918D286
sample 30:
sample 53:
time = 1445000
flags = 0
data = length 14764, hash CF9044AB
sample 31:
sample 54:
time = 1513333
flags = 0
data = length 16517, hash BA27C997
sample 32:
sample 55:
time = 1680000
flags = 1
data = length 143217, hash A7D06C3F
sample 33:
sample 56:
time = 1613333
flags = 0
data = length 32967, hash E490EDD3
sample 34:
sample 57:
time = 1580000
flags = 0
data = length 17445, hash 5F91C2B8
sample 35:
sample 58:
time = 1646666
flags = 0
data = length 14638, hash 775110FE
sample 36:
sample 59:
time = 1813333
flags = 0
data = length 67665, hash A9A21D87
sample 37:
sample 60:
time = 1746666
flags = 0
data = length 32392, hash 7E790D61
sample 38:
sample 61:
time = 1713333
flags = 0
data = length 10589, hash 6EB324E3
sample 39:
sample 62:
time = 1780000
flags = 0
data = length 18023, hash 29D03684
sample 40:
sample 63:
time = 1946666
flags = 0
data = length 67946, hash 8135C195
sample 41:
sample 64:
time = 1880000
flags = 0
data = length 41030, hash B6A9208
sample 42:
sample 65:
time = 1846666
flags = 0
data = length 15110, hash BF682221
sample 43:
sample 66:
time = 1913333
flags = 0
data = length 17245, hash 2BAFA805
sample 44:
sample 67:
time = 2080000
flags = 0
data = length 57455, hash 2754BFA0
sample 45:
sample 68:
time = 2013333
flags = 0
data = length 37067, hash CCE6C30F
sample 46:
sample 69:
time = 1980000
flags = 0
data = length 14098, hash 60A5760F
sample 47:
sample 70:
time = 2046666
flags = 0
data = length 20864, hash 94450211
sample 48:
sample 71:
time = 2213333
flags = 0
data = length 62871, hash BA53494F
sample 49:
sample 72:
time = 2146666
flags = 0
data = length 38596, hash 420335AC
sample 50:
sample 73:
time = 2113333
flags = 0
data = length 17584, hash 2E024B02
sample 51:
sample 74:
time = 2180000
flags = 0
data = length 18521, hash 7381819A
sample 52:
sample 75:
time = 2346666
flags = 0
data = length 54835, hash F45163BF
sample 53:
sample 76:
time = 2280000
flags = 0
data = length 29346, hash A57C757F
sample 54:
sample 77:
time = 2246666
flags = 0
data = length 15815, hash 1B194C31
sample 55:
sample 78:
time = 2313333
flags = 0
data = length 20390, hash A162AAD0
sample 56:
sample 79:
time = 2480000
flags = 0
data = length 64262, hash 875514C7
sample 57:
sample 80:
time = 2413333
flags = 0
data = length 39953, hash 3884739A
sample 58:
sample 81:
time = 2380000
flags = 0
data = length 23136, hash 8AF1C1AD
sample 59:
sample 82:
time = 2446666
flags = 536870912
data = length 26792, hash 3157758F

View File

@ -1,8 +1,8 @@
seekMap:
isSeekable = true
duration = 2548333
getPosition(0) = [[timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=611666, position=16205]]
getPosition(0) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1274166) = [[timeUs=611666, position=16205], [timeUs=1680000, position=34939]]
getPosition(2548333) = [[timeUs=1680000, position=34939]]
numberOfTracks = 2
@ -17,7 +17,7 @@ track 0:
maxNumReorderSamples = 2
width = 1920
height = 1080
frameRate = 23.544804
frameRate = 32.570312
rotationDegrees = 90
colorInfo:
colorSpace = 6

View File

@ -1,8 +1,8 @@
seekMap:
isSeekable = true
duration = 2548333
getPosition(0) = [[timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=611666, position=16205]]
getPosition(0) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1274166) = [[timeUs=611666, position=16205], [timeUs=1680000, position=34939]]
getPosition(2548333) = [[timeUs=1680000, position=34939]]
numberOfTracks = 2
@ -17,7 +17,7 @@ track 0:
maxNumReorderSamples = 2
width = 1920
height = 1080
frameRate = 23.544804
frameRate = 32.570312
rotationDegrees = 90
colorInfo:
colorSpace = 6

View File

@ -1,8 +1,8 @@
seekMap:
isSeekable = true
duration = 2548333
getPosition(0) = [[timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=611666, position=16205]]
getPosition(0) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1274166) = [[timeUs=611666, position=16205], [timeUs=1680000, position=34939]]
getPosition(2548333) = [[timeUs=1680000, position=34939]]
numberOfTracks = 2
@ -17,7 +17,7 @@ track 0:
maxNumReorderSamples = 2
width = 1920
height = 1080
frameRate = 23.544804
frameRate = 32.570312
rotationDegrees = 90
colorInfo:
colorSpace = 6

View File

@ -1,14 +1,14 @@
seekMap:
isSeekable = true
duration = 2548333
getPosition(0) = [[timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=611666, position=16205]]
getPosition(0) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1274166) = [[timeUs=611666, position=16205], [timeUs=1680000, position=34939]]
getPosition(2548333) = [[timeUs=1680000, position=34939]]
numberOfTracks = 2
track 0:
total output bytes = 2168517
sample count = 60
total output bytes = 3112471
sample count = 83
format 0:
id = 1
sampleMimeType = video/dolby-vision
@ -17,7 +17,7 @@ track 0:
maxNumReorderSamples = 2
width = 1920
height = 1080
frameRate = 23.544804
frameRate = 32.570312
rotationDegrees = 90
colorInfo:
colorSpace = 6
@ -29,242 +29,334 @@ track 0:
initializationData:
data = length 97, hash 32FB3D18
sample 0:
time = -455000
flags = 1
data = length 78829, hash 9265686F
sample 1:
time = -321667
flags = 0
data = length 32262, hash 1AD10F61
sample 2:
time = -388334
flags = 0
data = length 18055, hash C6BED1E3
sample 3:
time = -188334
flags = 0
data = length 65604, hash AA006B06
sample 4:
time = -255000
flags = 0
data = length 25841, hash 5643AEFF
sample 5:
time = -55000
flags = 0
data = length 72552, hash 9535951C
sample 6:
time = -121667
flags = 0
data = length 23756, hash 4074D5AE
sample 7:
time = 78333
flags = 0
data = length 98274, hash 7BE5F53A
sample 8:
time = 11666
flags = 0
data = length 55804, hash D559D074
sample 9:
time = -21667
flags = 0
data = length 12955, hash 35EE397F
sample 10:
time = 45000
flags = 0
data = length 12066, hash 31FB52BD
sample 11:
time = 211666
flags = 0
data = length 86506, hash 2FA2334C
sample 12:
time = 145000
flags = 0
data = length 35691, hash 37C2A1B3
sample 13:
time = 111666
flags = 0
data = length 9029, hash D49A1FBC
sample 14:
time = 178333
flags = 0
data = length 12198, hash BA7F090B
sample 15:
time = 345000
flags = 0
data = length 99669, hash 69FD95FB
sample 16:
time = 278333
flags = 0
data = length 35931, hash 7F52D49D
sample 17:
time = 245000
flags = 0
data = length 13955, hash 520B5A6A
sample 18:
time = 311666
flags = 0
data = length 12407, hash 5326719B
sample 19:
time = 478333
flags = 0
data = length 89991, hash A4198F94
sample 20:
time = 411666
flags = 0
data = length 25706, hash F2A4B2A4
sample 21:
time = 378333
flags = 0
data = length 11924, hash 508042C8
sample 22:
time = 445000
flags = 0
data = length 14949, hash 212C7161
sample 23:
time = 611666
flags = 1
data = length 196349, hash 484B3706
sample 1:
sample 24:
time = 545000
flags = 0
data = length 36093, hash 9964470A
sample 2:
sample 25:
time = 511666
flags = 0
data = length 9196, hash 124A821F
sample 3:
sample 26:
time = 578333
flags = 0
data = length 11337, hash 2A61C44F
sample 4:
sample 27:
time = 745000
flags = 0
data = length 89197, hash E331760E
sample 5:
sample 28:
time = 678333
flags = 0
data = length 27802, hash 280175A2
sample 6:
sample 29:
time = 645000
flags = 0
data = length 9295, hash 1CC71F4D
sample 7:
sample 30:
time = 711666
flags = 0
data = length 11844, hash 595DBFFA
sample 8:
sample 31:
time = 878333
flags = 0
data = length 78369, hash 958807CA
sample 9:
sample 32:
time = 811666
flags = 0
data = length 28320, hash 8B5DAC6A
sample 10:
sample 33:
time = 778333
flags = 0
data = length 13845, hash 868C5F96
sample 11:
sample 34:
time = 845000
flags = 0
data = length 13734, hash 2BF28058
sample 12:
sample 35:
time = 1011666
flags = 0
data = length 60140, hash 4DCE6D29
sample 13:
sample 36:
time = 945000
flags = 0
data = length 28024, hash 2808AC27
sample 14:
sample 37:
time = 911666
flags = 0
data = length 14865, hash DA936298
sample 15:
sample 38:
time = 978333
flags = 0
data = length 15631, hash F11D2528
sample 16:
sample 39:
time = 1145000
flags = 0
data = length 59293, hash 1C3296CD
sample 17:
sample 40:
time = 1078333
flags = 0
data = length 27545, hash 189E13B8
sample 18:
sample 41:
time = 1045000
flags = 0
data = length 14959, hash A47356EF
sample 19:
sample 42:
time = 1111666
flags = 0
data = length 15621, hash C391E893
sample 20:
sample 43:
time = 1278333
flags = 0
data = length 66112, hash 54A454C4
sample 21:
sample 44:
time = 1211666
flags = 0
data = length 33610, hash 4C3F57F2
sample 22:
sample 45:
time = 1178333
flags = 0
data = length 13205, hash EC181CA7
sample 23:
sample 46:
time = 1245000
flags = 0
data = length 18525, hash 20D8FE9D
sample 24:
sample 47:
time = 1411666
flags = 0
data = length 63613, hash B807DB7E
sample 25:
sample 48:
time = 1345000
flags = 0
data = length 40816, hash 2D023C8F
sample 26:
sample 49:
time = 1311666
flags = 0
data = length 17728, hash B07033B9
sample 27:
sample 50:
time = 1378333
flags = 0
data = length 13105, hash 4E3B7245
sample 28:
sample 51:
time = 1546666
flags = 0
data = length 54500, hash 88F3013F
sample 29:
sample 52:
time = 1478333
flags = 0
data = length 34711, hash 9918D286
sample 30:
sample 53:
time = 1445000
flags = 0
data = length 14764, hash CF9044AB
sample 31:
sample 54:
time = 1513333
flags = 0
data = length 16517, hash BA27C997
sample 32:
sample 55:
time = 1680000
flags = 1
data = length 143217, hash A7D06C3F
sample 33:
sample 56:
time = 1613333
flags = 0
data = length 32967, hash E490EDD3
sample 34:
sample 57:
time = 1580000
flags = 0
data = length 17445, hash 5F91C2B8
sample 35:
sample 58:
time = 1646666
flags = 0
data = length 14638, hash 775110FE
sample 36:
sample 59:
time = 1813333
flags = 0
data = length 67665, hash A9A21D87
sample 37:
sample 60:
time = 1746666
flags = 0
data = length 32392, hash 7E790D61
sample 38:
sample 61:
time = 1713333
flags = 0
data = length 10589, hash 6EB324E3
sample 39:
sample 62:
time = 1780000
flags = 0
data = length 18023, hash 29D03684
sample 40:
sample 63:
time = 1946666
flags = 0
data = length 67946, hash 8135C195
sample 41:
sample 64:
time = 1880000
flags = 0
data = length 41030, hash B6A9208
sample 42:
sample 65:
time = 1846666
flags = 0
data = length 15110, hash BF682221
sample 43:
sample 66:
time = 1913333
flags = 0
data = length 17245, hash 2BAFA805
sample 44:
sample 67:
time = 2080000
flags = 0
data = length 57455, hash 2754BFA0
sample 45:
sample 68:
time = 2013333
flags = 0
data = length 37067, hash CCE6C30F
sample 46:
sample 69:
time = 1980000
flags = 0
data = length 14098, hash 60A5760F
sample 47:
sample 70:
time = 2046666
flags = 0
data = length 20864, hash 94450211
sample 48:
sample 71:
time = 2213333
flags = 0
data = length 62871, hash BA53494F
sample 49:
sample 72:
time = 2146666
flags = 0
data = length 38596, hash 420335AC
sample 50:
sample 73:
time = 2113333
flags = 0
data = length 17584, hash 2E024B02
sample 51:
sample 74:
time = 2180000
flags = 0
data = length 18521, hash 7381819A
sample 52:
sample 75:
time = 2346666
flags = 0
data = length 54835, hash F45163BF
sample 53:
sample 76:
time = 2280000
flags = 0
data = length 29346, hash A57C757F
sample 54:
sample 77:
time = 2246666
flags = 0
data = length 15815, hash 1B194C31
sample 55:
sample 78:
time = 2313333
flags = 0
data = length 20390, hash A162AAD0
sample 56:
sample 79:
time = 2480000
flags = 0
data = length 64262, hash 875514C7
sample 57:
sample 80:
time = 2413333
flags = 0
data = length 39953, hash 3884739A
sample 58:
sample 81:
time = 2380000
flags = 0
data = length 23136, hash 8AF1C1AD
sample 59:
sample 82:
time = 2446666
flags = 536870912
data = length 26792, hash 3157758F

View File

@ -1,8 +1,8 @@
seekMap:
isSeekable = true
duration = 2548333
getPosition(0) = [[timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=611666, position=16205]]
getPosition(0) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1274166) = [[timeUs=611666, position=16205], [timeUs=1680000, position=34939]]
getPosition(2548333) = [[timeUs=1680000, position=34939]]
numberOfTracks = 2
@ -17,7 +17,7 @@ track 0:
maxNumReorderSamples = 2
width = 1920
height = 1080
frameRate = 23.544804
frameRate = 32.570312
rotationDegrees = 90
colorInfo:
colorSpace = 6

View File

@ -1,8 +1,8 @@
seekMap:
isSeekable = true
duration = 2548333
getPosition(0) = [[timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=611666, position=16205]]
getPosition(0) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1274166) = [[timeUs=611666, position=16205], [timeUs=1680000, position=34939]]
getPosition(2548333) = [[timeUs=1680000, position=34939]]
numberOfTracks = 2
@ -17,7 +17,7 @@ track 0:
maxNumReorderSamples = 2
width = 1920
height = 1080
frameRate = 23.544804
frameRate = 32.570312
rotationDegrees = 90
colorInfo:
colorSpace = 6

View File

@ -1,8 +1,8 @@
seekMap:
isSeekable = true
duration = 2548333
getPosition(0) = [[timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=611666, position=16205]]
getPosition(0) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1274166) = [[timeUs=611666, position=16205], [timeUs=1680000, position=34939]]
getPosition(2548333) = [[timeUs=1680000, position=34939]]
numberOfTracks = 2
@ -17,7 +17,7 @@ track 0:
maxNumReorderSamples = 2
width = 1920
height = 1080
frameRate = 23.544804
frameRate = 32.570312
rotationDegrees = 90
colorInfo:
colorSpace = 6

View File

@ -1,14 +1,14 @@
seekMap:
isSeekable = true
duration = 2548333
getPosition(0) = [[timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=611666, position=16205]]
getPosition(0) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1274166) = [[timeUs=611666, position=16205], [timeUs=1680000, position=34939]]
getPosition(2548333) = [[timeUs=1680000, position=34939]]
numberOfTracks = 2
track 0:
total output bytes = 2168517
sample count = 60
total output bytes = 3112471
sample count = 83
format 0:
id = 1
sampleMimeType = video/dolby-vision
@ -17,7 +17,7 @@ track 0:
maxNumReorderSamples = 2
width = 1920
height = 1080
frameRate = 23.544804
frameRate = 32.570312
rotationDegrees = 90
colorInfo:
colorSpace = 6
@ -29,242 +29,334 @@ track 0:
initializationData:
data = length 97, hash 32FB3D18
sample 0:
time = -455000
flags = 1
data = length 78829, hash 9265686F
sample 1:
time = -321667
flags = 0
data = length 32262, hash 1AD10F61
sample 2:
time = -388334
flags = 0
data = length 18055, hash C6BED1E3
sample 3:
time = -188334
flags = 0
data = length 65604, hash AA006B06
sample 4:
time = -255000
flags = 0
data = length 25841, hash 5643AEFF
sample 5:
time = -55000
flags = 0
data = length 72552, hash 9535951C
sample 6:
time = -121667
flags = 0
data = length 23756, hash 4074D5AE
sample 7:
time = 78333
flags = 0
data = length 98274, hash 7BE5F53A
sample 8:
time = 11666
flags = 0
data = length 55804, hash D559D074
sample 9:
time = -21667
flags = 0
data = length 12955, hash 35EE397F
sample 10:
time = 45000
flags = 0
data = length 12066, hash 31FB52BD
sample 11:
time = 211666
flags = 0
data = length 86506, hash 2FA2334C
sample 12:
time = 145000
flags = 0
data = length 35691, hash 37C2A1B3
sample 13:
time = 111666
flags = 0
data = length 9029, hash D49A1FBC
sample 14:
time = 178333
flags = 0
data = length 12198, hash BA7F090B
sample 15:
time = 345000
flags = 0
data = length 99669, hash 69FD95FB
sample 16:
time = 278333
flags = 0
data = length 35931, hash 7F52D49D
sample 17:
time = 245000
flags = 0
data = length 13955, hash 520B5A6A
sample 18:
time = 311666
flags = 0
data = length 12407, hash 5326719B
sample 19:
time = 478333
flags = 0
data = length 89991, hash A4198F94
sample 20:
time = 411666
flags = 0
data = length 25706, hash F2A4B2A4
sample 21:
time = 378333
flags = 0
data = length 11924, hash 508042C8
sample 22:
time = 445000
flags = 0
data = length 14949, hash 212C7161
sample 23:
time = 611666
flags = 1
data = length 196349, hash 484B3706
sample 1:
sample 24:
time = 545000
flags = 0
data = length 36093, hash 9964470A
sample 2:
sample 25:
time = 511666
flags = 0
data = length 9196, hash 124A821F
sample 3:
sample 26:
time = 578333
flags = 0
data = length 11337, hash 2A61C44F
sample 4:
sample 27:
time = 745000
flags = 0
data = length 89197, hash E331760E
sample 5:
sample 28:
time = 678333
flags = 0
data = length 27802, hash 280175A2
sample 6:
sample 29:
time = 645000
flags = 0
data = length 9295, hash 1CC71F4D
sample 7:
sample 30:
time = 711666
flags = 0
data = length 11844, hash 595DBFFA
sample 8:
sample 31:
time = 878333
flags = 0
data = length 78369, hash 958807CA
sample 9:
sample 32:
time = 811666
flags = 0
data = length 28320, hash 8B5DAC6A
sample 10:
sample 33:
time = 778333
flags = 0
data = length 13845, hash 868C5F96
sample 11:
sample 34:
time = 845000
flags = 0
data = length 13734, hash 2BF28058
sample 12:
sample 35:
time = 1011666
flags = 0
data = length 60140, hash 4DCE6D29
sample 13:
sample 36:
time = 945000
flags = 0
data = length 28024, hash 2808AC27
sample 14:
sample 37:
time = 911666
flags = 0
data = length 14865, hash DA936298
sample 15:
sample 38:
time = 978333
flags = 0
data = length 15631, hash F11D2528
sample 16:
sample 39:
time = 1145000
flags = 0
data = length 59293, hash 1C3296CD
sample 17:
sample 40:
time = 1078333
flags = 0
data = length 27545, hash 189E13B8
sample 18:
sample 41:
time = 1045000
flags = 0
data = length 14959, hash A47356EF
sample 19:
sample 42:
time = 1111666
flags = 0
data = length 15621, hash C391E893
sample 20:
sample 43:
time = 1278333
flags = 0
data = length 66112, hash 54A454C4
sample 21:
sample 44:
time = 1211666
flags = 0
data = length 33610, hash 4C3F57F2
sample 22:
sample 45:
time = 1178333
flags = 0
data = length 13205, hash EC181CA7
sample 23:
sample 46:
time = 1245000
flags = 0
data = length 18525, hash 20D8FE9D
sample 24:
sample 47:
time = 1411666
flags = 0
data = length 63613, hash B807DB7E
sample 25:
sample 48:
time = 1345000
flags = 0
data = length 40816, hash 2D023C8F
sample 26:
sample 49:
time = 1311666
flags = 0
data = length 17728, hash B07033B9
sample 27:
sample 50:
time = 1378333
flags = 0
data = length 13105, hash 4E3B7245
sample 28:
sample 51:
time = 1546666
flags = 0
data = length 54500, hash 88F3013F
sample 29:
sample 52:
time = 1478333
flags = 0
data = length 34711, hash 9918D286
sample 30:
sample 53:
time = 1445000
flags = 0
data = length 14764, hash CF9044AB
sample 31:
sample 54:
time = 1513333
flags = 0
data = length 16517, hash BA27C997
sample 32:
sample 55:
time = 1680000
flags = 1
data = length 143217, hash A7D06C3F
sample 33:
sample 56:
time = 1613333
flags = 0
data = length 32967, hash E490EDD3
sample 34:
sample 57:
time = 1580000
flags = 0
data = length 17445, hash 5F91C2B8
sample 35:
sample 58:
time = 1646666
flags = 0
data = length 14638, hash 775110FE
sample 36:
sample 59:
time = 1813333
flags = 0
data = length 67665, hash A9A21D87
sample 37:
sample 60:
time = 1746666
flags = 0
data = length 32392, hash 7E790D61
sample 38:
sample 61:
time = 1713333
flags = 0
data = length 10589, hash 6EB324E3
sample 39:
sample 62:
time = 1780000
flags = 0
data = length 18023, hash 29D03684
sample 40:
sample 63:
time = 1946666
flags = 0
data = length 67946, hash 8135C195
sample 41:
sample 64:
time = 1880000
flags = 0
data = length 41030, hash B6A9208
sample 42:
sample 65:
time = 1846666
flags = 0
data = length 15110, hash BF682221
sample 43:
sample 66:
time = 1913333
flags = 0
data = length 17245, hash 2BAFA805
sample 44:
sample 67:
time = 2080000
flags = 0
data = length 57455, hash 2754BFA0
sample 45:
sample 68:
time = 2013333
flags = 0
data = length 37067, hash CCE6C30F
sample 46:
sample 69:
time = 1980000
flags = 0
data = length 14098, hash 60A5760F
sample 47:
sample 70:
time = 2046666
flags = 0
data = length 20864, hash 94450211
sample 48:
sample 71:
time = 2213333
flags = 0
data = length 62871, hash BA53494F
sample 49:
sample 72:
time = 2146666
flags = 0
data = length 38596, hash 420335AC
sample 50:
sample 73:
time = 2113333
flags = 0
data = length 17584, hash 2E024B02
sample 51:
sample 74:
time = 2180000
flags = 0
data = length 18521, hash 7381819A
sample 52:
sample 75:
time = 2346666
flags = 0
data = length 54835, hash F45163BF
sample 53:
sample 76:
time = 2280000
flags = 0
data = length 29346, hash A57C757F
sample 54:
sample 77:
time = 2246666
flags = 0
data = length 15815, hash 1B194C31
sample 55:
sample 78:
time = 2313333
flags = 0
data = length 20390, hash A162AAD0
sample 56:
sample 79:
time = 2480000
flags = 0
data = length 64262, hash 875514C7
sample 57:
sample 80:
time = 2413333
flags = 0
data = length 39953, hash 3884739A
sample 58:
sample 81:
time = 2380000
flags = 0
data = length 23136, hash 8AF1C1AD
sample 59:
sample 82:
time = 2446666
flags = 536870912
data = length 26792, hash 3157758F

View File

@ -1,14 +1,14 @@
seekMap:
isSeekable = true
duration = 2548333
getPosition(0) = [[timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=611666, position=16205]]
getPosition(0) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1) = [[timeUs=-455000, position=5162], [timeUs=611666, position=16205]]
getPosition(1274166) = [[timeUs=611666, position=16205], [timeUs=1680000, position=34939]]
getPosition(2548333) = [[timeUs=1680000, position=34939]]
numberOfTracks = 2
track 0:
total output bytes = 2168517
sample count = 60
total output bytes = 3112471
sample count = 83
format 0:
id = 1
sampleMimeType = video/dolby-vision
@ -17,7 +17,7 @@ track 0:
maxNumReorderSamples = 2
width = 1920
height = 1080
frameRate = 23.544804
frameRate = 32.570312
rotationDegrees = 90
colorInfo:
colorSpace = 6
@ -29,242 +29,334 @@ track 0:
initializationData:
data = length 97, hash 32FB3D18
sample 0:
time = -455000
flags = 1
data = length 78829, hash 9265686F
sample 1:
time = -321667
flags = 0
data = length 32262, hash 1AD10F61
sample 2:
time = -388334
flags = 0
data = length 18055, hash C6BED1E3
sample 3:
time = -188334
flags = 0
data = length 65604, hash AA006B06
sample 4:
time = -255000
flags = 0
data = length 25841, hash 5643AEFF
sample 5:
time = -55000
flags = 0
data = length 72552, hash 9535951C
sample 6:
time = -121667
flags = 0
data = length 23756, hash 4074D5AE
sample 7:
time = 78333
flags = 0
data = length 98274, hash 7BE5F53A
sample 8:
time = 11666
flags = 0
data = length 55804, hash D559D074
sample 9:
time = -21667
flags = 0
data = length 12955, hash 35EE397F
sample 10:
time = 45000
flags = 0
data = length 12066, hash 31FB52BD
sample 11:
time = 211666
flags = 0
data = length 86506, hash 2FA2334C
sample 12:
time = 145000
flags = 0
data = length 35691, hash 37C2A1B3
sample 13:
time = 111666
flags = 0
data = length 9029, hash D49A1FBC
sample 14:
time = 178333
flags = 0
data = length 12198, hash BA7F090B
sample 15:
time = 345000
flags = 0
data = length 99669, hash 69FD95FB
sample 16:
time = 278333
flags = 0
data = length 35931, hash 7F52D49D
sample 17:
time = 245000
flags = 0
data = length 13955, hash 520B5A6A
sample 18:
time = 311666
flags = 0
data = length 12407, hash 5326719B
sample 19:
time = 478333
flags = 0
data = length 89991, hash A4198F94
sample 20:
time = 411666
flags = 0
data = length 25706, hash F2A4B2A4
sample 21:
time = 378333
flags = 0
data = length 11924, hash 508042C8
sample 22:
time = 445000
flags = 0
data = length 14949, hash 212C7161
sample 23:
time = 611666
flags = 1
data = length 196349, hash 484B3706
sample 1:
sample 24:
time = 545000
flags = 0
data = length 36093, hash 9964470A
sample 2:
sample 25:
time = 511666
flags = 0
data = length 9196, hash 124A821F
sample 3:
sample 26:
time = 578333
flags = 0
data = length 11337, hash 2A61C44F
sample 4:
sample 27:
time = 745000
flags = 0
data = length 89197, hash E331760E
sample 5:
sample 28:
time = 678333
flags = 0
data = length 27802, hash 280175A2
sample 6:
sample 29:
time = 645000
flags = 0
data = length 9295, hash 1CC71F4D
sample 7:
sample 30:
time = 711666
flags = 0
data = length 11844, hash 595DBFFA
sample 8:
sample 31:
time = 878333
flags = 0
data = length 78369, hash 958807CA
sample 9:
sample 32:
time = 811666
flags = 0
data = length 28320, hash 8B5DAC6A
sample 10:
sample 33:
time = 778333
flags = 0
data = length 13845, hash 868C5F96
sample 11:
sample 34:
time = 845000
flags = 0
data = length 13734, hash 2BF28058
sample 12:
sample 35:
time = 1011666
flags = 0
data = length 60140, hash 4DCE6D29
sample 13:
sample 36:
time = 945000
flags = 0
data = length 28024, hash 2808AC27
sample 14:
sample 37:
time = 911666
flags = 0
data = length 14865, hash DA936298
sample 15:
sample 38:
time = 978333
flags = 0
data = length 15631, hash F11D2528
sample 16:
sample 39:
time = 1145000
flags = 0
data = length 59293, hash 1C3296CD
sample 17:
sample 40:
time = 1078333
flags = 0
data = length 27545, hash 189E13B8
sample 18:
sample 41:
time = 1045000
flags = 0
data = length 14959, hash A47356EF
sample 19:
sample 42:
time = 1111666
flags = 0
data = length 15621, hash C391E893
sample 20:
sample 43:
time = 1278333
flags = 0
data = length 66112, hash 54A454C4
sample 21:
sample 44:
time = 1211666
flags = 0
data = length 33610, hash 4C3F57F2
sample 22:
sample 45:
time = 1178333
flags = 0
data = length 13205, hash EC181CA7
sample 23:
sample 46:
time = 1245000
flags = 0
data = length 18525, hash 20D8FE9D
sample 24:
sample 47:
time = 1411666
flags = 0
data = length 63613, hash B807DB7E
sample 25:
sample 48:
time = 1345000
flags = 0
data = length 40816, hash 2D023C8F
sample 26:
sample 49:
time = 1311666
flags = 0
data = length 17728, hash B07033B9
sample 27:
sample 50:
time = 1378333
flags = 0
data = length 13105, hash 4E3B7245
sample 28:
sample 51:
time = 1546666
flags = 0
data = length 54500, hash 88F3013F
sample 29:
sample 52:
time = 1478333
flags = 0
data = length 34711, hash 9918D286
sample 30:
sample 53:
time = 1445000
flags = 0
data = length 14764, hash CF9044AB
sample 31:
sample 54:
time = 1513333
flags = 0
data = length 16517, hash BA27C997
sample 32:
sample 55:
time = 1680000
flags = 1
data = length 143217, hash A7D06C3F
sample 33:
sample 56:
time = 1613333
flags = 0
data = length 32967, hash E490EDD3
sample 34:
sample 57:
time = 1580000
flags = 0
data = length 17445, hash 5F91C2B8
sample 35:
sample 58:
time = 1646666
flags = 0
data = length 14638, hash 775110FE
sample 36:
sample 59:
time = 1813333
flags = 0
data = length 67665, hash A9A21D87
sample 37:
sample 60:
time = 1746666
flags = 0
data = length 32392, hash 7E790D61
sample 38:
sample 61:
time = 1713333
flags = 0
data = length 10589, hash 6EB324E3
sample 39:
sample 62:
time = 1780000
flags = 0
data = length 18023, hash 29D03684
sample 40:
sample 63:
time = 1946666
flags = 0
data = length 67946, hash 8135C195
sample 41:
sample 64:
time = 1880000
flags = 0
data = length 41030, hash B6A9208
sample 42:
sample 65:
time = 1846666
flags = 0
data = length 15110, hash BF682221
sample 43:
sample 66:
time = 1913333
flags = 0
data = length 17245, hash 2BAFA805
sample 44:
sample 67:
time = 2080000
flags = 0
data = length 57455, hash 2754BFA0
sample 45:
sample 68:
time = 2013333
flags = 0
data = length 37067, hash CCE6C30F
sample 46:
sample 69:
time = 1980000
flags = 0
data = length 14098, hash 60A5760F
sample 47:
sample 70:
time = 2046666
flags = 0
data = length 20864, hash 94450211
sample 48:
sample 71:
time = 2213333
flags = 0
data = length 62871, hash BA53494F
sample 49:
sample 72:
time = 2146666
flags = 0
data = length 38596, hash 420335AC
sample 50:
sample 73:
time = 2113333
flags = 0
data = length 17584, hash 2E024B02
sample 51:
sample 74:
time = 2180000
flags = 0
data = length 18521, hash 7381819A
sample 52:
sample 75:
time = 2346666
flags = 0
data = length 54835, hash F45163BF
sample 53:
sample 76:
time = 2280000
flags = 0
data = length 29346, hash A57C757F
sample 54:
sample 77:
time = 2246666
flags = 0
data = length 15815, hash 1B194C31
sample 55:
sample 78:
time = 2313333
flags = 0
data = length 20390, hash A162AAD0
sample 56:
sample 79:
time = 2480000
flags = 0
data = length 64262, hash 875514C7
sample 57:
sample 80:
time = 2413333
flags = 0
data = length 39953, hash 3884739A
sample 58:
sample 81:
time = 2380000
flags = 0
data = length 23136, hash 8AF1C1AD
sample 59:
sample 82:
time = 2446666
flags = 536870912
data = length 26792, hash 3157758F

View File

@ -793,430 +793,591 @@ MediaCodecAdapter (exotest.audio.aac):
rendered = false
MediaCodecAdapter (exotest.video.hevc):
inputBuffers:
count = 61
count = 84
input buffer #0:
timeUs = 999999545000
contents = length 78829, hash 9265686F
input buffer #1:
timeUs = 999999678333
contents = length 32262, hash 1AD10F61
input buffer #2:
timeUs = 999999611666
contents = length 18055, hash C6BED1E3
input buffer #3:
timeUs = 999999811666
contents = length 65604, hash AA006B06
input buffer #4:
timeUs = 999999745000
contents = length 25841, hash 5643AEFF
input buffer #5:
timeUs = 999999945000
contents = length 72552, hash 9535951C
input buffer #6:
timeUs = 999999878333
contents = length 23756, hash 4074D5AE
input buffer #7:
timeUs = 1000000078333
contents = length 98274, hash 7BE5F53A
input buffer #8:
timeUs = 1000000011666
contents = length 55804, hash D559D074
input buffer #9:
timeUs = 999999978333
contents = length 12955, hash 35EE397F
input buffer #10:
timeUs = 1000000045000
contents = length 12066, hash 31FB52BD
input buffer #11:
timeUs = 1000000211666
contents = length 86506, hash 2FA2334C
input buffer #12:
timeUs = 1000000145000
contents = length 35691, hash 37C2A1B3
input buffer #13:
timeUs = 1000000111666
contents = length 9029, hash D49A1FBC
input buffer #14:
timeUs = 1000000178333
contents = length 12198, hash BA7F090B
input buffer #15:
timeUs = 1000000345000
contents = length 99669, hash 69FD95FB
input buffer #16:
timeUs = 1000000278333
contents = length 35931, hash 7F52D49D
input buffer #17:
timeUs = 1000000245000
contents = length 13955, hash 520B5A6A
input buffer #18:
timeUs = 1000000311666
contents = length 12407, hash 5326719B
input buffer #19:
timeUs = 1000000478333
contents = length 89991, hash A4198F94
input buffer #20:
timeUs = 1000000411666
contents = length 25706, hash F2A4B2A4
input buffer #21:
timeUs = 1000000378333
contents = length 11924, hash 508042C8
input buffer #22:
timeUs = 1000000445000
contents = length 14949, hash 212C7161
input buffer #23:
timeUs = 1000000611666
contents = length 196349, hash 484B3706
input buffer #1:
input buffer #24:
timeUs = 1000000545000
contents = length 36093, hash 9964470A
input buffer #2:
input buffer #25:
timeUs = 1000000511666
contents = length 9196, hash 124A821F
input buffer #3:
input buffer #26:
timeUs = 1000000578333
contents = length 11337, hash 2A61C44F
input buffer #4:
input buffer #27:
timeUs = 1000000745000
contents = length 89197, hash E331760E
input buffer #5:
input buffer #28:
timeUs = 1000000678333
contents = length 27802, hash 280175A2
input buffer #6:
input buffer #29:
timeUs = 1000000645000
contents = length 9295, hash 1CC71F4D
input buffer #7:
input buffer #30:
timeUs = 1000000711666
contents = length 11844, hash 595DBFFA
input buffer #8:
input buffer #31:
timeUs = 1000000878333
contents = length 78369, hash 958807CA
input buffer #9:
input buffer #32:
timeUs = 1000000811666
contents = length 28320, hash 8B5DAC6A
input buffer #10:
input buffer #33:
timeUs = 1000000778333
contents = length 13845, hash 868C5F96
input buffer #11:
input buffer #34:
timeUs = 1000000845000
contents = length 13734, hash 2BF28058
input buffer #12:
input buffer #35:
timeUs = 1000001011666
contents = length 60140, hash 4DCE6D29
input buffer #13:
input buffer #36:
timeUs = 1000000945000
contents = length 28024, hash 2808AC27
input buffer #14:
input buffer #37:
timeUs = 1000000911666
contents = length 14865, hash DA936298
input buffer #15:
input buffer #38:
timeUs = 1000000978333
contents = length 15631, hash F11D2528
input buffer #16:
input buffer #39:
timeUs = 1000001145000
contents = length 59293, hash 1C3296CD
input buffer #17:
input buffer #40:
timeUs = 1000001078333
contents = length 27545, hash 189E13B8
input buffer #18:
input buffer #41:
timeUs = 1000001045000
contents = length 14959, hash A47356EF
input buffer #19:
input buffer #42:
timeUs = 1000001111666
contents = length 15621, hash C391E893
input buffer #20:
input buffer #43:
timeUs = 1000001278333
contents = length 66112, hash 54A454C4
input buffer #21:
input buffer #44:
timeUs = 1000001211666
contents = length 33610, hash 4C3F57F2
input buffer #22:
input buffer #45:
timeUs = 1000001178333
contents = length 13205, hash EC181CA7
input buffer #23:
input buffer #46:
timeUs = 1000001245000
contents = length 18525, hash 20D8FE9D
input buffer #24:
input buffer #47:
timeUs = 1000001411666
contents = length 63613, hash B807DB7E
input buffer #25:
input buffer #48:
timeUs = 1000001345000
contents = length 40816, hash 2D023C8F
input buffer #26:
input buffer #49:
timeUs = 1000001311666
contents = length 17728, hash B07033B9
input buffer #27:
input buffer #50:
timeUs = 1000001378333
contents = length 13105, hash 4E3B7245
input buffer #28:
input buffer #51:
timeUs = 1000001546666
contents = length 54500, hash 88F3013F
input buffer #29:
input buffer #52:
timeUs = 1000001478333
contents = length 34711, hash 9918D286
input buffer #30:
input buffer #53:
timeUs = 1000001445000
contents = length 14764, hash CF9044AB
input buffer #31:
input buffer #54:
timeUs = 1000001513333
contents = length 16517, hash BA27C997
input buffer #32:
input buffer #55:
timeUs = 1000001680000
contents = length 143217, hash A7D06C3F
input buffer #33:
input buffer #56:
timeUs = 1000001613333
contents = length 32967, hash E490EDD3
input buffer #34:
input buffer #57:
timeUs = 1000001580000
contents = length 17445, hash 5F91C2B8
input buffer #35:
input buffer #58:
timeUs = 1000001646666
contents = length 14638, hash 775110FE
input buffer #36:
input buffer #59:
timeUs = 1000001813333
contents = length 67665, hash A9A21D87
input buffer #37:
input buffer #60:
timeUs = 1000001746666
contents = length 32392, hash 7E790D61
input buffer #38:
input buffer #61:
timeUs = 1000001713333
contents = length 10589, hash 6EB324E3
input buffer #39:
input buffer #62:
timeUs = 1000001780000
contents = length 18023, hash 29D03684
input buffer #40:
input buffer #63:
timeUs = 1000001946666
contents = length 67946, hash 8135C195
input buffer #41:
input buffer #64:
timeUs = 1000001880000
contents = length 41030, hash B6A9208
input buffer #42:
input buffer #65:
timeUs = 1000001846666
contents = length 15110, hash BF682221
input buffer #43:
input buffer #66:
timeUs = 1000001913333
contents = length 17245, hash 2BAFA805
input buffer #44:
input buffer #67:
timeUs = 1000002080000
contents = length 57455, hash 2754BFA0
input buffer #45:
input buffer #68:
timeUs = 1000002013333
contents = length 37067, hash CCE6C30F
input buffer #46:
input buffer #69:
timeUs = 1000001980000
contents = length 14098, hash 60A5760F
input buffer #47:
input buffer #70:
timeUs = 1000002046666
contents = length 20864, hash 94450211
input buffer #48:
input buffer #71:
timeUs = 1000002213333
contents = length 62871, hash BA53494F
input buffer #49:
input buffer #72:
timeUs = 1000002146666
contents = length 38596, hash 420335AC
input buffer #50:
input buffer #73:
timeUs = 1000002113333
contents = length 17584, hash 2E024B02
input buffer #51:
input buffer #74:
timeUs = 1000002180000
contents = length 18521, hash 7381819A
input buffer #52:
input buffer #75:
timeUs = 1000002346666
contents = length 54835, hash F45163BF
input buffer #53:
input buffer #76:
timeUs = 1000002280000
contents = length 29346, hash A57C757F
input buffer #54:
input buffer #77:
timeUs = 1000002246666
contents = length 15815, hash 1B194C31
input buffer #55:
input buffer #78:
timeUs = 1000002313333
contents = length 20390, hash A162AAD0
input buffer #56:
input buffer #79:
timeUs = 1000002480000
contents = length 64262, hash 875514C7
input buffer #57:
input buffer #80:
timeUs = 1000002413333
contents = length 39953, hash 3884739A
input buffer #58:
input buffer #81:
timeUs = 1000002380000
contents = length 23136, hash 8AF1C1AD
input buffer #59:
input buffer #82:
timeUs = 1000002446666
contents = length 26792, hash 3157758F
input buffer #60:
input buffer #83:
timeUs = 0
flags = 4
contents = length 0, hash 1
outputBuffers:
count = 60
count = 83
output buffer #0:
timeUs = 999999545000
size = 78829
rendered = false
output buffer #1:
timeUs = 999999678333
size = 32262
rendered = false
output buffer #2:
timeUs = 999999611666
size = 18055
rendered = false
output buffer #3:
timeUs = 999999811666
size = 65604
rendered = false
output buffer #4:
timeUs = 999999745000
size = 25841
rendered = false
output buffer #5:
timeUs = 999999945000
size = 72552
rendered = false
output buffer #6:
timeUs = 999999878333
size = 23756
rendered = false
output buffer #7:
timeUs = 1000000078333
size = 98274
rendered = true
output buffer #8:
timeUs = 1000000011666
size = 55804
rendered = true
output buffer #9:
timeUs = 999999978333
size = 12955
rendered = false
output buffer #10:
timeUs = 1000000045000
size = 12066
rendered = true
output buffer #11:
timeUs = 1000000211666
size = 86506
rendered = true
output buffer #12:
timeUs = 1000000145000
size = 35691
rendered = true
output buffer #13:
timeUs = 1000000111666
size = 9029
rendered = true
output buffer #14:
timeUs = 1000000178333
size = 12198
rendered = true
output buffer #15:
timeUs = 1000000345000
size = 99669
rendered = true
output buffer #16:
timeUs = 1000000278333
size = 35931
rendered = true
output buffer #17:
timeUs = 1000000245000
size = 13955
rendered = true
output buffer #18:
timeUs = 1000000311666
size = 12407
rendered = true
output buffer #19:
timeUs = 1000000478333
size = 89991
rendered = true
output buffer #20:
timeUs = 1000000411666
size = 25706
rendered = true
output buffer #21:
timeUs = 1000000378333
size = 11924
rendered = true
output buffer #22:
timeUs = 1000000445000
size = 14949
rendered = true
output buffer #23:
timeUs = 1000000611666
size = 196349
rendered = true
output buffer #1:
output buffer #24:
timeUs = 1000000545000
size = 36093
rendered = true
output buffer #2:
output buffer #25:
timeUs = 1000000511666
size = 9196
rendered = true
output buffer #3:
output buffer #26:
timeUs = 1000000578333
size = 11337
rendered = true
output buffer #4:
output buffer #27:
timeUs = 1000000745000
size = 89197
rendered = true
output buffer #5:
output buffer #28:
timeUs = 1000000678333
size = 27802
rendered = true
output buffer #6:
output buffer #29:
timeUs = 1000000645000
size = 9295
rendered = true
output buffer #7:
output buffer #30:
timeUs = 1000000711666
size = 11844
rendered = true
output buffer #8:
output buffer #31:
timeUs = 1000000878333
size = 78369
rendered = true
output buffer #9:
output buffer #32:
timeUs = 1000000811666
size = 28320
rendered = true
output buffer #10:
output buffer #33:
timeUs = 1000000778333
size = 13845
rendered = true
output buffer #11:
output buffer #34:
timeUs = 1000000845000
size = 13734
rendered = true
output buffer #12:
output buffer #35:
timeUs = 1000001011666
size = 60140
rendered = true
output buffer #13:
output buffer #36:
timeUs = 1000000945000
size = 28024
rendered = true
output buffer #14:
output buffer #37:
timeUs = 1000000911666
size = 14865
rendered = true
output buffer #15:
output buffer #38:
timeUs = 1000000978333
size = 15631
rendered = true
output buffer #16:
output buffer #39:
timeUs = 1000001145000
size = 59293
rendered = true
output buffer #17:
output buffer #40:
timeUs = 1000001078333
size = 27545
rendered = true
output buffer #18:
output buffer #41:
timeUs = 1000001045000
size = 14959
rendered = true
output buffer #19:
output buffer #42:
timeUs = 1000001111666
size = 15621
rendered = true
output buffer #20:
output buffer #43:
timeUs = 1000001278333
size = 66112
rendered = true
output buffer #21:
output buffer #44:
timeUs = 1000001211666
size = 33610
rendered = true
output buffer #22:
output buffer #45:
timeUs = 1000001178333
size = 13205
rendered = true
output buffer #23:
output buffer #46:
timeUs = 1000001245000
size = 18525
rendered = true
output buffer #24:
output buffer #47:
timeUs = 1000001411666
size = 63613
rendered = true
output buffer #25:
output buffer #48:
timeUs = 1000001345000
size = 40816
rendered = true
output buffer #26:
output buffer #49:
timeUs = 1000001311666
size = 17728
rendered = true
output buffer #27:
output buffer #50:
timeUs = 1000001378333
size = 13105
rendered = true
output buffer #28:
output buffer #51:
timeUs = 1000001546666
size = 54500
rendered = true
output buffer #29:
output buffer #52:
timeUs = 1000001478333
size = 34711
rendered = true
output buffer #30:
output buffer #53:
timeUs = 1000001445000
size = 14764
rendered = true
output buffer #31:
output buffer #54:
timeUs = 1000001513333
size = 16517
rendered = true
output buffer #32:
output buffer #55:
timeUs = 1000001680000
size = 143217
rendered = true
output buffer #33:
output buffer #56:
timeUs = 1000001613333
size = 32967
rendered = true
output buffer #34:
output buffer #57:
timeUs = 1000001580000
size = 17445
rendered = true
output buffer #35:
output buffer #58:
timeUs = 1000001646666
size = 14638
rendered = true
output buffer #36:
output buffer #59:
timeUs = 1000001813333
size = 67665
rendered = true
output buffer #37:
output buffer #60:
timeUs = 1000001746666
size = 32392
rendered = true
output buffer #38:
output buffer #61:
timeUs = 1000001713333
size = 10589
rendered = true
output buffer #39:
output buffer #62:
timeUs = 1000001780000
size = 18023
rendered = true
output buffer #40:
output buffer #63:
timeUs = 1000001946666
size = 67946
rendered = true
output buffer #41:
output buffer #64:
timeUs = 1000001880000
size = 41030
rendered = true
output buffer #42:
output buffer #65:
timeUs = 1000001846666
size = 15110
rendered = true
output buffer #43:
output buffer #66:
timeUs = 1000001913333
size = 17245
rendered = true
output buffer #44:
output buffer #67:
timeUs = 1000002080000
size = 57455
rendered = true
output buffer #45:
output buffer #68:
timeUs = 1000002013333
size = 37067
rendered = true
output buffer #46:
output buffer #69:
timeUs = 1000001980000
size = 14098
rendered = true
output buffer #47:
output buffer #70:
timeUs = 1000002046666
size = 20864
rendered = true
output buffer #48:
output buffer #71:
timeUs = 1000002213333
size = 62871
rendered = true
output buffer #49:
output buffer #72:
timeUs = 1000002146666
size = 38596
rendered = true
output buffer #50:
output buffer #73:
timeUs = 1000002113333
size = 17584
rendered = true
output buffer #51:
output buffer #74:
timeUs = 1000002180000
size = 18521
rendered = true
output buffer #52:
output buffer #75:
timeUs = 1000002346666
size = 54835
rendered = true
output buffer #53:
output buffer #76:
timeUs = 1000002280000
size = 29346
rendered = true
output buffer #54:
output buffer #77:
timeUs = 1000002246666
size = 15815
rendered = true
output buffer #55:
output buffer #78:
timeUs = 1000002313333
size = 20390
rendered = true
output buffer #56:
output buffer #79:
timeUs = 1000002480000
size = 64262
rendered = true
output buffer #57:
output buffer #80:
timeUs = 1000002413333
size = 39953
rendered = true
output buffer #58:
output buffer #81:
timeUs = 1000002380000
size = 23136
rendered = true
output buffer #59:
output buffer #82:
timeUs = 1000002446666
size = 26792
rendered = true

View File

@ -22,7 +22,7 @@ sample:
dataHashCode = 1491581480
size = 7804
isKeyFrame = true
presentationTimeUs = 0
presentationTimeUs = -500000
sample:
trackType = video
dataHashCode = -1689048121

View File

@ -65,13 +65,9 @@ public final class FakeExtractorOutput implements ExtractorOutput, Dumper.Dumpab
@Override
public void seekMap(SeekMap seekMap) {
if (seekMap.isSeekable()) {
SeekMap.SeekPoints seekPoints = seekMap.getSeekPoints(0);
if (!seekPoints.first.equals(seekPoints.second)) {
throw new IllegalStateException("SeekMap defines two seek points for t=0");
}
long durationUs = seekMap.getDurationUs();
if (durationUs != C.TIME_UNSET) {
seekPoints = seekMap.getSeekPoints(durationUs);
SeekMap.SeekPoints seekPoints = seekMap.getSeekPoints(durationUs);
if (!seekPoints.first.equals(seekPoints.second)) {
throw new IllegalStateException("SeekMap defines two seek points for t=durationUs");
}

View File

@ -1858,9 +1858,11 @@ public class TransformerEndToEndTest {
videoTrack.assertSampleCount(expectedSampleCount);
assertThat(videoTrack.getSampleTimeUs(/* index= */ 0)).isEqualTo(0);
int sampleIndexWithLargestSampleTime = 10;
assertThat(videoTrack.getSampleTimeUs(sampleIndexWithLargestSampleTime)).isEqualTo(11_500_000);
// TODO: b/365992945 - Address the issue of sample timeUs increasing due to negative timestamps
// caused by the edit list. The correct values should be 11_500_000 and 9_500_000 respectively.
assertThat(videoTrack.getSampleTimeUs(sampleIndexWithLargestSampleTime)).isEqualTo(12_000_000);
assertThat(videoTrack.getSampleTimeUs(/* index= */ expectedSampleCount - 1))
.isEqualTo(9_500_000);
.isEqualTo(10_000_000);
}
@Test