Commit c642f811 by kimvde Committed by christosts

Fix sample interleaving

Whether to write a sample or not was based on the timestamp of the
previous sample, rather than the current sample.

PiperOrigin-RevId: 500195279
parent ee37b453
...@@ -177,7 +177,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -177,7 +177,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
* {@linkplain #addTrackFormat(Format) received a format} for every {@linkplain * {@linkplain #addTrackFormat(Format) received a format} for every {@linkplain
* #setTrackCount(int) track}, or if it should write samples of other track types first to * #setTrackCount(int) track}, or if it should write samples of other track types first to
* ensure a good interleaving. * ensure a good interleaving.
* @throws IllegalStateException If the muxer doesn't have any {@linkplain #endTrack(int) * @throws IllegalArgumentException If the muxer doesn't have any {@linkplain #endTrack(int)
* non-ended} track of the given track type. * non-ended} track of the given track type.
* @throws Muxer.MuxerException If the underlying muxer fails to write the sample. * @throws Muxer.MuxerException If the underlying muxer fails to write the sample.
*/ */
...@@ -189,7 +189,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -189,7 +189,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
checkArgument( checkArgument(
trackInfo != null, "Could not write sample because there is no track of type " + trackType); trackInfo != null, "Could not write sample because there is no track of type " + trackType);
if (!canWriteSampleOfType(trackType)) { if (!canWriteSample(trackType, presentationTimeUs)) {
return false; return false;
} }
...@@ -255,21 +255,16 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -255,21 +255,16 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
} }
/** /**
* Returns whether the muxer can write a sample of the given track type. * Returns whether the muxer can write a sample.
* *
* @param trackType The track type, defined by the {@code TRACK_TYPE_*} constants in {@link C}. * @param trackType The sample track type.
* @return Whether the muxer can write a sample of the given track type. This is {@code false} if * @param presentationTimeUs The sample presentation time, in microseconds.
* the muxer hasn't {@link #addTrackFormat(Format) received a format} for every {@link * @return Whether the muxer can write a sample with the given track type and presentation time.
* #setTrackCount(int) track}, or if it should write samples of other track types first to * This is {@code false} if the muxer hasn't {@link #addTrackFormat(Format) received a format}
* ensure a good interleaving. * for every {@link #setTrackCount(int) track}, or if it should write samples of other track
* @throws IllegalStateException If the muxer doesn't have any {@link #endTrack(int) non-ended} * types first to ensure a good interleaving.
* track of the given track type.
*/ */
private boolean canWriteSampleOfType(int trackType) { private boolean canWriteSample(@C.TrackType int trackType, long presentationTimeUs) {
@Nullable TrackInfo trackInfo = trackTypeToInfo.get(trackType);
// SparseArray.get() returns null by default if the value is not found.
checkArgument(trackInfo != null, "There is no track of type " + trackType);
if (!isReady) { if (!isReady) {
return false; return false;
} }
...@@ -279,7 +274,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -279,7 +274,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
if (trackType != previousTrackType) { if (trackType != previousTrackType) {
minTrackTimeUs = getMinTrackTimeUs(trackTypeToInfo); minTrackTimeUs = getMinTrackTimeUs(trackTypeToInfo);
} }
return trackInfo.timeUs - minTrackTimeUs <= MAX_TRACK_WRITE_AHEAD_US; return presentationTimeUs - minTrackTimeUs <= MAX_TRACK_WRITE_AHEAD_US;
} }
@RequiresNonNull("muxer") @RequiresNonNull("muxer")
......
...@@ -165,12 +165,6 @@ sample: ...@@ -165,12 +165,6 @@ sample:
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 367000 presentationTimeUs = 367000
sample: sample:
trackIndex = 1
dataHashCode = 2085064574
size = 5525
isKeyFrame = false
presentationTimeUs = 567000
sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -1124371059 dataHashCode = -1124371059
size = 418 size = 418
...@@ -202,10 +196,10 @@ sample: ...@@ -202,10 +196,10 @@ sample:
presentationTimeUs = 71066 presentationTimeUs = 71066
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -637074022 dataHashCode = 2085064574
size = 1082 size = 5525
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 500000 presentationTimeUs = 567000
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 1297086772 dataHashCode = 1297086772
...@@ -286,6 +280,12 @@ sample: ...@@ -286,6 +280,12 @@ sample:
presentationTimeUs = 132676 presentationTimeUs = 132676
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -637074022
size = 1082
isKeyFrame = false
presentationTimeUs = 500000
sample:
trackIndex = 1
dataHashCode = -1824027029 dataHashCode = -1824027029
size = 807 size = 807
isKeyFrame = false isKeyFrame = false
......
...@@ -171,12 +171,6 @@ sample: ...@@ -171,12 +171,6 @@ sample:
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 367033 presentationTimeUs = 367033
sample: sample:
trackIndex = 1
dataHashCode = -261176150
size = 5450
isKeyFrame = false
presentationTimeUs = 567233
sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -1536715689 dataHashCode = -1536715689
size = 248 size = 248
...@@ -286,10 +280,10 @@ sample: ...@@ -286,10 +280,10 @@ sample:
presentationTimeUs = 67625 presentationTimeUs = 67625
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -1830836678 dataHashCode = -261176150
size = 1051 size = 5450
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 500500 presentationTimeUs = 567233
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -1290952882 dataHashCode = -1290952882
...@@ -382,6 +376,12 @@ sample: ...@@ -382,6 +376,12 @@ sample:
presentationTimeUs = 107646 presentationTimeUs = 107646
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -1830836678
size = 1051
isKeyFrame = false
presentationTimeUs = 500500
sample:
trackIndex = 1
dataHashCode = 1767407540 dataHashCode = 1767407540
size = 874 size = 874
isKeyFrame = false isKeyFrame = false
...@@ -393,12 +393,6 @@ sample: ...@@ -393,12 +393,6 @@ sample:
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 533866 presentationTimeUs = 533866
sample: sample:
trackIndex = 1
dataHashCode = -1408463661
size = 4725
isKeyFrame = false
presentationTimeUs = 700700
sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -2065 dataHashCode = -2065
size = 2 size = 2
...@@ -406,6 +400,12 @@ sample: ...@@ -406,6 +400,12 @@ sample:
presentationTimeUs = 107730 presentationTimeUs = 107730
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -1408463661
size = 4725
isKeyFrame = false
presentationTimeUs = 700700
sample:
trackIndex = 1
dataHashCode = 1569455924 dataHashCode = 1569455924
size = 1022 size = 1022
isKeyFrame = false isKeyFrame = false
......
...@@ -112,12 +112,6 @@ sample: ...@@ -112,12 +112,6 @@ sample:
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 367033 presentationTimeUs = 367033
sample: sample:
trackIndex = 1
dataHashCode = -261176150
size = 5450
isKeyFrame = false
presentationTimeUs = 567233
sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 837571078 dataHashCode = 837571078
size = 6 size = 6
...@@ -131,10 +125,10 @@ sample: ...@@ -131,10 +125,10 @@ sample:
presentationTimeUs = 90439 presentationTimeUs = 90439
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -1830836678 dataHashCode = -261176150
size = 1051 size = 5450
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 500500 presentationTimeUs = 567233
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -822987359 dataHashCode = -822987359
...@@ -262,6 +256,12 @@ sample: ...@@ -262,6 +256,12 @@ sample:
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 578058 presentationTimeUs = 578058
sample: sample:
trackIndex = 1
dataHashCode = -1830836678
size = 1051
isKeyFrame = false
presentationTimeUs = 500500
sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 1606694497 dataHashCode = 1606694497
size = 231 size = 231
...@@ -274,12 +274,6 @@ sample: ...@@ -274,12 +274,6 @@ sample:
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 467133 presentationTimeUs = 467133
sample: sample:
trackIndex = 0
dataHashCode = 1747388653
size = 217
isKeyFrame = true
presentationTimeUs = 624498
sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 918440283 dataHashCode = 918440283
size = 781 size = 781
...@@ -359,6 +353,12 @@ sample: ...@@ -359,6 +353,12 @@ sample:
presentationTimeUs = 934266 presentationTimeUs = 934266
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 1747388653
size = 217
isKeyFrame = true
presentationTimeUs = 624498
sample:
trackIndex = 0
dataHashCode = -734560004 dataHashCode = -734560004
size = 239 size = 239
isKeyFrame = true isKeyFrame = true
......
...@@ -147,12 +147,6 @@ sample: ...@@ -147,12 +147,6 @@ sample:
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 487620 presentationTimeUs = 487620
sample: sample:
trackIndex = 1
dataHashCode = 1742602241
size = 4096
isKeyFrame = true
presentationTimeUs = 510840
sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -770308242 dataHashCode = -770308242
size = 36692 size = 36692
...@@ -169,19 +163,19 @@ sample: ...@@ -169,19 +163,19 @@ sample:
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 534059 presentationTimeUs = 510840
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 557279 presentationTimeUs = 534059
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 580499 presentationTimeUs = 557279
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 468156717 dataHashCode = 468156717
...@@ -199,37 +193,37 @@ sample: ...@@ -199,37 +193,37 @@ sample:
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 603719 presentationTimeUs = 580499
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 626939 presentationTimeUs = 603719
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 650159 presentationTimeUs = 626939
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 673379 presentationTimeUs = 650159
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 696599 presentationTimeUs = 673379
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 719819 presentationTimeUs = 696599
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 1443582006 dataHashCode = 1443582006
...@@ -259,31 +253,31 @@ sample: ...@@ -259,31 +253,31 @@ sample:
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 743039 presentationTimeUs = 719819
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 766259 presentationTimeUs = 743039
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 789479 presentationTimeUs = 766259
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 812699 presentationTimeUs = 789479
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 835919 presentationTimeUs = 812699
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -32297181 dataHashCode = -32297181
...@@ -313,31 +307,31 @@ sample: ...@@ -313,31 +307,31 @@ sample:
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 859139 presentationTimeUs = 835919
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 882359 presentationTimeUs = 859139
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 905579 presentationTimeUs = 882359
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 928799 presentationTimeUs = 905579
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 952019 presentationTimeUs = 928799
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 1369083472 dataHashCode = 1369083472
...@@ -361,6 +355,12 @@ sample: ...@@ -361,6 +355,12 @@ sample:
dataHashCode = 1742602241 dataHashCode = 1742602241
size = 4096 size = 4096
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 952019
sample:
trackIndex = 1
dataHashCode = 1742602241
size = 4096
isKeyFrame = true
presentationTimeUs = 975239 presentationTimeUs = 975239
sample: sample:
trackIndex = 1 trackIndex = 1
......
...@@ -190,12 +190,6 @@ sample: ...@@ -190,12 +190,6 @@ sample:
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 434083 presentationTimeUs = 434083
sample: sample:
trackIndex = 1
dataHashCode = 2112365658
size = 1109
isKeyFrame = false
presentationTimeUs = 600750
sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 1580199067 dataHashCode = 1580199067
size = 232 size = 232
...@@ -281,6 +275,12 @@ sample: ...@@ -281,6 +275,12 @@ sample:
presentationTimeUs = 84417 presentationTimeUs = 84417
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 2112365658
size = 1109
isKeyFrame = false
presentationTimeUs = 600750
sample:
trackIndex = 1
dataHashCode = -968901399 dataHashCode = -968901399
size = 250 size = 250
isKeyFrame = false isKeyFrame = false
......
...@@ -220,12 +220,6 @@ sample: ...@@ -220,12 +220,6 @@ sample:
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 500000 presentationTimeUs = 500000
sample: sample:
trackIndex = 1
dataHashCode = 1120133924
size = 151
isKeyFrame = false
presentationTimeUs = 516666
sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 33931768 dataHashCode = 33931768
size = 504 size = 504
...@@ -233,10 +227,10 @@ sample: ...@@ -233,10 +227,10 @@ sample:
presentationTimeUs = 28354 presentationTimeUs = 28354
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 264118578 dataHashCode = 1120133924
size = 2235 size = 151
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 533333 presentationTimeUs = 516666
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 800699278 dataHashCode = 800699278
...@@ -376,6 +370,12 @@ sample: ...@@ -376,6 +370,12 @@ sample:
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 519020 presentationTimeUs = 519020
sample: sample:
trackIndex = 1
dataHashCode = 264118578
size = 2235
isKeyFrame = false
presentationTimeUs = 533333
sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 204379389 dataHashCode = 204379389
size = 504 size = 504
...@@ -388,12 +388,6 @@ sample: ...@@ -388,12 +388,6 @@ sample:
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 550000 presentationTimeUs = 550000
sample: sample:
trackIndex = 0
dataHashCode = 694913274
size = 508
isKeyFrame = true
presentationTimeUs = 561687
sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -1000078879 dataHashCode = -1000078879
size = 2231 size = 2231
...@@ -568,30 +562,24 @@ sample: ...@@ -568,30 +562,24 @@ sample:
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 1033333 presentationTimeUs = 1033333
sample: sample:
trackIndex = 0
dataHashCode = 694913274
size = 508
isKeyFrame = true
presentationTimeUs = 561687
sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 65238903 dataHashCode = 65238903
size = 163 size = 163
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 1050000 presentationTimeUs = 1050000
sample: sample:
trackIndex = 1
dataHashCode = 1720840922
size = 2043
isKeyFrame = false
presentationTimeUs = 1066666
sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 289018778 dataHashCode = 289018778
size = 513 size = 513
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 583020 presentationTimeUs = 583020
sample: sample:
trackIndex = 1
dataHashCode = -1006231050
size = 178
isKeyFrame = false
presentationTimeUs = 1083333
sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -693167785 dataHashCode = -693167785
size = 517 size = 517
...@@ -724,17 +712,23 @@ sample: ...@@ -724,17 +712,23 @@ sample:
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 1052354 presentationTimeUs = 1052354
sample: sample:
trackIndex = 1
dataHashCode = 1720840922
size = 2043
isKeyFrame = false
presentationTimeUs = 1066666
sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -744850549 dataHashCode = -744850549
size = 511 size = 511
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 1073687 presentationTimeUs = 1073687
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1457899387 dataHashCode = -1006231050
size = 505 size = 178
isKeyFrame = true isKeyFrame = false
presentationTimeUs = 1095020 presentationTimeUs = 1083333
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742965952 dataHashCode = 1742965952
...@@ -742,12 +736,6 @@ sample: ...@@ -742,12 +736,6 @@ sample:
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 1100000 presentationTimeUs = 1100000
sample: sample:
trackIndex = 0
dataHashCode = 168118808
size = 519
isKeyFrame = true
presentationTimeUs = 1116354
sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -971065365 dataHashCode = -971065365
size = 240 size = 240
...@@ -887,6 +875,18 @@ sample: ...@@ -887,6 +875,18 @@ sample:
presentationTimeUs = 1483333 presentationTimeUs = 1483333
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 1457899387
size = 505
isKeyFrame = true
presentationTimeUs = 1095020
sample:
trackIndex = 0
dataHashCode = 168118808
size = 519
isKeyFrame = true
presentationTimeUs = 1116354
sample:
trackIndex = 0
dataHashCode = 896298799 dataHashCode = 896298799
size = 506 size = 506
isKeyFrame = true isKeyFrame = true
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment