Skip to content

Commit

Permalink
fix: Fix nalu parsing in TS (#6137)
Browse files Browse the repository at this point in the history
Fixes #6136
  • Loading branch information
avelad committed Jan 22, 2024
1 parent 2ae9ca6 commit df8dbb9
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions lib/util/ts_parser.js
Expand Up @@ -446,10 +446,11 @@ shaka.util.TsParser = class {
*
* @param {shaka.extern.MPEG_PES} pes
* @param {?shaka.extern.VideoNalu=} lastNalu
* @param {?number=} lastState
* @return {!Array.<shaka.extern.VideoNalu>}
* @export
*/
parseNalus(pes, lastNalu) {
parseNalus(pes, lastNalu, lastState) {
const timescale = shaka.util.TsParser.Timescale;
const time = pes.pts ? pes.pts / timescale : null;
const data = pes.data;
Expand All @@ -465,7 +466,7 @@ shaka.util.TsParser = class {
// precede each NALU. A start code is 2 or 3 0x00 bytes followed with a
// 0x01 byte. e.g. 0x000001 or 0x00000001.
// More info in: https://stackoverflow.com/questions/24884827/possible-locations-for-sequence-picture-parameter-sets-for-h-264-stream/24890903#24890903
let numZeros = 0;
let numZeros = lastState || 0;

/** @type {!Array.<shaka.extern.VideoNalu>} */
const nalus = [];
Expand All @@ -490,7 +491,7 @@ shaka.util.TsParser = class {
const startCodeSize = numZeros > 3 ? 3 : numZeros;
const lastByteToKeep = i - startCodeSize;
// Optimization
if (lastByteToKeep != 0) {
if (lastState && lastByteToKeep != 0) {
const prevData = data.subarray(0, lastByteToKeep);
lastNalu.data = shaka.util.Uint8ArrayUtils.concat(
lastNalu.data, prevData);
Expand Down Expand Up @@ -572,6 +573,7 @@ shaka.util.TsParser = class {
lastNalu.fullData = shaka.util.Uint8ArrayUtils.concat(
lastNalu.fullData, data);
}
lastState = Math.min(3, numZeros);
return nalus;
}

Expand Down Expand Up @@ -676,8 +678,9 @@ shaka.util.TsParser = class {
}
if (naluProcessing) {
let lastNalu;
let lastState;
for (const pes of this.videoPes_) {
pes.nalus = this.parseNalus(pes, lastNalu);
pes.nalus = this.parseNalus(pes, lastNalu, lastState);
if (pes.nalus.length) {
lastNalu = pes.nalus[pes.nalus.length - 1];
}
Expand Down

0 comments on commit df8dbb9

Please sign in to comment.