12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- "use strict";
- var getUint64 = require('../utils/numbers.js').getUint64;
- var parseSidx = function parseSidx(data) {
- var view = new DataView(data.buffer, data.byteOffset, data.byteLength),
- result = {
- version: data[0],
- flags: new Uint8Array(data.subarray(1, 4)),
- references: [],
- referenceId: view.getUint32(4),
- timescale: view.getUint32(8)
- },
- i = 12;
- if (result.version === 0) {
- result.earliestPresentationTime = view.getUint32(i);
- result.firstOffset = view.getUint32(i + 4);
- i += 8;
- } else {
- // read 64 bits
- result.earliestPresentationTime = getUint64(data.subarray(i));
- result.firstOffset = getUint64(data.subarray(i + 8));
- i += 16;
- }
- i += 2; // reserved
- var referenceCount = view.getUint16(i);
- i += 2; // start of references
- for (; referenceCount > 0; i += 12, referenceCount--) {
- result.references.push({
- referenceType: (data[i] & 0x80) >>> 7,
- referencedSize: view.getUint32(i) & 0x7FFFFFFF,
- subsegmentDuration: view.getUint32(i + 4),
- startsWithSap: !!(data[i + 8] & 0x80),
- sapType: (data[i + 8] & 0x70) >>> 4,
- sapDeltaTime: view.getUint32(i + 8) & 0x0FFFFFFF
- });
- }
- return result;
- };
- module.exports = parseSidx;
|