kontainer-js
Version:
A media file format generator/parser that exposes a React-like API.
288 lines (209 loc) • 9.57 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 _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 TrackExtendsBox = function (_FullBox) {
(0, _inherits3.default)(TrackExtendsBox, _FullBox);
function TrackExtendsBox(props) {
(0, _classCallCheck3.default)(this, TrackExtendsBox);
return (0, _possibleConstructorReturn3.default)(this, (0, _getPrototypeOf2.default)(TrackExtendsBox).call(this, TrackExtendsBox.COMPACT_NAME, props, 0, 0));
}
(0, _createClass3.default)(TrackExtendsBox, [{
key: 'serialize',
value: function serialize(buffer) {
var offset = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];
//console.log('--- TrackExtendsBox.serialize enter.');
var props = this.props;
var trackId = props.trackId;
var defaultSampleDescriptionIndex = props.defaultSampleDescriptionIndex;
var defaultSampleDuration = props.defaultSampleDuration;
var defaultSampleSize = props.defaultSampleSize;
var defaultSampleFlags = TrackExtendsBox.encodeDefaultSampleFlags(props.defaultSampleFlags);
var base = offset;
base += (0, _get3.default)((0, _getPrototypeOf2.default)(TrackExtendsBox.prototype), 'serialize', this).call(this, buffer, base);
base += _Writer2.default.writeNumber(trackId, buffer, base, 4);
base += _Writer2.default.writeNumber(defaultSampleDescriptionIndex, buffer, base, 4);
base += _Writer2.default.writeNumber(defaultSampleDuration, buffer, base, 4);
base += _Writer2.default.writeNumber(defaultSampleSize, buffer, base, 4);
base += _Writer2.default.writeNumber(defaultSampleFlags, buffer, base, 4);
(0, _get3.default)((0, _getPrototypeOf2.default)(TrackExtendsBox.prototype), 'setSize', this).call(this, base - offset, buffer, offset);
//console.log(`--- TrackExtendsBox.serialize exit. size=${this.size}`);
return this.size;
}
}], [{
key: 'encodeDefaultSampleFlags',
value: function encodeDefaultSampleFlags(flags) {
var f = 0;
if (!flags) {
return void 0;
}
if (flags.sampleDependsOn === 'unknown') {
f |= 0 << 6;
} else if (flags.sampleDependsOn === 'non-I-picture') {
f |= 1 << 6;
} else if (flags.sampleDependsOn === 'I-picture') {
f |= 2 << 6;
}
if (flags.sampleIsDependedOn === 'unknown') {
f |= 0 << 8;
} else if (flags.sampleIsDependedOn === 'non-disposable') {
f |= 1 << 8;
} else if (flags.sampleIsDependedOn === 'disposable') {
f |= 2 << 8;
}
if (flags.sampleHasRedundancy === 'unknown') {
f |= 0 << 10;
} else if (flags.sampleHasRedundancy === 'redundant') {
f |= 1 << 10;
} else if (flags.sampleHasRedundancy === 'no-redundant') {
f |= 2 << 10;
}
f |= flags.samplePaddingValue << 12;
f |= flags.sampleIsDifferenceSample << 15;
f |= flags.sampleDegradationPriority << 16;
return f;
}
}, {
key: 'decodeDefaultSampleFlags',
value: function decodeDefaultSampleFlags(f) {
var flags = {
sampleDependsOn: '',
sampleIsDependedOn: '',
sampleHasRedundancy: '',
samplePaddingValue: 0,
sampleIsDifferenceSample: false,
sampleDegradationPriority: 0
};
var v = f >>> 6 & 0x03;
if (v === 0) {
flags.sampleDependsOn = 'unknown';
} else if (v === 1) {
flags.sampleDependsOn = 'non-I-picture';
} else if (v === 2) {
flags.sampleDependsOn = 'I-picture';
}
v = f >>> 8 & 0x03;
if (v === 0) {
flags.sampleIsDependedOn = 'unknown';
} else if (v === 1) {
flags.sampleIsDependedOn = 'non-disposable';
} else if (v === 2) {
flags.sampleIsDependedOn = 'disposable';
}
v = f >>> 10 & 0x03;
if (v === 0) {
flags.sampleHasRedundancy = 'unknown';
} else if (v === 1) {
flags.sampleHasRedundancy = 'redundant';
} else if (v === 2) {
flags.sampleHasRedundancy = 'no-redundant';
}
flags.samplePaddingValue = f >>> 12 & 0x07;
flags.sampleIsDifferenceSample = !!(f >>> 15 & 0x01);
flags.sampleDegradationPriority = f >>> 16 & 0xFFFF;
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,
trackId = void 0,
defaultSampleDescriptionIndex = void 0,
defaultSampleDuration = void 0,
defaultSampleSize = void 0,
defaultSampleFlags = 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];
trackId = _Reader$readNumber2[1];
base += readBytesNum;
var _Reader$readNumber3 = _Reader2.default.readNumber(buffer, base, 4);
var _Reader$readNumber4 = (0, _slicedToArray3.default)(_Reader$readNumber3, 2);
readBytesNum = _Reader$readNumber4[0];
defaultSampleDescriptionIndex = _Reader$readNumber4[1];
base += readBytesNum;
var _Reader$readNumber5 = _Reader2.default.readNumber(buffer, base, 4);
var _Reader$readNumber6 = (0, _slicedToArray3.default)(_Reader$readNumber5, 2);
readBytesNum = _Reader$readNumber6[0];
defaultSampleDuration = _Reader$readNumber6[1];
base += readBytesNum;
var _Reader$readNumber7 = _Reader2.default.readNumber(buffer, base, 4);
var _Reader$readNumber8 = (0, _slicedToArray3.default)(_Reader$readNumber7, 2);
readBytesNum = _Reader$readNumber8[0];
defaultSampleSize = _Reader$readNumber8[1];
base += readBytesNum;
var _Reader$readNumber9 = _Reader2.default.readNumber(buffer, base, 4);
var _Reader$readNumber10 = (0, _slicedToArray3.default)(_Reader$readNumber9, 2);
readBytesNum = _Reader$readNumber10[0];
defaultSampleFlags = _Reader$readNumber10[1];
base += readBytesNum;
props.trackId = trackId;
props.trackId = trackId;
props.defaultSampleDescriptionIndex = defaultSampleDescriptionIndex;
props.defaultSampleDuration = defaultSampleDuration;
props.defaultSampleSize = defaultSampleSize;
props.defaultSampleFlags = TrackExtendsBox.decodeDefaultSampleFlags(defaultSampleFlags);
return [base - offset, props];
}
}]);
return TrackExtendsBox;
}(_FullBox3.default);
exports.default = TrackExtendsBox;
TrackExtendsBox.COMPACT_NAME = 'trex';
TrackExtendsBox.DEFAULT_SAMPLE_FLAGS_PROPTYPES = _PropTypes2.default.shape({
sampleDependsOn: _PropTypes2.default.oneOf(['unknown', 'non-I-picture', 'I-picture']),
sampleIsDependedOn: _PropTypes2.default.oneOf(['unknown', 'non-disposable', 'disposable']),
sampleHasRedundancy: _PropTypes2.default.oneOf(['unknown', 'redundant', 'no-redundant']),
samplePaddingValue: _PropTypes2.default.oneOf([0, 1, 2, 3, 4, 5, 6, 7]),
sampleIsDifferenceSample: _PropTypes2.default.bool,
sampleDegradationPriority: _PropTypes2.default.number
});
TrackExtendsBox.propTypes = {
trackId: _PropTypes2.default.number.isRequired,
defaultSampleDescriptionIndex: _PropTypes2.default.number.isRequired,
defaultSampleDuration: _PropTypes2.default.number.isRequired,
defaultSampleSize: _PropTypes2.default.number.isRequired,
defaultSampleFlags: TrackExtendsBox.DEFAULT_SAMPLE_FLAGS_PROPTYPES.isRequired
};
TrackExtendsBox.defaultProps = {
version: 0
};
TrackExtendsBox.spec = {
container: 'mvex',
quantity: _Box2.default.QUANTITY_ANY_NUMBER, // Actually exactly one for each track.
mandatoryList: []
};