kontainer-js
Version:
A media file format generator/parser that exposes a React-like API.
321 lines (235 loc) • 9.88 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _get2 = require('babel-runtime/helpers/get');
var _get3 = _interopRequireDefault(_get2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _Box = require('./Box');
var _Box2 = _interopRequireDefault(_Box);
var _FullBox2 = require('./FullBox');
var _FullBox3 = _interopRequireDefault(_FullBox2);
var _TrackExtendsBox = require('./TrackExtendsBox');
var _TrackExtendsBox2 = _interopRequireDefault(_TrackExtendsBox);
var _PropTypes = require('../../core/PropTypes');
var _PropTypes2 = _interopRequireDefault(_PropTypes);
var _Writer = require('../../core/Writer');
var _Writer2 = _interopRequireDefault(_Writer);
var _Reader = require('../../core/Reader');
var _Reader2 = _interopRequireDefault(_Reader);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var TrackRunBox = function (_FullBox) {
(0, _inherits3.default)(TrackRunBox, _FullBox);
function TrackRunBox(props) {
(0, _classCallCheck3.default)(this, TrackRunBox);
return (0, _possibleConstructorReturn3.default)(this, (0, _getPrototypeOf2.default)(TrackRunBox).call(this, TrackRunBox.COMPACT_NAME, props, 0, TrackRunBox.encodeFlags(props)));
}
(0, _createClass3.default)(TrackRunBox, [{
key: 'serialize',
value: function serialize(buffer) {
var offset = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];
//console.log('--- TrackRunBox.serialize enter.');
var props = this.props;
var samples = props.samples;
var dataOffset = props.dataOffset;
var firstSampleFlags = _TrackExtendsBox2.default.encodeDefaultSampleFlags(props.firstSampleFlags);
var base = offset;
base += (0, _get3.default)((0, _getPrototypeOf2.default)(TrackRunBox.prototype), 'serialize', this).call(this, buffer, base);
base += _Writer2.default.writeNumber(samples.length, buffer, base, 4);
if (dataOffset !== void 0) {
base += _Writer2.default.writeNumber(dataOffset, buffer, base, 4);
}
if (firstSampleFlags !== void 0) {
base += _Writer2.default.writeNumber(firstSampleFlags, buffer, base, 4);
}
samples.forEach(function (sample) {
if (sample.duration !== void 0) {
base += _Writer2.default.writeNumber(sample.duration, buffer, base, 4);
}
if (sample.size !== void 0) {
base += _Writer2.default.writeNumber(sample.size, buffer, base, 4);
}
if (sample.flags !== void 0) {
base += _Writer2.default.writeNumber(_TrackExtendsBox2.default.encodeDefaultSampleFlags(sample.flags), buffer, base, 4);
}
if (sample.compositionTimeOffset !== void 0) {
base += _Writer2.default.writeNumber(sample.compositionTimeOffset, buffer, base, 4);
}
});
(0, _get3.default)((0, _getPrototypeOf2.default)(TrackRunBox.prototype), 'setSize', this).call(this, base - offset, buffer, offset);
//console.log(`--- TrackRunBox.serialize exit. size=${this.size}`);
return this.size;
}
}], [{
key: 'encodeFlags',
value: function encodeFlags(props) {
var f = 0,
samples = props.samples;
if (props.dataOffset !== void 0) {
f |= 1 << 0;
}
if (props.firstSampleFlags !== void 0) {
f |= 1 << 2;
}
if (samples.length > 0) {
if (samples[0].duration !== void 0) {
f |= 1 << 8;
}
if (samples[0].size !== void 0) {
f |= 1 << 9;
}
if (samples[0].flags !== void 0) {
f |= 1 << 10;
}
if (samples[0].compositionTimeOffset !== void 0) {
f |= 1 << 11;
}
}
return f;
}
}, {
key: 'decodeFlags',
value: function decodeFlags(f) {
var flags = {
dataOffsetPresent: false,
firstSampleFlagsPresent: false,
sampleDurationPresent: false,
sampleSizePresent: false,
sampleFlagsPresent: false,
sampleCompositionTimeOffsetPresent: false
};
if (f >> 0 & 0x01) {
flags.dataOffsetPresent = true;
}
if (f >> 2 & 0x01) {
flags.firstSampleFlagsPresent = true;
}
if (f >> 8 & 0x01) {
flags.sampleDurationPresent = true;
}
if (f >> 9 & 0x01) {
flags.sampleSizePresent = true;
}
if (f >> 10 & 0x01) {
flags.sampleFlagsPresent = true;
}
if (f >> 11 & 0x01) {
flags.sampleCompositionTimeOffsetPresent = true;
}
return flags;
}
}, {
key: 'parse',
value: function parse(buffer) {
var offset = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];
var base = offset,
readBytesNum = void 0,
props = void 0,
flags = void 0,
sampleCount = void 0,
samples = void 0,
dataOffset = void 0,
firstSampleFlags = void 0,
sample = void 0,
sampleDuration = void 0,
sampleSize = void 0,
sampleFlags = void 0,
sampleCompositionTimeOffset = void 0;
var _FullBox$parse = _FullBox3.default.parse(buffer, base);
var _FullBox$parse2 = (0, _slicedToArray3.default)(_FullBox$parse, 2);
readBytesNum = _FullBox$parse2[0];
props = _FullBox$parse2[1];
base += readBytesNum;
var _Reader$readNumber = _Reader2.default.readNumber(buffer, base, 4);
var _Reader$readNumber2 = (0, _slicedToArray3.default)(_Reader$readNumber, 2);
readBytesNum = _Reader$readNumber2[0];
sampleCount = _Reader$readNumber2[1];
base += readBytesNum;
samples = new Array(sampleCount);
flags = TrackRunBox.decodeFlags(props.flags);
if (flags.dataOffsetPresent) {
var _Reader$readNumber3 = _Reader2.default.readNumber(buffer, base, 4);
var _Reader$readNumber4 = (0, _slicedToArray3.default)(_Reader$readNumber3, 2);
readBytesNum = _Reader$readNumber4[0];
dataOffset = _Reader$readNumber4[1];
base += readBytesNum;
props.dataOffset = dataOffset;
}
if (flags.firstSampleFlagsPresent) {
var _Reader$readNumber5 = _Reader2.default.readNumber(buffer, base, 4);
var _Reader$readNumber6 = (0, _slicedToArray3.default)(_Reader$readNumber5, 2);
readBytesNum = _Reader$readNumber6[0];
firstSampleFlags = _Reader$readNumber6[1];
base += readBytesNum;
props.firstSampleFlags = _TrackExtendsBox2.default.decodeDefaultSampleFlags(firstSampleFlags);
}
for (var i = 0; i < sampleCount; i++) {
sample = samples[i] = {};
if (flags.sampleDurationPresent) {
var _Reader$readNumber7 = _Reader2.default.readNumber(buffer, base, 4);
var _Reader$readNumber8 = (0, _slicedToArray3.default)(_Reader$readNumber7, 2);
readBytesNum = _Reader$readNumber8[0];
sampleDuration = _Reader$readNumber8[1];
base += readBytesNum;
sample.duration = sampleDuration;
}
if (flags.sampleSizePresent) {
var _Reader$readNumber9 = _Reader2.default.readNumber(buffer, base, 4);
var _Reader$readNumber10 = (0, _slicedToArray3.default)(_Reader$readNumber9, 2);
readBytesNum = _Reader$readNumber10[0];
sampleSize = _Reader$readNumber10[1];
base += readBytesNum;
sample.size = sampleSize;
}
if (flags.sampleFlagsPresent) {
var _Reader$readNumber11 = _Reader2.default.readNumber(buffer, base, 4);
var _Reader$readNumber12 = (0, _slicedToArray3.default)(_Reader$readNumber11, 2);
readBytesNum = _Reader$readNumber12[0];
sampleFlags = _Reader$readNumber12[1];
base += readBytesNum;
sample.flags = _TrackExtendsBox2.default.decodeDefaultSampleFlags(sampleFlags);
}
if (flags.sampleCompositionTimeOffsetPresent) {
var _Reader$readNumber13 = _Reader2.default.readNumber(buffer, base, 4);
var _Reader$readNumber14 = (0, _slicedToArray3.default)(_Reader$readNumber13, 2);
readBytesNum = _Reader$readNumber14[0];
sampleCompositionTimeOffset = _Reader$readNumber14[1];
base += readBytesNum;
sample.compositionTimeOffset = sampleCompositionTimeOffset;
}
}
props.samples = samples;
return [base - offset, props];
}
}]);
return TrackRunBox;
}(_FullBox3.default);
exports.default = TrackRunBox;
TrackRunBox.COMPACT_NAME = 'trun';
TrackRunBox.propTypes = {
samples: _PropTypes2.default.arrayOf(_PropTypes2.default.object),
dataOffset: _PropTypes2.default.number,
firstSampleFlags: _TrackExtendsBox2.default.DEFAULT_SAMPLE_FLAGS_PROPTYPES
};
TrackRunBox.defaultProps = {
samples: [],
dataOffset: void 0,
firstSampleFlags: void 0
};
TrackRunBox.spec = {
container: 'traf',
quantity: _Box2.default.QUANTITY_ANY_NUMBER,
mandatoryList: []
};