UNPKG

rx-player

Version:
67 lines (66 loc) 2.66 kB
"use strict"; /** * Copyright 2015 CANAL+ Group * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = _addSegmentInfos; var index_helpers_1 = require("../../utils/index_helpers"); /** * Add a new segment to the index. * * /!\ Mutate the given index * @param {Array.<Object>} timeline * @param {number} timescale * @param {Object} newSegment * @param {Object} currentSegment * @returns {Boolean} - true if the segment has been added */ function _addSegmentInfos(timeline, timescale, newSegment, currentSegment) { var timelineLength = timeline.length; var last = timeline[timelineLength - 1]; var scaledNewSegment = newSegment.timescale === timescale ? { time: newSegment.time, duration: newSegment.duration } : { time: (newSegment.time / newSegment.timescale) * timescale, duration: (newSegment.duration / newSegment.timescale) * timescale, }; // in some circumstances, the new segment information are only duration // information that we could use to deduct the start of the next segment. // This is the case where the new segment are associated to a current // segment and have the same start. // However, we prefer to be sure of the duration of the new segments // before adding such segments. var shouldDeductNextSegment = currentSegment.time === scaledNewSegment.time; if (shouldDeductNextSegment) { return false; } else if (scaledNewSegment.time >= (0, index_helpers_1.getIndexSegmentEnd)(last, null)) { // if the given timing has a timestamp after the timeline end we // just need to push a new element in the timeline, or increase // the @r attribute of the last element. if (last.duration === scaledNewSegment.duration) { last.repeatCount++; } else { timeline.push({ duration: scaledNewSegment.duration, start: scaledNewSegment.time, repeatCount: 0, }); } return true; } return false; }