Skip to content

Commit

Permalink
Fix H265Reader to correctly output SEI and AUD NAL units
Browse files Browse the repository at this point in the history
Issue: #7113
PiperOrigin-RevId: 307380133
  • Loading branch information
ojw28 committed Apr 20, 2020
1 parent 9a72900 commit cb51a1b
Show file tree
Hide file tree
Showing 7 changed files with 97 additions and 96 deletions.
2 changes: 2 additions & 0 deletions RELEASENOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@
costly on large files.
* MP4: Store the Android capture frame rate only in `Format.metadata`.
`Format.frameRate` now stores the calculated frame rate.
* MPEG-TS: Fix issue where SEI NAL units were incorrectly dropped from H.265
samples ([#7113](https:/google/ExoPlayer/issues/7113)).
* Testing
* Add `TestExoPlayer`, a utility class with APIs to create
`SimpleExoPlayer` instances with fake components for testing.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public final class H265Reader implements ElementaryStreamReader {
private static final int VPS_NUT = 32;
private static final int SPS_NUT = 33;
private static final int PPS_NUT = 34;
private static final int AUD_NUT = 35;
private static final int PREFIX_SEI_NUT = 39;
private static final int SUFFIX_SEI_NUT = 40;

Expand Down Expand Up @@ -472,7 +473,7 @@ public void startNalUnit(
}
}

// Look for the flag if this NAL unit contains a slice_segment_layer_rbsp.
// Look for the first slice flag if this NAL unit contains a slice_segment_layer_rbsp.
nalUnitHasKeyframeData = (nalUnitType >= BLA_W_LP && nalUnitType <= CRA_NUT);
lookingForFirstSliceFlag = nalUnitHasKeyframeData || nalUnitType <= RASL_R;
}
Expand Down Expand Up @@ -516,14 +517,12 @@ private void outputSample(int offset) {

/** Returns whether a NAL unit type is one that occurs before any VCL NAL units in a sample. */
private static boolean isPrefixNalUnit(int nalUnitType) {
// TODO: Include AUD_NUT and PREFIX_SEI_NUT
return VPS_NUT <= nalUnitType && nalUnitType <= PPS_NUT;
return (VPS_NUT <= nalUnitType && nalUnitType <= AUD_NUT) || nalUnitType == PREFIX_SEI_NUT;
}

/** Returns whether a NAL unit type is one that occurs in the VLC body of a sample. */
private static boolean isVclBodyNalUnit(int nalUnitType) {
// TODO: Include SUFFIX_SEI_NUT
return nalUnitType < VPS_NUT;
return nalUnitType < VPS_NUT || nalUnitType == SUFFIX_SEI_NUT;
}
}
}
58 changes: 29 additions & 29 deletions testdata/src/test/assets/ts/sample_h265.ts.0.dump
Original file line number Diff line number Diff line change
Expand Up @@ -19,119 +19,119 @@ track 256:
sample 0:
time = 66666
flags = 1
data = length 2510, hash 796A98BE
data = length 2517, hash 85352308
sample 1:
time = 100000
flags = 0
data = length 1219, hash 131AA4E4
data = length 1226, hash 11D564DA
sample 2:
time = 266666
flags = 0
data = length 7810, hash 3F881DB9
data = length 7817, hash 50D15703
sample 3:
time = 200000
flags = 0
data = length 2306, hash 9A77959C
data = length 2313, hash ECA5AEE6
sample 4:
time = 133333
flags = 0
data = length 1058, hash B887F7EF
data = length 1065, hash 8720A939
sample 5:
time = 166666
flags = 0
data = length 98, hash D95BF6E3
data = length 105, hash 3A3A582D
sample 6:
time = 233333
flags = 0
data = length 61, hash 574C41C3
data = length 68, hash FC241239
sample 7:
time = 433333
flags = 0
data = length 296, hash E92DB288
data = length 303, hash 41B28452
sample 8:
time = 366666
flags = 0
data = length 137, hash 586DADD6
data = length 144, hash 60BBCD4C
sample 9:
time = 300000
flags = 0
data = length 218, hash 91E82C9F
data = length 225, hash E0FAD7E9
sample 10:
time = 333333
flags = 0
data = length 177, hash 4A4FEEC0
data = length 184, hash A3A6E036
sample 11:
time = 400000
flags = 0
data = length 82, hash 2E2ADD8
data = length 89, hash 43B0E322
sample 12:
time = 533333
flags = 0
data = length 290, hash 63CF7D90
data = length 297, hash 6D9FEEDA
sample 13:
time = 500000
flags = 0
data = length 268, hash E8CBAC11
data = length 275, hash 27430DB
sample 14:
time = 466666
flags = 0
data = length 178, hash C5B1613E
data = length 185, hash 97389E88
sample 15:
time = 566666
flags = 0
data = length 271, hash 76652FC5
data = length 278, hash 5819FEBB
sample 16:
time = 733333
flags = 0
data = length 257, hash 960B5DF4
data = length 264, hash 8545F36A
sample 17:
time = 666666
flags = 0
data = length 206, hash 87358D00
data = length 213, hash 52C7574A
sample 18:
time = 600000
flags = 0
data = length 130, hash 4D7A038D
data = length 137, hash D4F0BCD7
sample 19:
time = 633333
flags = 0
data = length 114, hash 2B3C616E
data = length 121, hash BE52EEB8
sample 20:
time = 700000
flags = 0
data = length 95, hash 37D79559
data = length 102, hash 6AA3C84F
sample 21:
time = 900000
flags = 0
data = length 233, hash 80308C9E
data = length 240, hash 8E3CA414
sample 22:
time = 833333
flags = 0
data = length 203, hash E70BA5F2
data = length 210, hash 5D050FE8
sample 23:
time = 766666
flags = 0
data = length 95, hash BA6FA2D3
data = length 102, hash ED3BD5C9
sample 24:
time = 800000
flags = 0
data = length 103, hash 51291041
data = length 110, hash CF65ED37
sample 25:
time = 866666
flags = 0
data = length 111, hash EE9DCFC9
data = length 118, hash BA0156BF
sample 26:
time = 1033333
flags = 0
data = length 253, hash D0CEFBA7
data = length 260, hash ED6ABC1D
sample 27:
time = 966666
flags = 0
data = length 134, hash 8802EEF0
data = length 141, hash 9787F33A
sample 28:
time = 933333
flags = 0
data = length 80, hash C635D9C2
data = length 87, hash EEC4D98C
track 8448:
total output bytes = 0
sample count = 0
Expand Down
40 changes: 20 additions & 20 deletions testdata/src/test/assets/ts/sample_h265.ts.1.dump
Original file line number Diff line number Diff line change
Expand Up @@ -19,83 +19,83 @@ track 256:
sample 0:
time = 300000
flags = 0
data = length 218, hash 91E82C9F
data = length 225, hash E0FAD7E9
sample 1:
time = 333333
flags = 0
data = length 177, hash 4A4FEEC0
data = length 184, hash A3A6E036
sample 2:
time = 400000
flags = 0
data = length 82, hash 2E2ADD8
data = length 89, hash 43B0E322
sample 3:
time = 533333
flags = 0
data = length 290, hash 63CF7D90
data = length 297, hash 6D9FEEDA
sample 4:
time = 500000
flags = 0
data = length 268, hash E8CBAC11
data = length 275, hash 27430DB
sample 5:
time = 466666
flags = 0
data = length 178, hash C5B1613E
data = length 185, hash 97389E88
sample 6:
time = 566666
flags = 0
data = length 271, hash 76652FC5
data = length 278, hash 5819FEBB
sample 7:
time = 733333
flags = 0
data = length 257, hash 960B5DF4
data = length 264, hash 8545F36A
sample 8:
time = 666666
flags = 0
data = length 206, hash 87358D00
data = length 213, hash 52C7574A
sample 9:
time = 600000
flags = 0
data = length 130, hash 4D7A038D
data = length 137, hash D4F0BCD7
sample 10:
time = 633333
flags = 0
data = length 114, hash 2B3C616E
data = length 121, hash BE52EEB8
sample 11:
time = 700000
flags = 0
data = length 95, hash 37D79559
data = length 102, hash 6AA3C84F
sample 12:
time = 900000
flags = 0
data = length 233, hash 80308C9E
data = length 240, hash 8E3CA414
sample 13:
time = 833333
flags = 0
data = length 203, hash E70BA5F2
data = length 210, hash 5D050FE8
sample 14:
time = 766666
flags = 0
data = length 95, hash BA6FA2D3
data = length 102, hash ED3BD5C9
sample 15:
time = 800000
flags = 0
data = length 103, hash 51291041
data = length 110, hash CF65ED37
sample 16:
time = 866666
flags = 0
data = length 111, hash EE9DCFC9
data = length 118, hash BA0156BF
sample 17:
time = 1033333
flags = 0
data = length 253, hash D0CEFBA7
data = length 260, hash ED6ABC1D
sample 18:
time = 966666
flags = 0
data = length 134, hash 8802EEF0
data = length 141, hash 9787F33A
sample 19:
time = 933333
flags = 0
data = length 80, hash C635D9C2
data = length 87, hash EEC4D98C
track 8448:
total output bytes = 0
sample count = 0
Expand Down
22 changes: 11 additions & 11 deletions testdata/src/test/assets/ts/sample_h265.ts.2.dump
Original file line number Diff line number Diff line change
Expand Up @@ -19,47 +19,47 @@ track 256:
sample 0:
time = 600000
flags = 0
data = length 130, hash 4D7A038D
data = length 137, hash D4F0BCD7
sample 1:
time = 633333
flags = 0
data = length 114, hash 2B3C616E
data = length 121, hash BE52EEB8
sample 2:
time = 700000
flags = 0
data = length 95, hash 37D79559
data = length 102, hash 6AA3C84F
sample 3:
time = 900000
flags = 0
data = length 233, hash 80308C9E
data = length 240, hash 8E3CA414
sample 4:
time = 833333
flags = 0
data = length 203, hash E70BA5F2
data = length 210, hash 5D050FE8
sample 5:
time = 766666
flags = 0
data = length 95, hash BA6FA2D3
data = length 102, hash ED3BD5C9
sample 6:
time = 800000
flags = 0
data = length 103, hash 51291041
data = length 110, hash CF65ED37
sample 7:
time = 866666
flags = 0
data = length 111, hash EE9DCFC9
data = length 118, hash BA0156BF
sample 8:
time = 1033333
flags = 0
data = length 253, hash D0CEFBA7
data = length 260, hash ED6ABC1D
sample 9:
time = 966666
flags = 0
data = length 134, hash 8802EEF0
data = length 141, hash 9787F33A
sample 10:
time = 933333
flags = 0
data = length 80, hash C635D9C2
data = length 87, hash EEC4D98C
track 8448:
total output bytes = 0
sample count = 0
Expand Down
4 changes: 2 additions & 2 deletions testdata/src/test/assets/ts/sample_h265.ts.3.dump
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ track 256:
sample 0:
time = 966666
flags = 0
data = length 134, hash 8802EEF0
data = length 141, hash 9787F33A
sample 1:
time = 933333
flags = 0
data = length 80, hash C635D9C2
data = length 87, hash EEC4D98C
track 8448:
total output bytes = 0
sample count = 0
Expand Down
Loading

0 comments on commit cb51a1b

Please sign in to comment.