kontainer-js
Version:
A media file format generator/parser that exposes a React-like API.
106 lines (74 loc) • 2.93 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _Element = require('./EBMLElement/Element');
var _Element2 = _interopRequireDefault(_Element);
var _ElementLookup = require('./ElementLookup');
var _ElementLookup2 = _interopRequireDefault(_ElementLookup);
var _Reader = require('../core/Reader');
var _Reader2 = _interopRequireDefault(_Reader);
var _Util = require('../core/Util');
var _Error = require('../core/Error');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function getComponentClass(name) {
return _ElementLookup2.default.lookupByName(name);
}
function parseTypeAndSize(buffer, offset) {
var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
var _Element$parse = _Element2.default.parse(buffer, offset);
var _Element$parse2 = (0, _slicedToArray3.default)(_Element$parse, 2);
var readBytesNum = _Element$parse2[0];
var props = _Element$parse2[1];
var elementClass = _ElementLookup2.default.lookupById(props.elementId, !!options.ignoreUnknown);
return [readBytesNum, elementClass, props.size === -1 ? -1 : readBytesNum + props.size];
}
function getRootWrapperClass() {
return _ElementLookup2.default.lookupByName('File');
}
function skipBytes(buffer, offset) {
for (var i = offset; i < buffer.length; i++) {
try {
var _Element$parse3 = _Element2.default.parse(buffer, i);
var _Element$parse4 = (0, _slicedToArray3.default)(_Element$parse3, 2);
var readBytesNum = _Element$parse4[0];
var props = _Element$parse4[1];
var elementClass = _ElementLookup2.default.lookupById(props.elementId, true);
return i - offset;
} catch (e) {
continue;
}
}
(0, _Util.throwException)('Matroska.skipBytes: Reached the end of buffer.');
}
function canParse(buffer, offset) {
var readBytesNum = void 0,
componentClass = void 0;
try {
var _parseTypeAndSize = parseTypeAndSize(buffer, offset);
var _parseTypeAndSize2 = (0, _slicedToArray3.default)(_parseTypeAndSize, 2);
readBytesNum = _parseTypeAndSize2[0];
componentClass = _parseTypeAndSize2[1];
if (componentClass) {
var _componentClass$parse = componentClass.parse(buffer, offset);
var _componentClass$parse2 = (0, _slicedToArray3.default)(_componentClass$parse, 1);
readBytesNum = _componentClass$parse2[0];
return true;
}
} catch (err) {
if (componentClass && err.message === _Error.BufferReadError.ERROR_MESSAGE) {
return true;
}
}
return false;
}
exports.default = {
name: 'webm',
getComponentClass: getComponentClass,
parseTypeAndSize: parseTypeAndSize,
getRootWrapperClass: getRootWrapperClass,
skipBytes: skipBytes,
canParse: canParse
};