Skip to content

Commit

Permalink
fix: Fix flattenedCues in WebVttGenerator (#4867)
Browse files Browse the repository at this point in the history
Fixes #4856
  • Loading branch information
avelad authored and joeyparrish committed Jan 13, 2023
1 parent 6dfa6d7 commit e062175
Showing 1 changed file with 21 additions and 9 deletions.
30 changes: 21 additions & 9 deletions lib/text/web_vtt_generator.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,16 +81,28 @@ shaka.text.WebVttGenerator = class {
// We don't want to modify the array or objects passed in, since we don't
// technically own them. So we build a new array and replace certain items
// in it if they need to be flattened.
const flattenedCues = cues.map((cue) => {
if (cue.nestedCues.length) {
const flatCue = cue.clone();
flatCue.nestedCues = [];
flatCue.payload = flattenPayload(cue);
return flatCue;
} else {
return cue;
// We also don't want to flatten the text payloads starting at a container
// element; otherwise, for containers encapsulating multiple caption lines,
// the lines would merge into a single cue. This is undesirable when a
// subset of the captions are outside of the append time window. To fix
// this, we only call flattenPayload() starting at elements marked as
// isContainer = false.
const getCuesToFlatten = (cues, result) => {
for (const cue of cues) {
if (cue.isContainer) {
// Recurse to find the actual text payload cues.
getCuesToFlatten(cue.nestedCues, result);
} else {
// Flatten the payload.
const flatCue = cue.clone();
flatCue.nestedCues = [];
flatCue.payload = flattenPayload(cue);
result.push(flatCue);
}
}
});
return result;
};
const flattenedCues = getCuesToFlatten(cues, []);

let webvttString = 'WEBVTT\n\n';
for (const cue of flattenedCues) {
Expand Down

0 comments on commit e062175

Please sign in to comment.