@meframe/core 0.2.8 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/node_modules/.pnpm/mp4-muxer@5.2.2/node_modules/mp4-muxer/build/mp4-muxer.js.map +1 -0
- package/dist/{medeo-fe/node_modules → node_modules}/.pnpm/mp4box@0.5.4/node_modules/mp4box/dist/mp4box.all.js +2 -2
- package/dist/node_modules/.pnpm/mp4box@0.5.4/node_modules/mp4box/dist/mp4box.all.js.map +1 -0
- package/dist/stages/mux/MP4Muxer.js +1 -1
- package/dist/utils/mp4box.js +1 -1
- package/dist/workers/MP4Demuxer.DfWiwyjB.js.map +1 -1
- package/package.json +1 -1
- package/dist/medeo-fe/node_modules/.pnpm/mp4-muxer@5.2.2/node_modules/mp4-muxer/build/mp4-muxer.js.map +0 -1
- package/dist/medeo-fe/node_modules/.pnpm/mp4box@0.5.4/node_modules/mp4box/dist/mp4box.all.js.map +0 -1
- /package/dist/{medeo-fe/node_modules → node_modules}/.pnpm/mp4-muxer@5.2.2/node_modules/mp4-muxer/build/mp4-muxer.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MP4Demuxer.DfWiwyjB.js","sources":["../../../../../medeo-fe/node_modules/.pnpm/mp4box@0.5.4/node_modules/mp4box/dist/mp4box.all.js","../../src/utils/mp4box.ts","../../src/stages/demux/MP4Demuxer.ts"],"sourcesContent":["// file:src/log.js\n/* \n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar Log = (function (){\n\t\tvar start = new Date();\n\t\tvar LOG_LEVEL_ERROR \t= 4;\n\t\tvar LOG_LEVEL_WARNING \t= 3;\n\t\tvar LOG_LEVEL_INFO \t\t= 2;\n\t\tvar LOG_LEVEL_DEBUG\t\t= 1;\n\t\tvar log_level = LOG_LEVEL_ERROR;\n\t\tvar logObject = {\n\t\t\tsetLogLevel : function(level) {\n\t\t\t\tif (level == this.debug) log_level = LOG_LEVEL_DEBUG;\n\t\t\t\telse if (level == this.info) log_level = LOG_LEVEL_INFO;\n\t\t\t\telse if (level == this.warn) log_level = LOG_LEVEL_WARNING;\n\t\t\t\telse if (level == this.error) log_level = LOG_LEVEL_ERROR;\n\t\t\t\telse log_level = LOG_LEVEL_ERROR;\n\t\t\t},\n\t\t\tdebug : function(module, msg) {\n\t\t\t\tif (console.debug === undefined) {\n\t\t\t\t\tconsole.debug = console.log;\n\t\t\t\t}\n\t\t\t\tif (LOG_LEVEL_DEBUG >= log_level) {\n\t\t\t\t\tconsole.debug(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tlog : function(module, msg) {\n\t\t\t\tthis.debug(module.msg)\n\t\t\t},\n\t\t\tinfo : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_INFO >= log_level) {\n\t\t\t\t\tconsole.info(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\twarn : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_WARNING >= log_level) {\n\t\t\t\t\tconsole.warn(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\terror : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_ERROR >= log_level) {\n\t\t\t\t\tconsole.error(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn logObject;\n\t})();\n\t\n/* Helper function to print a duration value in the form H:MM:SS.MS */\nLog.getDurationString = function(duration, _timescale) {\n\tvar neg;\n\t/* Helper function to print a number on a fixed number of digits */\n\tfunction pad(number, length) {\n\t\tvar str = '' + number;\n\t\tvar a = str.split('.');\t\t\n\t\twhile (a[0].length < length) {\n\t\t\ta[0] = '0' + a[0];\n\t\t}\n\t\treturn a.join('.');\n\t}\n\tif (duration < 0) {\n\t\tneg = true;\n\t\tduration = -duration;\n\t} else {\n\t\tneg = false;\t\n\t}\n\tvar timescale = _timescale || 1;\n\tvar duration_sec = duration/timescale;\n\tvar hours = Math.floor(duration_sec/3600);\n\tduration_sec -= hours * 3600;\n\tvar minutes = Math.floor(duration_sec/60);\n\tduration_sec -= minutes * 60;\t\t\n\tvar msec = duration_sec*1000;\n\tduration_sec = Math.floor(duration_sec);\n\tmsec -= duration_sec*1000;\n\tmsec = Math.floor(msec);\n\treturn (neg ? \"-\": \"\")+hours+\":\"+pad(minutes,2)+\":\"+pad(duration_sec,2)+\".\"+pad(msec,3);\n}\n\t\n/* Helper function to stringify HTML5 TimeRanges objects */\t\nLog.printRanges = function(ranges) {\n\tvar length = ranges.length;\n\tif (length > 0) {\n\t\tvar str = \"\";\n\t\tfor (var i = 0; i < length; i++) {\n\t\t if (i > 0) str += \",\";\n\t\t str += \"[\"+Log.getDurationString(ranges.start(i))+ \",\"+Log.getDurationString(ranges.end(i))+\"]\";\n\t\t}\n\t\treturn str;\n\t} else {\n\t\treturn \"(empty)\";\n\t}\n}\n\nif (typeof exports !== 'undefined') {\n\texports.Log = Log;\n}\n// file:src/stream.js\nvar MP4BoxStream = function(arrayBuffer) {\n if (arrayBuffer instanceof ArrayBuffer) {\n this.buffer = arrayBuffer;\n this.dataview = new DataView(arrayBuffer);\n } else {\n throw (\"Needs an array buffer\");\n }\n this.position = 0;\n};\n\n/*************************************************************************\n Common API between MultiBufferStream and SimpleStream\n *************************************************************************/\nMP4BoxStream.prototype.getPosition = function() {\n return this.position;\n}\n\nMP4BoxStream.prototype.getEndPosition = function() {\n return this.buffer.byteLength;\n}\n\nMP4BoxStream.prototype.getLength = function() {\n return this.buffer.byteLength;\n}\n\nMP4BoxStream.prototype.seek = function (pos) {\n var npos = Math.max(0, Math.min(this.buffer.byteLength, pos));\n this.position = (isNaN(npos) || !isFinite(npos)) ? 0 : npos;\n return true;\n}\n\nMP4BoxStream.prototype.isEos = function () {\n return this.getPosition() >= this.getEndPosition();\n}\n\n/*************************************************************************\n Read methods, simimar to DataStream but simpler\n *************************************************************************/\nMP4BoxStream.prototype.readAnyInt = function(size, signed) {\n var res = 0;\n if (this.position + size <= this.buffer.byteLength) {\n switch (size) {\n case 1:\n if (signed) {\n res = this.dataview.getInt8(this.position);\n } else {\n res = this.dataview.getUint8(this.position);\n }\n break;\n case 2:\n if (signed) {\n res = this.dataview.getInt16(this.position);\n } else {\n res = this.dataview.getUint16(this.position);\n }\n break;\n case 3:\n if (signed) {\n throw (\"No method for reading signed 24 bits values\");\n } else {\n res = this.dataview.getUint8(this.position) << 16;\n res |= this.dataview.getUint8(this.position+1) << 8;\n res |= this.dataview.getUint8(this.position+2);\n }\n break;\n case 4:\n if (signed) {\n res = this.dataview.getInt32(this.position);\n } else {\n res = this.dataview.getUint32(this.position);\n }\n break;\n case 8:\n if (signed) {\n throw (\"No method for reading signed 64 bits values\");\n } else {\n res = this.dataview.getUint32(this.position) << 32;\n res |= this.dataview.getUint32(this.position+4);\n }\n break;\n default:\n throw (\"readInt method not implemented for size: \"+size);\n }\n this.position+= size;\n return res;\n } else {\n throw (\"Not enough bytes in buffer\");\n }\n}\n\nMP4BoxStream.prototype.readUint8 = function() {\n return this.readAnyInt(1, false);\n}\n\nMP4BoxStream.prototype.readUint16 = function() {\n return this.readAnyInt(2, false);\n}\n\nMP4BoxStream.prototype.readUint24 = function() {\n return this.readAnyInt(3, false);\n}\n\nMP4BoxStream.prototype.readUint32 = function() {\n return this.readAnyInt(4, false);\n}\n\nMP4BoxStream.prototype.readUint64 = function() {\n return this.readAnyInt(8, false);\n}\n\nMP4BoxStream.prototype.readString = function(length) {\n if (this.position + length <= this.buffer.byteLength) {\n var s = \"\";\n for (var i = 0; i < length; i++) {\n s += String.fromCharCode(this.readUint8());\n }\n return s;\n } else {\n throw (\"Not enough bytes in buffer\");\n }\n}\n\nMP4BoxStream.prototype.readCString = function() {\n var arr = [];\n while(true) {\n var b = this.readUint8();\n if (b !== 0) {\n arr.push(b);\n } else {\n break;\n }\n }\n return String.fromCharCode.apply(null, arr); \n}\n\nMP4BoxStream.prototype.readInt8 = function() {\n return this.readAnyInt(1, true);\n}\n\nMP4BoxStream.prototype.readInt16 = function() {\n return this.readAnyInt(2, true);\n}\n\nMP4BoxStream.prototype.readInt32 = function() {\n return this.readAnyInt(4, true);\n}\n\nMP4BoxStream.prototype.readInt64 = function() {\n return this.readAnyInt(8, false);\n}\n\nMP4BoxStream.prototype.readUint8Array = function(length) {\n var arr = new Uint8Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint8();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readInt16Array = function(length) {\n var arr = new Int16Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readInt16();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readUint16Array = function(length) {\n var arr = new Int16Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint16();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readUint32Array = function(length) {\n var arr = new Uint32Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint32();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readInt32Array = function(length) {\n var arr = new Int32Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readInt32();\n }\n return arr;\n}\n\nif (typeof exports !== 'undefined') {\n exports.MP4BoxStream = MP4BoxStream;\n}// file:src/DataStream.js\n/**\n DataStream reads scalars, arrays and structs of data from an ArrayBuffer.\n It's like a file-like DataView on steroids.\n\n @param {ArrayBuffer} arrayBuffer ArrayBuffer to read from.\n @param {?Number} byteOffset Offset from arrayBuffer beginning for the DataStream.\n @param {?Boolean} endianness DataStream.BIG_ENDIAN or DataStream.LITTLE_ENDIAN (the default).\n */\nvar DataStream = function(arrayBuffer, byteOffset, endianness) {\n this._byteOffset = byteOffset || 0;\n if (arrayBuffer instanceof ArrayBuffer) {\n this.buffer = arrayBuffer;\n } else if (typeof arrayBuffer == \"object\") {\n this.dataView = arrayBuffer;\n if (byteOffset) {\n this._byteOffset += byteOffset;\n }\n } else {\n this.buffer = new ArrayBuffer(arrayBuffer || 0);\n }\n this.position = 0;\n this.endianness = endianness == null ? DataStream.LITTLE_ENDIAN : endianness;\n};\nDataStream.prototype = {};\n\nDataStream.prototype.getPosition = function() {\n return this.position;\n}\n\n/**\n Internal function to resize the DataStream buffer when required.\n @param {number} extra Number of bytes to add to the buffer allocation.\n @return {null}\n */\nDataStream.prototype._realloc = function(extra) {\n if (!this._dynamicSize) {\n return;\n }\n var req = this._byteOffset + this.position + extra;\n var blen = this._buffer.byteLength;\n if (req <= blen) {\n if (req > this._byteLength) {\n this._byteLength = req;\n }\n return;\n }\n if (blen < 1) {\n blen = 1;\n }\n while (req > blen) {\n blen *= 2;\n }\n var buf = new ArrayBuffer(blen);\n var src = new Uint8Array(this._buffer);\n var dst = new Uint8Array(buf, 0, src.length);\n dst.set(src);\n this.buffer = buf;\n this._byteLength = req;\n};\n\n/**\n Internal function to trim the DataStream buffer when required.\n Used for stripping out the extra bytes from the backing buffer when\n the virtual byteLength is smaller than the buffer byteLength (happens after\n growing the buffer with writes and not filling the extra space completely).\n\n @return {null}\n */\nDataStream.prototype._trimAlloc = function() {\n if (this._byteLength == this._buffer.byteLength) {\n return;\n }\n var buf = new ArrayBuffer(this._byteLength);\n var dst = new Uint8Array(buf);\n var src = new Uint8Array(this._buffer, 0, dst.length);\n dst.set(src);\n this.buffer = buf;\n};\n\n\n/**\n Big-endian const to use as default endianness.\n @type {boolean}\n */\nDataStream.BIG_ENDIAN = false;\n\n/**\n Little-endian const to use as default endianness.\n @type {boolean}\n */\nDataStream.LITTLE_ENDIAN = true;\n\n/**\n Virtual byte length of the DataStream backing buffer.\n Updated to be max of original buffer size and last written size.\n If dynamicSize is false is set to buffer size.\n @type {number}\n */\nDataStream.prototype._byteLength = 0;\n\n/**\n Returns the byte length of the DataStream object.\n @type {number}\n */\nObject.defineProperty(DataStream.prototype, 'byteLength',\n { get: function() {\n return this._byteLength - this._byteOffset;\n }});\n\n/**\n Set/get the backing ArrayBuffer of the DataStream object.\n The setter updates the DataView to point to the new buffer.\n @type {Object}\n */\nObject.defineProperty(DataStream.prototype, 'buffer',\n { get: function() {\n this._trimAlloc();\n return this._buffer;\n },\n set: function(v) {\n this._buffer = v;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._buffer.byteLength;\n } });\n\n/**\n Set/get the byteOffset of the DataStream object.\n The setter updates the DataView to point to the new byteOffset.\n @type {number}\n */\nObject.defineProperty(DataStream.prototype, 'byteOffset',\n { get: function() {\n return this._byteOffset;\n },\n set: function(v) {\n this._byteOffset = v;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._buffer.byteLength;\n } });\n\n/**\n Set/get the backing DataView of the DataStream object.\n The setter updates the buffer and byteOffset to point to the DataView values.\n @type {Object}\n */\nObject.defineProperty(DataStream.prototype, 'dataView',\n { get: function() {\n return this._dataView;\n },\n set: function(v) {\n this._byteOffset = v.byteOffset;\n this._buffer = v.buffer;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._byteOffset + v.byteLength;\n } });\n\n/**\n Sets the DataStream read/write position to given position.\n Clamps between 0 and DataStream length.\n\n @param {number} pos Position to seek to.\n @return {null}\n */\nDataStream.prototype.seek = function(pos) {\n var npos = Math.max(0, Math.min(this.byteLength, pos));\n this.position = (isNaN(npos) || !isFinite(npos)) ? 0 : npos;\n};\n\n/**\n Returns true if the DataStream seek pointer is at the end of buffer and\n there's no more data to read.\n\n @return {boolean} True if the seek pointer is at the end of the buffer.\n */\nDataStream.prototype.isEof = function() {\n return (this.position >= this._byteLength);\n};\n\n\n/**\n Maps a Uint8Array into the DataStream buffer.\n\n Nice for quickly reading in data.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint8Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint8Array = function(length) {\n this._realloc(length * 1);\n var arr = new Uint8Array(this._buffer, this.byteOffset+this.position, length);\n this.position += length * 1;\n return arr;\n};\n\n\n/**\n Reads an Int32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int32Array.\n */\nDataStream.prototype.readInt32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Int32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads an Int16Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int16Array.\n */\nDataStream.prototype.readInt16Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 2) : length;\n var arr = new Int16Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads an Int8Array of desired length from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int8Array.\n */\nDataStream.prototype.readInt8Array = function(length) {\n length = length == null ? (this.byteLength-this.position) : length;\n var arr = new Int8Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint32Array.\n */\nDataStream.prototype.readUint32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Uint32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint16Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint16Array.\n */\nDataStream.prototype.readUint16Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 2) : length;\n var arr = new Uint16Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint8Array of desired length from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint8Array.\n */\nDataStream.prototype.readUint8Array = function(length) {\n length = length == null ? (this.byteLength-this.position) : length;\n var arr = new Uint8Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Float64Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Float64Array.\n */\nDataStream.prototype.readFloat64Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 8) : length;\n var arr = new Float64Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Float32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Float32Array.\n */\nDataStream.prototype.readFloat32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Float32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n\n/**\n Reads a 32-bit int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readInt32 = function(e) {\n var v = this._dataView.getInt32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 16-bit int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readInt16 = function(e) {\n var v = this._dataView.getInt16(this.position, e == null ? this.endianness : e);\n this.position += 2;\n return v;\n};\n\n/**\n Reads an 8-bit int from the DataStream.\n\n @return {number} The read number.\n */\nDataStream.prototype.readInt8 = function() {\n var v = this._dataView.getInt8(this.position);\n this.position += 1;\n return v;\n};\n\n/**\n Reads a 32-bit unsigned int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readUint32 = function(e) {\n var v = this._dataView.getUint32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 16-bit unsigned int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readUint16 = function(e) {\n var v = this._dataView.getUint16(this.position, e == null ? this.endianness : e);\n this.position += 2;\n return v;\n};\n\n/**\n Reads an 8-bit unsigned int from the DataStream.\n\n @return {number} The read number.\n */\nDataStream.prototype.readUint8 = function() {\n var v = this._dataView.getUint8(this.position);\n this.position += 1;\n return v;\n};\n\n/**\n Reads a 32-bit float from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readFloat32 = function(e) {\n var v = this._dataView.getFloat32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 64-bit float from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readFloat64 = function(e) {\n var v = this._dataView.getFloat64(this.position, e == null ? this.endianness : e);\n this.position += 8;\n return v;\n};\n\n/**\n Native endianness. Either DataStream.BIG_ENDIAN or DataStream.LITTLE_ENDIAN\n depending on the platform endianness.\n\n @type {boolean}\n */\nDataStream.endianness = new Int8Array(new Int16Array([1]).buffer)[0] > 0;\n\n/**\n Copies byteLength bytes from the src buffer at srcOffset to the\n dst buffer at dstOffset.\n\n @param {Object} dst Destination ArrayBuffer to write to.\n @param {number} dstOffset Offset to the destination ArrayBuffer.\n @param {Object} src Source ArrayBuffer to read from.\n @param {number} srcOffset Offset to the source ArrayBuffer.\n @param {number} byteLength Number of bytes to copy.\n */\nDataStream.memcpy = function(dst, dstOffset, src, srcOffset, byteLength) {\n var dstU8 = new Uint8Array(dst, dstOffset, byteLength);\n var srcU8 = new Uint8Array(src, srcOffset, byteLength);\n dstU8.set(srcU8);\n};\n\n/**\n Converts array to native endianness in-place.\n\n @param {Object} array Typed array to convert.\n @param {boolean} arrayIsLittleEndian True if the data in the array is\n little-endian. Set false for big-endian.\n @return {Object} The converted typed array.\n */\nDataStream.arrayToNative = function(array, arrayIsLittleEndian) {\n if (arrayIsLittleEndian == this.endianness) {\n return array;\n } else {\n return this.flipArrayEndianness(array);\n }\n};\n\n/**\n Converts native endianness array to desired endianness in-place.\n\n @param {Object} array Typed array to convert.\n @param {boolean} littleEndian True if the converted array should be\n little-endian. Set false for big-endian.\n @return {Object} The converted typed array.\n */\nDataStream.nativeToEndian = function(array, littleEndian) {\n if (this.endianness == littleEndian) {\n return array;\n } else {\n return this.flipArrayEndianness(array);\n }\n};\n\n/**\n Flips typed array endianness in-place.\n\n @param {Object} array Typed array to flip.\n @return {Object} The converted typed array.\n */\nDataStream.flipArrayEndianness = function(array) {\n var u8 = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);\n for (var i=0; i<array.byteLength; i+=array.BYTES_PER_ELEMENT) {\n for (var j=i+array.BYTES_PER_ELEMENT-1, k=i; j>k; j--, k++) {\n var tmp = u8[k];\n u8[k] = u8[j];\n u8[j] = tmp;\n }\n }\n return array;\n};\n\n/**\n Seek position where DataStream#readStruct ran into a problem.\n Useful for debugging struct parsing.\n\n @type {number}\n */\nDataStream.prototype.failurePosition = 0;\n\nString.fromCharCodeUint8 = function(uint8arr) {\n var arr = [];\n for (var i = 0; i < uint8arr.length; i++) {\n arr[i] = uint8arr[i];\n }\n return String.fromCharCode.apply(null, arr);\n}\n/**\n Read a string of desired length and encoding from the DataStream.\n\n @param {number} length The length of the string to read in bytes.\n @param {?string} encoding The encoding of the string data in the DataStream.\n Defaults to ASCII.\n @return {string} The read string.\n */\nDataStream.prototype.readString = function(length, encoding) {\n if (encoding == null || encoding == \"ASCII\") {\n return String.fromCharCodeUint8.apply(null, [this.mapUint8Array(length == null ? this.byteLength-this.position : length)]);\n } else {\n return (new TextDecoder(encoding)).decode(this.mapUint8Array(length));\n }\n};\n\n/**\n Read null-terminated string of desired length from the DataStream. Truncates\n the returned string so that the null byte is not a part of it.\n\n @param {?number} length The length of the string to read.\n @return {string} The read string.\n */\nDataStream.prototype.readCString = function(length) {\n var blen = this.byteLength-this.position;\n var u8 = new Uint8Array(this._buffer, this._byteOffset + this.position);\n var len = blen;\n if (length != null) {\n len = Math.min(length, blen);\n }\n for (var i = 0; i < len && u8[i] !== 0; i++); // find first zero byte\n var s = String.fromCharCodeUint8.apply(null, [this.mapUint8Array(i)]);\n if (length != null) {\n this.position += len-i;\n } else if (i != blen) {\n this.position += 1; // trailing zero if not at end of buffer\n }\n return s;\n};\n\n/* \n TODO: fix endianness for 24/64-bit fields\n TODO: check range/support for 64-bits numbers in JavaScript\n*/\nvar MAX_SIZE = Math.pow(2, 32);\n\nDataStream.prototype.readInt64 = function () {\n return (this.readInt32()*MAX_SIZE)+this.readUint32();\n}\nDataStream.prototype.readUint64 = function () {\n\treturn (this.readUint32()*MAX_SIZE)+this.readUint32();\n}\n\nDataStream.prototype.readInt64 = function () {\n return (this.readUint32()*MAX_SIZE)+this.readUint32();\n}\n\nDataStream.prototype.readUint24 = function () {\n\treturn (this.readUint8()<<16)+(this.readUint8()<<8)+this.readUint8();\n}\n\nif (typeof exports !== 'undefined') {\n exports.DataStream = DataStream; \n}\n// file:src/DataStream-write.js\n/**\n Saves the DataStream contents to the given filename.\n Uses Chrome's anchor download property to initiate download.\n \n @param {string} filename Filename to save as.\n @return {null}\n */\nDataStream.prototype.save = function(filename) {\n var blob = new Blob([this.buffer]);\n if (window.URL && URL.createObjectURL) {\n var url = window.URL.createObjectURL(blob);\n var a = document.createElement('a');\n // Required in Firefox:\n document.body.appendChild(a);\n a.setAttribute('href', url);\n a.setAttribute('download', filename);\n // Required in Firefox:\n a.setAttribute('target', '_self');\n a.click();\n window.URL.revokeObjectURL(url);\n } else {\n throw(\"DataStream.save: Can't create object URL.\");\n }\n};\n\n/**\n Whether to extend DataStream buffer when trying to write beyond its size.\n If set, the buffer is reallocated to twice its current size until the\n requested write fits the buffer.\n @type {boolean}\n */\nDataStream.prototype._dynamicSize = true;\nObject.defineProperty(DataStream.prototype, 'dynamicSize',\n { get: function() {\n return this._dynamicSize;\n },\n set: function(v) {\n if (!v) {\n this._trimAlloc();\n }\n this._dynamicSize = v;\n } });\n\n/**\n Internal function to trim the DataStream buffer when required.\n Used for stripping out the first bytes when not needed anymore.\n\n @return {null}\n */\nDataStream.prototype.shift = function(offset) {\n var buf = new ArrayBuffer(this._byteLength-offset);\n var dst = new Uint8Array(buf);\n var src = new Uint8Array(this._buffer, offset, dst.length);\n dst.set(src);\n this.buffer = buf;\n this.position -= offset;\n};\n\n/**\n Writes an Int32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeInt32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Int32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt32Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeInt32(arr[i], e);\n }\n }\n};\n\n/**\n Writes an Int16Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeInt16Array = function(arr, e) {\n this._realloc(arr.length * 2);\n if (arr instanceof Int16Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt16Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeInt16(arr[i], e);\n }\n }\n};\n\n/**\n Writes an Int8Array to the DataStream.\n\n @param {Object} arr The array to write.\n */\nDataStream.prototype.writeInt8Array = function(arr) {\n this._realloc(arr.length * 1);\n if (arr instanceof Int8Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt8Array(arr.length);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeInt8(arr[i]);\n }\n }\n};\n\n/**\n Writes a Uint32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeUint32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Uint32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapUint32Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeUint32(arr[i], e);\n }\n }\n};\n\n/**\n Writes a Uint16Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeUint16Array = function(arr, e) {\n this._realloc(arr.length * 2);\n if (arr instanceof Uint16Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapUint16Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeUint16(arr[i], e);\n }\n }\n};\n\n/**\n Writes a Uint8Array to the DataStream.\n\n @param {Object} arr The array to write.\n */\nDataStream.prototype.writeUint8Array = function(arr) {\n this._realloc(arr.length * 1);\n if (arr instanceof Uint8Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapUint8Array(arr.length);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeUint8(arr[i]);\n }\n }\n};\n\n/**\n Writes a Float64Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeFloat64Array = function(arr, e) {\n this._realloc(arr.length * 8);\n if (arr instanceof Float64Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapFloat64Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeFloat64(arr[i], e);\n }\n }\n};\n\n/**\n Writes a Float32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeFloat32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Float32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapFloat32Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeFloat32(arr[i], e);\n }\n }\n};\n\n\n/**\n Writes a 32-bit int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeInt32 = function(v, e) {\n this._realloc(4);\n this._dataView.setInt32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n};\n\n/**\n Writes a 16-bit int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeInt16 = function(v, e) {\n this._realloc(2);\n this._dataView.setInt16(this.position, v, e == null ? this.endianness : e);\n this.position += 2;\n};\n\n/**\n Writes an 8-bit int to the DataStream.\n\n @param {number} v Number to write.\n */\nDataStream.prototype.writeInt8 = function(v) {\n this._realloc(1);\n this._dataView.setInt8(this.position, v);\n this.position += 1;\n};\n\n/**\n Writes a 32-bit unsigned int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeUint32 = function(v, e) {\n this._realloc(4);\n this._dataView.setUint32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n};\n\n/**\n Writes a 16-bit unsigned int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeUint16 = function(v, e) {\n this._realloc(2);\n this._dataView.setUint16(this.position, v, e == null ? this.endianness : e);\n this.position += 2;\n};\n\n/**\n Writes an 8-bit unsigned int to the DataStream.\n\n @param {number} v Number to write.\n */\nDataStream.prototype.writeUint8 = function(v) {\n this._realloc(1);\n this._dataView.setUint8(this.position, v);\n this.position += 1;\n};\n\n/**\n Writes a 32-bit float to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeFloat32 = function(v, e) {\n this._realloc(4);\n this._dataView.setFloat32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n};\n\n/**\n Writes a 64-bit float to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeFloat64 = function(v, e) {\n this._realloc(8);\n this._dataView.setFloat64(this.position, v, e == null ? this.endianness : e);\n this.position += 8;\n};\n\n/**\n Write a UCS-2 string of desired endianness to the DataStream. The\n lengthOverride argument lets you define the number of characters to write.\n If the string is shorter than lengthOverride, the extra space is padded with\n zeroes.\n\n @param {string} str The string to write.\n @param {?boolean} endianness The endianness to use for the written string data.\n @param {?number} lengthOverride The number of characters to write.\n */\nDataStream.prototype.writeUCS2String = function(str, endianness, lengthOverride) {\n if (lengthOverride == null) {\n lengthOverride = str.length;\n }\n for (var i = 0; i < str.length && i < lengthOverride; i++) {\n this.writeUint16(str.charCodeAt(i), endianness);\n }\n for (; i<lengthOverride; i++) {\n this.writeUint16(0);\n }\n};\n\n/**\n Writes a string of desired length and encoding to the DataStream.\n\n @param {string} s The string to write.\n @param {?string} encoding The encoding for the written string data.\n Defaults to ASCII.\n @param {?number} length The number of characters to write.\n */\nDataStream.prototype.writeString = function(s, encoding, length) {\n var i = 0;\n if (encoding == null || encoding == \"ASCII\") {\n if (length != null) {\n var len = Math.min(s.length, length);\n for (i=0; i<len; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n for (; i<length; i++) {\n this.writeUint8(0);\n }\n } else {\n for (i=0; i<s.length; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n }\n } else {\n this.writeUint8Array((new TextEncoder(encoding)).encode(s.substring(0, length)));\n }\n};\n\n/**\n Writes a null-terminated string to DataStream and zero-pads it to length\n bytes. If length is not given, writes the string followed by a zero.\n If string is longer than length, the written part of the string does not have\n a trailing zero.\n\n @param {string} s The string to write.\n @param {?number} length The number of characters to write.\n */\nDataStream.prototype.writeCString = function(s, length) {\n var i = 0;\n if (length != null) {\n var len = Math.min(s.length, length);\n for (i=0; i<len; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n for (; i<length; i++) {\n this.writeUint8(0);\n }\n } else {\n for (i=0; i<s.length; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n this.writeUint8(0);\n }\n};\n\n/**\n Writes a struct to the DataStream. Takes a structDefinition that gives the\n types and a struct object that gives the values. Refer to readStruct for the\n structure of structDefinition.\n\n @param {Object} structDefinition Type definition of the struct.\n @param {Object} struct The struct data object.\n */\nDataStream.prototype.writeStruct = function(structDefinition, struct) {\n for (var i = 0; i < structDefinition.length; i+=2) {\n var t = structDefinition[i+1];\n this.writeType(t, struct[structDefinition[i]], struct);\n }\n};\n\n/**\n Writes object v of type t to the DataStream.\n\n @param {Object} t Type of data to write.\n @param {Object} v Value of data to write.\n @param {Object} struct Struct to pass to write callback functions.\n */\nDataStream.prototype.writeType = function(t, v, struct) {\n var tp;\n if (typeof t == \"function\") {\n return t(this, v);\n } else if (typeof t == \"object\" && !(t instanceof Array)) {\n return t.set(this, v, struct);\n }\n var lengthOverride = null;\n var charset = \"ASCII\";\n var pos = this.position;\n if (typeof(t) == 'string' && /:/.test(t)) {\n tp = t.split(\":\");\n t = tp[0];\n lengthOverride = parseInt(tp[1]);\n }\n if (typeof t == 'string' && /,/.test(t)) {\n tp = t.split(\",\");\n t = tp[0];\n charset = parseInt(tp[1]);\n }\n\n switch(t) {\n case 'uint8':\n this.writeUint8(v);\n break;\n case 'int8':\n this.writeInt8(v);\n break;\n\n case 'uint16':\n this.writeUint16(v, this.endianness);\n break;\n case 'int16':\n this.writeInt16(v, this.endianness);\n break;\n case 'uint32':\n this.writeUint32(v, this.endianness);\n break;\n case 'int32':\n this.writeInt32(v, this.endianness);\n break;\n case 'float32':\n this.writeFloat32(v, this.endianness);\n break;\n case 'float64':\n this.writeFloat64(v, this.endianness);\n break;\n\n case 'uint16be':\n this.writeUint16(v, DataStream.BIG_ENDIAN);\n break;\n case 'int16be':\n this.writeInt16(v, DataStream.BIG_ENDIAN);\n break;\n case 'uint32be':\n this.writeUint32(v, DataStream.BIG_ENDIAN);\n break;\n case 'int32be':\n this.writeInt32(v, DataStream.BIG_ENDIAN);\n break;\n case 'float32be':\n this.writeFloat32(v, DataStream.BIG_ENDIAN);\n break;\n case 'float64be':\n this.writeFloat64(v, DataStream.BIG_ENDIAN);\n break;\n\n case 'uint16le':\n this.writeUint16(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'int16le':\n this.writeInt16(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'uint32le':\n this.writeUint32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'int32le':\n this.writeInt32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'float32le':\n this.writeFloat32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'float64le':\n this.writeFloat64(v, DataStream.LITTLE_ENDIAN);\n break;\n\n case 'cstring':\n this.writeCString(v, lengthOverride);\n break;\n\n case 'string':\n this.writeString(v, charset, lengthOverride);\n break;\n\n case 'u16string':\n this.writeUCS2String(v, this.endianness, lengthOverride);\n break;\n\n case 'u16stringle':\n this.writeUCS2String(v, DataStream.LITTLE_ENDIAN, lengthOverride);\n break;\n\n case 'u16stringbe':\n this.writeUCS2String(v, DataStream.BIG_ENDIAN, lengthOverride);\n break;\n\n default:\n if (t.length == 3) {\n var ta = t[1];\n for (var i=0; i<v.length; i++) {\n this.writeType(ta, v[i]);\n }\n break;\n } else {\n this.writeStruct(t, v);\n break;\n }\n }\n if (lengthOverride != null) {\n this.position = pos;\n this._realloc(lengthOverride);\n this.position = pos + lengthOverride;\n }\n};\n\n\nDataStream.prototype.writeUint64 = function (v) {\n\tvar h = Math.floor(v / MAX_SIZE);\n\tthis.writeUint32(h);\n\tthis.writeUint32(v & 0xFFFFFFFF);\n}\n\nDataStream.prototype.writeUint24 = function (v) {\n\tthis.writeUint8((v & 0x00FF0000)>>16);\n\tthis.writeUint8((v & 0x0000FF00)>>8);\n\tthis.writeUint8((v & 0x000000FF));\n}\n\nDataStream.prototype.adjustUint32 = function(position, value) {\n\tvar pos = this.position;\n\tthis.seek(position);\n\tthis.writeUint32(value);\n\tthis.seek(pos);\n}\n// file:src/DataStream-map.js\n/**\n Maps an Int32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Int32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n\n/**\n Maps an Int16Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int16Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt16Array = function(length, e) {\n this._realloc(length * 2);\n var arr = new Int16Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 2;\n return arr;\n};\n\n/**\n Maps an Int8Array into the DataStream buffer.\n\n Nice for quickly reading in data.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int8Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt8Array = function(length) {\n this._realloc(length * 1);\n var arr = new Int8Array(this._buffer, this.byteOffset+this.position, length);\n this.position += length * 1;\n return arr;\n};\n\n/**\n Maps a Uint32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Uint32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n\n/**\n Maps a Uint16Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint16Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint16Array = function(length, e) {\n this._realloc(length * 2);\n var arr = new Uint16Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 2;\n return arr;\n};\n\n/**\n Maps a Float64Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Float64Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapFloat64Array = function(length, e) {\n this._realloc(length * 8);\n var arr = new Float64Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 8;\n return arr;\n};\n\n/**\n Maps a Float32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Float32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapFloat32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Float32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n// file:src/buffer.js\n/**\n * MultiBufferStream is a class that acts as a SimpleStream for parsing \n * It holds several, possibly non-contiguous ArrayBuffer objects, each with a fileStart property \n * containing the offset for the buffer data in an original/virtual file \n *\n * It inherits also from DataStream for all read/write/alloc operations\n */\n\n/**\n * Constructor\n */\nvar MultiBufferStream = function(buffer) {\n\t/* List of ArrayBuffers, with a fileStart property, sorted in fileStart order and non overlapping */\n\tthis.buffers = [];\t\n\tthis.bufferIndex = -1;\n\tif (buffer) {\n\t\tthis.insertBuffer(buffer);\n\t\tthis.bufferIndex = 0;\n\t}\n}\nMultiBufferStream.prototype = new DataStream(new ArrayBuffer(), 0, DataStream.BIG_ENDIAN);\n\n/************************************************************************************\n Methods for the managnement of the buffers (insertion, removal, concatenation, ...)\n ***********************************************************************************/\n\nMultiBufferStream.prototype.initialized = function() {\n\tvar firstBuffer;\n\tif (this.bufferIndex > -1) {\n\t\treturn true;\n\t} else if (this.buffers.length > 0) {\n\t\tfirstBuffer = this.buffers[0];\n\t\tif (firstBuffer.fileStart === 0) {\n\t\t\tthis.buffer = firstBuffer;\n\t\t\tthis.bufferIndex = 0;\n\t\t\tLog.debug(\"MultiBufferStream\", \"Stream ready for parsing\");\n\t\t\treturn true;\n\t\t} else {\n\t\t\tLog.warn(\"MultiBufferStream\", \"The first buffer should have a fileStart of 0\");\n\t\t\tthis.logBufferLevel();\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tLog.warn(\"MultiBufferStream\", \"No buffer to start parsing from\");\n\t\tthis.logBufferLevel();\n\t\treturn false;\n\t}\t\t\t\n}\n\n/**\n * helper functions to concatenate two ArrayBuffer objects\n * @param {ArrayBuffer} buffer1 \n * @param {ArrayBuffer} buffer2 \n * @return {ArrayBuffer} the concatenation of buffer1 and buffer2 in that order\n */\nArrayBuffer.concat = function(buffer1, buffer2) {\n Log.debug(\"ArrayBuffer\", \"Trying to create a new buffer of size: \"+(buffer1.byteLength + buffer2.byteLength));\n var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);\n tmp.set(new Uint8Array(buffer1), 0);\n tmp.set(new Uint8Array(buffer2), buffer1.byteLength);\n return tmp.buffer;\n};\n\n/**\n * Reduces the size of a given buffer, but taking the part between offset and offset+newlength\n * @param {ArrayBuffer} buffer \n * @param {Number} offset the start of new buffer\n * @param {Number} newLength the length of the new buffer\n * @return {ArrayBuffer} the new buffer\n */\nMultiBufferStream.prototype.reduceBuffer = function(buffer, offset, newLength) {\n\tvar smallB;\n\tsmallB = new Uint8Array(newLength);\n\tsmallB.set(new Uint8Array(buffer, offset, newLength));\n\tsmallB.buffer.fileStart = buffer.fileStart+offset;\n\tsmallB.buffer.usedBytes = 0;\n\treturn smallB.buffer;\t\n}\n\n/**\n * Inserts the new buffer in the sorted list of buffers,\n * making sure, it is not overlapping with existing ones (possibly reducing its size).\n * if the new buffer overrides/replaces the 0-th buffer (for instance because it is bigger), \n * updates the DataStream buffer for parsing \n*/\nMultiBufferStream.prototype.insertBuffer = function(ab) {\t\n\tvar to_add = true;\n\t/* TODO: improve insertion if many buffers */\n\tfor (var i = 0; i < this.buffers.length; i++) {\n\t\tvar b = this.buffers[i];\n\t\tif (ab.fileStart <= b.fileStart) {\n\t\t\t/* the insertion position is found */\n\t\t\tif (ab.fileStart === b.fileStart) {\n\t\t\t\t/* The new buffer overlaps with an existing buffer */\n\t\t\t\tif (ab.byteLength > b.byteLength) {\n\t\t\t\t\t/* the new buffer is bigger than the existing one\n\t\t\t\t\t remove the existing buffer and try again to insert \n\t\t\t\t\t the new buffer to check overlap with the next ones */\n\t\t\t\t\tthis.buffers.splice(i, 1);\n\t\t\t\t\ti--; \n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\t/* the new buffer is smaller than the existing one, just drop it */\n\t\t\t\t\tLog.warn(\"MultiBufferStream\", \"Buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\") already appended, ignoring\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t/* The beginning of the new buffer is not overlapping with an existing buffer\n\t\t\t\t let's check the end of it */\n\t\t\t\tif (ab.fileStart + ab.byteLength <= b.fileStart) {\n\t\t\t\t\t/* no overlap, we can add it as is */\n\t\t\t\t} else {\n\t\t\t\t\t/* There is some overlap, cut the new buffer short, and add it*/\n\t\t\t\t\tab = this.reduceBuffer(ab, 0, b.fileStart - ab.fileStart);\n\t\t\t\t}\n\t\t\t\tLog.debug(\"MultiBufferStream\", \"Appending new buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\")\");\n\t\t\t\tthis.buffers.splice(i, 0, ab);\n\t\t\t\t/* if this new buffer is inserted in the first place in the list of the buffer, \n\t\t\t\t and the DataStream is initialized, make it the buffer used for parsing */\n\t\t\t\tif (i === 0) {\n\t\t\t\t\tthis.buffer = ab;\n\t\t\t\t}\n\t\t\t}\n\t\t\tto_add = false;\n\t\t\tbreak;\n\t\t} else if (ab.fileStart < b.fileStart + b.byteLength) {\n\t\t\t/* the new buffer overlaps its beginning with the end of the current buffer */\n\t\t\tvar offset = b.fileStart + b.byteLength - ab.fileStart;\n\t\t\tvar newLength = ab.byteLength - offset;\n\t\t\tif (newLength > 0) {\n\t\t\t\t/* the new buffer is bigger than the current overlap, drop the overlapping part and try again inserting the remaining buffer */\n\t\t\t\tab = this.reduceBuffer(ab, offset, newLength);\n\t\t\t} else {\n\t\t\t\t/* the content of the new buffer is entirely contained in the existing buffer, drop it entirely */\n\t\t\t\tto_add = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t/* if the buffer has not been added, we can add it at the end */\n\tif (to_add) {\n\t\tLog.debug(\"MultiBufferStream\", \"Appending new buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\")\");\n\t\tthis.buffers.push(ab);\n\t\t/* if this new buffer is inserted in the first place in the list of the buffer, \n\t\t and the DataStream is initialized, make it the buffer used for parsing */\n\t\tif (i === 0) {\n\t\t\tthis.buffer = ab;\n\t\t}\n\t}\n}\n\n/**\n * Displays the status of the buffers (number and used bytes)\n * @param {Object} info callback method for display\n */\nMultiBufferStream.prototype.logBufferLevel = function(info) {\n\tvar i;\n\tvar buffer;\n\tvar used, total;\n\tvar ranges = [];\n\tvar range;\n\tvar bufferedString = \"\";\n\tused = 0;\n\ttotal = 0;\n\tfor (i = 0; i < this.buffers.length; i++) {\n\t\tbuffer = this.buffers[i];\n\t\tif (i === 0) {\n\t\t\trange = {};\n\t\t\tranges.push(range);\n\t\t\trange.start = buffer.fileStart;\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t\tbufferedString += \"[\"+range.start+\"-\";\n\t\t} else if (range.end === buffer.fileStart) {\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t} else {\n\t\t\trange = {};\n\t\t\trange.start = buffer.fileStart;\n\t\t\tbufferedString += (ranges[ranges.length-1].end-1)+\"], [\"+range.start+\"-\";\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t\tranges.push(range);\n\t\t}\n\t\tused += buffer.usedBytes;\n\t\ttotal += buffer.byteLength;\n\t}\n\tif (ranges.length > 0) {\n\t\tbufferedString += (range.end-1)+\"]\";\n\t}\n\tvar log = (info ? Log.info : Log.debug)\n\tif (this.buffers.length === 0) {\n\t\tlog(\"MultiBufferStream\", \"No more buffer in memory\");\n\t} else {\n\t\tlog(\"MultiBufferStream\", \"\"+this.buffers.length+\" stored buffer(s) (\"+used+\"/\"+total+\" bytes), continuous ranges: \"+bufferedString);\n\t}\n}\n\nMultiBufferStream.prototype.cleanBuffers = function () {\n\tvar i;\n\tvar buffer;\n\tfor (i = 0; i < this.buffers.length; i++) {\n\t\tbuffer = this.buffers[i];\n\t\tif (buffer.usedBytes === buffer.byteLength) {\n\t\t\tLog.debug(\"MultiBufferStream\", \"Removing buffer #\"+i);\n\t\t\tthis.buffers.splice(i, 1);\n\t\t\ti--;\n\t\t}\n\t}\n}\n\nMultiBufferStream.prototype.mergeNextBuffer = function() {\n\tvar next_buffer;\n\tif (this.bufferIndex+1 < this.buffers.length) {\n\t\tnext_buffer = this.buffers[this.bufferIndex+1];\n\t\tif (next_buffer.fileStart === this.buffer.fileStart + this.buffer.byteLength) {\n\t\t\tvar oldLength = this.buffer.byteLength;\n\t\t\tvar oldUsedBytes = this.buffer.usedBytes;\n\t\t\tvar oldFileStart = this.buffer.fileStart;\n\t\t\tthis.buffers[this.bufferIndex] = ArrayBuffer.concat(this.buffer, next_buffer);\n\t\t\tthis.buffer = this.buffers[this.bufferIndex];\n\t\t\tthis.buffers.splice(this.bufferIndex+1, 1);\n\t\t\tthis.buffer.usedBytes = oldUsedBytes; /* TODO: should it be += ? */\n\t\t\tthis.buffer.fileStart = oldFileStart;\n\t\t\tLog.debug(\"ISOFile\", \"Concatenating buffer for box parsing (length: \"+oldLength+\"->\"+this.buffer.byteLength+\")\");\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n}\n\n\n/*************************************************************************\n Seek-related functions\n *************************************************************************/\n\n/**\n * Finds the buffer that holds the given file position\n * @param {Boolean} fromStart indicates if the search should start from the current buffer (false) \n * or from the first buffer (true)\n * @param {Number} filePosition position in the file to seek to\n * @param {Boolean} markAsUsed indicates if the bytes in between the current position and the seek position \n * should be marked as used for garbage collection\n * @return {Number} the index of the buffer holding the seeked file position, -1 if not found.\n */\nMultiBufferStream.prototype.findPosition = function(fromStart, filePosition, markAsUsed) {\n\tvar i;\n\tvar abuffer = null;\n\tvar index = -1;\n\n\t/* find the buffer with the largest position smaller than the given position */\n\tif (fromStart === true) {\n\t /* the reposition can be in the past, we need to check from the beginning of the list of buffers */\n\t\ti = 0;\n\t} else {\n\t\ti = this.bufferIndex;\n\t}\n\n\twhile (i < this.buffers.length) {\n\t\tabuffer = this.buffers[i];\n\t\tif (abuffer.fileStart <= filePosition) {\n\t\t\tindex = i;\n\t\t\tif (markAsUsed) {\n\t\t\t\tif (abuffer.fileStart + abuffer.byteLength <= filePosition) {\n\t\t\t\t\tabuffer.usedBytes = abuffer.byteLength;\t\n\t\t\t\t} else {\n\t\t\t\t\tabuffer.usedBytes = filePosition - abuffer.fileStart;\n\t\t\t\t}\t\t\n\t\t\t\tthis.logBufferLevel();\t\n\t\t\t}\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t\ti++;\n\t}\n\n\tif (index !== -1) {\n\t\tabuffer = this.buffers[index];\n\t\tif (abuffer.fileStart + abuffer.byteLength >= filePosition) {\t\t\t\n\t\t\tLog.debug(\"MultiBufferStream\", \"Found position in existing buffer #\"+index);\n\t\t\treturn index;\n\t\t} else {\n\t\t\treturn -1;\n\t\t}\n\t} else {\n\t\treturn -1;\n\t}\n}\n\n/**\n * Finds the largest file position contained in a buffer or in the next buffers if they are contiguous (no gap)\n * starting from the given buffer index or from the current buffer if the index is not given\n *\n * @param {Number} inputindex Index of the buffer to start from\n * @return {Number} The largest file position found in the buffers\n */\nMultiBufferStream.prototype.findEndContiguousBuf = function(inputindex) {\n\tvar i;\n\tvar currentBuf;\n\tvar nextBuf;\n\tvar index = (inputindex !== undefined ? inputindex : this.bufferIndex);\n\tcurrentBuf = this.buffers[index];\n\t/* find the end of the contiguous range of data */\n\tif (this.buffers.length > index+1) {\n\t\tfor (i = index+1; i < this.buffers.length; i++) {\n\t\t\tnextBuf = this.buffers[i];\n\t\t\tif (nextBuf.fileStart === currentBuf.fileStart + currentBuf.byteLength) {\n\t\t\t\tcurrentBuf = nextBuf;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t/* return the position of last byte in the file that we have */\n\treturn currentBuf.fileStart + currentBuf.byteLength;\n}\n\n/**\n * Returns the largest file position contained in the buffers, larger than the given position\n * @param {Number} pos the file position to start from\n * @return {Number} the largest position in the current buffer or in the buffer and the next contiguous \n * buffer that holds the given position\n */\nMultiBufferStream.prototype.getEndFilePositionAfter = function(pos) {\n\tvar index = this.findPosition(true, pos, false);\n\tif (index !== -1) {\n\t\treturn this.findEndContiguousBuf(index);\n\t} else {\n\t\treturn pos;\n\t}\n}\n\n/*************************************************************************\n Garbage collection related functions\n *************************************************************************/\n\n/**\n * Marks a given number of bytes as used in the current buffer for garbage collection\n * @param {Number} nbBytes \n */\nMultiBufferStream.prototype.addUsedBytes = function(nbBytes) {\n\tthis.buffer.usedBytes += nbBytes;\n\tthis.logBufferLevel();\n}\n\n/**\n * Marks the entire current buffer as used, ready for garbage collection\n */\nMultiBufferStream.prototype.setAllUsedBytes = function() {\n\tthis.buffer.usedBytes = this.buffer.byteLength;\n\tthis.logBufferLevel();\n}\n\n/*************************************************************************\n Common API between MultiBufferStream and SimpleStream\n *************************************************************************/\n\n/**\n * Tries to seek to a given file position\n * if possible, repositions the parsing from there and returns true \n * if not possible, does not change anything and returns false \n * @param {Number} filePosition position in the file to seek to\n * @param {Boolean} fromStart indicates if the search should start from the current buffer (false) \n * or from the first buffer (true)\n * @param {Boolean} markAsUsed indicates if the bytes in between the current position and the seek position \n * should be marked as used for garbage collection\n * @return {Boolean} true if the seek succeeded, false otherwise\n */\nMultiBufferStream.prototype.seek = function(filePosition, fromStart, markAsUsed) {\n\tvar index;\n\tindex = this.findPosition(fromStart, filePosition, markAsUsed);\n\tif (index !== -1) {\n\t\tthis.buffer = this.buffers[index];\n\t\tthis.bufferIndex = index;\n\t\tthis.position = filePosition - this.buffer.fileStart;\n\t\tLog.debug(\"MultiBufferStream\", \"Repositioning parser at buffer position: \"+this.position);\n\t\treturn true;\n\t} else {\n\t\tLog.debug(\"MultiBufferStream\", \"Position \"+filePosition+\" not found in buffered data\");\n\t\treturn false;\n\t}\n}\n\n/**\n * Returns the current position in the file\n * @return {Number} the position in the file\n */\nMultiBufferStream.prototype.getPosition = function() {\n\tif (this.bufferIndex === -1 || this.buffers[this.bufferIndex] === null) {\n\t\tthrow \"Error accessing position in the MultiBufferStream\";\n\t}\n\treturn this.buffers[this.bufferIndex].fileStart+this.position;\n}\n\n/**\n * Returns the length of the current buffer\n * @return {Number} the length of the current buffer\n */\nMultiBufferStream.prototype.getLength = function() {\n\treturn this.byteLength;\n}\n\nMultiBufferStream.prototype.getEndPosition = function() {\n\tif (this.bufferIndex === -1 || this.buffers[this.bufferIndex] === null) {\n\t\tthrow \"Error accessing position in the MultiBufferStream\";\n\t}\n\treturn this.buffers[this.bufferIndex].fileStart+this.byteLength;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.MultiBufferStream = MultiBufferStream;\n}// file:src/descriptor.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar MPEG4DescriptorParser = function () {\n\tvar ES_DescrTag \t\t\t= 0x03;\n\tvar DecoderConfigDescrTag \t= 0x04;\n\tvar DecSpecificInfoTag \t\t= 0x05;\n\tvar SLConfigDescrTag \t\t= 0x06;\n\n\tvar descTagToName = [];\n\tdescTagToName[ES_DescrTag] \t\t\t\t= \"ES_Descriptor\";\n\tdescTagToName[DecoderConfigDescrTag] \t= \"DecoderConfigDescriptor\";\n\tdescTagToName[DecSpecificInfoTag] \t\t= \"DecoderSpecificInfo\";\n\tdescTagToName[SLConfigDescrTag] \t\t= \"SLConfigDescriptor\";\n\n\tthis.getDescriptorName = function(tag) {\n\t\treturn descTagToName[tag];\n\t}\n\n\tvar that = this;\n\tvar classes = {};\n\n\tthis.parseOneDescriptor = function (stream) {\n\t\tvar hdrSize = 0;\n\t\tvar size = 0;\n\t\tvar tag;\n\t\tvar desc;\n\t\tvar byteRead;\n\t\ttag = stream.readUint8();\n\t\thdrSize++;\n\t\tbyteRead = stream.readUint8();\n\t\thdrSize++;\n\t\twhile (byteRead & 0x80) {\n\t\t\tsize = (size << 7) + (byteRead & 0x7F);\n\t\t\tbyteRead = stream.readUint8();\n\t\t\thdrSize++;\n\t\t}\n\t\tsize = (size << 7) + (byteRead & 0x7F);\n\t\tLog.debug(\"MPEG4DescriptorParser\", \"Found \"+(descTagToName[tag] || \"Descriptor \"+tag)+\", size \"+size+\" at position \"+stream.getPosition());\n\t\tif (descTagToName[tag]) {\n\t\t\tdesc = new classes[descTagToName[tag]](size);\n\t\t} else {\n\t\t\tdesc = new classes.Descriptor(size);\n\t\t}\n\t\tdesc.parse(stream);\n\t\treturn desc;\n\t}\n\n\tclasses.Descriptor = function(_tag, _size) {\n\t\tthis.tag = _tag;\n\t\tthis.size = _size;\n\t\tthis.descs = [];\n\t}\n\n\tclasses.Descriptor.prototype.parse = function (stream) {\n\t\tthis.data = stream.readUint8Array(this.size);\n\t}\n\n\tclasses.Descriptor.prototype.findDescriptor = function (tag) {\n\t\tfor (var i = 0; i < this.descs.length; i++) {\n\t\t\tif (this.descs[i].tag == tag) {\n\t\t\t\treturn this.descs[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tclasses.Descriptor.prototype.parseRemainingDescriptors = function (stream) {\n\t\tvar start = stream.position;\n\t\twhile (stream.position < start+this.size) {\n\t\t\tvar desc = that.parseOneDescriptor(stream);\n\t\t\tthis.descs.push(desc);\n\t\t}\n\t}\n\n\tclasses.ES_Descriptor = function (size) {\n\t\tclasses.Descriptor.call(this, ES_DescrTag, size);\n\t}\n\n\tclasses.ES_Descriptor.prototype = new classes.Descriptor();\n\n\tclasses.ES_Descriptor.prototype.parse = function(stream) {\n\t\tthis.ES_ID = stream.readUint16();\n\t\tthis.flags = stream.readUint8();\n\t\tthis.size -= 3;\n\t\tif (this.flags & 0x80) {\n\t\t\tthis.dependsOn_ES_ID = stream.readUint16();\n\t\t\tthis.size -= 2;\n\t\t} else {\n\t\t\tthis.dependsOn_ES_ID = 0;\n\t\t}\n\t\tif (this.flags & 0x40) {\n\t\t\tvar l = stream.readUint8();\n\t\t\tthis.URL = stream.readString(l);\n\t\t\tthis.size -= l+1;\n\t\t} else {\n\t\t\tthis.URL = \"\";\n\t\t}\n\t\tif (this.flags & 0x20) {\n\t\t\tthis.OCR_ES_ID = stream.readUint16();\n\t\t\tthis.size -= 2;\n\t\t} else {\n\t\t\tthis.OCR_ES_ID = 0;\n\t\t}\n\t\tthis.parseRemainingDescriptors(stream);\n\t}\n\n\tclasses.ES_Descriptor.prototype.getOTI = function(stream) {\n\t\tvar dcd = this.findDescriptor(DecoderConfigDescrTag);\n\t\tif (dcd) {\n\t\t\treturn dcd.oti;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tclasses.ES_Descriptor.prototype.getAudioConfig = function(stream) {\n\t\tvar dcd = this.findDescriptor(DecoderConfigDescrTag);\n\t\tif (!dcd) return null;\n\t\tvar dsi = dcd.findDescriptor(DecSpecificInfoTag);\n\t\tif (dsi && dsi.data) {\n\t\t\tvar audioObjectType = (dsi.data[0]& 0xF8) >> 3;\n\t\t\tif (audioObjectType === 31 && dsi.data.length >= 2) {\n\t\t\t\taudioObjectType = 32 + ((dsi.data[0] & 0x7) << 3) + ((dsi.data[1] & 0xE0) >> 5);\n\t\t\t}\n\t\t\treturn audioObjectType;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tclasses.DecoderConfigDescriptor = function (size) {\n\t\tclasses.Descriptor.call(this, DecoderConfigDescrTag, size);\n\t}\n\tclasses.DecoderConfigDescriptor.prototype = new classes.Descriptor();\n\n\tclasses.DecoderConfigDescriptor.prototype.parse = function(stream) {\n\t\tthis.oti = stream.readUint8();\n\t\tthis.streamType = stream.readUint8();\n\t\tthis.upStream = ((this.streamType >> 1) & 1) !== 0;\n\t\tthis.streamType = this.streamType >>> 2;\n\t\tthis.bufferSize = stream.readUint24();\n\t\tthis.maxBitrate = stream.readUint32();\n\t\tthis.avgBitrate = stream.readUint32();\n\t\tthis.size -= 13;\n\t\tthis.parseRemainingDescriptors(stream);\n\t}\n\n\tclasses.DecoderSpecificInfo = function (size) {\n\t\tclasses.Descriptor.call(this, DecSpecificInfoTag, size);\n\t}\n\tclasses.DecoderSpecificInfo.prototype = new classes.Descriptor();\n\n\tclasses.SLConfigDescriptor = function (size) {\n\t\tclasses.Descriptor.call(this, SLConfigDescrTag, size);\n\t}\n\tclasses.SLConfigDescriptor.prototype = new classes.Descriptor();\n\n\treturn this;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.MPEG4DescriptorParser = MPEG4DescriptorParser;\n}\n// file:src/box.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar BoxParser = {\n\tERR_INVALID_DATA : -1,\n\tERR_NOT_ENOUGH_DATA : 0,\n\tOK : 1,\n\n\t// Boxes to be created with default parsing\n\tBASIC_BOXES: [\n\t\t{type: \"mdat\", name: \"MediaDataBox\"},\n\t\t{type: \"idat\", name: \"ItemDataBox\"},\n\t\t{type: \"free\", name: \"FreeSpaceBox\"},\n\t\t{type: \"skip\", name: \"FreeSpaceBox\"},\n\t\t{type: \"meco\", name: \"AdditionalMetadataContainerBox\"},\n\t\t{type: \"strk\", name: \"SubTrackBox\"}\n\t],\n\tFULL_BOXES: [\n\t\t{type: \"hmhd\", name: \"HintMediaHeaderBox\"},\n\t\t{type: \"nmhd\", name: \"NullMediaHeaderBox\"},\n\t\t{type: \"iods\", name: \"ObjectDescriptorBox\"},\n\t\t{type: \"xml \", name: \"XMLBox\"},\n\t\t{type: \"bxml\", name: \"BinaryXMLBox\"},\n\t\t{type: \"ipro\", name: \"ItemProtectionBox\"},\n\t\t{type: \"mere\", name: \"MetaboxRelationBox\"}\n\t],\n\tCONTAINER_BOXES: [\n\t\t[{type: \"moov\", name: \"CompressedMovieBox\"}, [\"trak\", \"pssh\"]],\n\t\t[{type: \"trak\", name: \"TrackBox\"}],\n\t\t[{type: \"edts\", name: \"EditBox\"}],\n\t\t[{type: \"mdia\", name: \"MediaBox\"}],\n\t\t[{type: \"minf\", name: \"MediaInformationBox\"}],\n\t\t[{type: \"dinf\", name: \"DataInformationBox\"}],\n\t\t[{type: \"stbl\", name: \"SampleTableBox\"}, [\"sgpd\", \"sbgp\"]],\n\t\t[{type: \"mvex\", name: \"MovieExtendsBox\"}, [\"trex\"]],\n\t\t[{type: \"moof\", name: \"CompressedMovieFragmentBox\"}, [\"traf\"]],\n\t\t[{type: \"traf\", name: \"TrackFragmentBox\"}, [\"trun\", \"sgpd\", \"sbgp\"]],\n\t\t[{type: \"vttc\", name: \"VTTCueBox\"}],\n\t\t[{type: \"tref\", name: \"TrackReferenceBox\"}],\n\t\t[{type: \"iref\", name: \"ItemReferenceBox\"}],\n\t\t[{type: \"mfra\", name: \"MovieFragmentRandomAccessBox\"}, [\"tfra\"]],\n\t\t[{type: \"meco\", name: \"AdditionalMetadataContainerBox\"}],\n\t\t[{type: \"hnti\", name: \"trackhintinformation\"}],\n\t\t[{type: \"hinf\", name: \"hintstatisticsbox\"}],\n\t\t[{type: \"strk\", name: \"SubTrackBox\"}],\n\t\t[{type: \"strd\", name: \"SubTrackDefinitionBox\"}],\n\t\t[{type: \"sinf\", name: \"ProtectionSchemeInfoBox\"}],\n\t\t[{type: \"rinf\", name: \"RestrictedSchemeInfoBox\"}],\n\t\t[{type: \"schi\", name: \"SchemeInformationBox\"}],\n\t\t[{type: \"trgr\", name: \"TrackGroupBox\"}],\n\t\t[{type: \"udta\", name: \"UserDataBox\"}, [\"kind\"]],\n\t\t[{type: \"iprp\", name: \"ItemPropertiesBox\"}, [\"ipma\"]],\n\t\t[{type: \"ipco\", name: \"ItemPropertyContainerBox\"}],\n\t\t[{type: \"grpl\", name: \"GroupsListBox\"}],\n\t\t[{type: \"j2kH\", name: \"J2KHeaderInfoBox\"}],\n\t\t[{type: \"etyp\", name: \"ExtendedTypeBox\"}, [\"tyco\"]]\n\t],\n\t// Boxes effectively created\n\tboxCodes : [],\n\tfullBoxCodes : [],\n\tcontainerBoxCodes : [],\n\tsampleEntryCodes : {},\n\tsampleGroupEntryCodes: [],\n\ttrackGroupTypes: [],\n\tUUIDBoxes: {},\n\tUUIDs: [],\n\tinitialize: function() {\n\t\tBoxParser.FullBox.prototype = new BoxParser.Box();\n\t\tBoxParser.ContainerBox.prototype = new BoxParser.Box();\n\t\tBoxParser.SampleEntry.prototype = new BoxParser.Box();\n\t\tBoxParser.TrackGroupTypeBox.prototype = new BoxParser.FullBox();\n\n\t\t/* creating constructors for simple boxes */\n\t\tBoxParser.BASIC_BOXES.forEach(function(box) {\n\t\t\tBoxParser.createBoxCtor(box.type, box.name)\n\t\t});\n\t\tBoxParser.FULL_BOXES.forEach(function(box) {\n\t\t\tBoxParser.createFullBoxCtor(box.type, box.name);\n\t\t});\n\t\tBoxParser.CONTAINER_BOXES.forEach(function(boxes) {\n\t\t\tBoxParser.createContainerBoxCtor(boxes[0].type, boxes[0].name, null, boxes[1]);\n\t\t});\n\t},\n\tBox: function(_type, _size, _name, _uuid) {\n\t\tthis.type = _type;\n\t\tthis.box_name = _name;\n\t\tthis.size = _size;\n\t\tthis.uuid = _uuid;\n\t},\n\tFullBox: function(type, size, name, uuid) {\n\t\tBoxParser.Box.call(this, type, size, name, uuid);\n\t\tthis.flags = 0;\n\t\tthis.version = 0;\n\t},\n\tContainerBox: function(type, size, name, uuid) {\n\t\tBoxParser.Box.call(this, type, size, name, uuid);\n\t\tthis.boxes = [];\n\t},\n\tSampleEntry: function(type, size, hdr_size, start) {\n\t\tBoxParser.ContainerBox.call(this, type, size);\n\t\tthis.hdr_size = hdr_size;\n\t\tthis.start = start;\n\t},\n\tSampleGroupEntry: function(type) {\n\t\tthis.grouping_type = type;\n\t},\n\tTrackGroupTypeBox: function(type, size) {\n\t\tBoxParser.FullBox.call(this, type, size);\n\t},\n\tcreateBoxCtor: function(type, name, parseMethod){\n\t\tBoxParser.boxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.Box.call(this, type, size, name);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.Box();\n\t\tif (parseMethod) BoxParser[type+\"Box\"].prototype.parse = parseMethod;\n\t},\n\tcreateFullBoxCtor: function(type, name, parseMethod) {\n\t\t//BoxParser.fullBoxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.FullBox.call(this, type, size, name);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.FullBox();\n\t\tBoxParser[type+\"Box\"].prototype.parse = function(stream) {\n\t\t\tthis.parseFullHeader(stream);\n\t\t\tif (parseMethod) {\n\t\t\t\tparseMethod.call(this, stream);\n\t\t\t}\n\t\t};\n\t},\n\taddSubBoxArrays: function(subBoxNames) {\n\t\tif (subBoxNames) {\n\t\t\tthis.subBoxNames = subBoxNames;\n\t\t\tvar nbSubBoxes = subBoxNames.length;\n\t\t\tfor (var k = 0; k<nbSubBoxes; k++) {\n\t\t\t\tthis[subBoxNames[k]+\"s\"] = [];\n\t\t\t}\n\t\t}\n\t},\n\tcreateContainerBoxCtor: function(type, name, parseMethod, subBoxNames) {\n\t\t//BoxParser.containerBoxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.ContainerBox.call(this, type, size, name);\n\t\t\tBoxParser.addSubBoxArrays.call(this, subBoxNames);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.ContainerBox();\n\t\tif (parseMethod) BoxParser[type+\"Box\"].prototype.parse = parseMethod;\n\t},\n\tcreateMediaSampleEntryCtor: function(mediaType, parseMethod, subBoxNames) {\n\t\tBoxParser.sampleEntryCodes[mediaType] = [];\n\t\tBoxParser[mediaType+\"SampleEntry\"] = function(type, size) {\n\t\t\tBoxParser.SampleEntry.call(this, type, size);\n\t\t\tBoxParser.addSubBoxArrays.call(this, subBoxNames);\n\t\t};\n\t\tBoxParser[mediaType+\"SampleEntry\"].prototype = new BoxParser.SampleEntry();\n\t\tif (parseMethod) BoxParser[mediaType+\"SampleEntry\"].prototype .parse = parseMethod;\n\t},\n\tcreateSampleEntryCtor: function(mediaType, type, parseMethod, subBoxNames) {\n\t\tBoxParser.sampleEntryCodes[mediaType].push(type);\n\t\tBoxParser[type+\"SampleEntry\"] = function(size) {\n\t\t\tBoxParser[mediaType+\"SampleEntry\"].call(this, type, size);\n\t\t\tBoxParser.addSubBoxArrays.call(this, subBoxNames);\n\t\t};\n\t\tBoxParser[type+\"SampleEntry\"].prototype = new BoxParser[mediaType+\"SampleEntry\"]();\n\t\tif (parseMethod) BoxParser[type+\"SampleEntry\"].prototype.parse = parseMethod;\n\t},\n\tcreateEncryptedSampleEntryCtor: function(mediaType, type, parseMethod) {\n\t\tBoxParser.createSampleEntryCtor.call(this, mediaType, type, parseMethod, [\"sinf\"]);\n\t},\n\tcreateSampleGroupCtor: function(type, parseMethod) {\n\t\t//BoxParser.sampleGroupEntryCodes.push(type);\n\t\tBoxParser[type+\"SampleGroupEntry\"] = function(size) {\n\t\t\tBoxParser.SampleGroupEntry.call(this, type, size);\n\t\t}\n\t\tBoxParser[type+\"SampleGroupEntry\"].prototype = new BoxParser.SampleGroupEntry();\n\t\tif (parseMethod) BoxParser[type+\"SampleGroupEntry\"].prototype.parse = parseMethod;\n\t},\n\tcreateTrackGroupCtor: function(type, parseMethod) {\n\t\t//BoxParser.trackGroupTypes.push(type);\n\t\tBoxParser[type+\"TrackGroupTypeBox\"] = function(size) {\n\t\t\tBoxParser.TrackGroupTypeBox.call(this, type, size);\n\t\t}\n\t\tBoxParser[type+\"TrackGroupTypeBox\"].prototype = new BoxParser.TrackGroupTypeBox();\n\t\tif (parseMethod) BoxParser[type+\"TrackGroupTypeBox\"].prototype.parse = parseMethod;\n\t},\n\tcreateUUIDBox: function(uuid, name, isFullBox, isContainerBox, parseMethod) {\n\t\tBoxParser.UUIDs.push(uuid);\n\t\tBoxParser.UUIDBoxes[uuid] = function(size) {\n\t\t\tif (isFullBox) {\n\t\t\t\tBoxParser.FullBox.call(this, \"uuid\", size, name, uuid);\n\t\t\t} else {\n\t\t\t\tif (isContainerBox) {\n\t\t\t\t\tBoxParser.ContainerBox.call(this, \"uuid\", size, name, uuid);\n\t\t\t\t} else {\n\t\t\t\t\tBoxParser.Box.call(this, \"uuid\", size, name, uuid);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tBoxParser.UUIDBoxes[uuid].prototype = (isFullBox ? new BoxParser.FullBox() : (isContainerBox ? new BoxParser.ContainerBox() : new BoxParser.Box()));\n\t\tif (parseMethod) {\n\t\t\tif (isFullBox) {\n\t\t\t\tBoxParser.UUIDBoxes[uuid].prototype.parse = function(stream) {\n\t\t\t\t\tthis.parseFullHeader(stream);\n\t\t\t\t\tif (parseMethod) {\n\t\t\t\t\t\tparseMethod.call(this, stream);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tBoxParser.UUIDBoxes[uuid].prototype.parse = parseMethod;\n\t\t\t}\n\t\t}\n\t}\n}\n\nBoxParser.initialize();\n\nBoxParser.TKHD_FLAG_ENABLED = 0x000001;\nBoxParser.TKHD_FLAG_IN_MOVIE = 0x000002;\nBoxParser.TKHD_FLAG_IN_PREVIEW = 0x000004;\n\nBoxParser.TFHD_FLAG_BASE_DATA_OFFSET\t= 0x01;\nBoxParser.TFHD_FLAG_SAMPLE_DESC\t\t\t= 0x02;\nBoxParser.TFHD_FLAG_SAMPLE_DUR\t\t\t= 0x08;\nBoxParser.TFHD_FLAG_SAMPLE_SIZE\t\t\t= 0x10;\nBoxParser.TFHD_FLAG_SAMPLE_FLAGS\t\t= 0x20;\nBoxParser.TFHD_FLAG_DUR_EMPTY\t\t\t= 0x10000;\nBoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF= 0x20000;\n\nBoxParser.TRUN_FLAGS_DATA_OFFSET= 0x01;\nBoxParser.TRUN_FLAGS_FIRST_FLAG\t= 0x04;\nBoxParser.TRUN_FLAGS_DURATION\t= 0x100;\nBoxParser.TRUN_FLAGS_SIZE\t\t= 0x200;\nBoxParser.TRUN_FLAGS_FLAGS\t\t= 0x400;\nBoxParser.TRUN_FLAGS_CTS_OFFSET\t= 0x800;\n\nBoxParser.Box.prototype.add = function(name) {\n\treturn this.addBox(new BoxParser[name+\"Box\"]());\n}\n\nBoxParser.Box.prototype.addBox = function(box) {\n\tthis.boxes.push(box);\n\tif (this[box.type+\"s\"]) {\n\t\tthis[box.type+\"s\"].push(box);\n\t} else {\n\t\tthis[box.type] = box;\n\t}\n\treturn box;\n}\n\nBoxParser.Box.prototype.set = function(prop, value) {\n\tthis[prop] = value;\n\treturn this;\n}\n\nBoxParser.Box.prototype.addEntry = function(value, _prop) {\n\tvar prop = _prop || \"entries\";\n\tif (!this[prop]) {\n\t\tthis[prop] = [];\n\t}\n\tthis[prop].push(value);\n\treturn this;\n}\n\nif (typeof exports !== \"undefined\") {\n\texports.BoxParser = BoxParser;\n}\n// file:src/box-parse.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.parseUUID = function(stream) {\n\treturn BoxParser.parseHex16(stream);\n}\n\nBoxParser.parseHex16 = function(stream) {\n\tvar hex16 = \"\"\n\tfor (var i = 0; i <16; i++) {\n\t\tvar hex = stream.readUint8().toString(16);\n\t\thex16 += (hex.length === 1 ? \"0\"+hex : hex);\n\t}\n\treturn hex16;\n}\n\nBoxParser.parseOneBox = function(stream, headerOnly, parentSize) {\n\tvar box;\n\tvar start = stream.getPosition();\n\tvar hdr_size = 0;\n\tvar diff;\n\tvar uuid;\n\tif (stream.getEndPosition() - start < 8) {\n\t\tLog.debug(\"BoxParser\", \"Not enough data in stream to parse the type and size of the box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t}\n\tif (parentSize && parentSize < 8) {\n\t\tLog.debug(\"BoxParser\", \"Not enough bytes left in the parent box to parse a new box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t}\n\tvar size = stream.readUint32();\n\tvar type = stream.readString(4);\n\tvar box_type = type;\n\tLog.debug(\"BoxParser\", \"Found box of type '\"+type+\"' and size \"+size+\" at position \"+start);\n\thdr_size = 8;\n\tif (type == \"uuid\") {\n\t\tif ((stream.getEndPosition() - stream.getPosition() < 16) || (parentSize -hdr_size < 16)) {\n\t\t\tstream.seek(start);\n\t\t\tLog.debug(\"BoxParser\", \"Not enough bytes left in the parent box to parse a UUID box\");\n\t\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t\t}\n\t\tuuid = BoxParser.parseUUID(stream);\n\t\thdr_size += 16;\n\t\tbox_type = uuid;\n\t}\n\tif (size == 1) {\n\t\tif ((stream.getEndPosition() - stream.getPosition() < 8) || (parentSize && (parentSize - hdr_size) < 8)) {\n\t\t\tstream.seek(start);\n\t\t\tLog.warn(\"BoxParser\", \"Not enough data in stream to parse the extended size of the \\\"\"+type+\"\\\" box\");\n\t\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t\t}\n\t\tsize = stream.readUint64();\n\t\thdr_size += 8;\n\t} else if (size === 0) {\n\t\t/* box extends till the end of file or invalid file */\n\t\tif (parentSize) {\n\t\t\tsize = parentSize;\n\t\t} else {\n\t\t\t/* box extends till the end of file */\n\t\t\tif (type !== \"mdat\") {\n\t\t\t\tLog.error(\"BoxParser\", \"Unlimited box size not supported for type: '\"+type+\"'\");\n\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\treturn { code: BoxParser.OK, box: box, size: box.size };\n\t\t\t}\n\t\t}\n\t}\n\tif (size !== 0 && size < hdr_size) {\n\t\tLog.error(\"BoxParser\", \"Box of type \"+type+\" has an invalid size \"+size+\" (too small to be a box)\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (size !== 0 && parentSize && size > parentSize) {\n\t\tLog.error(\"BoxParser\", \"Box of type '\"+type+\"' has a size \"+size+\" greater than its container size \"+parentSize);\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (size !== 0 && start + size > stream.getEndPosition()) {\n\t\tstream.seek(start);\n\t\tLog.info(\"BoxParser\", \"Not enough data in stream to parse the entire '\"+type+\"' box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (headerOnly) {\n\t\treturn { code: BoxParser.OK, type: type, size: size, hdr_size: hdr_size, start: start };\n\t} else {\n\t\tif (BoxParser[type+\"Box\"]) {\n\t\t\tbox = new BoxParser[type+\"Box\"](size);\n\t\t} else {\n\t\t\tif (type !== \"uuid\") {\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown box type: '\"+type+\"'\");\n\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\tbox.has_unparsed_data = true;\n\t\t\t} else {\n\t\t\t\tif (BoxParser.UUIDBoxes[uuid]) {\n\t\t\t\t\tbox = new BoxParser.UUIDBoxes[uuid](size);\n\t\t\t\t} else {\n\t\t\t\t\tLog.warn(\"BoxParser\", \"Unknown uuid type: '\"+uuid+\"'\");\n\t\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\t\tbox.uuid = uuid;\n\t\t\t\t\tbox.has_unparsed_data = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tbox.hdr_size = hdr_size;\n\t/* recording the position of the box in the input stream */\n\tbox.start = start;\n\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\tLog.info(\"BoxParser\", \"'\"+box_type+\"' box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\tbox.parseDataAndRewind(stream);\n\t}\n\tbox.parse(stream);\n\tdiff = stream.getPosition() - (box.start+box.size);\n\tif (diff < 0) {\n\t\tLog.warn(\"BoxParser\", \"Parsing of box '\"+box_type+\"' did not read the entire indicated box data size (missing \"+(-diff)+\" bytes), seeking forward\");\n\t\tstream.seek(box.start+box.size);\n\t} else if (diff > 0) {\n\t\tLog.error(\"BoxParser\", \"Parsing of box '\"+box_type+\"' read \"+diff+\" more bytes than the indicated box data size, seeking backwards\");\n\t\tif (box.size !== 0) stream.seek(box.start+box.size);\n\t}\n\treturn { code: BoxParser.OK, box: box, size: box.size };\n}\n\nBoxParser.Box.prototype.parse = function(stream) {\n\tif (this.type != \"mdat\") {\n\t\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t} else {\n\t\tif (this.size === 0) {\n\t\t\tstream.seek(stream.getEndPosition());\n\t\t} else {\n\t\t\tstream.seek(this.start+this.size);\n\t\t}\n\t}\n}\n\n/* Used to parse a box without consuming its data, to allow detailled parsing\n Useful for boxes for which a write method is not yet implemented */\nBoxParser.Box.prototype.parseDataAndRewind = function(stream) {\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.FullBox.prototype.parseDataAndRewind = function(stream) {\n\tthis.parseFullHeader(stream);\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t// restore the header size as if the full header had not been parsed\n\tthis.hdr_size -= 4;\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.FullBox.prototype.parseFullHeader = function (stream) {\n\tthis.version = stream.readUint8();\n\tthis.flags = stream.readUint24();\n\tthis.hdr_size += 4;\n}\n\nBoxParser.FullBox.prototype.parse = function (stream) {\n\tthis.parseFullHeader(stream);\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n}\n\nBoxParser.ContainerBox.prototype.parse = function(stream) {\n\tvar ret;\n\tvar box;\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\t/* store the box in the 'boxes' array to preserve box order (for offset) but also store box in a property for more direct access */\n\t\t\tthis.boxes.push(box);\n\t\t\tif (this.subBoxNames && this.subBoxNames.indexOf(box.type) != -1) {\n\t\t\t\tthis[this.subBoxNames[this.subBoxNames.indexOf(box.type)]+\"s\"].push(box);\n\t\t\t} else {\n\t\t\t\tvar box_type = box.type !== \"uuid\" ? box.type : box.uuid;\n\t\t\t\tif (this[box_type]) {\n\t\t\t\t\tLog.warn(\"Box of type \"+box_type+\" already stored in field of this type\");\n\t\t\t\t} else {\n\t\t\t\t\tthis[box_type] = box;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\nBoxParser.Box.prototype.parseLanguage = function(stream) {\n\tthis.language = stream.readUint16();\n\tvar chars = [];\n\tchars[0] = (this.language>>10)&0x1F;\n\tchars[1] = (this.language>>5)&0x1F;\n\tchars[2] = (this.language)&0x1F;\n\tthis.languageString = String.fromCharCode(chars[0]+0x60, chars[1]+0x60, chars[2]+0x60);\n}\n\n// file:src/parsing/sampleentries/sampleentry.js\nBoxParser.SAMPLE_ENTRY_TYPE_VISUAL \t\t= \"Visual\";\nBoxParser.SAMPLE_ENTRY_TYPE_AUDIO \t\t= \"Audio\";\nBoxParser.SAMPLE_ENTRY_TYPE_HINT \t\t= \"Hint\";\nBoxParser.SAMPLE_ENTRY_TYPE_METADATA \t= \"Metadata\";\nBoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE \t= \"Subtitle\";\nBoxParser.SAMPLE_ENTRY_TYPE_SYSTEM \t\t= \"System\";\nBoxParser.SAMPLE_ENTRY_TYPE_TEXT \t\t= \"Text\";\n\nBoxParser.SampleEntry.prototype.parseHeader = function(stream) {\n\tstream.readUint8Array(6);\n\tthis.data_reference_index = stream.readUint16();\n\tthis.hdr_size += 8;\n}\n\nBoxParser.SampleEntry.prototype.parse = function(stream) {\n\tthis.parseHeader(stream);\n\tthis.data = stream.readUint8Array(this.size - this.hdr_size);\n}\n\nBoxParser.SampleEntry.prototype.parseDataAndRewind = function(stream) {\n\tthis.parseHeader(stream);\n\tthis.data = stream.readUint8Array(this.size - this.hdr_size);\n\t// restore the header size as if the sample entry header had not been parsed\n\tthis.hdr_size -= 8;\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.SampleEntry.prototype.parseFooter = function(stream) {\n\tBoxParser.ContainerBox.prototype.parse.call(this, stream);\n}\n\n// Base SampleEntry types with default parsing\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_HINT);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_TEXT);\n\n//Base SampleEntry types for Audio and Video with specific parsing\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, function(stream) {\n\tvar compressorname_length;\n\tthis.parseHeader(stream);\n\tstream.readUint16();\n\tstream.readUint16();\n\tstream.readUint32Array(3);\n\tthis.width = stream.readUint16();\n\tthis.height = stream.readUint16();\n\tthis.horizresolution = stream.readUint32();\n\tthis.vertresolution = stream.readUint32();\n\tstream.readUint32();\n\tthis.frame_count = stream.readUint16();\n\tcompressorname_length = Math.min(31, stream.readUint8());\n\tthis.compressorname = stream.readString(compressorname_length);\n\tif (compressorname_length < 31) {\n\t\tstream.readString(31 - compressorname_length);\n\t}\n\tthis.depth = stream.readUint16();\n\tstream.readUint16();\n\tthis.parseFooter(stream);\n});\n\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, function(stream) {\n\tthis.parseHeader(stream);\n\tstream.readUint32Array(2);\n\tthis.channel_count = stream.readUint16();\n\tthis.samplesize = stream.readUint16();\n\tstream.readUint16();\n\tstream.readUint16();\n\tthis.samplerate = (stream.readUint32()/(1<<16));\n\tthis.parseFooter(stream);\n});\n\n// Sample entries inheriting from Audio and Video\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc4\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"av01\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dav1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hvc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hev1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hvt1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"lhe1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dvh1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dvhe\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvi1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvs1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvcN\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vp08\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vp09\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avs3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"j2ki\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"mjp2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"mjpg\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,\t\"uncv\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mp4a\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ac-3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ac-4\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ec-3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"Opus\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mha1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mha2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mhm1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mhm2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"fLaC\");\n\n// Encrypted sample entries\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \t\"encv\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"enca\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \t\"encu\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM, \t\"encs\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_TEXT, \t\t\"enct\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \t\"encm\");\n// file:src/parsing/a1lx.js\nBoxParser.createBoxCtor(\"a1lx\", \"AV1LayeredImageIndexingProperty\", function(stream) {\n\tvar large_size = stream.readUint8() & 1;\n\tvar FieldLength = ((large_size & 1) + 1) * 16;\n\tthis.layer_size = [];\n\tfor (var i = 0; i < 3; i++) {\n\t\tif (FieldLength == 16) {\n\t\t\tthis.layer_size[i] = stream.readUint16();\n\t\t} else {\n\t\t\tthis.layer_size[i] = stream.readUint32();\n\t\t}\n\t}\n});// file:src/parsing/a1op.js\nBoxParser.createBoxCtor(\"a1op\", \"OperatingPointSelectorProperty\", function(stream) {\n\tthis.op_index = stream.readUint8();\n});// file:src/parsing/auxC.js\nBoxParser.createFullBoxCtor(\"auxC\", \"AuxiliaryTypeProperty\", function(stream) {\n\tthis.aux_type = stream.readCString();\n\tvar aux_subtype_length = this.size - this.hdr_size - (this.aux_type.length + 1);\n\tthis.aux_subtype = stream.readUint8Array(aux_subtype_length);\n});// file:src/parsing/av1C.js\nBoxParser.createBoxCtor(\"av1C\", \"AV1CodecConfigurationBox\", function(stream) {\n\tvar i;\n\tvar toparse;\n\tvar tmp = stream.readUint8();\n\tif ((tmp >> 7 & 0x1) !== 1) {\n\t\tLog.error(\"av1C marker problem\");\n\t\treturn;\n\t}\n\tthis.version = tmp & 0x7F;\n\tif (this.version !== 1) {\n\t\tLog.error(\"av1C version \"+this.version+\" not supported\");\n\t\treturn;\n\t}\n\ttmp = stream.readUint8();\n\tthis.seq_profile = (tmp >> 5) & 0x7;\n\tthis.seq_level_idx_0 = tmp & 0x1F;\n\ttmp = stream.readUint8();\n\tthis.seq_tier_0 = (tmp >> 7) & 0x1;\n\tthis.high_bitdepth = (tmp >> 6) & 0x1;\n\tthis.twelve_bit = (tmp >> 5) & 0x1;\n\tthis.monochrome = (tmp >> 4) & 0x1;\n\tthis.chroma_subsampling_x = (tmp >> 3) & 0x1;\n\tthis.chroma_subsampling_y = (tmp >> 2) & 0x1;\n\tthis.chroma_sample_position = (tmp & 0x3);\n\ttmp = stream.readUint8();\n\tthis.reserved_1 = (tmp >> 5) & 0x7;\n\tif (this.reserved_1 !== 0) {\n\t\tLog.error(\"av1C reserved_1 parsing problem\");\n\t\treturn;\n\t}\n\tthis.initial_presentation_delay_present = (tmp >> 4) & 0x1;\n\tif (this.initial_presentation_delay_present === 1) {\n\t\tthis.initial_presentation_delay_minus_one = (tmp & 0xF);\n\t} else {\n\t\tthis.reserved_2 = (tmp & 0xF);\n\t\tif (this.reserved_2 !== 0) {\n\t\t\tLog.error(\"av1C reserved_2 parsing problem\");\n\t\t\treturn;\n\t\t}\n\t}\n\n\tvar configOBUs_length = this.size - this.hdr_size - 4;\n\tthis.configOBUs = stream.readUint8Array(configOBUs_length);\n});\n\n// file:src/parsing/avcC.js\nfunction printPS(ps) {\n\tvar str = \"<table class='inner-table'>\";\n\tstr += \"<thead><tr><th>length</th><th>nalu_data</th></tr></thead>\";\n\tstr += \"<tbody>\";\n\n\tfor (var i=0; i < ps.length; i++) {\n\t\tvar nalu = ps[i];\n\t\tstr += \"<tr>\";\n\t\tstr += \"<td>\"+nalu.length+\"</td>\";\n\t\tstr += \"<td>\";\n\t\tstr += nalu.nalu.reduce(function(str, byte) {\n\t\t\treturn str + byte.toString(16).padStart(2, \"0\");\n\t\t}, \"0x\");\n\t\tstr += \"</td></tr>\";\n\t}\n\tstr += \"</tbody></table>\";\n\treturn str;\n}\n\nBoxParser.createBoxCtor(\"avcC\", \"AVCConfigurationBox\", function(stream) {\n\tvar i;\n\tvar toparse;\n\tthis.configurationVersion = stream.readUint8();\n\tthis.AVCProfileIndication = stream.readUint8();\n\tthis.profile_compatibility = stream.readUint8();\n\tthis.AVCLevelIndication = stream.readUint8();\n\tthis.lengthSizeMinusOne = (stream.readUint8() & 0x3);\n\tthis.nb_SPS_nalus = (stream.readUint8() & 0x1F);\n\ttoparse = this.size - this.hdr_size - 6;\n\tthis.SPS = [];\n\tthis.SPS.toString = function () {\n\t\treturn printPS(this);\n\t}\n\tfor (i = 0; i < this.nb_SPS_nalus; i++) {\n\t\tthis.SPS[i] = {};\n\t\tthis.SPS[i].length = stream.readUint16();\n\t\tthis.SPS[i].nalu = stream.readUint8Array(this.SPS[i].length);\n\t\ttoparse -= 2+this.SPS[i].length;\n\t}\n\tthis.nb_PPS_nalus = stream.readUint8();\n\ttoparse--;\n\tthis.PPS = [];\n\tthis.PPS.toString = function () {\n\t\treturn printPS(this);\n\t}\n\tfor (i = 0; i < this.nb_PPS_nalus; i++) {\n\t\tthis.PPS[i] = {};\n\t\tthis.PPS[i].length = stream.readUint16();\n\t\tthis.PPS[i].nalu = stream.readUint8Array(this.PPS[i].length);\n\t\ttoparse -= 2+this.PPS[i].length;\n\t}\n\tif (toparse>0) {\n\t\tthis.ext = stream.readUint8Array(toparse);\n\t}\n});\n\n// file:src/parsing/btrt.js\nBoxParser.createBoxCtor(\"btrt\", \"BitRateBox\", function(stream) {\n\tthis.bufferSizeDB = stream.readUint32();\n\tthis.maxBitrate = stream.readUint32();\n\tthis.avgBitrate = stream.readUint32();\n});\n\n// file:src/parsing/ccst.js\nBoxParser.createFullBoxCtor(\"ccst\", \"CodingConstraintsBox\", function(stream) {\n\tvar flags = stream.readUint8();\n\tthis.all_ref_pics_intra = ((flags & 0x80) == 0x80);\n\tthis.intra_pred_used = ((flags & 0x40) == 0x40);\n\tthis.max_ref_per_pic = ((flags & 0x3f) >> 2);\n\tstream.readUint24();\n});\n\n// file:src/parsing/cdef.js\nBoxParser.createBoxCtor(\"cdef\", \"ComponentDefinitionBox\", function(stream) {\n var i;\n this.channel_count = stream.readUint16();\n this.channel_indexes = [];\n this.channel_types = [];\n this.channel_associations = [];\n for (i = 0; i < this.channel_count; i++) {\n this.channel_indexes.push(stream.readUint16());\n this.channel_types.push(stream.readUint16());\n this.channel_associations.push(stream.readUint16());\n }\n});\n\n// file:src/parsing/clap.js\nBoxParser.createBoxCtor(\"clap\", \"CleanApertureBox\", function(stream) {\n\tthis.cleanApertureWidthN = stream.readUint32();\n\tthis.cleanApertureWidthD = stream.readUint32();\n\tthis.cleanApertureHeightN = stream.readUint32();\n\tthis.cleanApertureHeightD = stream.readUint32();\n\tthis.horizOffN = stream.readUint32();\n\tthis.horizOffD = stream.readUint32();\n\tthis.vertOffN = stream.readUint32();\n\tthis.vertOffD = stream.readUint32();\n});// file:src/parsing/clli.js\nBoxParser.createBoxCtor(\"clli\", \"ContentLightLevelBox\", function(stream) {\n\tthis.max_content_light_level = stream.readUint16();\n this.max_pic_average_light_level = stream.readUint16();\n});\n\n// file:src/parsing/cmex.js\nBoxParser.createFullBoxCtor(\"cmex\", \"CameraExtrinsicMatrixProperty\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.pos_x = stream.readInt32();\n\t}\n\tif (this.flags & 0x2) {\n\t\tthis.pos_y = stream.readInt32();\n\t}\n\tif (this.flags & 0x4) {\n\t\tthis.pos_z = stream.readInt32();\n\t}\n\tif (this.flags & 0x8) {\n\t\tif (this.version == 0) {\n\t\t\tif (this.flags & 0x10) {\n\t\t\t\tthis.quat_x = stream.readInt32();\n\t\t\t\tthis.quat_y = stream.readInt32();\n\t\t\t\tthis.quat_z = stream.readInt32();\n\t\t\t} else {\n\t\t\t\tthis.quat_x = stream.readInt16();\n\t\t\t\tthis.quat_y = stream.readInt16();\n\t\t\t\tthis.quat_z = stream.readInt16();\n\t\t\t}\n\t\t} else if (this.version == 1) {\n\t\t\t//ViewpointGlobalCoordinateSysRotationStruct rot;\n\t\t}\n\t}\n\tif (this.flags & 0x20) {\n\t\tthis.id = stream.readUint32();\n\t}\n});\n// file:src/parsing/cmin.js\nBoxParser.createFullBoxCtor(\"cmin\", \"CameraIntrinsicMatrixProperty\", function(stream) {\n\tthis.focal_length_x = stream.readInt32();\n\tthis.principal_point_x = stream.readInt32();\n\tthis.principal_point_y = stream.readInt32();\n\tif (this.flags & 0x1) {\n\t\tthis.focal_length_y = stream.readInt32();\n\t\tthis.skew_factor = stream.readInt32();\n\t}\n});// file:src/parsing/cmpd.js\nBoxParser.createBoxCtor(\"cmpd\", \"ComponentDefinitionBox\", function(stream) {\n\tthis.component_count = stream.readUint32();\n\tthis.component_types = [];\n\tthis.component_type_urls = [];\n\tfor (i = 0; i < this.component_count; i++) {\n\t\tvar component_type = stream.readUint16();\n\t\tthis.component_types.push(component_type);\n\t\tif (component_type >= 0x8000) {\n\t\t\tthis.component_type_urls.push(stream.readCString());\n\t\t}\n\t}\n});// file:src/parsing/co64.js\nBoxParser.createFullBoxCtor(\"co64\", \"ChunkLargeOffsetBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.chunk_offsets = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.chunk_offsets.push(stream.readUint64());\n\t\t}\n\t}\n});\n\n// file:src/parsing/CoLL.js\nBoxParser.createFullBoxCtor(\"CoLL\", \"ContentLightLevelBox\", function(stream) {\n\tthis.maxCLL = stream.readUint16();\n this.maxFALL = stream.readUint16();\n});\n\n// file:src/parsing/colr.js\nBoxParser.createBoxCtor(\"colr\", \"ColourInformationBox\", function(stream) {\n\tthis.colour_type = stream.readString(4);\n\tif (this.colour_type === 'nclx') {\n\t\tthis.colour_primaries = stream.readUint16();\n\t\tthis.transfer_characteristics = stream.readUint16();\n\t\tthis.matrix_coefficients = stream.readUint16();\n\t\tvar tmp = stream.readUint8();\n\t\tthis.full_range_flag = tmp >> 7;\n\t} else if (this.colour_type === 'rICC') {\n\t\tthis.ICC_profile = stream.readUint8Array(this.size - 4);\n\t} else if (this.colour_type === 'prof') {\n\t\tthis.ICC_profile = stream.readUint8Array(this.size - 4);\n\t}\n});// file:src/parsing/cprt.js\nBoxParser.createFullBoxCtor(\"cprt\", \"CopyrightBox\", function (stream) {\n\tthis.parseLanguage(stream);\n\tthis.notice = stream.readCString();\n});\n\n// file:src/parsing/cslg.js\nBoxParser.createFullBoxCtor(\"cslg\", \"CompositionToDecodeBox\", function(stream) {\n\tvar entry_count;\n\tif (this.version === 0) {\n\t\tthis.compositionToDTSShift = stream.readInt32(); /* signed */\n\t\tthis.leastDecodeToDisplayDelta = stream.readInt32(); /* signed */\n\t\tthis.greatestDecodeToDisplayDelta = stream.readInt32(); /* signed */\n\t\tthis.compositionStartTime = stream.readInt32(); /* signed */\n\t\tthis.compositionEndTime = stream.readInt32(); /* signed */\n\t}\n});\n\n// file:src/parsing/ctts.js\nBoxParser.createFullBoxCtor(\"ctts\", \"CompositionOffsetBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.sample_counts = [];\n\tthis.sample_offsets = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_counts.push(stream.readUint32());\n\t\t\t/* some files are buggy and declare version=0 while using signed offsets.\n\t\t\t The likelyhood of using the most significant bit in a 32-bits time offset is very low,\n\t\t\t so using signed value here as well */\n\t\t\t var value = stream.readInt32();\n\t\t\t if (value < 0) {\n\t\t\t \t\tLog.warn(\"BoxParser\", \"ctts box uses negative values without using version 1\");\n\t\t\t }\n\t\t\tthis.sample_offsets.push(value);\n\t\t}\n\t} else if (this.version == 1) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_counts.push(stream.readUint32());\n\t\t\tthis.sample_offsets.push(stream.readInt32()); /* signed */\n\t\t}\n\t}\n});\n\n// file:src/parsing/dac3.js\nBoxParser.createBoxCtor(\"dac3\", \"AC3SpecificBox\", function(stream) {\n\tvar tmp_byte1 = stream.readUint8();\n\tvar tmp_byte2 = stream.readUint8();\n\tvar tmp_byte3 = stream.readUint8();\n\tthis.fscod = tmp_byte1 >> 6;\n\tthis.bsid = ((tmp_byte1 >> 1) & 0x1F);\n\tthis.bsmod = ((tmp_byte1 & 0x1) << 2) | ((tmp_byte2 >> 6) & 0x3);\n\tthis.acmod = ((tmp_byte2 >> 3) & 0x7);\n\tthis.lfeon = ((tmp_byte2 >> 2) & 0x1);\n\tthis.bit_rate_code = (tmp_byte2 & 0x3) | ((tmp_byte3 >> 5) & 0x7);\n});\n\n// file:src/parsing/dec3.js\nBoxParser.createBoxCtor(\"dec3\", \"EC3SpecificBox\", function(stream) {\n\tvar tmp_16 = stream.readUint16();\n\tthis.data_rate = tmp_16 >> 3;\n\tthis.num_ind_sub = tmp_16 & 0x7;\n\tthis.ind_subs = [];\n\tfor (var i = 0; i < this.num_ind_sub+1; i++) {\n\t\tvar ind_sub = {};\n\t\tthis.ind_subs.push(ind_sub);\n\t\tvar tmp_byte1 = stream.readUint8();\n\t\tvar tmp_byte2 = stream.readUint8();\n\t\tvar tmp_byte3 = stream.readUint8();\n\t\tind_sub.fscod = tmp_byte1 >> 6;\n\t\tind_sub.bsid = ((tmp_byte1 >> 1) & 0x1F);\n\t\tind_sub.bsmod = ((tmp_byte1 & 0x1) << 4) | ((tmp_byte2 >> 4) & 0xF);\n\t\tind_sub.acmod = ((tmp_byte2 >> 1) & 0x7);\n\t\tind_sub.lfeon = (tmp_byte2 & 0x1);\n\t\tind_sub.num_dep_sub = ((tmp_byte3 >> 1) & 0xF);\n\t\tif (ind_sub.num_dep_sub > 0) {\n\t\t\tind_sub.chan_loc = ((tmp_byte3 & 0x1) << 8) | stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/dfLa.js\nBoxParser.createFullBoxCtor(\"dfLa\", \"FLACSpecificBox\", function(stream) {\n var BLOCKTYPE_MASK = 0x7F;\n var LASTMETADATABLOCKFLAG_MASK = 0x80;\n\n var boxesFound = [];\n var knownBlockTypes = [\n \"STREAMINFO\",\n \"PADDING\",\n \"APPLICATION\",\n \"SEEKTABLE\",\n \"VORBIS_COMMENT\",\n \"CUESHEET\",\n \"PICTURE\",\n \"RESERVED\"\n ];\n\n // for (i=0; ; i++) { // to end of box\n do {\n var flagAndType = stream.readUint8();\n\n var type = Math.min(\n (flagAndType & BLOCKTYPE_MASK),\n (knownBlockTypes.length - 1)\n );\n\n // if this is a STREAMINFO block, read the true samplerate since this\n // can be different to the AudioSampleEntry samplerate.\n if (!(type)) {\n // read past all the other stuff\n stream.readUint8Array(13);\n\n // extract samplerate\n this.samplerate = (stream.readUint32() >> 12);\n\n // read to end of STREAMINFO\n stream.readUint8Array(20);\n } else {\n // not interested in other block types so just discard length bytes\n stream.readUint8Array(stream.readUint24());\n }\n\n boxesFound.push(knownBlockTypes[type]);\n\n if (!!(flagAndType & LASTMETADATABLOCKFLAG_MASK)) {\n break;\n }\n } while (true);\n\n this.numMetadataBlocks =\n boxesFound.length + \" (\" + boxesFound.join(\", \") + \")\";\n});\n// file:src/parsing/dimm.js\nBoxParser.createBoxCtor(\"dimm\", \"hintimmediateBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/dmax.js\nBoxParser.createBoxCtor(\"dmax\", \"hintlongestpacket\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/dmed.js\nBoxParser.createBoxCtor(\"dmed\", \"hintmediaBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/dOps.js\nBoxParser.createBoxCtor(\"dOps\", \"OpusSpecificBox\", function(stream) {\n\tthis.Version = stream.readUint8();\n\tthis.OutputChannelCount = stream.readUint8();\n\tthis.PreSkip = stream.readUint16();\n\tthis.InputSampleRate = stream.readUint32();\n\tthis.OutputGain = stream.readInt16();\n\tthis.ChannelMappingFamily = stream.readUint8();\n\tif (this.ChannelMappingFamily !== 0) {\n\t\tthis.StreamCount = stream.readUint8();\n\t\tthis.CoupledCount = stream.readUint8();\n\t\tthis.ChannelMapping = [];\n\t\tfor (var i = 0; i < this.OutputChannelCount; i++) {\n\t\t\tthis.ChannelMapping[i] = stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/dref.js\nBoxParser.createFullBoxCtor(\"dref\", \"DataReferenceBox\", function(stream) {\n\tvar ret;\n\tvar box;\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.entries.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/drep.js\nBoxParser.createBoxCtor(\"drep\", \"hintrepeatedBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/elng.js\nBoxParser.createFullBoxCtor(\"elng\", \"ExtendedLanguageBox\", function(stream) {\n\tthis.extended_language = stream.readString(this.size-this.hdr_size);\n});\n\n// file:src/parsing/elst.js\nBoxParser.createFullBoxCtor(\"elst\", \"EditListBox\", function(stream) {\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry = {};\n\t\tthis.entries.push(entry);\n\t\tif (this.version === 1) {\n\t\t\tentry.segment_duration = stream.readUint64();\n\t\t\tentry.media_time = stream.readInt64();\n\t\t} else {\n\t\t\tentry.segment_duration = stream.readUint32();\n\t\t\tentry.media_time = stream.readInt32();\n\t\t}\n\t\tentry.media_rate_integer = stream.readInt16();\n\t\tentry.media_rate_fraction = stream.readInt16();\n\t}\n});\n\n// file:src/parsing/emsg.js\nBoxParser.createFullBoxCtor(\"emsg\", \"EventMessageBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.timescale \t\t\t\t\t= stream.readUint32();\n\t\tthis.presentation_time \t\t\t= stream.readUint64();\n\t\tthis.event_duration\t\t\t \t= stream.readUint32();\n\t\tthis.id \t\t\t\t\t\t= stream.readUint32();\n\t\tthis.scheme_id_uri \t\t\t\t= stream.readCString();\n\t\tthis.value \t\t\t\t\t\t= stream.readCString();\n\t} else {\n\t\tthis.scheme_id_uri \t\t\t\t= stream.readCString();\n\t\tthis.value \t\t\t\t\t\t= stream.readCString();\n\t\tthis.timescale \t\t\t\t\t= stream.readUint32();\n\t\tthis.presentation_time_delta \t= stream.readUint32();\n\t\tthis.event_duration\t\t\t \t= stream.readUint32();\n\t\tthis.id \t\t\t\t\t\t= stream.readUint32();\n\t}\n\tvar message_size = this.size - this.hdr_size - (4*4 + (this.scheme_id_uri.length+1) + (this.value.length+1));\n\tif (this.version == 1) {\n\t\tmessage_size -= 4;\n\t}\n\tthis.message_data = stream.readUint8Array(message_size);\n});\n\n// file:src/parsing/EntityToGroup.js\n// ISO/IEC 14496-12:2022 Section 8.18.3 Entity to group box\nBoxParser.createEntityToGroupCtor = function(type, parseMethod) {\n BoxParser[type+\"Box\"] = function(size) {\n BoxParser.FullBox.call(this, type, size);\n }\n BoxParser[type+\"Box\"].prototype = new BoxParser.FullBox();\n BoxParser[type+\"Box\"].prototype.parse = function(stream) {\n this.parseFullHeader(stream);\n if (parseMethod) {\n parseMethod.call(this, stream);\n } else {\n this.group_id = stream.readUint32();\n this.num_entities_in_group = stream.readUint32();\n this.entity_ids = [];\n for (i = 0; i < this.num_entities_in_group; i++) {\n var entity_id = stream.readUint32();\n this.entity_ids.push(entity_id);\n }\n }\n };\n};\n\n// Auto exposure bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.2.1)\nBoxParser.createEntityToGroupCtor(\"aebr\");\n\n// Flash exposure bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.5.1)\nBoxParser.createEntityToGroupCtor(\"afbr\");\n\n// Album collection (ISO/IEC 23008-12:2022 Section 6.8.7.1)\nBoxParser.createEntityToGroupCtor(\"albc\");\n\n// Alternative entity (ISO/IEC 14496-12:2022 Section 8.18.3.1)\nBoxParser.createEntityToGroupCtor(\"altr\");\n\n// Burst image entity group (ISO/IEC 23008-12:2022 Section 6.8.2.2)\nBoxParser.createEntityToGroupCtor(\"brst\");\n\n// Depth of field bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.6.1)\nBoxParser.createEntityToGroupCtor(\"dobr\");\n\n// Equivalent entity (ISO/IEC 23008-12:2022 Section 6.8.1.1)\nBoxParser.createEntityToGroupCtor(\"eqiv\");\n\n// Favourites collection (ISO/IEC 23008-12:2022 Section 6.8.7.2)\nBoxParser.createEntityToGroupCtor(\"favc\");\n\n// Focus bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.4.1)\nBoxParser.createEntityToGroupCtor(\"fobr\");\n\n// Audio to image entity group (ISO/IEC 23008-12:2022 Section 6.8.4)\nBoxParser.createEntityToGroupCtor(\"iaug\");\n\n// Panorama (ISO/IEC 23008-12:2022 Section 6.8.8.1)\nBoxParser.createEntityToGroupCtor(\"pano\");\n\n// Slideshow (ISO/IEC 23008-12:2022 Section 6.8.9.1)\nBoxParser.createEntityToGroupCtor(\"slid\");\n\n// Stereo pair (ISO/IEC 23008-12:2022 Section 6.8.5)\nBoxParser.createEntityToGroupCtor(\"ster\");\n\n// Time-synchronised capture entity group (ISO/IEC 23008-12:2022 Section 6.8.3)\nBoxParser.createEntityToGroupCtor(\"tsyn\");\n\n// White balance bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.3.1)\nBoxParser.createEntityToGroupCtor(\"wbbr\");\n\n// Alternative entity (ISO/IEC 23008-12:2022 AMD1 Section 6.8.10)\nBoxParser.createEntityToGroupCtor(\"prgr\");\n\n// Image Pyramid entity group (ISO/IEC 23008-12:20xx Section 6.8.11)\nBoxParser.createEntityToGroupCtor(\"pymd\", function(stream) {\n this.group_id = stream.readUint32();\n this.num_entities_in_group = stream.readUint32();\n this.entity_ids = [];\n for (var i = 0; i < this.num_entities_in_group; i++) {\n var entity_id = stream.readUint32();\n this.entity_ids.push(entity_id);\n }\n \n this.tile_size_x = stream.readUint16();\n this.tile_size_y = stream.readUint16();\n this.layer_binning = [];\n this.tiles_in_layer_column_minus1 = [];\n this.tiles_in_layer_row_minus1 = [];\n for (i = 0; i < this.num_entities_in_group; i++) {\n this.layer_binning[i] = stream.readUint16();\n this.tiles_in_layer_row_minus1[i] = stream.readUint16();\n this.tiles_in_layer_column_minus1[i] = stream.readUint16();\n }\n});\n\n// file:src/parsing/esds.js\nBoxParser.createFullBoxCtor(\"esds\", \"ElementaryStreamDescriptorBox\", function(stream) {\n\tvar esd_data = stream.readUint8Array(this.size-this.hdr_size);\n\tif (typeof MPEG4DescriptorParser !== \"undefined\") {\n\t\tvar esd_parser = new MPEG4DescriptorParser();\n\t\tthis.esd = esd_parser.parseOneDescriptor(new DataStream(esd_data.buffer, 0, DataStream.BIG_ENDIAN));\n\t}\n});\n\n// file:src/parsing/fiel.js\nBoxParser.createBoxCtor(\"fiel\", \"FieldHandlingBox\", function(stream) {\n\tthis.fieldCount = stream.readUint8();\n\tthis.fieldOrdering = stream.readUint8();\n});\n\n// file:src/parsing/frma.js\nBoxParser.createBoxCtor(\"frma\", \"OriginalFormatBox\", function(stream) {\n\tthis.data_format = stream.readString(4);\n});\n\n// file:src/parsing/ftyp.js\nBoxParser.createBoxCtor(\"ftyp\", \"FileTypeBox\", function(stream) {\n\tvar toparse = this.size - this.hdr_size;\n\tthis.major_brand = stream.readString(4);\n\tthis.minor_version = stream.readUint32();\n\ttoparse -= 8;\n\tthis.compatible_brands = [];\n\tvar i = 0;\n\twhile (toparse>=4) {\n\t\tthis.compatible_brands[i] = stream.readString(4);\n\t\ttoparse -= 4;\n\t\ti++;\n\t}\n});\n\n// file:src/parsing/hdlr.js\nBoxParser.createFullBoxCtor(\"hdlr\", \"HandlerBox\", function(stream) {\n\tif (this.version === 0) {\n\t\tstream.readUint32();\n\t\tthis.handler = stream.readString(4);\n\t\tstream.readUint32Array(3);\n\t\tthis.name = stream.readString(this.size-this.hdr_size-20);\n\t\tif (this.name[this.name.length-1]==='\\0') {\n\t\t\tthis.name = this.name.slice(0,-1);\n\t\t}\n\t}\n});\n\n// file:src/parsing/hvcC.js\nBoxParser.createBoxCtor(\"hvcC\", \"HEVCConfigurationBox\", function(stream) {\n\tvar i, j;\n\tvar nb_nalus;\n\tvar length;\n\tvar tmp_byte;\n\tthis.configurationVersion = stream.readUint8();\n\ttmp_byte = stream.readUint8();\n\tthis.general_profile_space = tmp_byte >> 6;\n\tthis.general_tier_flag = (tmp_byte & 0x20) >> 5;\n\tthis.general_profile_idc = (tmp_byte & 0x1F);\n\tthis.general_profile_compatibility = stream.readUint32();\n\tthis.general_constraint_indicator = stream.readUint8Array(6);\n\tthis.general_level_idc = stream.readUint8();\n\tthis.min_spatial_segmentation_idc = stream.readUint16() & 0xFFF;\n\tthis.parallelismType = (stream.readUint8() & 0x3);\n\tthis.chroma_format_idc = (stream.readUint8() & 0x3);\n\tthis.bit_depth_luma_minus8 = (stream.readUint8() & 0x7);\n\tthis.bit_depth_chroma_minus8 = (stream.readUint8() & 0x7);\n\tthis.avgFrameRate = stream.readUint16();\n\ttmp_byte = stream.readUint8();\n\tthis.constantFrameRate = (tmp_byte >> 6);\n\tthis.numTemporalLayers = (tmp_byte & 0XD) >> 3;\n\tthis.temporalIdNested = (tmp_byte & 0X4) >> 2;\n\tthis.lengthSizeMinusOne = (tmp_byte & 0X3);\n\n\tthis.nalu_arrays = [];\n\tthis.nalu_arrays.toString = function () {\n\t\tvar str = \"<table class='inner-table'>\";\n\t\tstr += \"<thead><tr><th>completeness</th><th>nalu_type</th><th>nalu_data</th></tr></thead>\";\n\t\tstr += \"<tbody>\";\n\n\t\tfor (var i=0; i<this.length; i++) {\n\t\t\tvar nalu_array = this[i];\n\t\t\tstr += \"<tr>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.completeness+\"</td>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.nalu_type+\"</td>\";\n\t\t\tfor (var j=0; j<nalu_array.length; j++) {\n\t\t\t\tvar nalu = nalu_array[j];\n\t\t\t\tif (j !== 0) str += \"<tr>\";\n\t\t\t\tstr += \"<td>\";\n\t\t\t\tstr += nalu.data.reduce(function(str, byte) {\n\t\t\t\t\treturn str + byte.toString(16).padStart(2, \"0\");\n\t\t\t\t}, \"0x\");\n\t\t\t\tstr += \"</td></tr>\";\n\t\t\t}\n\t\t}\n\t\tstr += \"</tbody></table>\";\n\t\treturn str;\n\t}\n\tvar numOfArrays = stream.readUint8();\n\tfor (i = 0; i < numOfArrays; i++) {\n\t\tvar nalu_array = [];\n\t\tthis.nalu_arrays.push(nalu_array);\n\t\ttmp_byte = stream.readUint8()\n\t\tnalu_array.completeness = (tmp_byte & 0x80) >> 7;\n\t\tnalu_array.nalu_type = tmp_byte & 0x3F;\n\t\tvar numNalus = stream.readUint16();\n\t\tfor (j = 0; j < numNalus; j++) {\n\t\t\tvar nalu = {}\n\t\t\tnalu_array.push(nalu);\n\t\t\tlength = stream.readUint16();\n\t\t\tnalu.data = stream.readUint8Array(length);\n\t\t}\n\t}\n});\n\n// file:src/parsing/iinf.js\nBoxParser.createFullBoxCtor(\"iinf\", \"ItemInfoBox\", function(stream) {\n\tvar ret;\n\tif (this.version === 0) {\n\t\tthis.entry_count = stream.readUint16();\n\t} else {\n\t\tthis.entry_count = stream.readUint32();\n\t}\n\tthis.item_infos = [];\n\tfor (var i = 0; i < this.entry_count; i++) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (ret.box.type !== \"infe\") {\n\t\t\t\tLog.error(\"BoxParser\", \"Expected 'infe' box, got \"+ret.box.type);\n\t\t\t}\n\t\t\tthis.item_infos[i] = ret.box;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/iloc.js\nBoxParser.createFullBoxCtor(\"iloc\", \"ItemLocationBox\", function(stream) {\n\tvar byte;\n\tbyte = stream.readUint8();\n\tthis.offset_size = (byte >> 4) & 0xF;\n\tthis.length_size = byte & 0xF;\n\tbyte = stream.readUint8();\n\tthis.base_offset_size = (byte >> 4) & 0xF;\n\tif (this.version === 1 || this.version === 2) {\n\t\tthis.index_size = byte & 0xF;\n\t} else {\n\t\tthis.index_size = 0;\n\t\t// reserved = byte & 0xF;\n\t}\n\tthis.items = [];\n\tvar item_count = 0;\n\tif (this.version < 2) {\n\t\titem_count = stream.readUint16();\n\t} else if (this.version === 2) {\n\t\titem_count = stream.readUint32();\n\t} else {\n\t\tthrow \"version of iloc box not supported\";\n\t}\n\tfor (var i = 0; i < item_count; i++) {\n\t\tvar item = {};\n\t\tthis.items.push(item);\n\t\tif (this.version < 2) {\n\t\t\titem.item_ID = stream.readUint16();\n\t\t} else if (this.version === 2) {\n\t\t\titem.item_ID = stream.readUint32();\n\t\t} else {\n\t\t\tthrow \"version of iloc box not supported\";\n\t\t}\n\t\tif (this.version === 1 || this.version === 2) {\n\t\t\titem.construction_method = (stream.readUint16() & 0xF);\n\t\t} else {\n\t\t\titem.construction_method = 0;\n\t\t}\n\t\titem.data_reference_index = stream.readUint16();\n\t\tswitch(this.base_offset_size) {\n\t\t\tcase 0:\n\t\t\t\titem.base_offset = 0;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\titem.base_offset = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tcase 8:\n\t\t\t\titem.base_offset = stream.readUint64();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow \"Error reading base offset size\";\n\t\t}\n\t\tvar extent_count = stream.readUint16();\n\t\titem.extents = [];\n\t\tfor (var j=0; j < extent_count; j++) {\n\t\t\tvar extent = {};\n\t\t\titem.extents.push(extent);\n\t\t\tif (this.version === 1 || this.version === 2) {\n\t\t\t\tswitch(this.index_size) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\textent.extent_index = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\textent.extent_index = stream.readUint32();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 8:\n\t\t\t\t\t\textent.extent_index = stream.readUint64();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch(this.offset_size) {\n\t\t\t\tcase 0:\n\t\t\t\t\textent.extent_offset = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\textent.extent_offset = stream.readUint32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\textent.extent_offset = stream.readUint64();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t}\n\t\t\tswitch(this.length_size) {\n\t\t\t\tcase 0:\n\t\t\t\t\textent.extent_length = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\textent.extent_length = stream.readUint32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\textent.extent_length = stream.readUint64();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/imir.js\nBoxParser.createBoxCtor(\"imir\", \"ImageMirror\", function(stream) {\n\tvar tmp = stream.readUint8();\n\tthis.reserved = tmp >> 7;\n\tthis.axis = tmp & 1;\n});// file:src/parsing/infe.js\nBoxParser.createFullBoxCtor(\"infe\", \"ItemInfoEntry\", function(stream) {\n\tif (this.version === 0 || this.version === 1) {\n\t\tthis.item_ID = stream.readUint16();\n\t\tthis.item_protection_index = stream.readUint16();\n\t\tthis.item_name = stream.readCString();\n\t\tthis.content_type = stream.readCString();\n\t\tthis.content_encoding = stream.readCString();\n\t}\n\tif (this.version === 1) {\n\t\tthis.extension_type = stream.readString(4);\n\t\tLog.warn(\"BoxParser\", \"Cannot parse extension type\");\n\t\tstream.seek(this.start+this.size);\n\t\treturn;\n\t}\n\tif (this.version >= 2) {\n\t\tif (this.version === 2) {\n\t\t\tthis.item_ID = stream.readUint16();\n\t\t} else if (this.version === 3) {\n\t\t\tthis.item_ID = stream.readUint32();\n\t\t}\n\t\tthis.item_protection_index = stream.readUint16();\n\t\tthis.item_type = stream.readString(4);\n\t\tthis.item_name = stream.readCString();\n\t\tif (this.item_type === \"mime\") {\n\t\t\tthis.content_type = stream.readCString();\n\t\t\tthis.content_encoding = stream.readCString();\n\t\t} else if (this.item_type === \"uri \") {\n\t\t\tthis.item_uri_type = stream.readCString();\n\t\t}\n\t}\n});\n// file:src/parsing/ipma.js\nBoxParser.createFullBoxCtor(\"ipma\", \"ItemPropertyAssociationBox\", function(stream) {\n\tvar i, j;\n\tentry_count = stream.readUint32();\n\tthis.associations = [];\n\tfor(i=0; i<entry_count; i++) {\n\t\tvar item_assoc = {};\n\t\tthis.associations.push(item_assoc);\n\t\tif (this.version < 1) {\n\t\t\titem_assoc.id = stream.readUint16();\n\t\t} else {\n\t\t\titem_assoc.id = stream.readUint32();\n\t\t}\n\t\tvar association_count = stream.readUint8();\n\t\titem_assoc.props = [];\n\t\tfor (j = 0; j < association_count; j++) {\n\t\t\tvar tmp = stream.readUint8();\n\t\t\tvar p = {};\n\t\t\titem_assoc.props.push(p);\n\t\t\tp.essential = ((tmp & 0x80) >> 7) === 1;\n\t\t\tif (this.flags & 0x1) {\n\t\t\t\tp.property_index = (tmp & 0x7F) << 8 | stream.readUint8();\n\t\t\t} else {\n\t\t\t\tp.property_index = (tmp & 0x7F);\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/iref.js\nBoxParser.createFullBoxCtor(\"iref\", \"ItemReferenceBox\", function(stream) {\n\tvar ret;\n\tvar entryCount;\n\tvar box;\n\tthis.references = [];\n\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (this.version === 0) {\n\t\t\t\tbox = new BoxParser.SingleItemTypeReferenceBox(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t} else {\n\t\t\t\tbox = new BoxParser.SingleItemTypeReferenceBoxLarge(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t}\n\t\t\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\t\t\tLog.warn(\"BoxParser\", box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.references.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n// file:src/parsing/irot.js\nBoxParser.createBoxCtor(\"irot\", \"ImageRotation\", function(stream) {\n\tthis.angle = stream.readUint8() & 0x3;\n});\n\n// file:src/parsing/ispe.js\nBoxParser.createFullBoxCtor(\"ispe\", \"ImageSpatialExtentsProperty\", function(stream) {\n\tthis.image_width = stream.readUint32();\n\tthis.image_height = stream.readUint32();\n});// file:src/parsing/kind.js\nBoxParser.createFullBoxCtor(\"kind\", \"KindBox\", function(stream) {\n\tthis.schemeURI = stream.readCString();\n\tthis.value = stream.readCString();\n});\n// file:src/parsing/leva.js\nBoxParser.createFullBoxCtor(\"leva\", \"LevelAssignmentBox\", function(stream) {\n\tvar count = stream.readUint8();\n\tthis.levels = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tvar level = {};\n\t\tthis.levels[i] = level;\n\t\tlevel.track_ID = stream.readUint32();\n\t\tvar tmp_byte = stream.readUint8();\n\t\tlevel.padding_flag = tmp_byte >> 7;\n\t\tlevel.assignment_type = tmp_byte & 0x7F;\n\t\tswitch (level.assignment_type) {\n\t\t\tcase 0:\n\t\t\t\tlevel.grouping_type = stream.readString(4);\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tlevel.grouping_type = stream.readString(4);\n\t\t\t\tlevel.grouping_type_parameter = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\tlevel.sub_track_id = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown leva assignement type\");\n\t\t}\n\t}\n});\n\n// file:src/parsing/lhvC.js\nBoxParser.createBoxCtor(\"lhvC\", \"LHEVCConfigurationBox\", function(stream) {\n\tvar i, j;\n\tvar tmp_byte;\n\tthis.configurationVersion = stream.readUint8();\n\tthis.min_spatial_segmentation_idc = stream.readUint16() & 0xFFF;\n\tthis.parallelismType = (stream.readUint8() & 0x3);\n\ttmp_byte = stream.readUint8();\n\tthis.numTemporalLayers = (tmp_byte & 0XD) >> 3;\n\tthis.temporalIdNested = (tmp_byte & 0X4) >> 2;\n\tthis.lengthSizeMinusOne = (tmp_byte & 0X3);\n\n\tthis.nalu_arrays = [];\n\tthis.nalu_arrays.toString = function () {\n\t\tvar str = \"<table class='inner-table'>\";\n\t\tstr += \"<thead><tr><th>completeness</th><th>nalu_type</th><th>nalu_data</th></tr></thead>\";\n\t\tstr += \"<tbody>\";\n\n\t\tfor (var i=0; i<this.length; i++) {\n\t\t\tvar nalu_array = this[i];\n\t\t\tstr += \"<tr>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.completeness+\"</td>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.nalu_type+\"</td>\";\n\t\t\tfor (var j=0; j<nalu_array.length; j++) {\n\t\t\t\tvar nalu = nalu_array[j];\n\t\t\t\tif (j !== 0) str += \"<tr>\";\n\t\t\t\tstr += \"<td>\";\n\t\t\t\tstr += nalu.data.reduce(function(str, byte) {\n\t\t\t\t\treturn str + byte.toString(16).padStart(2, \"0\");\n\t\t\t\t}, \"0x\");\n\t\t\t\tstr += \"</td></tr>\";\n\t\t\t}\n\t\t}\n\t\tstr += \"</tbody></table>\";\n\t\treturn str;\n\t}\n\tvar numOfArrays = stream.readUint8();\n\tfor (i = 0; i < numOfArrays; i++) {\n\t\tvar nalu_array = [];\n\t\tthis.nalu_arrays.push(nalu_array);\n\t\ttmp_byte = stream.readUint8()\n\t\tnalu_array.completeness = (tmp_byte & 0x80) >> 7;\n\t\tnalu_array.nalu_type = tmp_byte & 0x3F;\n\t\tvar numNalus = stream.readUint16();\n\t\tfor (j = 0; j < numNalus; j++) {\n\t\t\tvar nalu = {}\n\t\t\tnalu_array.push(nalu);\n\t\t\tvar length = stream.readUint16();\n\t\t\tnalu.data = stream.readUint8Array(length);\n\t\t}\n\t}\n});\n\n// file:src/parsing/lsel.js\nBoxParser.createBoxCtor(\"lsel\", \"LayerSelectorProperty\", function(stream) {\n\tthis.layer_id = stream.readUint16();\n});// file:src/parsing/maxr.js\nBoxParser.createBoxCtor(\"maxr\", \"hintmaxrate\", function(stream) {\n\tthis.period = stream.readUint32();\n\tthis.bytes = stream.readUint32();\n});\n\n// file:src/parsing/mdcv.js\nfunction ColorPoint(x, y) {\n this.x = x;\n this.y = y;\n}\n\nColorPoint.prototype.toString = function() {\n return \"(\"+this.x+\",\"+this.y+\")\";\n}\n\nBoxParser.createBoxCtor(\"mdcv\", \"MasteringDisplayColourVolumeBox\", function(stream) {\n this.display_primaries = [];\n this.display_primaries[0] = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.display_primaries[1] = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.display_primaries[2] = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.white_point = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.max_display_mastering_luminance = stream.readUint32();\n this.min_display_mastering_luminance = stream.readUint32();\n});\n\n// file:src/parsing/mdhd.js\nBoxParser.createFullBoxCtor(\"mdhd\", \"MediaHeaderBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tthis.parseLanguage(stream);\n\tstream.readUint16();\n});\n\n// file:src/parsing/mehd.js\nBoxParser.createFullBoxCtor(\"mehd\", \"MovieExtendsHeaderBox\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tLog.warn(\"BoxParser\", \"mehd box incorrectly uses flags set to 1, converting version to 1\");\n\t\tthis.version = 1;\n\t}\n\tif (this.version == 1) {\n\t\tthis.fragment_duration = stream.readUint64();\n\t} else {\n\t\tthis.fragment_duration = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/meta.js\nBoxParser.createFullBoxCtor(\"meta\", \"MetaBox\", function(stream) {\n\tthis.boxes = [];\n\tBoxParser.ContainerBox.prototype.parse.call(this, stream);\n});\n// file:src/parsing/mfhd.js\nBoxParser.createFullBoxCtor(\"mfhd\", \"MovieFragmentHeaderBox\", function(stream) {\n\tthis.sequence_number = stream.readUint32();\n});\n\n// file:src/parsing/mfro.js\nBoxParser.createFullBoxCtor(\"mfro\", \"MovieFragmentRandomAccessOffsetBox\", function(stream) {\n\tthis._size = stream.readUint32();\n});\n\n// file:src/parsing/mskC.js\nBoxParser.createFullBoxCtor(\"mskC\", \"MaskConfigurationProperty\", function(stream) {\n this.bits_per_pixel = stream.readUint8();\n});\n\n// file:src/parsing/mvhd.js\nBoxParser.createFullBoxCtor(\"mvhd\", \"MovieHeaderBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tthis.rate = stream.readUint32();\n\tthis.volume = stream.readUint16()>>8;\n\tstream.readUint16();\n\tstream.readUint32Array(2);\n\tthis.matrix = stream.readUint32Array(9);\n\tstream.readUint32Array(6);\n\tthis.next_track_id = stream.readUint32();\n});\n// file:src/parsing/npck.js\nBoxParser.createBoxCtor(\"npck\", \"hintPacketsSent\", function(stream) {\n\tthis.packetssent = stream.readUint32();\n});\n\n// file:src/parsing/nump.js\nBoxParser.createBoxCtor(\"nump\", \"hintPacketsSent\", function(stream) {\n\tthis.packetssent = stream.readUint64();\n});\n\n// file:src/parsing/padb.js\nBoxParser.createFullBoxCtor(\"padb\", \"PaddingBitsBox\", function(stream) {\n\tvar sample_count = stream.readUint32();\n\tthis.padbits = [];\n\tfor (var i = 0; i < Math.floor((sample_count+1)/2); i++) {\n\t\tthis.padbits = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/pasp.js\nBoxParser.createBoxCtor(\"pasp\", \"PixelAspectRatioBox\", function(stream) {\n\tthis.hSpacing = stream.readUint32();\n\tthis.vSpacing = stream.readUint32();\n});// file:src/parsing/payl.js\nBoxParser.createBoxCtor(\"payl\", \"CuePayloadBox\", function(stream) {\n\tthis.text = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/payt.js\nBoxParser.createBoxCtor(\"payt\", \"hintpayloadID\", function(stream) {\n\tthis.payloadID = stream.readUint32();\n\tvar count = stream.readUint8();\n\tthis.rtpmap_string = stream.readString(count);\n});\n\n// file:src/parsing/pdin.js\nBoxParser.createFullBoxCtor(\"pdin\", \"ProgressiveDownloadInfoBox\", function(stream) {\n\tvar count = (this.size - this.hdr_size)/8;\n\tthis.rate = [];\n\tthis.initial_delay = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.rate[i] = stream.readUint32();\n\t\tthis.initial_delay[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/pitm.js\nBoxParser.createFullBoxCtor(\"pitm\", \"PrimaryItemBox\", function(stream) {\n\tif (this.version === 0) {\n\t\tthis.item_id = stream.readUint16();\n\t} else {\n\t\tthis.item_id = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/pixi.js\nBoxParser.createFullBoxCtor(\"pixi\", \"PixelInformationProperty\", function(stream) {\n\tvar i;\n\tthis.num_channels = stream.readUint8();\n\tthis.bits_per_channels = [];\n\tfor (i = 0; i < this.num_channels; i++) {\n\t\tthis.bits_per_channels[i] = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/pmax.js\nBoxParser.createBoxCtor(\"pmax\", \"hintlargestpacket\", function(stream) {\n\tthis.bytes = stream.readUint32();\n});\n\n// file:src/parsing/prdi.js\nBoxParser.createFullBoxCtor(\"prdi\", \"ProgressiveDerivedImageItemInformationProperty\", function(stream) {\n\tthis.step_count = stream.readUint16();\n\tthis.item_count = [];\n\tif (this.flags & 0x2) {\n\t\tfor (var i = 0; i < this.step_count; i++) {\n\t\t\tthis.item_count[i] = stream.readUint16();\n\t\t}\n\t}\n});// file:src/parsing/prft.js\nBoxParser.createFullBoxCtor(\"prft\", \"ProducerReferenceTimeBox\", function(stream) {\n\tthis.ref_track_id = stream.readUint32();\n\tthis.ntp_timestamp = stream.readUint64();\n\tif (this.version === 0) {\n\t\tthis.media_time = stream.readUint32();\n\t} else {\n\t\tthis.media_time = stream.readUint64();\n\t}\n});\n\n// file:src/parsing/pssh.js\nBoxParser.createFullBoxCtor(\"pssh\", \"ProtectionSystemSpecificHeaderBox\", function(stream) {\n\tthis.system_id = BoxParser.parseHex16(stream);\n\tif (this.version > 0) {\n\t\tvar count = stream.readUint32();\n\t\tthis.kid = [];\n\t\tfor (var i = 0; i < count; i++) {\n\t\t\tthis.kid[i] = BoxParser.parseHex16(stream);\n\t\t}\n\t}\n\tvar datasize = stream.readUint32();\n\tif (datasize > 0) {\n\t\tthis.data = stream.readUint8Array(datasize);\n\t}\n});\n\n// file:src/parsing/qt/clef.js\nBoxParser.createFullBoxCtor(\"clef\", \"TrackCleanApertureDimensionsBox\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/enof.js\nBoxParser.createFullBoxCtor(\"enof\", \"TrackEncodedPixelsDimensionsBox\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/prof.js\nBoxParser.createFullBoxCtor(\"prof\", \"TrackProductionApertureDimensionsBox\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/tapt.js\nBoxParser.createContainerBoxCtor(\"tapt\", \"TrackApertureModeDimensionsBox\", null, [ \"clef\", \"prof\", \"enof\"]);// file:src/parsing/rtp.js\nBoxParser.createBoxCtor(\"rtp \", \"rtpmoviehintinformation\", function(stream) {\n\tthis.descriptionformat = stream.readString(4);\n\tthis.sdptext = stream.readString(this.size - this.hdr_size - 4);\n});\n\n// file:src/parsing/saio.js\nBoxParser.createFullBoxCtor(\"saio\", \"SampleAuxiliaryInformationOffsetsBox\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.aux_info_type = stream.readString(4);\n\t\tthis.aux_info_type_parameter = stream.readUint32();\n\t}\n\tvar count = stream.readUint32();\n\tthis.offset = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tif (this.version === 0) {\n\t\t\tthis.offset[i] = stream.readUint32();\n\t\t} else {\n\t\t\tthis.offset[i] = stream.readUint64();\n\t\t}\n\t}\n});\n// file:src/parsing/saiz.js\nBoxParser.createFullBoxCtor(\"saiz\", \"SampleAuxiliaryInformationSizesBox\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.aux_info_type = stream.readString(4);\n\t\tthis.aux_info_type_parameter = stream.readUint32();\n\t}\n\tthis.default_sample_info_size = stream.readUint8();\n\tthis.sample_count = stream.readUint32();\n\tthis.sample_info_size = [];\n\tif (this.default_sample_info_size === 0) {\n\t\tfor (var i = 0; i < this.sample_count; i++) {\n\t\t\tthis.sample_info_size[i] = stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/sampleentries/mett.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"mett\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/metx.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"metx\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.namespace = stream.readCString();\n\tthis.schema_location = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/sbtt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"sbtt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/stpp.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"stpp\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.namespace = stream.readCString();\n\tthis.schema_location = stream.readCString();\n\tthis.auxiliary_mime_types = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/stxt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"stxt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/tx3g.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"tx3g\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.displayFlags = stream.readUint32();\n\tthis.horizontal_justification = stream.readInt8();\n\tthis.vertical_justification = stream.readInt8();\n\tthis.bg_color_rgba = stream.readUint8Array(4);\n\tthis.box_record = stream.readInt16Array(4);\n\tthis.style_record = stream.readUint8Array(12);\n\tthis.parseFooter(stream);\n});\n// file:src/parsing/sampleentries/wvtt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"wvtt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/samplegroups/alst.js\nBoxParser.createSampleGroupCtor(\"alst\", function(stream) {\n\tvar i;\n\tvar roll_count = stream.readUint16();\n\tthis.first_output_sample = stream.readUint16();\n\tthis.sample_offset = [];\n\tfor (i = 0; i < roll_count; i++) {\n\t\tthis.sample_offset[i] = stream.readUint32();\n\t}\n\tvar remaining = this.description_length - 4 - 4*roll_count;\n\tthis.num_output_samples = [];\n\tthis.num_total_samples = [];\n\tfor (i = 0; i < remaining/4; i++) {\n\t\tthis.num_output_samples[i] = stream.readUint16();\n\t\tthis.num_total_samples[i] = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/samplegroups/avll.js\nBoxParser.createSampleGroupCtor(\"avll\", function(stream) {\n\tthis.layerNumber = stream.readUint8();\n\tthis.accurateStatisticsFlag = stream.readUint8();\n\tthis.avgBitRate = stream.readUint16();\n\tthis.avgFrameRate = stream.readUint16();\n});\n\n// file:src/parsing/samplegroups/avss.js\nBoxParser.createSampleGroupCtor(\"avss\", function(stream) {\n\tthis.subSequenceIdentifier = stream.readUint16();\n\tthis.layerNumber = stream.readUint8();\n\tvar tmp_byte = stream.readUint8();\n\tthis.durationFlag = tmp_byte >> 7;\n\tthis.avgRateFlag = (tmp_byte >> 6) & 0x1;\n\tif (this.durationFlag) {\n\t\tthis.duration = stream.readUint32();\n\t}\n\tif (this.avgRateFlag) {\n\t\tthis.accurateStatisticsFlag = stream.readUint8();\n\t\tthis.avgBitRate = stream.readUint16();\n\t\tthis.avgFrameRate = stream.readUint16();\n\t}\n\tthis.dependency = [];\n\tvar numReferences = stream.readUint8();\n\tfor (var i = 0; i < numReferences; i++) {\n\t\tvar dependencyInfo = {};\n\t\tthis.dependency.push(dependencyInfo);\n\t\tdependencyInfo.subSeqDirectionFlag = stream.readUint8();\n\t\tdependencyInfo.layerNumber = stream.readUint8();\n\t\tdependencyInfo.subSequenceIdentifier = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/samplegroups/dtrt.js\nBoxParser.createSampleGroupCtor(\"dtrt\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/mvif.js\nBoxParser.createSampleGroupCtor(\"mvif\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/prol.js\nBoxParser.createSampleGroupCtor(\"prol\", function(stream) {\n\tthis.roll_distance = stream.readInt16();\n});\n\n// file:src/parsing/samplegroups/rap.js\nBoxParser.createSampleGroupCtor(\"rap \", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.num_leading_samples_known = tmp_byte >> 7;\n\tthis.num_leading_samples = tmp_byte & 0x7F;\n});\n\n// file:src/parsing/samplegroups/rash.js\nBoxParser.createSampleGroupCtor(\"rash\", function(stream) {\n\tthis.operation_point_count = stream.readUint16();\n\tif (this.description_length !== 2+(this.operation_point_count === 1?2:this.operation_point_count*6)+9) {\n\t\tLog.warn(\"BoxParser\", \"Mismatch in \"+this.grouping_type+\" sample group length\");\n\t\tthis.data = stream.readUint8Array(this.description_length-2);\n\t} else {\n\t\tif (this.operation_point_count === 1) {\n\t\t\tthis.target_rate_share = stream.readUint16();\n\t\t} else {\n\t\t\tthis.target_rate_share = [];\n\t\t\tthis.available_bitrate = [];\n\t\t\tfor (var i = 0; i < this.operation_point_count; i++) {\n\t\t\t\tthis.available_bitrate[i] = stream.readUint32();\n\t\t\t\tthis.target_rate_share[i] = stream.readUint16();\n\t\t\t}\n\t\t}\n\t\tthis.maximum_bitrate = stream.readUint32();\n\t\tthis.minimum_bitrate = stream.readUint32();\n\t\tthis.discard_priority = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/samplegroups/roll.js\nBoxParser.createSampleGroupCtor(\"roll\", function(stream) {\n\tthis.roll_distance = stream.readInt16();\n});\n\n// file:src/parsing/samplegroups/samplegroup.js\nBoxParser.SampleGroupEntry.prototype.parse = function(stream) {\n\tLog.warn(\"BoxParser\", \"Unknown Sample Group type: \"+this.grouping_type);\n\tthis.data = stream.readUint8Array(this.description_length);\n}\n\n// file:src/parsing/samplegroups/scif.js\nBoxParser.createSampleGroupCtor(\"scif\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/scnm.js\nBoxParser.createSampleGroupCtor(\"scnm\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/seig.js\nBoxParser.createSampleGroupCtor(\"seig\", function(stream) {\n\tthis.reserved = stream.readUint8();\n\tvar tmp = stream.readUint8();\n\tthis.crypt_byte_block = tmp >> 4;\n\tthis.skip_byte_block = tmp & 0xF;\n\tthis.isProtected = stream.readUint8();\n\tthis.Per_Sample_IV_Size = stream.readUint8();\n\tthis.KID = BoxParser.parseHex16(stream);\n\tthis.constant_IV_size = 0;\n\tthis.constant_IV = 0;\n\tif (this.isProtected === 1 && this.Per_Sample_IV_Size === 0) {\n\t\tthis.constant_IV_size = stream.readUint8();\n\t\tthis.constant_IV = stream.readUint8Array(this.constant_IV_size);\n\t}\n});\n\n// file:src/parsing/samplegroups/stsa.js\nBoxParser.createSampleGroupCtor(\"stsa\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/sync.js\nBoxParser.createSampleGroupCtor(\"sync\", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.NAL_unit_type = tmp_byte & 0x3F;\n});\n\n// file:src/parsing/samplegroups/tele.js\nBoxParser.createSampleGroupCtor(\"tele\", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.level_independently_decodable = tmp_byte >> 7;\n});\n\n// file:src/parsing/samplegroups/tsas.js\nBoxParser.createSampleGroupCtor(\"tsas\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/tscl.js\nBoxParser.createSampleGroupCtor(\"tscl\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/vipr.js\nBoxParser.createSampleGroupCtor(\"vipr\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/sbgp.js\nBoxParser.createFullBoxCtor(\"sbgp\", \"SampleToGroupBox\", function(stream) {\n\tthis.grouping_type = stream.readString(4);\n\tif (this.version === 1) {\n\t\tthis.grouping_type_parameter = stream.readUint32();\n\t} else {\n\t\tthis.grouping_type_parameter = 0;\n\t}\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry = {};\n\t\tthis.entries.push(entry);\n\t\tentry.sample_count = stream.readInt32();\n\t\tentry.group_description_index = stream.readInt32();\n\t}\n});\n\n// file:src/parsing/sbpm.js\nfunction Pixel(row, col) {\n\tthis.bad_pixel_row = row;\n\tthis.bad_pixel_column = col;\n}\n\nPixel.prototype.toString = function pixelToString() {\n\treturn \"[row: \" + this.bad_pixel_row + \", column: \" + this.bad_pixel_column + \"]\";\n}\n\nBoxParser.createFullBoxCtor(\"sbpm\", \"SensorBadPixelsMapBox\", function(stream) {\n\tvar i;\n\tthis.component_count = stream.readUint16();\n this.component_index = [];\n for (i = 0; i < this.component_count; i++) {\n this.component_index.push(stream.readUint16());\n }\n\tvar flags = stream.readUint8();\n\tthis.correction_applied = (0x80 == (flags & 0x80));\n\tthis.num_bad_rows = stream.readUint32();\n\tthis.num_bad_cols = stream.readUint32();\n\tthis.num_bad_pixels = stream.readUint32();\n\tthis.bad_rows = [];\n\tthis.bad_columns = [];\n\tthis.bad_pixels = [];\n\tfor (i = 0; i < this.num_bad_rows; i++) {\n\t\tthis.bad_rows.push(stream.readUint32());\n\t}\n\tfor (i = 0; i < this.num_bad_cols; i++) {\n\t\tthis.bad_columns.push(stream.readUint32());\n\t}\n\tfor (i = 0; i < this.num_bad_pixels; i++) {\n\t\tvar row = stream.readUint32();\n\t\tvar col = stream.readUint32();\n\t\tthis.bad_pixels.push(new Pixel(row, col));\n\t}\n});\n\n// file:src/parsing/schm.js\nBoxParser.createFullBoxCtor(\"schm\", \"SchemeTypeBox\", function(stream) {\n\tthis.scheme_type = stream.readString(4);\n\tthis.scheme_version = stream.readUint32();\n\tif (this.flags & 0x000001) {\n\t\tthis.scheme_uri = stream.readString(this.size - this.hdr_size - 8);\n\t}\n});\n\n// file:src/parsing/sdp.js\nBoxParser.createBoxCtor(\"sdp \", \"rtptracksdphintinformation\", function(stream) {\n\tthis.sdptext = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/sdtp.js\nBoxParser.createFullBoxCtor(\"sdtp\", \"SampleDependencyTypeBox\", function(stream) {\n\tvar tmp_byte;\n\tvar count = (this.size - this.hdr_size);\n\tthis.is_leading = [];\n\tthis.sample_depends_on = [];\n\tthis.sample_is_depended_on = [];\n\tthis.sample_has_redundancy = [];\n\tfor (var i = 0; i < count; i++) {\n\t\ttmp_byte = stream.readUint8();\n\t\tthis.is_leading[i] = tmp_byte >> 6;\n\t\tthis.sample_depends_on[i] = (tmp_byte >> 4) & 0x3;\n\t\tthis.sample_is_depended_on[i] = (tmp_byte >> 2) & 0x3;\n\t\tthis.sample_has_redundancy[i] = tmp_byte & 0x3;\n\t}\n});\n\n// file:src/parsing/senc.js\n// Cannot be fully parsed because Per_Sample_IV_Size needs to be known\r\nBoxParser.createFullBoxCtor(\"senc\", \"SampleEncryptionBox\" /*, function(stream) {\r\n\tthis.parseFullHeader(stream);\r\n\tvar sample_count = stream.readUint32();\r\n\tthis.samples = [];\r\n\tfor (var i = 0; i < sample_count; i++) {\r\n\t\tvar sample = {};\r\n\t\t// tenc.default_Per_Sample_IV_Size or seig.Per_Sample_IV_Size\r\n\t\tsample.InitializationVector = this.readUint8Array(Per_Sample_IV_Size*8);\r\n\t\tif (this.flags & 0x2) {\r\n\t\t\tsample.subsamples = [];\r\n\t\t\tsubsample_count = stream.readUint16();\r\n\t\t\tfor (var j = 0; j < subsample_count; j++) {\r\n\t\t\t\tvar subsample = {};\r\n\t\t\t\tsubsample.BytesOfClearData = stream.readUint16();\r\n\t\t\t\tsubsample.BytesOfProtectedData = stream.readUint32();\r\n\t\t\t\tsample.subsamples.push(subsample);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// TODO\r\n\t\tthis.samples.push(sample);\r\n\t}\r\n}*/);\r\n// file:src/parsing/sgpd.js\nBoxParser.createFullBoxCtor(\"sgpd\", \"SampleGroupDescriptionBox\", function(stream) {\n\tthis.grouping_type = stream.readString(4);\n\tLog.debug(\"BoxParser\", \"Found Sample Groups of type \"+this.grouping_type);\n\tif (this.version === 1) {\n\t\tthis.default_length = stream.readUint32();\n\t} else {\n\t\tthis.default_length = 0;\n\t}\n\tif (this.version >= 2) {\n\t\tthis.default_group_description_index = stream.readUint32();\n\t}\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry;\n\t\tif (BoxParser[this.grouping_type+\"SampleGroupEntry\"]) {\n\t\t\tentry = new BoxParser[this.grouping_type+\"SampleGroupEntry\"](this.grouping_type);\n\t\t} else {\n\t\t\tentry = new BoxParser.SampleGroupEntry(this.grouping_type);\n\t\t}\n\t\tthis.entries.push(entry);\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tentry.description_length = stream.readUint32();\n\t\t\t} else {\n\t\t\t\tentry.description_length = this.default_length;\n\t\t\t}\n\t\t} else {\n\t\t\tentry.description_length = this.default_length;\n\t\t}\n\t\tif (entry.write === BoxParser.SampleGroupEntry.prototype.write) {\n\t\t\tLog.info(\"BoxParser\", \"SampleGroup for type \"+this.grouping_type+\" writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t// storing data\n\t\t\tentry.data = stream.readUint8Array(entry.description_length);\n\t\t\t// rewinding\n\t\t\tstream.position -= entry.description_length;\n\t\t}\n\t\tentry.parse(stream);\n\t}\n});\n\n// file:src/parsing/sidx.js\nBoxParser.createFullBoxCtor(\"sidx\", \"CompressedSegmentIndexBox\", function(stream) {\n\tthis.reference_ID = stream.readUint32();\n\tthis.timescale = stream.readUint32();\n\tif (this.version === 0) {\n\t\tthis.earliest_presentation_time = stream.readUint32();\n\t\tthis.first_offset = stream.readUint32();\n\t} else {\n\t\tthis.earliest_presentation_time = stream.readUint64();\n\t\tthis.first_offset = stream.readUint64();\n\t}\n\tstream.readUint16();\n\tthis.references = [];\n\tvar count = stream.readUint16();\n\tfor (var i = 0; i < count; i++) {\n\t\tvar ref = {};\n\t\tthis.references.push(ref);\n\t\tvar tmp_32 = stream.readUint32();\n\t\tref.reference_type = (tmp_32 >> 31) & 0x1;\n\t\tref.referenced_size = tmp_32 & 0x7FFFFFFF;\n\t\tref.subsegment_duration = stream.readUint32();\n\t\ttmp_32 = stream.readUint32();\n\t\tref.starts_with_SAP = (tmp_32 >> 31) & 0x1;\n\t\tref.SAP_type = (tmp_32 >> 28) & 0x7;\n\t\tref.SAP_delta_time = tmp_32 & 0xFFFFFFF;\n\t}\n});\n\n// file:src/parsing/singleitemtypereference.js\nBoxParser.SingleItemTypeReferenceBox = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.SingleItemTypeReferenceBox.prototype = new BoxParser.Box();\nBoxParser.SingleItemTypeReferenceBox.prototype.parse = function(stream) {\n\tthis.from_item_ID = stream.readUint16();\n\tvar count = stream.readUint16();\n\tthis.references = [];\n\tfor(var i = 0; i < count; i++) {\n\t\tthis.references[i] = {};\n\t\tthis.references[i].to_item_ID = stream.readUint16();\n\t}\n}\n\n// file:src/parsing/singleitemtypereferencelarge.js\nBoxParser.SingleItemTypeReferenceBoxLarge = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.SingleItemTypeReferenceBoxLarge.prototype = new BoxParser.Box();\nBoxParser.SingleItemTypeReferenceBoxLarge.prototype.parse = function(stream) {\n\tthis.from_item_ID = stream.readUint32();\n\tvar count = stream.readUint16();\n\tthis.references = [];\n\tfor(var i = 0; i < count; i++) {\n\t\tthis.references[i] = {};\n\t\tthis.references[i].to_item_ID = stream.readUint32();\n\t}\n}\n\n// file:src/parsing/SmDm.js\nBoxParser.createFullBoxCtor(\"SmDm\", \"SMPTE2086MasteringDisplayMetadataBox\", function(stream) {\n\tthis.primaryRChromaticity_x = stream.readUint16();\n this.primaryRChromaticity_y = stream.readUint16();\n this.primaryGChromaticity_x = stream.readUint16();\n this.primaryGChromaticity_y = stream.readUint16();\n this.primaryBChromaticity_x = stream.readUint16();\n this.primaryBChromaticity_y = stream.readUint16();\n this.whitePointChromaticity_x = stream.readUint16();\n this.whitePointChromaticity_y = stream.readUint16();\n this.luminanceMax = stream.readUint32();\n this.luminanceMin = stream.readUint32();\n});\n\n// file:src/parsing/smhd.js\nBoxParser.createFullBoxCtor(\"smhd\", \"SoundMediaHeaderBox\", function(stream) {\n\tthis.balance = stream.readUint16();\n\tstream.readUint16();\n});\n\n// file:src/parsing/ssix.js\nBoxParser.createFullBoxCtor(\"ssix\", \"CompressedSubsegmentIndexBox\", function(stream) {\n\tthis.subsegments = [];\n\tvar subsegment_count = stream.readUint32();\n\tfor (var i = 0; i < subsegment_count; i++) {\n\t\tvar subsegment = {};\n\t\tthis.subsegments.push(subsegment);\n\t\tsubsegment.ranges = [];\n\t\tvar range_count = stream.readUint32();\n\t\tfor (var j = 0; j < range_count; j++) {\n\t\t\tvar range = {};\n\t\t\tsubsegment.ranges.push(range);\n\t\t\trange.level = stream.readUint8();\n\t\t\trange.range_size = stream.readUint24();\n\t\t}\n\t}\n});\n\n// file:src/parsing/stco.js\nBoxParser.createFullBoxCtor(\"stco\", \"ChunkOffsetBox\", function(stream) {\n\tvar entry_count;\n\tentry_count = stream.readUint32();\n\tthis.chunk_offsets = [];\n\tif (this.version === 0) {\n\t\tfor (var i = 0; i < entry_count; i++) {\n\t\t\tthis.chunk_offsets.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stdp.js\nBoxParser.createFullBoxCtor(\"stdp\", \"DegradationPriorityBox\", function(stream) {\n\tvar count = (this.size - this.hdr_size)/2;\n\tthis.priority = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.priority[i] = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/sthd.js\nBoxParser.createFullBoxCtor(\"sthd\", \"SubtitleMediaHeaderBox\");\n\n// file:src/parsing/stri.js\nBoxParser.createFullBoxCtor(\"stri\", \"SubTrackInformationBox\", function(stream) {\n\tthis.switch_group = stream.readUint16();\n\tthis.alternate_group = stream.readUint16();\n\tthis.sub_track_id = stream.readUint32();\n\tvar count = (this.size - this.hdr_size - 8)/4;\n\tthis.attribute_list = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.attribute_list[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/stsc.js\nBoxParser.createFullBoxCtor(\"stsc\", \"SampleToChunkBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.first_chunk = [];\n\tthis.samples_per_chunk = [];\n\tthis.sample_description_index = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.first_chunk.push(stream.readUint32());\n\t\t\tthis.samples_per_chunk.push(stream.readUint32());\n\t\t\tthis.sample_description_index.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stsd.js\nBoxParser.createFullBoxCtor(\"stsd\", \"SampleDescriptionBox\", function(stream) {\n\tvar i;\n\tvar ret;\n\tvar entryCount;\n\tvar box;\n\tthis.entries = [];\n\tentryCount = stream.readUint32();\n\tfor (i = 1; i <= entryCount; i++) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (BoxParser[ret.type+\"SampleEntry\"]) {\n\t\t\t\tbox = new BoxParser[ret.type+\"SampleEntry\"](ret.size);\n\t\t\t\tbox.hdr_size = ret.hdr_size;\n\t\t\t\tbox.start = ret.start;\n\t\t\t} else {\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown sample entry type: \"+ret.type);\n\t\t\t\tbox = new BoxParser.SampleEntry(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t}\n\t\t\tif (box.write === BoxParser.SampleEntry.prototype.write) {\n\t\t\t\tLog.info(\"BoxParser\", \"SampleEntry \"+box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.entries.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/stsg.js\nBoxParser.createFullBoxCtor(\"stsg\", \"SubTrackSampleGroupBox\", function(stream) {\n\tthis.grouping_type = stream.readUint32();\n\tvar count = stream.readUint16();\n\tthis.group_description_index = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.group_description_index[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/stsh.js\nBoxParser.createFullBoxCtor(\"stsh\", \"ShadowSyncSampleBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.shadowed_sample_numbers = [];\n\tthis.sync_sample_numbers = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.shadowed_sample_numbers.push(stream.readUint32());\n\t\t\tthis.sync_sample_numbers.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stss.js\nBoxParser.createFullBoxCtor(\"stss\", \"SyncSampleBox\", function(stream) {\n\tvar i;\n\tvar entry_count;\n\tentry_count = stream.readUint32();\n\tif (this.version === 0) {\n\t\tthis.sample_numbers = [];\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_numbers.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stsz.js\nBoxParser.createFullBoxCtor(\"stsz\", \"SampleSizeBox\", function(stream) {\n\tvar i;\n\tthis.sample_sizes = [];\n\tif (this.version === 0) {\n\t\tthis.sample_size = stream.readUint32();\n\t\tthis.sample_count = stream.readUint32();\n\t\tfor (i = 0; i < this.sample_count; i++) {\n\t\t\tif (this.sample_size === 0) {\n\t\t\t\tthis.sample_sizes.push(stream.readUint32());\n\t\t\t} else {\n\t\t\t\tthis.sample_sizes[i] = this.sample_size;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/stts.js\nBoxParser.createFullBoxCtor(\"stts\", \"TimeToSampleBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tvar delta;\n\tentry_count = stream.readUint32();\n\tthis.sample_counts = [];\n\tthis.sample_deltas = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_counts.push(stream.readUint32());\n\t\t\tdelta = stream.readInt32();\n\t\t\tif (delta < 0) {\n\t\t\t\tLog.warn(\"BoxParser\", \"File uses negative stts sample delta, using value 1 instead, sync may be lost!\");\n\t\t\t\tdelta = 1;\n\t\t\t}\n\t\t\tthis.sample_deltas.push(delta);\n\t\t}\n\t}\n});\n\n// file:src/parsing/stvi.js\nBoxParser.createFullBoxCtor(\"stvi\", \"StereoVideoBox\", function(stream) {\n\tvar tmp32 = stream.readUint32();\n\tthis.single_view_allowed = tmp32 & 0x3;\n\tthis.stereo_scheme = stream.readUint32();\n\tvar length = stream.readUint32();\n\tthis.stereo_indication_type = stream.readString(length);\n\tvar ret;\n\tvar box;\n\tthis.boxes = [];\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.boxes.push(box);\n\t\t\tthis[box.type] = box;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/styp.js\nBoxParser.createBoxCtor(\"styp\", \"SegmentTypeBox\", function(stream) {\n\tBoxParser.ftypBox.prototype.parse.call(this, stream);\n});\n\n// file:src/parsing/stz2.js\nBoxParser.createFullBoxCtor(\"stz2\", \"CompactSampleSizeBox\", function(stream) {\n\tvar i;\n\tvar sample_size;\n\tvar sample_count;\n\tthis.sample_sizes = [];\n\tif (this.version === 0) {\n\t\tthis.reserved = stream.readUint24();\n\t\tthis.field_size = stream.readUint8();\n\t\tsample_count = stream.readUint32();\n\t\tif (this.field_size === 4) {\n\t\t\tfor (i = 0; i < sample_count; i+=2) {\n\t\t\t\tvar tmp = stream.readUint8();\n\t\t\t\tthis.sample_sizes[i] = (tmp >> 4) & 0xF;\n\t\t\t\tthis.sample_sizes[i+1] = tmp & 0xF;\n\t\t\t}\n\t\t} else if (this.field_size === 8) {\n\t\t\tfor (i = 0; i < sample_count; i++) {\n\t\t\t\tthis.sample_sizes[i] = stream.readUint8();\n\t\t\t}\n\t\t} else if (this.field_size === 16) {\n\t\t\tfor (i = 0; i < sample_count; i++) {\n\t\t\t\tthis.sample_sizes[i] = stream.readUint16();\n\t\t\t}\n\t\t} else {\n\t\t\tLog.error(\"BoxParser\", \"Error in length field in stz2 box\");\n\t\t}\n\t}\n});\n\n// file:src/parsing/subs.js\nBoxParser.createFullBoxCtor(\"subs\", \"SubSampleInformationBox\", function(stream) {\n\tvar i,j;\n\tvar entry_count;\n\tvar subsample_count;\n\tentry_count = stream.readUint32();\n\tthis.entries = [];\n\tfor (i = 0; i < entry_count; i++) {\n\t\tvar sampleInfo = {};\n\t\tthis.entries[i] = sampleInfo;\n\t\tsampleInfo.sample_delta = stream.readUint32();\n\t\tsampleInfo.subsamples = [];\n\t\tsubsample_count = stream.readUint16();\n\t\tif (subsample_count>0) {\n\t\t\tfor (j = 0; j < subsample_count; j++) {\n\t\t\t\tvar subsample = {};\n\t\t\t\tsampleInfo.subsamples.push(subsample);\n\t\t\t\tif (this.version == 1) {\n\t\t\t\t\tsubsample.size = stream.readUint32();\n\t\t\t\t} else {\n\t\t\t\t\tsubsample.size = stream.readUint16();\n\t\t\t\t}\n\t\t\t\tsubsample.priority = stream.readUint8();\n\t\t\t\tsubsample.discardable = stream.readUint8();\n\t\t\t\tsubsample.codec_specific_parameters = stream.readUint32();\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/tenc.js\nBoxParser.createFullBoxCtor(\"tenc\", \"TrackEncryptionBox\", function(stream) {\n\tstream.readUint8(); // reserved\n\tif (this.version === 0) {\n\t\tstream.readUint8();\n\t} else {\n\t\tvar tmp = stream.readUint8();\n\t\tthis.default_crypt_byte_block = (tmp >> 4) & 0xF;\n\t\tthis.default_skip_byte_block = tmp & 0xF;\n\t}\n\tthis.default_isProtected = stream.readUint8();\n\tthis.default_Per_Sample_IV_Size = stream.readUint8();\n\tthis.default_KID = BoxParser.parseHex16(stream);\n\tif (this.default_isProtected === 1 && this.default_Per_Sample_IV_Size === 0) {\n\t\tthis.default_constant_IV_size = stream.readUint8();\n\t\tthis.default_constant_IV = stream.readUint8Array(this.default_constant_IV_size);\n\t}\n});// file:src/parsing/tfdt.js\nBoxParser.createFullBoxCtor(\"tfdt\", \"TrackFragmentBaseMediaDecodeTimeBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.baseMediaDecodeTime = stream.readUint64();\n\t} else {\n\t\tthis.baseMediaDecodeTime = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/tfhd.js\nBoxParser.createFullBoxCtor(\"tfhd\", \"TrackFragmentHeaderBox\", function(stream) {\n\tvar readBytes = 0;\n\tthis.track_id = stream.readUint32();\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET)) {\n\t\tthis.base_data_offset = stream.readUint64();\n\t\treadBytes += 8;\n\t} else {\n\t\tthis.base_data_offset = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC)) {\n\t\tthis.default_sample_description_index = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_description_index = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR)) {\n\t\tthis.default_sample_duration = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_duration = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE)) {\n\t\tthis.default_sample_size = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_size = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS)) {\n\t\tthis.default_sample_flags = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_flags = 0;\n\t}\n});\n\n// file:src/parsing/tfra.js\nBoxParser.createFullBoxCtor(\"tfra\", \"TrackFragmentRandomAccessBox\", function(stream) {\n\tthis.track_ID = stream.readUint32();\n\tstream.readUint24();\n\tvar tmp_byte = stream.readUint8();\n\tthis.length_size_of_traf_num = (tmp_byte >> 4) & 0x3;\n\tthis.length_size_of_trun_num = (tmp_byte >> 2) & 0x3;\n\tthis.length_size_of_sample_num = (tmp_byte) & 0x3;\n\tthis.entries = [];\n\tvar number_of_entries = stream.readUint32();\n\tfor (var i = 0; i < number_of_entries; i++) {\n\t\tif (this.version === 1) {\n\t\t\tthis.time = stream.readUint64();\n\t\t\tthis.moof_offset = stream.readUint64();\n\t\t} else {\n\t\t\tthis.time = stream.readUint32();\n\t\t\tthis.moof_offset = stream.readUint32();\n\t\t}\n\t\tthis.traf_number = stream[\"readUint\"+(8*(this.length_size_of_traf_num+1))]();\n\t\tthis.trun_number = stream[\"readUint\"+(8*(this.length_size_of_trun_num+1))]();\n\t\tthis.sample_number = stream[\"readUint\"+(8*(this.length_size_of_sample_num+1))]();\n\t}\n});\n\n// file:src/parsing/tkhd.js\nBoxParser.createFullBoxCtor(\"tkhd\", \"TrackHeaderBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.track_id = stream.readUint32();\n\t\tstream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.track_id = stream.readUint32();\n\t\tstream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tstream.readUint32Array(2);\n\tthis.layer = stream.readInt16();\n\tthis.alternate_group = stream.readInt16();\n\tthis.volume = stream.readInt16()>>8;\n\tstream.readUint16();\n\tthis.matrix = stream.readInt32Array(9);\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});\n\n// file:src/parsing/tmax.js\nBoxParser.createBoxCtor(\"tmax\", \"hintmaxrelativetime\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/tmin.js\nBoxParser.createBoxCtor(\"tmin\", \"hintminrelativetime\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/totl.js\nBoxParser.createBoxCtor(\"totl\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint32();\n});\n\n// file:src/parsing/tpay.js\nBoxParser.createBoxCtor(\"tpay\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint32();\n});\n\n// file:src/parsing/tpyl.js\nBoxParser.createBoxCtor(\"tpyl\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/TrackGroup.js\nBoxParser.TrackGroupTypeBox.prototype.parse = function(stream) {\n\tthis.parseFullHeader(stream);\n\tthis.track_group_id = stream.readUint32();\n}\n\n// file:src/parsing/trackgroups/msrc.js\nBoxParser.createTrackGroupCtor(\"msrc\");// file:src/parsing/TrakReference.js\nBoxParser.TrackReferenceTypeBox = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.TrackReferenceTypeBox.prototype = new BoxParser.Box();\nBoxParser.TrackReferenceTypeBox.prototype.parse = function(stream) {\n\tthis.track_ids = stream.readUint32Array((this.size-this.hdr_size)/4);\n}\n\n// file:src/parsing/tref.js\nBoxParser.trefBox.prototype.parse = function(stream) {\n\tvar ret;\n\tvar box;\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = new BoxParser.TrackReferenceTypeBox(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\t\t\tLog.info(\"BoxParser\", \"TrackReference \"+box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.boxes.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\n// file:src/parsing/trep.js\nBoxParser.createFullBoxCtor(\"trep\", \"TrackExtensionPropertiesBox\", function(stream) {\n\tthis.track_ID = stream.readUint32();\n\tthis.boxes = [];\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.boxes.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/trex.js\nBoxParser.createFullBoxCtor(\"trex\", \"TrackExtendsBox\", function(stream) {\n\tthis.track_id = stream.readUint32();\n\tthis.default_sample_description_index = stream.readUint32();\n\tthis.default_sample_duration = stream.readUint32();\n\tthis.default_sample_size = stream.readUint32();\n\tthis.default_sample_flags = stream.readUint32();\n});\n\n// file:src/parsing/trpy.js\nBoxParser.createBoxCtor(\"trpy\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/trun.js\nBoxParser.createFullBoxCtor(\"trun\", \"TrackRunBox\", function(stream) {\n\tvar readBytes = 0;\n\tthis.sample_count = stream.readUint32();\n\treadBytes+= 4;\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) ) {\n\t\tthis.data_offset = stream.readInt32(); //signed\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.data_offset = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) ) {\n\t\tthis.first_sample_flags = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.first_sample_flags = 0;\n\t}\n\tthis.sample_duration = [];\n\tthis.sample_size = [];\n\tthis.sample_flags = [];\n\tthis.sample_composition_time_offset = [];\n\tif (this.size - this.hdr_size > readBytes) {\n\t\tfor (var i = 0; i < this.sample_count; i++) {\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\t\tthis.sample_duration[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\t\tthis.sample_size[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\t\tthis.sample_flags[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\t\tif (this.version === 0) {\n\t\t\t\t\tthis.sample_composition_time_offset[i] = stream.readUint32();\n\t\t\t\t} else {\n\t\t\t\t\tthis.sample_composition_time_offset[i] = stream.readInt32(); //signed\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/tsel.js\nBoxParser.createFullBoxCtor(\"tsel\", \"TrackSelectionBox\", function(stream) {\n\tthis.switch_group = stream.readUint32();\n\tvar count = (this.size - this.hdr_size - 4)/4;\n\tthis.attribute_list = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.attribute_list[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/txtC.js\nBoxParser.createFullBoxCtor(\"txtC\", \"TextConfigBox\", function(stream) {\n\tthis.config = stream.readCString();\n});\n\n// file:src/parsing/tyco.js\nBoxParser.createBoxCtor(\"tyco\", \"TypeCombinationBox\", function(stream) {\n\tvar count = (this.size - this.hdr_size) / 4;\n\tthis.compatible_brands = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.compatible_brands[i] = stream.readString(4);\n\t}\n});\n\n// file:src/parsing/udes.js\nBoxParser.createFullBoxCtor(\"udes\", \"UserDescriptionProperty\", function(stream) {\n\tthis.lang = stream.readCString();\n\tthis.name = stream.readCString();\n\tthis.description = stream.readCString();\n\tthis.tags = stream.readCString();\n});\n\n// file:src/parsing/uncC.js\nBoxParser.createFullBoxCtor(\"uncC\", \"UncompressedFrameConfigBox\", function(stream) {\n var i;\n this.profile = stream.readString(4);\n if (this.version == 1) {\n // Nothing - just the profile\n } else if (this.version == 0) {\n this.component_count = stream.readUint32();\n this.component_index = [];\n this.component_bit_depth_minus_one = [];\n this.component_format = [];\n this.component_align_size = [];\n for (i = 0; i < this.component_count; i++) {\n this.component_index.push(stream.readUint16());\n this.component_bit_depth_minus_one.push(stream.readUint8());\n this.component_format.push(stream.readUint8());\n this.component_align_size.push(stream.readUint8());\n }\n this.sampling_type = stream.readUint8();\n this.interleave_type = stream.readUint8();\n this.block_size = stream.readUint8();\n var flags = stream.readUint8();\n this.component_little_endian = (flags >> 7) & 0x1;\n this.block_pad_lsb = (flags >> 6) & 0x1;\n this.block_little_endian = (flags >> 5) & 0x1;\n this.block_reversed = (flags >> 4) & 0x1;\n this.pad_unknown = (flags >> 3) & 0x1;\n this.pixel_size = stream.readUint32();\n this.row_align_size = stream.readUint32();\n this.tile_align_size = stream.readUint32();\n this.num_tile_cols_minus_one = stream.readUint32();\n this.num_tile_rows_minus_one = stream.readUint32();\n }\n});\n\n// file:src/parsing/url.js\nBoxParser.createFullBoxCtor(\"url \", \"DataEntryUrlBox\", function(stream) {\n\tif (this.flags !== 0x000001) {\n\t\tthis.location = stream.readCString();\n\t}\n});\n\n// file:src/parsing/urn.js\nBoxParser.createFullBoxCtor(\"urn \", \"DataEntryUrnBox\", function(stream) {\n\tthis.name = stream.readCString();\n\tif (this.size - this.hdr_size - this.name.length - 1 > 0) {\n\t\tthis.location = stream.readCString();\n\t}\n});\n\n// file:src/parsing/uuid/piff/piffLsm.js\nBoxParser.createUUIDBox(\"a5d40b30e81411ddba2f0800200c9a66\", \"LiveServerManifestBox\", true, false, function(stream) {\n this.LiveServerManifest = stream.readString(this.size - this.hdr_size)\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n});// file:src/parsing/uuid/piff/piffPssh.js\nBoxParser.createUUIDBox(\"d08a4f1810f34a82b6c832d8aba183d3\", \"PiffProtectionSystemSpecificHeaderBox\", true, false, function(stream) {\n\tthis.system_id = BoxParser.parseHex16(stream);\n\tvar datasize = stream.readUint32();\n\tif (datasize > 0) {\n\t\tthis.data = stream.readUint8Array(datasize);\n\t}\n});\n\n// file:src/parsing/uuid/piff/piffSenc.js\nBoxParser.createUUIDBox(\"a2394f525a9b4f14a2446c427c648df4\", \"PiffSampleEncryptionBox\", true, false /*, function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.AlgorithmID = stream.readUint24();\n\t\tthis.IV_size = stream.readUint8();\n\t\tthis.KID = BoxParser.parseHex16(stream);\n\t}\n\tvar sample_count = stream.readUint32();\n\tthis.samples = [];\n\tfor (var i = 0; i < sample_count; i++) {\n\t\tvar sample = {};\n\t\tsample.InitializationVector = this.readUint8Array(this.IV_size*8);\n\t\tif (this.flags & 0x2) {\n\t\t\tsample.subsamples = [];\n\t\t\tsample.NumberOfEntries = stream.readUint16();\n\t\t\tfor (var j = 0; j < sample.NumberOfEntries; j++) {\n\t\t\t\tvar subsample = {};\n\t\t\t\tsubsample.BytesOfClearData = stream.readUint16();\n\t\t\t\tsubsample.BytesOfProtectedData = stream.readUint32();\n\t\t\t\tsample.subsamples.push(subsample);\n\t\t\t}\n\t\t}\n\t\tthis.samples.push(sample);\n\t}\n}*/);\n// file:src/parsing/uuid/piff/piffTenc.js\nBoxParser.createUUIDBox(\"8974dbce7be74c5184f97148f9882554\", \"PiffTrackEncryptionBox\", true, false, function(stream) {\n\tthis.default_AlgorithmID = stream.readUint24();\n\tthis.default_IV_size = stream.readUint8();\n\tthis.default_KID = BoxParser.parseHex16(stream);\n});// file:src/parsing/uuid/piff/piffTfrf.js\nBoxParser.createUUIDBox(\"d4807ef2ca3946958e5426cb9e46a79f\", \"TfrfBox\", true, false, function(stream) {\n this.fragment_count = stream.readUint8();\n this.entries = [];\n\n for (var i = 0; i < this.fragment_count; i++) {\n var entry = {};\n var absolute_time = 0;\n var absolute_duration = 0;\n\n if (this.version === 1) {\n absolute_time = stream.readUint64();\n absolute_duration = stream.readUint64();\n } else {\n absolute_time = stream.readUint32();\n absolute_duration = stream.readUint32();\n }\n\n entry.absolute_time = absolute_time;\n entry.absolute_duration = absolute_duration;\n\n this.entries.push(entry);\n }\n});// file:src/parsing/uuid/piff/piffTfxd.js\nBoxParser.createUUIDBox(\"6d1d9b0542d544e680e2141daff757b2\", \"TfxdBox\", true, false, function(stream) {\n if (this.version === 1) {\n this.absolute_time = stream.readUint64();\n this.duration = stream.readUint64();\n } else {\n this.absolute_time = stream.readUint32();\n this.duration = stream.readUint32();\n }\n});// file:src/parsing/vmhd.js\nBoxParser.createFullBoxCtor(\"vmhd\", \"VideoMediaHeaderBox\", function(stream) {\n\tthis.graphicsmode = stream.readUint16();\n\tthis.opcolor = stream.readUint16Array(3);\n});\n\n// file:src/parsing/vpcC.js\nBoxParser.createFullBoxCtor(\"vpcC\", \"VPCodecConfigurationRecord\", function (stream) {\n\tvar tmp;\n\tif (this.version === 1) {\n\t\tthis.profile = stream.readUint8();\n\t\tthis.level = stream.readUint8();\n\t\ttmp = stream.readUint8();\n\t\tthis.bitDepth = tmp >> 4;\n\t\tthis.chromaSubsampling = (tmp >> 1) & 0x7;\n\t\tthis.videoFullRangeFlag = tmp & 0x1;\n\t\tthis.colourPrimaries = stream.readUint8();\n\t\tthis.transferCharacteristics = stream.readUint8();\n\t\tthis.matrixCoefficients = stream.readUint8();\n\t\tthis.codecIntializationDataSize = stream.readUint16();\n\t\tthis.codecIntializationData = stream.readUint8Array(this.codecIntializationDataSize);\n\t} else {\n\t\tthis.profile = stream.readUint8();\n\t\tthis.level = stream.readUint8();\n\t\ttmp = stream.readUint8();\n\t\tthis.bitDepth = (tmp >> 4) & 0xF;\n\t\tthis.colorSpace = tmp & 0xF;\n\t\ttmp = stream.readUint8();\n\t\tthis.chromaSubsampling = (tmp >> 4) & 0xF;\n\t\tthis.transferFunction = (tmp >> 1) & 0x7;\n\t\tthis.videoFullRangeFlag = tmp & 0x1;\n\t\tthis.codecIntializationDataSize = stream.readUint16();\n\t\tthis.codecIntializationData = stream.readUint8Array(this.codecIntializationDataSize);\n\t}\n});// file:src/parsing/vttC.js\nBoxParser.createBoxCtor(\"vttC\", \"WebVTTConfigurationBox\", function(stream) {\n\tthis.text = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/vvcC.js\nBoxParser.createFullBoxCtor(\"vvcC\", \"VvcConfigurationBox\", function (stream) {\n var i, j;\n\n // helper object to simplify extracting individual bits\n var bitReader = {\n held_bits: undefined,\n num_held_bits: 0,\n\n stream_read_1_bytes: function (strm) {\n this.held_bits = strm.readUint8();\n this.num_held_bits = 1 * 8;\n },\n stream_read_2_bytes: function (strm) {\n this.held_bits = strm.readUint16();\n this.num_held_bits = 2 * 8;\n },\n\n extract_bits: function (num_bits) {\n var ret = (this.held_bits >> (this.num_held_bits - num_bits)) & ((1 << num_bits) - 1);\n this.num_held_bits -= num_bits;\n return ret;\n }\n };\n\n // VvcDecoderConfigurationRecord\n bitReader.stream_read_1_bytes(stream);\n bitReader.extract_bits(5); // reserved\n this.lengthSizeMinusOne = bitReader.extract_bits(2);\n this.ptl_present_flag = bitReader.extract_bits(1);\n\n if (this.ptl_present_flag) {\n bitReader.stream_read_2_bytes(stream);\n this.ols_idx = bitReader.extract_bits(9);\n this.num_sublayers = bitReader.extract_bits(3);\n this.constant_frame_rate = bitReader.extract_bits(2);\n this.chroma_format_idc = bitReader.extract_bits(2);\n\n bitReader.stream_read_1_bytes(stream);\n this.bit_depth_minus8 = bitReader.extract_bits(3);\n bitReader.extract_bits(5); // reserved\n\n // VvcPTLRecord\n {\n bitReader.stream_read_2_bytes(stream);\n bitReader.extract_bits(2); // reserved\n this.num_bytes_constraint_info = bitReader.extract_bits(6);\n this.general_profile_idc = bitReader.extract_bits(7);\n this.general_tier_flag = bitReader.extract_bits(1);\n\n this.general_level_idc = stream.readUint8();\n\n bitReader.stream_read_1_bytes(stream);\n this.ptl_frame_only_constraint_flag = bitReader.extract_bits(1);\n this.ptl_multilayer_enabled_flag = bitReader.extract_bits(1);\n\n this.general_constraint_info = new Uint8Array(this.num_bytes_constraint_info);\n if (this.num_bytes_constraint_info) {\n for (i = 0; i < this.num_bytes_constraint_info - 1; i++) {\n var cnstr1 = bitReader.extract_bits(6);\n bitReader.stream_read_1_bytes(stream);\n var cnstr2 = bitReader.extract_bits(2);\n\n this.general_constraint_info[i] = ((cnstr1 << 2) | cnstr2);\n }\n this.general_constraint_info[this.num_bytes_constraint_info - 1] = bitReader.extract_bits(6);\n } else {\n //forbidden in spec!\n bitReader.extract_bits(6);\n }\n\n if (this.num_sublayers > 1) {\n bitReader.stream_read_1_bytes(stream);\n this.ptl_sublayer_present_mask = 0;\n for (j = this.num_sublayers - 2; j >= 0; --j) {\n var val = bitReader.extract_bits(1);\n this.ptl_sublayer_present_mask |= val << j;\n }\n for (j = this.num_sublayers; j <= 8 && this.num_sublayers > 1; ++j) {\n bitReader.extract_bits(1); // ptl_reserved_zero_bit\n }\n\n this.sublayer_level_idc = [];\n for (j = this.num_sublayers - 2; j >= 0; --j) {\n if (this.ptl_sublayer_present_mask & (1 << j)) {\n this.sublayer_level_idc[j] = stream.readUint8();\n }\n }\n }\n\n this.ptl_num_sub_profiles = stream.readUint8();\n this.general_sub_profile_idc = [];\n if (this.ptl_num_sub_profiles) {\n for (i = 0; i < this.ptl_num_sub_profiles; i++) {\n this.general_sub_profile_idc.push(stream.readUint32());\n }\n }\n } // end VvcPTLRecord\n\n this.max_picture_width = stream.readUint16();\n this.max_picture_height = stream.readUint16();\n this.avg_frame_rate = stream.readUint16();\n }\n\n var VVC_NALU_OPI = 12;\n var VVC_NALU_DEC_PARAM = 13;\n\n this.nalu_arrays = [];\n var num_of_arrays = stream.readUint8();\n for (i = 0; i < num_of_arrays; i++) {\n var nalu_array = [];\n this.nalu_arrays.push(nalu_array);\n\n bitReader.stream_read_1_bytes(stream);\n nalu_array.completeness = bitReader.extract_bits(1);\n bitReader.extract_bits(2); // reserved\n nalu_array.nalu_type = bitReader.extract_bits(5);\n\n var numNalus = 1;\n if (nalu_array.nalu_type != VVC_NALU_DEC_PARAM && nalu_array.nalu_type != VVC_NALU_OPI) {\n numNalus = stream.readUint16();\n }\n\n for (j = 0; j < numNalus; j++) {\n var len = stream.readUint16();\n nalu_array.push({\n data: stream.readUint8Array(len),\n length: len\n });\n }\n }\n});\n// file:src/parsing/vvnC.js\nBoxParser.createFullBoxCtor(\"vvnC\", \"VvcNALUConfigBox\", function (stream) {\n // VvcNALUConfigBox\n var tmp = strm.readUint8();\n this.lengthSizeMinusOne = (tmp & 0x3);\n});\n// file:src/box-codecs.js\nBoxParser.SampleEntry.prototype.isVideo = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isAudio = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isSubtitle = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isMetadata = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isHint = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.getCodec = function() {\n\treturn this.type.replace('.','');\n}\n\nBoxParser.SampleEntry.prototype.getWidth = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getHeight = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getChannelCount = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getSampleRate = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getSampleSize = function() {\n\treturn \"\";\n}\n\nBoxParser.VisualSampleEntry.prototype.isVideo = function() {\n\treturn true;\n}\n\nBoxParser.VisualSampleEntry.prototype.getWidth = function() {\n\treturn this.width;\n}\n\nBoxParser.VisualSampleEntry.prototype.getHeight = function() {\n\treturn this.height;\n}\n\nBoxParser.AudioSampleEntry.prototype.isAudio = function() {\n\treturn true;\n}\n\nBoxParser.AudioSampleEntry.prototype.getChannelCount = function() {\n\treturn this.channel_count;\n}\n\nBoxParser.AudioSampleEntry.prototype.getSampleRate = function() {\n\treturn this.samplerate;\n}\n\nBoxParser.AudioSampleEntry.prototype.getSampleSize = function() {\n\treturn this.samplesize;\n}\n\nBoxParser.SubtitleSampleEntry.prototype.isSubtitle = function() {\n\treturn true;\n}\n\nBoxParser.MetadataSampleEntry.prototype.isMetadata = function() {\n\treturn true;\n}\n\n\nBoxParser.decimalToHex = function(d, padding) {\n\tvar hex = Number(d).toString(16);\n\tpadding = typeof (padding) === \"undefined\" || padding === null ? padding = 2 : padding;\n\twhile (hex.length < padding) {\n\t\thex = \"0\" + hex;\n\t}\n\treturn hex;\n}\n\nBoxParser.avc1SampleEntry.prototype.getCodec =\nBoxParser.avc2SampleEntry.prototype.getCodec =\nBoxParser.avc3SampleEntry.prototype.getCodec =\nBoxParser.avc4SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.avcC) {\n\t\treturn baseCodec+\".\"+BoxParser.decimalToHex(this.avcC.AVCProfileIndication)+\n\t\t\t\t\t\t \"\"+BoxParser.decimalToHex(this.avcC.profile_compatibility)+\n\t\t\t\t\t\t \"\"+BoxParser.decimalToHex(this.avcC.AVCLevelIndication);\n\t} else {\n\t\treturn baseCodec;\n\t}\n}\n\nBoxParser.hev1SampleEntry.prototype.getCodec =\nBoxParser.hvc1SampleEntry.prototype.getCodec = function() {\n\tvar i;\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.hvcC) {\n\t\tbaseCodec += '.';\n\t\tswitch (this.hvcC.general_profile_space) {\n\t\t\tcase 0:\n\t\t\t\tbaseCodec += '';\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tbaseCodec += 'A';\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tbaseCodec += 'B';\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tbaseCodec += 'C';\n\t\t\t\tbreak;\n\t\t}\n\t\tbaseCodec += this.hvcC.general_profile_idc;\n\t\tbaseCodec += '.';\n\t\tvar val = this.hvcC.general_profile_compatibility;\n\t\tvar reversed = 0;\n\t\tfor (i=0; i<32; i++) {\n\t\t\treversed |= val & 1;\n\t\t\tif (i==31) break;\n\t\t\treversed <<= 1;\n\t\t\tval >>=1;\n\t\t}\n\t\tbaseCodec += BoxParser.decimalToHex(reversed, 0);\n\t\tbaseCodec += '.';\n\t\tif (this.hvcC.general_tier_flag === 0) {\n\t\t\tbaseCodec += 'L';\n\t\t} else {\n\t\t\tbaseCodec += 'H';\n\t\t}\n\t\tbaseCodec += this.hvcC.general_level_idc;\n\t\tvar hasByte = false;\n\t\tvar constraint_string = \"\";\n\t\tfor (i = 5; i >= 0; i--) {\n\t\t\tif (this.hvcC.general_constraint_indicator[i] || hasByte) {\n\t\t\t\tconstraint_string = \".\"+BoxParser.decimalToHex(this.hvcC.general_constraint_indicator[i], 0)+constraint_string;\n\t\t\t\thasByte = true;\n\t\t\t}\n\t\t}\n\t\tbaseCodec += constraint_string;\n\t}\n\treturn baseCodec;\n}\n\nBoxParser.vvc1SampleEntry.prototype.getCodec =\nBoxParser.vvi1SampleEntry.prototype.getCodec = function () {\n\tvar i;\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.vvcC) {\n\t\tbaseCodec += '.' + this.vvcC.general_profile_idc;\n\t\tif (this.vvcC.general_tier_flag) {\n\t\t\tbaseCodec += '.H';\n\t\t} else {\n\t\t\tbaseCodec += '.L';\n\t\t}\n\t\tbaseCodec += this.vvcC.general_level_idc;\n\n\t\tvar constraint_string = \"\";\n\t\tif (this.vvcC.general_constraint_info) {\n\t\t\tvar bytes = [];\n\t\t\tvar byte = 0;\n\t\t\tbyte |= this.vvcC.ptl_frame_only_constraint << 7;\n\t\t\tbyte |= this.vvcC.ptl_multilayer_enabled << 6;\n\t\t\tvar last_nonzero;\n\t\t\tfor (i = 0; i < this.vvcC.general_constraint_info.length; ++i) {\n\t\t\t\tbyte |= (this.vvcC.general_constraint_info[i] >> 2) & 0x3f;\n\t\t\t\tbytes.push(byte);\n\t\t\t\tif (byte) {\n\t\t\t\t\tlast_nonzero = i;\n\t\t\t\t}\n\n\t\t\t\tbyte = (this.vvcC.general_constraint_info[i] >> 2) & 0x03;\n\t\t\t}\n\n\t\t\tif (last_nonzero === undefined) {\n\t\t\t\tconstraint_string = \".CA\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconstraint_string = \".C\"\n\t\t\t\tvar base32_chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n\t\t\t\tvar held_bits = 0;\n\t\t\t\tvar num_held_bits = 0;\n\t\t\t\tfor (i = 0; i <= last_nonzero; ++i) {\n\t\t\t\t\theld_bits = (held_bits << 8) | bytes[i];\n\t\t\t\t\tnum_held_bits += 8;\n\n\t\t\t\t\twhile (num_held_bits >= 5) {\n\t\t\t\t\t\tvar val = (held_bits >> (num_held_bits - 5)) & 0x1f;\n\t\t\t\t\t\tconstraint_string += base32_chars[val];\n\n\t\t\t\t\t\tnum_held_bits -= 5;\n\t\t\t\t\t\theld_bits &= (1 << num_held_bits) - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (num_held_bits) {\n\t\t\t\t\theld_bits <<= (5 - num_held_bits); // right-pad with zeros to 5 bits (is this correct?)\n\t\t\t\t\tconstraint_string += base32_chars[held_bits & 0x1f];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbaseCodec += constraint_string;\n\t}\n\treturn baseCodec;\n}\n\nBoxParser.mp4aSampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.esds && this.esds.esd) {\n\t\tvar oti = this.esds.esd.getOTI();\n\t\tvar dsi = this.esds.esd.getAudioConfig();\n\t\treturn baseCodec+\".\"+BoxParser.decimalToHex(oti)+(dsi ? \".\"+dsi: \"\");\n\t} else {\n\t\treturn baseCodec;\n\t}\n}\n\nBoxParser.stxtSampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif(this.mime_format) {\n\t\treturn baseCodec + \".\" + this.mime_format;\n\t} else {\n\t\treturn baseCodec\n\t}\n}\n\nBoxParser.vp08SampleEntry.prototype.getCodec =\nBoxParser.vp09SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tvar level = this.vpcC.level;\n\tif (level == 0) {\n\t\tlevel = \"00\";\n\t}\n\tvar bitDepth = this.vpcC.bitDepth;\n\tif (bitDepth == 8) {\n\t\tbitDepth = \"08\";\n\t}\n\treturn baseCodec + \".0\" + this.vpcC.profile + \".\" + level + \".\" + bitDepth;\n}\n\nBoxParser.av01SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tvar level = this.av1C.seq_level_idx_0;\n\tif (level < 10) {\n\t\tlevel = \"0\" + level;\n\t}\n\tvar bitdepth;\n\tif (this.av1C.seq_profile === 2 && this.av1C.high_bitdepth === 1) {\n\t\tbitdepth = (this.av1C.twelve_bit === 1) ? \"12\" : \"10\";\n\t} else if ( this.av1C.seq_profile <= 2 ) {\n\t\tbitdepth = (this.av1C.high_bitdepth === 1) ? \"10\" : \"08\";\n\t}\n\t// TODO need to parse the SH to find color config\n\treturn baseCodec+\".\"+this.av1C.seq_profile+\".\"+level+(this.av1C.seq_tier_0?\"H\":\"M\")+\".\"+bitdepth;//+\".\"+this.av1C.monochrome+\".\"+this.av1C.chroma_subsampling_x+\"\"+this.av1C.chroma_subsampling_y+\"\"+this.av1C.chroma_sample_position;\n}\n// file:src/box-write.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.Box.prototype.writeHeader = function(stream, msg) {\n\tthis.size += 8;\n\tif (this.size > MAX_SIZE) {\n\t\tthis.size += 8;\n\t}\n\tif (this.type === \"uuid\") {\n\t\tthis.size += 16;\n\t}\n\tLog.debug(\"BoxWriter\", \"Writing box \"+this.type+\" of size: \"+this.size+\" at position \"+stream.getPosition()+(msg || \"\"));\n\tif (this.size > MAX_SIZE) {\n\t\tstream.writeUint32(1);\n\t} else {\n\t\tthis.sizePosition = stream.getPosition();\n\t\tstream.writeUint32(this.size);\n\t}\n\tstream.writeString(this.type, null, 4);\n\tif (this.type === \"uuid\") {\n\t\tstream.writeUint8Array(this.uuid);\n\t}\n\tif (this.size > MAX_SIZE) {\n\t\tstream.writeUint64(this.size);\n\t} \n}\n\nBoxParser.FullBox.prototype.writeHeader = function(stream) {\n\tthis.size += 4;\n\tBoxParser.Box.prototype.writeHeader.call(this, stream, \" v=\"+this.version+\" f=\"+this.flags);\n\tstream.writeUint8(this.version);\n\tstream.writeUint24(this.flags);\n}\n\nBoxParser.Box.prototype.write = function(stream) {\n\tif (this.type === \"mdat\") {\n\t\t/* TODO: fix this */\n\t\tif (this.data) {\n\t\t\tthis.size = this.data.length;\n\t\t\tthis.writeHeader(stream);\n\t\t\tstream.writeUint8Array(this.data);\n\t\t}\n\t} else {\n\t\tthis.size = (this.data ? this.data.length : 0);\n\t\tthis.writeHeader(stream);\n\t\tif (this.data) {\n\t\t\tstream.writeUint8Array(this.data);\n\t\t}\n\t}\n}\n\nBoxParser.ContainerBox.prototype.write = function(stream) {\n\tthis.size = 0;\n\tthis.writeHeader(stream);\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tif (this.boxes[i]) {\n\t\t\tthis.boxes[i].write(stream);\n\t\t\tthis.size += this.boxes[i].size;\n\t\t}\n\t}\n\t/* adjusting the size, now that all sub-boxes are known */\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\n}\n\nBoxParser.TrackReferenceTypeBox.prototype.write = function(stream) {\n\tthis.size = this.track_ids.length*4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32Array(this.track_ids);\n}\n\n// file:src/writing/avcC.js\nBoxParser.avcCBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.size = 7;\n\tfor (i = 0; i < this.SPS.length; i++) {\n\t\tthis.size += 2+this.SPS[i].length;\n\t}\n\tfor (i = 0; i < this.PPS.length; i++) {\n\t\tthis.size += 2+this.PPS[i].length;\n\t}\n\tif (this.ext) {\n\t\tthis.size += this.ext.length;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint8(this.configurationVersion);\n\tstream.writeUint8(this.AVCProfileIndication);\n\tstream.writeUint8(this.profile_compatibility);\n\tstream.writeUint8(this.AVCLevelIndication);\n\tstream.writeUint8(this.lengthSizeMinusOne + (63<<2));\n\tstream.writeUint8(this.SPS.length + (7<<5));\n\tfor (i = 0; i < this.SPS.length; i++) {\n\t\tstream.writeUint16(this.SPS[i].length);\n\t\tstream.writeUint8Array(this.SPS[i].nalu);\n\t}\n\tstream.writeUint8(this.PPS.length);\n\tfor (i = 0; i < this.PPS.length; i++) {\n\t\tstream.writeUint16(this.PPS[i].length);\n\t\tstream.writeUint8Array(this.PPS[i].nalu);\n\t}\n\tif (this.ext) {\n\t\tstream.writeUint8Array(this.ext);\n\t}\n}\n\n// file:src/writing/co64.js\nBoxParser.co64Box.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.chunk_offsets.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.chunk_offsets.length);\n\tfor(i=0; i<this.chunk_offsets.length; i++) {\n\t\tstream.writeUint64(this.chunk_offsets[i]);\n\t}\n}\n\n// file:src/writing/cslg.js\nBoxParser.cslgBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4*5;\n\tthis.writeHeader(stream);\n\tstream.writeInt32(this.compositionToDTSShift);\n\tstream.writeInt32(this.leastDecodeToDisplayDelta);\n\tstream.writeInt32(this.greatestDecodeToDisplayDelta);\n\tstream.writeInt32(this.compositionStartTime);\n\tstream.writeInt32(this.compositionEndTime);\n}\n\n// file:src/writing/ctts.js\nBoxParser.cttsBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.sample_counts.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_counts.length);\n\tfor(i=0; i<this.sample_counts.length; i++) {\n\t\tstream.writeUint32(this.sample_counts[i]);\n\t\tif (this.version === 1) {\n\t\t\tstream.writeInt32(this.sample_offsets[i]); /* signed */\n\t\t} else {\t\t\t\n\t\t\tstream.writeUint32(this.sample_offsets[i]); /* unsigned */\n\t\t}\n\t}\n}\n\n// file:src/writing/dref.js\nBoxParser.drefBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4; //\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.entries.length);\n\tfor (var i = 0; i < this.entries.length; i++) {\n\t\tthis.entries[i].write(stream);\n\t\tthis.size += this.entries[i].size;\n\t}\t\n\t/* adjusting the size, now that all sub-boxes are known */\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\n}\n\n// file:src/writing/elng.js\nBoxParser.elngBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = this.extended_language.length;\n\tthis.writeHeader(stream);\n\tstream.writeString(this.extended_language);\n}\n\n// file:src/writing/elst.js\nBoxParser.elstBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4+12*this.entries.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.entries.length);\n\tfor (var i = 0; i < this.entries.length; i++) {\n\t\tvar entry = this.entries[i];\n\t\tstream.writeUint32(entry.segment_duration);\n\t\tstream.writeInt32(entry.media_time);\n\t\tstream.writeInt16(entry.media_rate_integer);\n\t\tstream.writeInt16(entry.media_rate_fraction);\n\t}\n}\n\n// file:src/writing/emsg.js\nBoxParser.emsgBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4*4+this.message_data.length+(this.scheme_id_uri.length+1)+(this.value.length+1);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.scheme_id_uri);\n\tstream.writeCString(this.value);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.presentation_time_delta);\n\tstream.writeUint32(this.event_duration);\n\tstream.writeUint32(this.id);\n\tstream.writeUint8Array(this.message_data);\n}\n\n// file:src/writing/ftyp.js\nBoxParser.ftypBox.prototype.write = function(stream) {\n\tthis.size = 8+4*this.compatible_brands.length;\n\tthis.writeHeader(stream);\n\tstream.writeString(this.major_brand, null, 4);\n\tstream.writeUint32(this.minor_version);\n\tfor (var i = 0; i < this.compatible_brands.length; i++) {\n\t\tstream.writeString(this.compatible_brands[i], null, 4);\n\t}\n}\n\n// file:src/writing/hdlr.js\nBoxParser.hdlrBox.prototype.write = function(stream) {\n\tthis.size = 5*4+this.name.length+1;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(0);\n\tstream.writeString(this.handler, null, 4);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeCString(this.name);\n}\n\n// file:src/writing/hvcC.js\nBoxParser.hvcCBox.prototype.write = function(stream) {\n var i,j;\n this.size = 23;\n\n for (i = 0; i < this.nalu_arrays.length; i++) {\n this.size += 3;\n for (j = 0; j < this.nalu_arrays[i].length; j++) {\n this.size += 2 + this.nalu_arrays[i][j].data.length;\n }\n }\n\n this.writeHeader(stream);\n\n stream.writeUint8(this.configurationVersion);\n stream.writeUint8((this.general_profile_space << 6) +\n (this.general_tier_flag << 5) +\n this.general_profile_idc);\n stream.writeUint32(this.general_profile_compatibility);\n stream.writeUint8Array(this.general_constraint_indicator);\n stream.writeUint8(this.general_level_idc);\n stream.writeUint16(this.min_spatial_segmentation_idc + (15<<24));\n stream.writeUint8(this.parallelismType + (63<<2));\n stream.writeUint8(this.chroma_format_idc + (63<<2));\n stream.writeUint8(this.bit_depth_luma_minus8 + (31<<3));\n stream.writeUint8(this.bit_depth_chroma_minus8 + (31<<3));\n stream.writeUint16(this.avgFrameRate);\n stream.writeUint8((this.constantFrameRate<<6) +\n (this.numTemporalLayers<<3) +\n (this.temporalIdNested<<2) +\n this.lengthSizeMinusOne);\n stream.writeUint8(this.nalu_arrays.length);\n for (i = 0; i < this.nalu_arrays.length; i++) {\n // bit(1) array_completeness + bit(1) reserved = 0 + bit(6) nal_unit_type\n stream.writeUint8((this.nalu_arrays[i].completeness<<7) +\n this.nalu_arrays[i].nalu_type);\n stream.writeUint16(this.nalu_arrays[i].length);\n for (j = 0; j < this.nalu_arrays[i].length; j++) {\n stream.writeUint16(this.nalu_arrays[i][j].data.length);\n stream.writeUint8Array(this.nalu_arrays[i][j].data);\n }\n }\n}\n// file:src/writing/kind.js\nBoxParser.kindBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = (this.schemeURI.length+1)+(this.value.length+1);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.schemeURI);\n\tstream.writeCString(this.value);\n}\n\n// file:src/writing/mdhd.js\nBoxParser.mdhdBox.prototype.write = function(stream) {\n\tthis.size = 4*4+2*2;\n\tthis.flags = 0;\n\tthis.version = 0;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint16(this.language);\n\tstream.writeUint16(0);\n}\n\n// file:src/writing/mehd.js\nBoxParser.mehdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.fragment_duration);\n}\n\n// file:src/writing/mfhd.js\nBoxParser.mfhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sequence_number);\n}\n\n// file:src/writing/mvhd.js\nBoxParser.mvhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 23*4+2*2;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint32(this.rate);\n\tstream.writeUint16(this.volume<<8);\n\tstream.writeUint16(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32Array(this.matrix);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(this.next_track_id);\n}\n\n// file:src/writing/sampleentry.js\nBoxParser.SampleEntry.prototype.writeHeader = function(stream) {\n\tthis.size = 8;\n\tBoxParser.Box.prototype.writeHeader.call(this, stream);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint16(this.data_reference_index);\n}\n\nBoxParser.SampleEntry.prototype.writeFooter = function(stream) {\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tthis.boxes[i].write(stream);\n\t\tthis.size += this.boxes[i].size;\n\t}\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\t\n}\n\nBoxParser.SampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tstream.writeUint8Array(this.data);\n\tthis.size += this.data.length;\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\t\n}\n\nBoxParser.VisualSampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tthis.size += 2*7+6*4+32;\n\tstream.writeUint16(0); \n\tstream.writeUint16(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint16(this.width);\n\tstream.writeUint16(this.height);\n\tstream.writeUint32(this.horizresolution);\n\tstream.writeUint32(this.vertresolution);\n\tstream.writeUint32(0);\n\tstream.writeUint16(this.frame_count);\n\tstream.writeUint8(Math.min(31, this.compressorname.length));\n\tstream.writeString(this.compressorname, null, 31);\n\tstream.writeUint16(this.depth);\n\tstream.writeInt16(-1);\n\tthis.writeFooter(stream);\n}\n\nBoxParser.AudioSampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tthis.size += 2*4+3*4;\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint16(this.channel_count);\n\tstream.writeUint16(this.samplesize);\n\tstream.writeUint16(0);\n\tstream.writeUint16(0);\n\tstream.writeUint32(this.samplerate<<16);\n\tthis.writeFooter(stream);\n}\n\nBoxParser.stppSampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tthis.size += this.namespace.length+1+\n\t\t\t\t this.schema_location.length+1+\n\t\t\t\t this.auxiliary_mime_types.length+1;\n\tstream.writeCString(this.namespace);\n\tstream.writeCString(this.schema_location);\n\tstream.writeCString(this.auxiliary_mime_types);\n\tthis.writeFooter(stream);\n}\n\n// file:src/writing/samplegroups/samplegroup.js\nBoxParser.SampleGroupEntry.prototype.write = function(stream) {\n\tstream.writeUint8Array(this.data);\n}\n\n// file:src/writing/sbgp.js\nBoxParser.sbgpBox.prototype.write = function(stream) {\n\tthis.version = 1;\t\n\tthis.flags = 0;\n\tthis.size = 12+8*this.entries.length;\n\tthis.writeHeader(stream);\n\tstream.writeString(this.grouping_type, null, 4);\n\tstream.writeUint32(this.grouping_type_parameter);\n\tstream.writeUint32(this.entries.length);\n\tfor (var i = 0; i < this.entries.length; i++) {\n\t\tvar entry = this.entries[i];\n\t\tstream.writeInt32(entry.sample_count);\n\t\tstream.writeInt32(entry.group_description_index);\n\t}\n}\n\n// file:src/writing/sgpd.js\nBoxParser.sgpdBox.prototype.write = function(stream) {\n\tvar i;\n\tvar entry;\n\t// leave version as read\n\t// this.version;\n\tthis.flags = 0;\n\tthis.size = 12;\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tentry = this.entries[i];\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tthis.size += 4;\n\t\t\t}\n\t\t\tthis.size += entry.data.length;\n\t\t}\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeString(this.grouping_type, null, 4);\n\tif (this.version === 1) {\n\t\tstream.writeUint32(this.default_length);\n\t}\n\tif (this.version >= 2) {\n\t\tstream.writeUint32(this.default_sample_description_index);\n\t}\n\tstream.writeUint32(this.entries.length);\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tentry = this.entries[i];\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tstream.writeUint32(entry.description_length);\n\t\t\t}\n\t\t}\n\t\tentry.write(stream);\n\t}\n}\n\n\n// file:src/writing/sidx.js\nBoxParser.sidxBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4*4+2+2+12*this.references.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.reference_ID);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.earliest_presentation_time);\n\tstream.writeUint32(this.first_offset);\n\tstream.writeUint16(0);\n\tstream.writeUint16(this.references.length);\n\tfor (var i = 0; i < this.references.length; i++) {\n\t\tvar ref = this.references[i];\n\t\tstream.writeUint32(ref.reference_type << 31 | ref.referenced_size);\n\t\tstream.writeUint32(ref.subsegment_duration);\n\t\tstream.writeUint32(ref.starts_with_SAP << 31 | ref.SAP_type << 28 | ref.SAP_delta_time);\n\t}\n}\n\n// file:src/writing/smhd.js\nBoxParser.smhdBox.prototype.write = function(stream) {\n var i;\n this.version = 0;\n this.flags = 1;\n this.size = 4;\n this.writeHeader(stream);\n stream.writeUint16(this.balance);\n stream.writeUint16(0);\n}\n// file:src/writing/stco.js\nBoxParser.stcoBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+4*this.chunk_offsets.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.chunk_offsets.length);\n\tstream.writeUint32Array(this.chunk_offsets);\n}\n\n// file:src/writing/stsc.js\nBoxParser.stscBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+12*this.first_chunk.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.first_chunk.length);\n\tfor(i=0; i<this.first_chunk.length; i++) {\n\t\tstream.writeUint32(this.first_chunk[i]);\n\t\tstream.writeUint32(this.samples_per_chunk[i]);\n\t\tstream.writeUint32(this.sample_description_index[i]);\n\t}\n}\n\n// file:src/writing/stsd.js\nBoxParser.stsdBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 0;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.entries.length);\n\tthis.size += 4;\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tthis.entries[i].write(stream);\n\t\tthis.size += this.entries[i].size;\n\t}\n\t/* adjusting the size, now that all sub-boxes are known */\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\n}\n\n// file:src/writing/stsh.js\nBoxParser.stshBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.shadowed_sample_numbers.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.shadowed_sample_numbers.length);\n\tfor(i=0; i<this.shadowed_sample_numbers.length; i++) {\n\t\tstream.writeUint32(this.shadowed_sample_numbers[i]);\n\t\tstream.writeUint32(this.sync_sample_numbers[i]);\n\t}\n}\n\n// file:src/writing/stss.js\nBoxParser.stssBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+4*this.sample_numbers.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_numbers.length);\n\tstream.writeUint32Array(this.sample_numbers);\n}\n\n// file:src/writing/stsz.js\nBoxParser.stszBox.prototype.write = function(stream) {\n\tvar i;\n\tvar constant = true;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tif (this.sample_sizes.length > 0) {\n\t\ti = 0;\n\t\twhile (i+1 < this.sample_sizes.length) {\n\t\t\tif (this.sample_sizes[i+1] !== this.sample_sizes[0]) {\n\t\t\t\tconstant = false;\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconstant = false;\n\t}\n\tthis.size = 8;\n\tif (!constant) {\n\t\tthis.size += 4*this.sample_sizes.length;\n\t}\n\tthis.writeHeader(stream);\n\tif (!constant) {\n\t\tstream.writeUint32(0);\n\t} else {\n\t\tstream.writeUint32(this.sample_sizes[0]);\n\t}\n\tstream.writeUint32(this.sample_sizes.length);\n\tif (!constant) {\n\t\tstream.writeUint32Array(this.sample_sizes);\n\t}\t\n}\n\n// file:src/writing/stts.js\nBoxParser.sttsBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.sample_counts.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_counts.length);\n\tfor(i=0; i<this.sample_counts.length; i++) {\n\t\tstream.writeUint32(this.sample_counts[i]);\n\t\tstream.writeUint32(this.sample_deltas[i]);\n\t}\n}\n\n// file:src/writing/tfdt.js\nBoxParser.tfdtBox.prototype.write = function(stream) {\n\tvar UINT32_MAX = Math.pow(2, 32) - 1;\n\t// use version 1 if baseMediaDecodeTime does not fit 32 bits\n\tthis.version = this.baseMediaDecodeTime > UINT32_MAX ? 1 : 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tif (this.version === 1) {\n\t\tthis.size += 4;\n\t}\n\tthis.writeHeader(stream);\n\tif (this.version === 1) {\n\t\tstream.writeUint64(this.baseMediaDecodeTime);\n\t} else {\n\t\tstream.writeUint32(this.baseMediaDecodeTime);\n\t}\n}\n\n// file:src/writing/tfhd.js\nBoxParser.tfhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.size = 4;\n\tif (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) {\n\t\tthis.size += 8;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\tthis.size += 4;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.track_id);\n\tif (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) {\n\t\tstream.writeUint64(this.base_data_offset);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\tstream.writeUint32(this.default_sample_description_index);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\tstream.writeUint32(this.default_sample_duration);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\tstream.writeUint32(this.default_sample_size);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\tstream.writeUint32(this.default_sample_flags);\n\t}\n}\n\n// file:src/writing/tkhd.js\nBoxParser.tkhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\t//this.flags = 0;\n\tthis.size = 4*18+2*4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.track_id);\n\tstream.writeUint32(0);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeInt16(this.layer);\n\tstream.writeInt16(this.alternate_group);\n\tstream.writeInt16(this.volume<<8);\n\tstream.writeUint16(0);\n\tstream.writeInt32Array(this.matrix);\n\tstream.writeUint32(this.width);\n\tstream.writeUint32(this.height);\n}\n\n// file:src/writing/trex.js\nBoxParser.trexBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4*5;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.track_id);\n\tstream.writeUint32(this.default_sample_description_index);\n\tstream.writeUint32(this.default_sample_duration);\n\tstream.writeUint32(this.default_sample_size);\n\tstream.writeUint32(this.default_sample_flags);\n}\n\n// file:src/writing/trun.js\nBoxParser.trunBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.size = 4;\n\tif (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\tthis.size += 4*this.sample_duration.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\tthis.size += 4*this.sample_size.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\tthis.size += 4*this.sample_flags.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\tthis.size += 4*this.sample_composition_time_offset.length;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_count);\n\tif (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) {\n\t\tthis.data_offset_position = stream.getPosition();\n\t\tstream.writeInt32(this.data_offset); //signed\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) {\n\t\tstream.writeUint32(this.first_sample_flags);\n\t}\n\tfor (var i = 0; i < this.sample_count; i++) {\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\tstream.writeUint32(this.sample_duration[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\tstream.writeUint32(this.sample_size[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\tstream.writeUint32(this.sample_flags[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\tif (this.version === 0) {\n\t\t\t\tstream.writeUint32(this.sample_composition_time_offset[i]);\n\t\t\t} else {\n\t\t\t\tstream.writeInt32(this.sample_composition_time_offset[i]); //signed\n\t\t\t}\n\t\t}\n\t}\t\t\n}\n\n// file:src/writing/url.js\nBoxParser[\"url Box\"].prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tif (this.location) {\n\t\tthis.flags = 0;\n\t\tthis.size = this.location.length+1;\n\t} else {\n\t\tthis.flags = 0x000001;\n\t\tthis.size = 0;\n\t}\n\tthis.writeHeader(stream);\n\tif (this.location) {\n\t\tstream.writeCString(this.location);\n\t}\n}\n\n// file:src/writing/urn.js\nBoxParser[\"urn Box\"].prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = this.name.length+1+(this.location ? this.location.length+1 : 0);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.name);\n\tif (this.location) {\n\t\tstream.writeCString(this.location);\n\t}\n}\n\n// file:src/writing/vmhd.js\nBoxParser.vmhdBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 1;\n\tthis.size = 8;\n\tthis.writeHeader(stream);\n\tstream.writeUint16(this.graphicsmode);\n\tstream.writeUint16Array(this.opcolor);\n}\n\n// file:src/box-unpack.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.cttsBox.prototype.unpack = function(samples) {\n\tvar i, j, k;\n\tk = 0;\n\tfor (i = 0; i < this.sample_counts.length; i++) {\n\t\tfor (j = 0; j < this.sample_counts[i]; j++) {\n\t\t\tsamples[k].pts = samples[k].dts + this.sample_offsets[i];\n\t\t\tk++;\n\t\t}\n\t}\n}\n\nBoxParser.sttsBox.prototype.unpack = function(samples) {\n\tvar i, j, k;\n\tk = 0;\n\tfor (i = 0; i < this.sample_counts.length; i++) {\n\t\tfor (j = 0; j < this.sample_counts[i]; j++) {\n\t\t\tif (k === 0) {\n\t\t\t\tsamples[k].dts = 0;\n\t\t\t} else {\n\t\t\t\tsamples[k].dts = samples[k-1].dts + this.sample_deltas[i];\n\t\t\t}\n\t\t\tk++;\n\t\t}\n\t}\n}\n\nBoxParser.stcoBox.prototype.unpack = function(samples) {\n\tvar i;\n\tfor (i = 0; i < this.chunk_offsets.length; i++) {\n\t\tsamples[i].offset = this.chunk_offsets[i];\n\t}\n}\n\nBoxParser.stscBox.prototype.unpack = function(samples) {\n\tvar i, j, k, l, m;\n\tl = 0;\n\tm = 0;\n\tfor (i = 0; i < this.first_chunk.length; i++) {\n\t\tfor (j = 0; j < (i+1 < this.first_chunk.length ? this.first_chunk[i+1] : Infinity); j++) {\n\t\t\tm++;\n\t\t\tfor (k = 0; k < this.samples_per_chunk[i]; k++) {\n\t\t\t\tif (samples[l]) {\n\t\t\t\t\tsamples[l].description_index = this.sample_description_index[i];\n\t\t\t\t\tsamples[l].chunk_index = m;\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tl++;\n\t\t\t}\t\t\t\n\t\t}\n\t}\n}\n\nBoxParser.stszBox.prototype.unpack = function(samples) {\n\tvar i;\n\tfor (i = 0; i < this.sample_sizes.length; i++) {\n\t\tsamples[i].size = this.sample_sizes[i];\n\t}\n}\n// file:src/box-diff.js\n\nBoxParser.DIFF_BOXES_PROP_NAMES = [ \"boxes\", \"entries\", \"references\", \"subsamples\",\n\t\t\t\t\t \t \"items\", \"item_infos\", \"extents\", \"associations\",\n\t\t\t\t\t \t \"subsegments\", \"ranges\", \"seekLists\", \"seekPoints\",\n\t\t\t\t\t \t \"esd\", \"levels\"];\n\nBoxParser.DIFF_PRIMITIVE_ARRAY_PROP_NAMES = [ \"compatible_brands\", \"matrix\", \"opcolor\", \"sample_counts\", \"sample_deltas\",\n\"first_chunk\", \"samples_per_chunk\", \"sample_sizes\", \"chunk_offsets\", \"sample_offsets\", \"sample_description_index\", \"sample_duration\" ];\n\nBoxParser.boxEqualFields = function(box_a, box_b) {\n\tif (box_a && !box_b) return false;\n\tvar prop;\n\tfor (prop in box_a) {\n\t\tif (BoxParser.DIFF_BOXES_PROP_NAMES.indexOf(prop) > -1) {\n\t\t\tcontinue;\n\t\t// } else if (excluded_fields && excluded_fields.indexOf(prop) > -1) {\n\t\t// \tcontinue;\n\t\t} else if (box_a[prop] instanceof BoxParser.Box || box_b[prop] instanceof BoxParser.Box) {\n\t\t\tcontinue;\n\t\t} else if (typeof box_a[prop] === \"undefined\" || typeof box_b[prop] === \"undefined\") {\n\t\t\tcontinue;\n\t\t} else if (typeof box_a[prop] === \"function\" || typeof box_b[prop] === \"function\") {\n\t\t\tcontinue;\n\t\t} else if (\n\t\t\t(box_a.subBoxNames && box_a.subBoxNames.indexOf(prop.slice(0,4)) > -1) ||\n\t\t\t(box_b.subBoxNames && box_b.subBoxNames.indexOf(prop.slice(0,4)) > -1)) {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tif (prop === \"data\" || prop === \"start\" || prop === \"size\" || prop === \"creation_time\" || prop === \"modification_time\") {\n\t\t\t\tcontinue;\n\t\t\t} else if (BoxParser.DIFF_PRIMITIVE_ARRAY_PROP_NAMES.indexOf(prop) > -1) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tif (box_a[prop] !== box_b[prop]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n\nBoxParser.boxEqual = function(box_a, box_b) {\n\tif (!BoxParser.boxEqualFields(box_a, box_b)) {\n\t\treturn false;\n\t}\n\tfor (var j = 0; j < BoxParser.DIFF_BOXES_PROP_NAMES.length; j++) {\n\t\tvar name = BoxParser.DIFF_BOXES_PROP_NAMES[j];\n\t\tif (box_a[name] && box_b[name]) {\n\t\t\tif (!BoxParser.boxEqual(box_a[name], box_b[name])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n// file:src/text-mp4.js\n/* \n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar VTTin4Parser = function() {\t\n}\n\nVTTin4Parser.prototype.parseSample = function(data) {\n\tvar cues, cue;\n\tvar stream = new MP4BoxStream(data.buffer);\n\tcues = [];\n\twhile (!stream.isEos()) {\n\t\tcue = BoxParser.parseOneBox(stream, false);\n\t\tif (cue.code === BoxParser.OK && cue.box.type === \"vttc\") {\n\t\t\tcues.push(cue.box);\n\t\t}\t\t\n\t}\n\treturn cues;\n}\n\nVTTin4Parser.prototype.getText = function (startTime, endTime, data) {\n\tfunction pad(n, width, z) {\n\t z = z || '0';\n\t n = n + '';\n\t return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n\t}\n\tfunction secToTimestamp(insec) {\n\t\tvar h = Math.floor(insec/3600);\n\t\tvar m = Math.floor((insec - h*3600)/60);\n\t\tvar s = Math.floor(insec - h*3600 - m*60);\n\t\tvar ms = Math.floor((insec - h*3600 - m*60 - s)*1000);\n\t\treturn \"\"+pad(h, 2)+\":\"+pad(m,2)+\":\"+pad(s, 2)+\".\"+pad(ms, 3);\n\t}\n\tvar cues = this.parseSample(data);\n\tvar string = \"\";\n\tfor (var i = 0; i < cues.length; i++) {\n\t\tvar cueIn4 = cues[i];\n\t\tstring += secToTimestamp(startTime)+\" --> \"+secToTimestamp(endTime)+\"\\r\\n\";\n\t\tstring += cueIn4.payl.text;\n\t}\n\treturn string;\n}\n\nvar XMLSubtitlein4Parser = function() {\t\n}\n\nXMLSubtitlein4Parser.prototype.parseSample = function(sample) {\n\tvar res = {};\t\n\tvar i;\n\tres.resources = [];\n\tvar stream = new MP4BoxStream(sample.data.buffer);\n\tif (!sample.subsamples || sample.subsamples.length === 0) {\n\t\tres.documentString = stream.readString(sample.data.length);\n\t} else {\n\t\tres.documentString = stream.readString(sample.subsamples[0].size);\n\t\tif (sample.subsamples.length > 1) {\n\t\t\tfor (i = 1; i < sample.subsamples.length; i++) {\n\t\t\t\tres.resources[i] = stream.readUint8Array(sample.subsamples[i].size);\n\t\t\t}\n\t\t}\n\t}\n\tif (typeof (DOMParser) !== \"undefined\") {\n\t\tres.document = (new DOMParser()).parseFromString(res.documentString, \"application/xml\");\n\t}\n\treturn res;\n}\n\nvar Textin4Parser = function() {\t\n}\n\nTextin4Parser.prototype.parseSample = function(sample) {\n\tvar textString;\n\tvar stream = new MP4BoxStream(sample.data.buffer);\n\ttextString = stream.readString(sample.data.length);\n\treturn textString;\n}\n\nTextin4Parser.prototype.parseConfig = function(data) {\n\tvar textString;\n\tvar stream = new MP4BoxStream(data.buffer);\n\tstream.readUint32(); // version & flags\n\ttextString = stream.readCString();\n\treturn textString;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.VTTin4Parser = VTTin4Parser;\n\texports.XMLSubtitlein4Parser = XMLSubtitlein4Parser;\n\texports.Textin4Parser = Textin4Parser;\n}\n// file:src/isofile.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar ISOFile = function (stream) {\n\t/* MutiBufferStream object used to parse boxes */\n\tthis.stream = stream || new MultiBufferStream();\n\t/* Array of all boxes (in order) found in the file */\n\tthis.boxes = [];\n\t/* Array of all mdats */\n\tthis.mdats = [];\n\t/* Array of all moofs */\n\tthis.moofs = [];\n\t/* Boolean indicating if the file is compatible with progressive parsing (moov first) */\n\tthis.isProgressive = false;\n\t/* Boolean used to fire moov start event only once */\n\tthis.moovStartFound = false;\n\t/* Callback called when the moov parsing starts */\n\tthis.onMoovStart = null;\n\t/* Boolean keeping track of the call to onMoovStart, to avoid double calls */\n\tthis.moovStartSent = false;\n\t/* Callback called when the moov is entirely parsed */\n\tthis.onReady = null;\n\t/* Boolean keeping track of the call to onReady, to avoid double calls */\n\tthis.readySent = false;\n\t/* Callback to call when segments are ready */\n\tthis.onSegment = null;\n\t/* Callback to call when samples are ready */\n\tthis.onSamples = null;\n\t/* Callback to call when there is an error in the parsing or processing of samples */\n\tthis.onError = null;\n\t/* Boolean indicating if the moov box run-length encoded tables of sample information have been processed */\n\tthis.sampleListBuilt = false;\n\t/* Array of Track objects for which fragmentation of samples is requested */\n\tthis.fragmentedTracks = [];\n\t/* Array of Track objects for which extraction of samples is requested */\n\tthis.extractedTracks = [];\n\t/* Boolean indicating that fragmention is ready */\n\tthis.isFragmentationInitialized = false;\n\t/* Boolean indicating that fragmented has started */\n\tthis.sampleProcessingStarted = false;\n\t/* Number of the next 'moof' to generate when fragmenting */\n\tthis.nextMoofNumber = 0;\n\t/* Boolean indicating if the initial list of items has been produced */\n\tthis.itemListBuilt = false;\n\t/* Array of items */\n\tthis.items = [];\n\t/* Array of entity groups */\n\tthis.entity_groups = [];\n\t/* Callback called when the sidx box is entirely parsed */\n\tthis.onSidx = null;\n\t/* Boolean keeping track of the call to onSidx, to avoid double calls */\n\tthis.sidxSent = false;\n}\n\nISOFile.prototype.setSegmentOptions = function(id, user, options) {\n\tvar trak = this.getTrackById(id);\n\tif (trak) {\n\t\tvar fragTrack = {};\n\t\tthis.fragmentedTracks.push(fragTrack);\n\t\tfragTrack.id = id;\n\t\tfragTrack.user = user;\n\t\tfragTrack.trak = trak;\n\t\ttrak.nextSample = 0;\n\t\tfragTrack.segmentStream = null;\n\t\tfragTrack.nb_samples = 1000;\n\t\tfragTrack.rapAlignement = true;\n\t\tif (options) {\n\t\t\tif (options.nbSamples) fragTrack.nb_samples = options.nbSamples;\n\t\t\tif (options.rapAlignement) fragTrack.rapAlignement = options.rapAlignement;\n\t\t}\n\t}\n}\n\nISOFile.prototype.unsetSegmentOptions = function(id) {\n\tvar index = -1;\n\tfor (var i = 0; i < this.fragmentedTracks.length; i++) {\n\t\tvar fragTrack = this.fragmentedTracks[i];\n\t\tif (fragTrack.id == id) {\n\t\t\tindex = i;\n\t\t}\n\t}\n\tif (index > -1) {\n\t\tthis.fragmentedTracks.splice(index, 1);\n\t}\n}\n\nISOFile.prototype.setExtractionOptions = function(id, user, options) {\n\tvar trak = this.getTrackById(id);\n\tif (trak) {\n\t\tvar extractTrack = {};\n\t\tthis.extractedTracks.push(extractTrack);\n\t\textractTrack.id = id;\n\t\textractTrack.user = user;\n\t\textractTrack.trak = trak;\n\t\ttrak.nextSample = 0;\n\t\textractTrack.nb_samples = 1000;\n\t\textractTrack.samples = [];\n\t\tif (options) {\n\t\t\tif (options.nbSamples) extractTrack.nb_samples = options.nbSamples;\n\t\t}\n\t}\n}\n\nISOFile.prototype.unsetExtractionOptions = function(id) {\n\tvar index = -1;\n\tfor (var i = 0; i < this.extractedTracks.length; i++) {\n\t\tvar extractTrack = this.extractedTracks[i];\n\t\tif (extractTrack.id == id) {\n\t\t\tindex = i;\n\t\t}\n\t}\n\tif (index > -1) {\n\t\tthis.extractedTracks.splice(index, 1);\n\t}\n}\n\nISOFile.prototype.parse = function() {\n\tvar found;\n\tvar ret;\n\tvar box;\n\tvar parseBoxHeadersOnly = false;\n\n\tif (this.restoreParsePosition)\t{\n\t\tif (!this.restoreParsePosition()) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\twhile (true) {\n\n\t\tif (this.hasIncompleteMdat && this.hasIncompleteMdat()) {\n\t\t\tif (this.processIncompleteMdat()) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.saveParsePosition)\t{\n\t\t\t\tthis.saveParsePosition();\n\t\t\t}\n\t\t\tret = BoxParser.parseOneBox(this.stream, parseBoxHeadersOnly);\n\t\t\tif (ret.code === BoxParser.ERR_NOT_ENOUGH_DATA) {\n\t\t\t\tif (this.processIncompleteBox) {\n\t\t\t\t\tif (this.processIncompleteBox(ret)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar box_type;\n\t\t\t\t/* the box is entirely parsed */\n\t\t\t\tbox = ret.box;\n\t\t\t\tbox_type = (box.type !== \"uuid\" ? box.type : box.uuid);\n\t\t\t\t/* store the box in the 'boxes' array to preserve box order (for file rewrite if needed) */\n\t\t\t\tthis.boxes.push(box);\n\t\t\t\t/* but also store box in a property for more direct access */\n\t\t\t\tswitch (box_type) {\n\t\t\t\t\tcase \"mdat\":\n\t\t\t\t\t\tthis.mdats.push(box);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"moof\":\n\t\t\t\t\t\tthis.moofs.push(box);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"moov\":\n\t\t\t\t\t\tthis.moovStartFound = true;\n\t\t\t\t\t\tif (this.mdats.length === 0) {\n\t\t\t\t\t\t\tthis.isProgressive = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/* no break */\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (this[box_type] !== undefined) {\n\t\t\t\t\t\t\tLog.warn(\"ISOFile\", \"Duplicate Box of type: \"+box_type+\", overriding previous occurrence\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis[box_type] = box;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (this.updateUsedBytes) {\n\t\t\t\t\tthis.updateUsedBytes(box, ret);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.prototype.checkBuffer = function (ab) {\n\tif (ab === null || ab === undefined) {\n\t\tthrow(\"Buffer must be defined and non empty\");\n\t}\n\tif (ab.fileStart === undefined) {\n\t\tthrow(\"Buffer must have a fileStart property\");\n\t}\n\tif (ab.byteLength === 0) {\n\t\tLog.warn(\"ISOFile\", \"Ignoring empty buffer (fileStart: \"+ab.fileStart+\")\");\n\t\tthis.stream.logBufferLevel();\n\t\treturn false;\n\t}\n\tLog.info(\"ISOFile\", \"Processing buffer (fileStart: \"+ab.fileStart+\")\");\n\n\t/* mark the bytes in the buffer as not being used yet */\n\tab.usedBytes = 0;\n\tthis.stream.insertBuffer(ab);\n\tthis.stream.logBufferLevel();\n\n\tif (!this.stream.initialized()) {\n\t\tLog.warn(\"ISOFile\", \"Not ready to start parsing\");\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/* Processes a new ArrayBuffer (with a fileStart property)\n Returns the next expected file position, or undefined if not ready to parse */\nISOFile.prototype.appendBuffer = function(ab, last) {\n\tvar nextFileStart;\n\tif (!this.checkBuffer(ab)) {\n\t\treturn;\n\t}\n\n\t/* Parse whatever is in the existing buffers */\n\tthis.parse();\n\n\t/* Check if the moovStart callback needs to be called */\n\tif (this.moovStartFound && !this.moovStartSent) {\n\t\tthis.moovStartSent = true;\n\t\tif (this.onMoovStart) this.onMoovStart();\n\t}\n\n\tif (this.moov) {\n\t\t/* A moov box has been entirely parsed */\n\n\t\t/* if this is the first call after the moov is found we initialize the list of samples (may be empty in fragmented files) */\n\t\tif (!this.sampleListBuilt) {\n\t\t\tthis.buildSampleLists();\n\t\t\tthis.sampleListBuilt = true;\n\t\t}\n\n\t\t/* We update the sample information if there are any new moof boxes */\n\t\tthis.updateSampleLists();\n\n\t\t/* If the application needs to be informed that the 'moov' has been found,\n\t\t we create the information object and callback the application */\n\t\tif (this.onReady && !this.readySent) {\n\t\t\tthis.readySent = true;\n\t\t\tthis.onReady(this.getInfo());\n\t\t}\n\n\t\t/* See if any sample extraction or segment creation needs to be done with the available samples */\n\t\tthis.processSamples(last);\n\n\t\t/* Inform about the best range to fetch next */\n\t\tif (this.nextSeekPosition) {\n\t\t\tnextFileStart = this.nextSeekPosition;\n\t\t\tthis.nextSeekPosition = undefined;\n\t\t} else {\n\t\t\tnextFileStart = this.nextParsePosition;\n\t\t}\n\t\tif (this.stream.getEndFilePositionAfter) {\n\t\t\tnextFileStart = this.stream.getEndFilePositionAfter(nextFileStart);\n\t\t}\n\t} else {\n\t\tif (this.nextParsePosition) {\n\t\t\t/* moov has not been parsed but the first buffer was received,\n\t\t\t the next fetch should probably be the next box start */\n\t\t\tnextFileStart = this.nextParsePosition;\n\t\t} else {\n\t\t\t/* No valid buffer has been parsed yet, we cannot know what to parse next */\n\t\t\tnextFileStart = 0;\n\t\t}\n\t}\n\tif (this.sidx) {\n\t\tif (this.onSidx && !this.sidxSent) {\n\t\t\tthis.onSidx(this.sidx);\n\t\t\tthis.sidxSent = true;\n\t\t}\n\t}\n\tif (this.meta) {\n\t\tif (this.flattenItemInfo && !this.itemListBuilt) {\n\t\t\tthis.flattenItemInfo();\n\t\t\tthis.itemListBuilt = true;\n\t\t}\n\t\tif (this.processItems) {\n\t\t\tthis.processItems(this.onItem);\n\t\t}\n\t}\n\n\tif (this.stream.cleanBuffers) {\n\t\tLog.info(\"ISOFile\", \"Done processing buffer (fileStart: \"+ab.fileStart+\") - next buffer to fetch should have a fileStart position of \"+nextFileStart);\n\t\tthis.stream.logBufferLevel();\n\t\tthis.stream.cleanBuffers();\n\t\tthis.stream.logBufferLevel(true);\n\t\tLog.info(\"ISOFile\", \"Sample data size in memory: \"+this.getAllocatedSampleDataSize());\n\t}\n\treturn nextFileStart;\n}\n\nISOFile.prototype.getInfo = function() {\n\tvar i, j;\n\tvar movie = {};\n\tvar trak;\n\tvar track;\n\tvar ref;\n\tvar sample_desc;\n\tvar _1904 = (new Date('1904-01-01T00:00:00Z').getTime());\n\n\tif (this.moov) {\n\t\tmovie.hasMoov = true;\n\t\tmovie.duration = this.moov.mvhd.duration;\n\t\tmovie.timescale = this.moov.mvhd.timescale;\n\t\tmovie.isFragmented = (this.moov.mvex != null);\n\t\tif (movie.isFragmented && this.moov.mvex.mehd) {\n\t\t\tmovie.fragment_duration = this.moov.mvex.mehd.fragment_duration;\n\t\t}\n\t\tmovie.isProgressive = this.isProgressive;\n\t\tmovie.hasIOD = (this.moov.iods != null);\n\t\tmovie.brands = [];\n\t\tmovie.brands.push(this.ftyp.major_brand);\n\t\tmovie.brands = movie.brands.concat(this.ftyp.compatible_brands);\n\t\tmovie.created = new Date(_1904+this.moov.mvhd.creation_time*1000);\n\t\tmovie.modified = new Date(_1904+this.moov.mvhd.modification_time*1000);\n\t\tmovie.tracks = [];\n\t\tmovie.audioTracks = [];\n\t\tmovie.videoTracks = [];\n\t\tmovie.subtitleTracks = [];\n\t\tmovie.metadataTracks = [];\n\t\tmovie.hintTracks = [];\n\t\tmovie.otherTracks = [];\n\t\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\t\ttrak = this.moov.traks[i];\n\t\t\tsample_desc = trak.mdia.minf.stbl.stsd.entries[0];\n\t\t\ttrack = {};\n\t\t\tmovie.tracks.push(track);\n\t\t\ttrack.id = trak.tkhd.track_id;\n\t\t\ttrack.name = trak.mdia.hdlr.name;\n\t\t\ttrack.references = [];\n\t\t\tif (trak.tref) {\n\t\t\t\tfor (j = 0; j < trak.tref.boxes.length; j++) {\n\t\t\t\t\tref = {};\n\t\t\t\t\ttrack.references.push(ref);\n\t\t\t\t\tref.type = trak.tref.boxes[j].type;\n\t\t\t\t\tref.track_ids = trak.tref.boxes[j].track_ids;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (trak.edts) {\n\t\t\t\ttrack.edits = trak.edts.elst.entries;\n\t\t\t}\n\t\t\ttrack.created = new Date(_1904+trak.tkhd.creation_time*1000);\n\t\t\ttrack.modified = new Date(_1904+trak.tkhd.modification_time*1000);\n\t\t\ttrack.movie_duration = trak.tkhd.duration;\n\t\t\ttrack.movie_timescale = movie.timescale;\n\t\t\ttrack.layer = trak.tkhd.layer;\n\t\t\ttrack.alternate_group = trak.tkhd.alternate_group;\n\t\t\ttrack.volume = trak.tkhd.volume;\n\t\t\ttrack.matrix = trak.tkhd.matrix;\n\t\t\ttrack.track_width = trak.tkhd.width/(1<<16);\n\t\t\ttrack.track_height = trak.tkhd.height/(1<<16);\n\t\t\ttrack.timescale = trak.mdia.mdhd.timescale;\n\t\t\ttrack.cts_shift = trak.mdia.minf.stbl.cslg;\n\t\t\ttrack.duration = trak.mdia.mdhd.duration;\n\t\t\ttrack.samples_duration = trak.samples_duration;\n\t\t\ttrack.codec = sample_desc.getCodec();\n\t\t\ttrack.kind = (trak.udta && trak.udta.kinds.length ? trak.udta.kinds[0] : { schemeURI: \"\", value: \"\"});\n\t\t\ttrack.language = (trak.mdia.elng ? trak.mdia.elng.extended_language : trak.mdia.mdhd.languageString);\n\t\t\ttrack.nb_samples = trak.samples.length;\n\t\t\ttrack.size = trak.samples_size;\n\t\t\ttrack.bitrate = (track.size*8*track.timescale)/track.samples_duration;\n\t\t\tif (sample_desc.isAudio()) {\n\t\t\t\ttrack.type = \"audio\";\n\t\t\t\tmovie.audioTracks.push(track);\n\t\t\t\ttrack.audio = {};\n\t\t\t\ttrack.audio.sample_rate = sample_desc.getSampleRate();\n\t\t\t\ttrack.audio.channel_count = sample_desc.getChannelCount();\n\t\t\t\ttrack.audio.sample_size = sample_desc.getSampleSize();\n\t\t\t} else if (sample_desc.isVideo()) {\n\t\t\t\ttrack.type = \"video\";\n\t\t\t\tmovie.videoTracks.push(track);\n\t\t\t\ttrack.video = {};\n\t\t\t\ttrack.video.width = sample_desc.getWidth();\n\t\t\t\ttrack.video.height = sample_desc.getHeight();\n\t\t\t} else if (sample_desc.isSubtitle()) {\n\t\t\t\ttrack.type = \"subtitles\";\n\t\t\t\tmovie.subtitleTracks.push(track);\n\t\t\t} else if (sample_desc.isHint()) {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.hintTracks.push(track);\n\t\t\t} else if (sample_desc.isMetadata()) {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.metadataTracks.push(track);\n\t\t\t} else {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.otherTracks.push(track);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tmovie.hasMoov = false;\n\t}\n\tmovie.mime = \"\";\n\tif (movie.hasMoov && movie.tracks) {\n\t\tif (movie.videoTracks && movie.videoTracks.length > 0) {\n\t\t\tmovie.mime += 'video/mp4; codecs=\\\"';\n\t\t} else if (movie.audioTracks && movie.audioTracks.length > 0) {\n\t\t\tmovie.mime += 'audio/mp4; codecs=\\\"';\n\t\t} else {\n\t\t\tmovie.mime += 'application/mp4; codecs=\\\"';\n\t\t}\n\t\tfor (i = 0; i < movie.tracks.length; i++) {\n\t\t\tif (i !== 0) movie.mime += ',';\n\t\t\tmovie.mime+= movie.tracks[i].codec;\n\t\t}\n\t\tmovie.mime += '\\\"; profiles=\\\"';\n\t\tmovie.mime += this.ftyp.compatible_brands.join();\n\t\tmovie.mime += '\\\"';\n\t}\n\treturn movie;\n}\n\nISOFile.prototype.setNextSeekPositionFromSample = function (sample) {\n\tif (!sample) {\n\t\treturn;\n\t}\n\tif (this.nextSeekPosition) {\n\t\tthis.nextSeekPosition = Math.min(sample.offset+sample.alreadyRead,this.nextSeekPosition);\n\t} else {\n\t\tthis.nextSeekPosition = sample.offset+sample.alreadyRead;\n\t}\n}\n\nISOFile.prototype.processSamples = function(last) {\n\tvar i;\n\tvar trak;\n\tif (!this.sampleProcessingStarted) return;\n\n\t/* For each track marked for fragmentation,\n\t check if the next sample is there (i.e. if the sample information is known (i.e. moof has arrived) and if it has been downloaded)\n\t and create a fragment with it */\n\tif (this.isFragmentationInitialized && this.onSegment !== null) {\n\t\tfor (i = 0; i < this.fragmentedTracks.length; i++) {\n\t\t\tvar fragTrak = this.fragmentedTracks[i];\n\t\t\ttrak = fragTrak.trak;\n\t\t\twhile (trak.nextSample < trak.samples.length && this.sampleProcessingStarted) {\n\t\t\t\t/* The sample information is there (either because the file is not fragmented and this is not the last sample,\n\t\t\t\tor because the file is fragmented and the moof for that sample has been received */\n\t\t\t\tLog.debug(\"ISOFile\", \"Creating media fragment on track #\"+fragTrak.id +\" for sample \"+trak.nextSample);\n\t\t\t\tvar result = this.createFragment(fragTrak.id, trak.nextSample, fragTrak.segmentStream);\n\t\t\t\tif (result) {\n\t\t\t\t\tfragTrak.segmentStream = result;\n\t\t\t\t\ttrak.nextSample++;\n\t\t\t\t} else {\n\t\t\t\t\t/* The fragment could not be created because the media data is not there (not downloaded), wait for it */\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t/* A fragment is created by sample, but the segment is the accumulation in the buffer of these fragments.\n\t\t\t\t It is flushed only as requested by the application (nb_samples) to avoid too many callbacks */\n\t\t\t\tif (trak.nextSample % fragTrak.nb_samples === 0 || (last || trak.nextSample >= trak.samples.length)) {\n\t\t\t\t\tLog.info(\"ISOFile\", \"Sending fragmented data on track #\"+fragTrak.id+\" for samples [\"+Math.max(0,trak.nextSample-fragTrak.nb_samples)+\",\"+(trak.nextSample-1)+\"]\");\n\t\t\t\t\tLog.info(\"ISOFile\", \"Sample data size in memory: \"+this.getAllocatedSampleDataSize());\n\t\t\t\t\tif (this.onSegment) {\n\t\t\t\t\t\tthis.onSegment(fragTrak.id, fragTrak.user, fragTrak.segmentStream.buffer, trak.nextSample, (last || trak.nextSample >= trak.samples.length));\n\t\t\t\t\t}\n\t\t\t\t\t/* force the creation of a new buffer */\n\t\t\t\t\tfragTrak.segmentStream = null;\n\t\t\t\t\tif (fragTrak !== this.fragmentedTracks[i]) {\n\t\t\t\t\t\t/* make sure we can stop fragmentation if needed */\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (this.onSamples !== null) {\n\t\t/* For each track marked for data export,\n\t\t check if the next sample is there (i.e. has been downloaded) and send it */\n\t\tfor (i = 0; i < this.extractedTracks.length; i++) {\n\t\t\tvar extractTrak = this.extractedTracks[i];\n\t\t\ttrak = extractTrak.trak;\n\t\t\twhile (trak.nextSample < trak.samples.length && this.sampleProcessingStarted) {\n\t\t\t\tLog.debug(\"ISOFile\", \"Exporting on track #\"+extractTrak.id +\" sample #\"+trak.nextSample);\n\t\t\t\tvar sample = this.getSample(trak, trak.nextSample);\n\t\t\t\tif (sample) {\n\t\t\t\t\ttrak.nextSample++;\n\t\t\t\t\textractTrak.samples.push(sample);\n\t\t\t\t} else {\n\t\t\t\t\tthis.setNextSeekPositionFromSample(trak.samples[trak.nextSample]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (trak.nextSample % extractTrak.nb_samples === 0 || trak.nextSample >= trak.samples.length) {\n\t\t\t\t\tLog.debug(\"ISOFile\", \"Sending samples on track #\"+extractTrak.id+\" for sample \"+trak.nextSample);\n\t\t\t\t\tif (this.onSamples) {\n\t\t\t\t\t\tthis.onSamples(extractTrak.id, extractTrak.user, extractTrak.samples);\n\t\t\t\t\t}\n\t\t\t\t\textractTrak.samples = [];\n\t\t\t\t\tif (extractTrak !== this.extractedTracks[i]) {\n\t\t\t\t\t\t/* check if the extraction needs to be stopped */\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/* Find and return specific boxes using recursion and early return */\nISOFile.prototype.getBox = function(type) {\n var result = this.getBoxes(type, true);\n return (result.length ? result[0] : null);\n}\n\nISOFile.prototype.getBoxes = function(type, returnEarly) {\n var result = [];\n ISOFile._sweep.call(this, type, result, returnEarly);\n return result;\n}\n\nISOFile._sweep = function(type, result, returnEarly) {\n if (this.type && this.type == type) result.push(this);\n for (var box in this.boxes) {\n if (result.length && returnEarly) return;\n ISOFile._sweep.call(this.boxes[box], type, result, returnEarly);\n }\n}\n\nISOFile.prototype.getTrackSamplesInfo = function(track_id) {\n\tvar track = this.getTrackById(track_id);\n\tif (track) {\n\t\treturn track.samples;\n\t} else {\n\t\treturn;\n\t}\n}\n\nISOFile.prototype.getTrackSample = function(track_id, number) {\n\tvar track = this.getTrackById(track_id);\n\tvar sample = this.getSample(track, number);\n\treturn sample;\n}\n\n/* Called by the application to release the resources associated to samples already forwarded to the application */\nISOFile.prototype.releaseUsedSamples = function (id, sampleNum) {\n\tvar size = 0;\n\tvar trak = this.getTrackById(id);\n\tif (!trak.lastValidSample) trak.lastValidSample = 0;\n\tfor (var i = trak.lastValidSample; i < sampleNum; i++) {\n\t\tsize+=this.releaseSample(trak, i);\n\t}\n\tLog.info(\"ISOFile\", \"Track #\"+id+\" released samples up to \"+sampleNum+\" (released size: \"+size+\", remaining: \"+this.samplesDataSize+\")\");\n\ttrak.lastValidSample = sampleNum;\n}\n\nISOFile.prototype.start = function() {\n\tthis.sampleProcessingStarted = true;\n\tthis.processSamples(false);\n}\n\nISOFile.prototype.stop = function() {\n\tthis.sampleProcessingStarted = false;\n}\n\n/* Called by the application to flush the remaining samples (e.g. once the download is finished or when no more samples will be added) */\nISOFile.prototype.flush = function() {\n\tLog.info(\"ISOFile\", \"Flushing remaining samples\");\n\tthis.updateSampleLists();\n\tthis.processSamples(true);\n\tthis.stream.cleanBuffers();\n\tthis.stream.logBufferLevel(true);\n}\n\n/* Finds the byte offset for a given time on a given track\n also returns the time of the previous rap */\nISOFile.prototype.seekTrack = function(time, useRap, trak) {\n\tvar j;\n\tvar sample;\n\tvar seek_offset = Infinity;\n\tvar rap_seek_sample_num = 0;\n\tvar seek_sample_num = 0;\n\tvar timescale;\n\n\tif (trak.samples.length === 0) {\n\t\tLog.info(\"ISOFile\", \"No sample in track, cannot seek! Using time \"+Log.getDurationString(0, 1) +\" and offset: \"+0);\n\t\treturn { offset: 0, time: 0 };\n\t}\n\n\tfor (j = 0; j < trak.samples.length; j++) {\n\t\tsample = trak.samples[j];\n\t\tif (j === 0) {\n\t\t\tseek_sample_num = 0;\n\t\t\ttimescale = sample.timescale;\n\t\t} else if (sample.cts > time * sample.timescale) {\n\t\t\tseek_sample_num = j-1;\n\t\t\tbreak;\n\t\t}\n\t\tif (useRap && sample.is_sync) {\n\t\t\trap_seek_sample_num = j;\n\t\t}\n\t}\n\tif (useRap) {\n\t\tseek_sample_num = rap_seek_sample_num;\n\t}\n\ttime = trak.samples[seek_sample_num].cts;\n\ttrak.nextSample = seek_sample_num;\n\twhile (trak.samples[seek_sample_num].alreadyRead === trak.samples[seek_sample_num].size) {\n\t\t// No remaining samples to look for, all are downloaded.\n\t\tif (!trak.samples[seek_sample_num + 1]) {\n\t\t\tbreak;\n\t\t}\n\t\tseek_sample_num++;\n\t}\n\tseek_offset = trak.samples[seek_sample_num].offset+trak.samples[seek_sample_num].alreadyRead;\n\tLog.info(\"ISOFile\", \"Seeking to \"+(useRap ? \"RAP\": \"\")+\" sample #\"+trak.nextSample+\" on track \"+trak.tkhd.track_id+\", time \"+Log.getDurationString(time, timescale) +\" and offset: \"+seek_offset);\n\treturn { offset: seek_offset, time: time/timescale };\n}\n\nISOFile.prototype.getTrackDuration = function (trak) {\n\tvar sample;\n\n\tif (!trak.samples) {\n\t\treturn Infinity;\n\t}\n\tsample = trak.samples[trak.samples.length - 1];\n\treturn (sample.cts + sample.duration) / sample.timescale;\n}\n\n/* Finds the byte offset in the file corresponding to the given time or to the time of the previous RAP */\nISOFile.prototype.seek = function(time, useRap) {\n\tvar moov = this.moov;\n\tvar trak;\n\tvar trak_seek_info;\n\tvar i;\n\tvar seek_info = { offset: Infinity, time: Infinity };\n\tif (!this.moov) {\n\t\tthrow \"Cannot seek: moov not received!\";\n\t} else {\n\t\tfor (i = 0; i<moov.traks.length; i++) {\n\t\t\ttrak = moov.traks[i];\n\t\t\tif (time > this.getTrackDuration(trak)) { // skip tracks that already ended\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttrak_seek_info = this.seekTrack(time, useRap, trak);\n\t\t\tif (trak_seek_info.offset < seek_info.offset) {\n\t\t\t\tseek_info.offset = trak_seek_info.offset;\n\t\t\t}\n\t\t\tif (trak_seek_info.time < seek_info.time) {\n\t\t\t\tseek_info.time = trak_seek_info.time;\n\t\t\t}\n\t\t}\n\t\tLog.info(\"ISOFile\", \"Seeking at time \"+Log.getDurationString(seek_info.time, 1)+\" needs a buffer with a fileStart position of \"+seek_info.offset);\n\t\tif (seek_info.offset === Infinity) {\n\t\t\t/* No sample info, in all tracks, cannot seek */\n\t\t\tseek_info = { offset: this.nextParsePosition, time: 0 };\n\t\t} else {\n\t\t\t/* check if the seek position is already in some buffer and\n\t\t\t in that case return the end of that buffer (or of the last contiguous buffer) */\n\t\t\t/* TODO: Should wait until append operations are done */\n\t\t\tseek_info.offset = this.stream.getEndFilePositionAfter(seek_info.offset);\n\t\t}\n\t\tLog.info(\"ISOFile\", \"Adjusted seek position (after checking data already in buffer): \"+seek_info.offset);\n\t\treturn seek_info;\n\t}\n}\n\nISOFile.prototype.equal = function(b) {\n\tvar box_index = 0;\n\twhile (box_index < this.boxes.length && box_index < b.boxes.length) {\n\t\tvar a_box = this.boxes[box_index];\n\t\tvar b_box = b.boxes[box_index];\n\t\tif (!BoxParser.boxEqual(a_box, b_box)) {\n\t\t\treturn false;\n\t\t}\n\t\tbox_index++;\n\t}\n\treturn true;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.ISOFile = ISOFile;\n}\n// file:src/isofile-advanced-parsing.js\n/* position in the current buffer of the beginning of the last box parsed */\nISOFile.prototype.lastBoxStartPosition = 0;\n/* indicator if the parsing is stuck in the middle of an mdat box */\nISOFile.prototype.parsingMdat = null;\n/* next file position that the parser needs:\n - 0 until the first buffer (i.e. fileStart ===0) has been received \n - otherwise, the next box start until the moov box has been parsed\n - otherwise, the position of the next sample to fetch\n */\nISOFile.prototype.nextParsePosition = 0;\n/* keep mdat data */\nISOFile.prototype.discardMdatData = false;\n\nISOFile.prototype.processIncompleteBox = function(ret) {\n\tvar box;\n\tvar merged;\n\tvar found;\n\t\n\t/* we did not have enough bytes in the current buffer to parse the entire box */\n\tif (ret.type === \"mdat\") { \n\t\t/* we had enough bytes to get its type and size and it's an 'mdat' */\n\t\t\n\t\t/* special handling for mdat boxes, since we don't actually need to parse it linearly \n\t\t we create the box */\n\t\tbox = new BoxParser[ret.type+\"Box\"](ret.size);\t\n\t\tthis.parsingMdat = box;\n\t\tthis.boxes.push(box);\n\t\tthis.mdats.push(box);\t\t\t\n\t\tbox.start = ret.start;\n\t\tbox.hdr_size = ret.hdr_size;\n\t\tthis.stream.addUsedBytes(box.hdr_size);\n\n\t\t/* indicate that the parsing should start from the end of the box */\n\t\tthis.lastBoxStartPosition = box.start + box.size;\n \t\t/* let's see if we have the end of the box in the other buffers */\n\t\tfound = this.stream.seek(box.start + box.size, false, this.discardMdatData);\n\t\tif (found) {\n\t\t\t/* found the end of the box */\n\t\t\tthis.parsingMdat = null;\n\t\t\t/* let's see if we can parse more in this buffer */\n\t\t\treturn true;\n\t\t} else {\n\t\t\t/* 'mdat' end not found in the existing buffers */\n\t\t\t/* determine the next position in the file to start parsing from */\n\t\t\tif (!this.moovStartFound) {\n\t\t\t\t/* moov not find yet, \n\t\t\t\t the file probably has 'mdat' at the beginning, and 'moov' at the end, \n\t\t\t\t indicate that the downloader should not try to download those bytes now */\n\t\t\t\tthis.nextParsePosition = box.start + box.size;\n\t\t\t} else {\n\t\t\t\t/* we have the start of the moov box, \n\t\t\t\t the next bytes should try to complete the current 'mdat' */\n\t\t\t\tthis.nextParsePosition = this.stream.findEndContiguousBuf();\n\t\t\t}\n\t\t\t/* not much we can do, wait for more buffers to arrive */\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\t/* box is incomplete, we may not even know its type */\n\t\tif (ret.type === \"moov\") { \n\t\t\t/* the incomplete box is a 'moov' box */\n\t\t\tthis.moovStartFound = true;\n\t\t\tif (this.mdats.length === 0) {\n\t\t\t\tthis.isProgressive = true;\n\t\t\t}\n\t\t}\n\t\t/* either it's not an mdat box (and we need to parse it, we cannot skip it)\n\t\t (TODO: we could skip 'free' boxes ...)\n\t\t\t or we did not have enough data to parse the type and size of the box, \n\t\t we try to concatenate the current buffer with the next buffer to restart parsing */\n\t\tmerged = (this.stream.mergeNextBuffer ? this.stream.mergeNextBuffer() : false);\n\t\tif (merged) {\n\t\t\t/* The next buffer was contiguous, the merging succeeded,\n\t\t\t we can now continue parsing, \n\t\t\t the next best position to parse is at the end of this new buffer */\n\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\treturn true;\n\t\t} else {\n\t\t\t/* we cannot concatenate existing buffers because they are not contiguous or because there is no additional buffer */\n\t\t\t/* The next best position to parse is still at the end of this old buffer */\n\t\t\tif (!ret.type) {\n\t\t\t\t/* There were not enough bytes in the buffer to parse the box type and length,\n\t\t\t\t the next fetch should retrieve those missing bytes, i.e. the next bytes after this buffer */\n\t\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\t} else {\n\t\t\t\t/* we had enough bytes to parse size and type of the incomplete box\n\t\t\t\t if we haven't found yet the moov box, skip this one and try the next one \n\t\t\t\t if we have found the moov box, let's continue linear parsing */\n\t\t\t\tif (this.moovStartFound) {\n\t\t\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\t\t} else {\n\t\t\t\t\tthis.nextParsePosition = this.stream.getPosition() + ret.size;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n}\n\nISOFile.prototype.hasIncompleteMdat = function () {\n\treturn (this.parsingMdat !== null);\n}\n\nISOFile.prototype.processIncompleteMdat = function () {\n\tvar box;\n\tvar found;\n\t\n\t/* we are in the parsing of an incomplete mdat box */\n\tbox = this.parsingMdat;\n\n\tfound = this.stream.seek(box.start + box.size, false, this.discardMdatData);\n\tif (found) {\n\t\tLog.debug(\"ISOFile\", \"Found 'mdat' end in buffered data\");\n\t\t/* the end of the mdat has been found */ \n\t\tthis.parsingMdat = null;\n\t\t/* we can parse more in this buffer */\n\t\treturn true;\n\t} else {\n\t\t/* we don't have the end of this mdat yet, \n\t\t indicate that the next byte to fetch is the end of the buffers we have so far, \n\t\t return and wait for more buffer to come */\n\t\tthis.nextParsePosition = this.stream.findEndContiguousBuf();\n\t\treturn false;\n\t}\n}\n\nISOFile.prototype.restoreParsePosition = function() {\n\t/* Reposition at the start position of the previous box not entirely parsed */\n\treturn this.stream.seek(this.lastBoxStartPosition, true, this.discardMdatData);\n}\n\nISOFile.prototype.saveParsePosition = function() {\n\t/* remember the position of the box start in case we need to roll back (if the box is incomplete) */\n\tthis.lastBoxStartPosition = this.stream.getPosition();\t\n}\n\nISOFile.prototype.updateUsedBytes = function(box, ret) {\n\tif (this.stream.addUsedBytes) {\n\t\tif (box.type === \"mdat\") {\n\t\t\t/* for an mdat box, only its header is considered used, other bytes will be used when sample data is requested */\n\t\t\tthis.stream.addUsedBytes(box.hdr_size);\n\t\t\tif (this.discardMdatData) {\n\t\t\t\tthis.stream.addUsedBytes(box.size-box.hdr_size);\n\t\t\t}\n\t\t} else {\n\t\t\t/* for all other boxes, the entire box data is considered used */\n\t\t\tthis.stream.addUsedBytes(box.size);\n\t\t}\t\n\t}\n}\n// file:src/isofile-advanced-creation.js\nISOFile.prototype.add = BoxParser.Box.prototype.add;\nISOFile.prototype.addBox = BoxParser.Box.prototype.addBox;\n\nISOFile.prototype.init = function (_options) {\n\tvar options = _options || {}; \n\tvar ftyp = this.add(\"ftyp\").set(\"major_brand\", (options.brands && options.brands[0]) || \"iso4\")\n\t\t\t\t\t\t\t .set(\"minor_version\", 0)\n\t\t\t\t\t\t\t .set(\"compatible_brands\", options.brands || [\"iso4\"]);\n\tvar moov = this.add(\"moov\");\n\tmoov.add(\"mvhd\").set(\"timescale\", options.timescale || 600)\n\t\t\t\t\t.set(\"rate\", options.rate || 1<<16)\n\t\t\t\t\t.set(\"creation_time\", 0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"duration\", options.duration || 0)\n\t\t\t\t\t.set(\"volume\", (options.width) ? 0 : 0x0100)\n\t\t\t\t\t.set(\"matrix\", [ 1<<16, 0, 0, 0, 1<<16, 0, 0, 0, 0x40000000])\n\t\t\t\t\t.set(\"next_track_id\", 1);\n\tmoov.add(\"mvex\");\n\treturn this;\n}\n\nISOFile.prototype.addTrack = function (_options) {\n\tif (!this.moov) {\n\t\tthis.init(_options);\n\t}\n\n\tvar options = _options || {}; \n\toptions.width = options.width || 320;\n\toptions.height = options.height || 320;\n\toptions.id = options.id || this.moov.mvhd.next_track_id;\n\toptions.type = options.type || \"avc1\";\n\n\tvar trak = this.moov.add(\"trak\");\n\tthis.moov.mvhd.next_track_id = options.id+1;\n\ttrak.add(\"tkhd\").set(\"flags\",BoxParser.TKHD_FLAG_ENABLED | \n\t\t\t\t\t\t\t\t BoxParser.TKHD_FLAG_IN_MOVIE | \n\t\t\t\t\t\t\t\t BoxParser.TKHD_FLAG_IN_PREVIEW)\n\t\t\t\t\t.set(\"creation_time\",0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"track_id\", options.id)\n\t\t\t\t\t.set(\"duration\", options.duration || 0)\n\t\t\t\t\t.set(\"layer\", options.layer || 0)\n\t\t\t\t\t.set(\"alternate_group\", 0)\n\t\t\t\t\t.set(\"volume\", 1)\n\t\t\t\t\t.set(\"matrix\", [ 1<<16, 0, 0, 0, 1<<16, 0, 0, 0, 0x40000000 ])\n\t\t\t\t\t.set(\"width\", options.width << 16)\n\t\t\t\t\t.set(\"height\", options.height << 16);\n\n\tvar mdia = trak.add(\"mdia\");\n\tmdia.add(\"mdhd\").set(\"creation_time\", 0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"timescale\", options.timescale || 1)\n\t\t\t\t\t.set(\"duration\", options.media_duration || 0)\n\t\t\t\t\t.set(\"language\", options.language || \"und\");\n\n\tmdia.add(\"hdlr\").set(\"handler\", options.hdlr || \"vide\")\n\t\t\t\t\t.set(\"name\", options.name || \"Track created with MP4Box.js\");\n\n\tmdia.add(\"elng\").set(\"extended_language\", options.language || \"fr-FR\");\n\n\tvar minf = mdia.add(\"minf\");\n\tif (BoxParser[options.type+\"SampleEntry\"] === undefined) return;\n\tvar sample_description_entry = new BoxParser[options.type+\"SampleEntry\"]();\n\tsample_description_entry.data_reference_index = 1;\n\tvar media_type = \"\";\n\tfor (var mediaType in BoxParser.sampleEntryCodes) {\n\t\tvar codes = BoxParser.sampleEntryCodes[mediaType];\n\t\tfor (var i = 0; i < codes.length; i++) {\n\t\t\tif (codes.indexOf(options.type) > -1) {\n\t\t\t\tmedia_type = mediaType;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tswitch(media_type) {\n\t\tcase \"Visual\":\n\t\t\tminf.add(\"vmhd\").set(\"graphicsmode\",0).set(\"opcolor\", [ 0, 0, 0 ]);\n\t\t\tsample_description_entry.set(\"width\", options.width)\n\t\t\t\t\t\t.set(\"height\", options.height)\n\t\t\t\t\t\t.set(\"horizresolution\", 0x48<<16)\n\t\t\t\t\t\t.set(\"vertresolution\", 0x48<<16)\n\t\t\t\t\t\t.set(\"frame_count\", 1)\n\t\t\t\t\t\t.set(\"compressorname\", options.type+\" Compressor\")\n\t\t\t\t\t\t.set(\"depth\", 0x18);\n\t\t\tif (options.avcDecoderConfigRecord) {\n\t\t\t\tvar avcC = new BoxParser.avcCBox();\n\t\t\t\tavcC.parse(new MP4BoxStream(options.avcDecoderConfigRecord));\n\t\t\t\tsample_description_entry.addBox(avcC);\n\t\t\t} else if (options.hevcDecoderConfigRecord) {\n\t\t\t\tvar hvcC = new BoxParser.hvcCBox();\n\t\t\t\thvcC.parse(new MP4BoxStream(options.hevcDecoderConfigRecord));\n\t\t\t\tsample_description_entry.addBox(hvcC);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"Audio\":\n\t\t\tminf.add(\"smhd\").set(\"balance\", options.balance || 0);\n\t\t\tsample_description_entry.set(\"channel_count\", options.channel_count || 2)\n\t\t\t\t\t\t.set(\"samplesize\", options.samplesize || 16)\n\t\t\t\t\t\t.set(\"samplerate\", options.samplerate || 1<<16);\n\t\t\tbreak;\n\t\tcase \"Hint\":\n\t\t\tminf.add(\"hmhd\"); // TODO: add properties\n\t\t\tbreak;\n\t\tcase \"Subtitle\":\n\t\t\tminf.add(\"sthd\");\n\t\t\tswitch (options.type) {\n\t\t\t\tcase \"stpp\":\n\t\t\t\t\tsample_description_entry.set(\"namespace\", options.namespace || \"nonamespace\")\n\t\t\t\t\t\t\t\t.set(\"schema_location\", options.schema_location || \"\")\n\t\t\t\t\t\t\t\t.set(\"auxiliary_mime_types\", options.auxiliary_mime_types || \"\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"Metadata\":\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t\tcase \"System\":\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t}\n\tif (options.description) {\n\t\tsample_description_entry.addBox(options.description);\n\t}\n\tif (options.description_boxes) {\n\t\toptions.description_boxes.forEach(function (b) {\n\t\t\tsample_description_entry.addBox(b);\n\t\t});\n\t}\n\tminf.add(\"dinf\").add(\"dref\").addEntry((new BoxParser[\"url Box\"]()).set(\"flags\", 0x1));\n\tvar stbl = minf.add(\"stbl\");\n\tstbl.add(\"stsd\").addEntry(sample_description_entry);\n\tstbl.add(\"stts\").set(\"sample_counts\", [])\n\t\t\t\t\t.set(\"sample_deltas\", []);\n\tstbl.add(\"stsc\").set(\"first_chunk\", [])\n\t\t\t\t\t.set(\"samples_per_chunk\", [])\n\t\t\t\t\t.set(\"sample_description_index\", []);\n\tstbl.add(\"stco\").set(\"chunk_offsets\", []);\n\tstbl.add(\"stsz\").set(\"sample_sizes\", []);\n\n\tthis.moov.mvex.add(\"trex\").set(\"track_id\", options.id)\n\t\t\t\t\t\t\t .set(\"default_sample_description_index\", options.default_sample_description_index || 1)\n\t\t\t\t\t\t\t .set(\"default_sample_duration\", options.default_sample_duration || 0)\n\t\t\t\t\t\t\t .set(\"default_sample_size\", options.default_sample_size || 0)\n\t\t\t\t\t\t\t .set(\"default_sample_flags\", options.default_sample_flags || 0);\n\tthis.buildTrakSampleLists(trak);\n\treturn options.id;\n}\n\nBoxParser.Box.prototype.computeSize = function(stream_) {\n\tvar stream = stream_ || new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n}\n\nISOFile.prototype.addSample = function (track_id, data, _options) {\n\tvar options = _options || {};\n\tvar sample = {};\n\tvar trak = this.getTrackById(track_id);\n\tif (trak === null) return;\n sample.number = trak.samples.length;\n\tsample.track_id = trak.tkhd.track_id;\n\tsample.timescale = trak.mdia.mdhd.timescale;\n\tsample.description_index = (options.sample_description_index ? options.sample_description_index - 1: 0);\n\tsample.description = trak.mdia.minf.stbl.stsd.entries[sample.description_index];\n\tsample.data = data;\n\tsample.size = data.byteLength;\n\tsample.alreadyRead = sample.size;\n\tsample.duration = options.duration || 1;\n\tsample.cts = options.cts || 0;\n\tsample.dts = options.dts || 0;\n\tsample.is_sync = options.is_sync || false;\n\tsample.is_leading = options.is_leading || 0;\n\tsample.depends_on = options.depends_on || 0;\n\tsample.is_depended_on = options.is_depended_on || 0;\n\tsample.has_redundancy = options.has_redundancy || 0;\n\tsample.degradation_priority = options.degradation_priority || 0;\n\tsample.offset = 0;\n\tsample.subsamples = options.subsamples;\n\ttrak.samples.push(sample);\n\ttrak.samples_size += sample.size;\n\ttrak.samples_duration += sample.duration;\n\tif (trak.first_dts === undefined) {\n\t\ttrak.first_dts = options.dts;\n\t}\n\n\tthis.processSamples();\n\t\n\tvar moof = this.createSingleSampleMoof(sample);\n\tthis.addBox(moof);\n\tmoof.computeSize();\n\t/* adjusting the data_offset now that the moof size is known*/\n\tmoof.trafs[0].truns[0].data_offset = moof.size+8; //8 is mdat header\n\tthis.add(\"mdat\").data = new Uint8Array(data);\n\treturn sample;\n}\n\nISOFile.prototype.createSingleSampleMoof = function(sample) {\n\tvar sample_flags = 0;\n\tif (sample.is_sync)\n\t\tsample_flags = (1 << 25); // sample_depends_on_none (I picture)\n\telse\n\t\tsample_flags = (1 << 16); // non-sync\n\n\tvar moof = new BoxParser.moofBox();\n\tmoof.add(\"mfhd\").set(\"sequence_number\", this.nextMoofNumber);\n\tthis.nextMoofNumber++;\n\tvar traf = moof.add(\"traf\");\n\tvar trak = this.getTrackById(sample.track_id);\n\ttraf.add(\"tfhd\").set(\"track_id\", sample.track_id)\n\t\t\t\t\t.set(\"flags\", BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF);\n\ttraf.add(\"tfdt\").set(\"baseMediaDecodeTime\", (sample.dts - (trak.first_dts || 0)));\n\ttraf.add(\"trun\").set(\"flags\", BoxParser.TRUN_FLAGS_DATA_OFFSET | BoxParser.TRUN_FLAGS_DURATION | \n\t\t\t\t \t\t\t\t BoxParser.TRUN_FLAGS_SIZE | BoxParser.TRUN_FLAGS_FLAGS | \n\t\t\t\t \t\t\t\t BoxParser.TRUN_FLAGS_CTS_OFFSET)\n\t\t\t\t\t.set(\"data_offset\",0)\n\t\t\t\t\t.set(\"first_sample_flags\",0)\n\t\t\t\t\t.set(\"sample_count\",1)\n\t\t\t\t\t.set(\"sample_duration\",[sample.duration])\n\t\t\t\t\t.set(\"sample_size\",[sample.size])\n\t\t\t\t\t.set(\"sample_flags\",[sample_flags])\n\t\t\t\t\t.set(\"sample_composition_time_offset\", [sample.cts - sample.dts]);\n\treturn moof;\n}\n\n// file:src/isofile-sample-processing.js\n/* Index of the last moof box received */\nISOFile.prototype.lastMoofIndex = 0;\n\n/* size of the buffers allocated for samples */\nISOFile.prototype.samplesDataSize = 0;\n\n/* Resets all sample tables */\nISOFile.prototype.resetTables = function () {\n\tvar i;\n\tvar trak, stco, stsc, stsz, stts, ctts, stss;\n\tthis.initial_duration = this.moov.mvhd.duration;\n\tthis.moov.mvhd.duration = 0;\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\ttrak = this.moov.traks[i];\n\t\ttrak.tkhd.duration = 0;\n\t\ttrak.mdia.mdhd.duration = 0;\n\t\tstco = trak.mdia.minf.stbl.stco || trak.mdia.minf.stbl.co64;\n\t\tstco.chunk_offsets = [];\n\t\tstsc = trak.mdia.minf.stbl.stsc;\n\t\tstsc.first_chunk = [];\n\t\tstsc.samples_per_chunk = [];\n\t\tstsc.sample_description_index = [];\n\t\tstsz = trak.mdia.minf.stbl.stsz || trak.mdia.minf.stbl.stz2;\n\t\tstsz.sample_sizes = [];\n\t\tstts = trak.mdia.minf.stbl.stts;\n\t\tstts.sample_counts = [];\n\t\tstts.sample_deltas = [];\n\t\tctts = trak.mdia.minf.stbl.ctts;\n\t\tif (ctts) {\n\t\t\tctts.sample_counts = [];\n\t\t\tctts.sample_offsets = [];\n\t\t}\n\t\tstss = trak.mdia.minf.stbl.stss;\n\t\tvar k = trak.mdia.minf.stbl.boxes.indexOf(stss);\n\t\tif (k != -1) trak.mdia.minf.stbl.boxes[k] = null;\n\t}\n}\n\nISOFile.initSampleGroups = function(trak, traf, sbgps, trak_sgpds, traf_sgpds) {\n\tvar l;\n\tvar k;\n\tvar sample_groups_info;\n\tvar sample_group_info;\n\tvar sample_group_key;\n\tfunction SampleGroupInfo(_type, _parameter, _sbgp) {\n\t\tthis.grouping_type = _type;\n\t\tthis.grouping_type_parameter = _parameter;\n\t\tthis.sbgp = _sbgp;\n\t\tthis.last_sample_in_run = -1;\n\t\tthis.entry_index = -1;\t\t\n\t}\n\tif (traf) {\n\t\ttraf.sample_groups_info = [];\n\t} \n\tif (!trak.sample_groups_info) {\n\t\ttrak.sample_groups_info = [];\n\t}\n\tfor (k = 0; k < sbgps.length; k++) {\n\t\tsample_group_key = sbgps[k].grouping_type +\"/\"+ sbgps[k].grouping_type_parameter;\n\t\tsample_group_info = new SampleGroupInfo(sbgps[k].grouping_type, sbgps[k].grouping_type_parameter, sbgps[k]);\n\t\tif (traf) {\n\t\t\ttraf.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t}\n\t\tif (!trak.sample_groups_info[sample_group_key]) {\n\t\t\ttrak.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t}\n\t\tfor (l=0; l <trak_sgpds.length; l++) {\n\t\t\tif (trak_sgpds[l].grouping_type === sbgps[k].grouping_type) {\n\t\t\t\tsample_group_info.description = trak_sgpds[l];\n\t\t\t\tsample_group_info.description.used = true;\n\t\t\t}\n\t\t}\n\t\tif (traf_sgpds) {\n\t\t\tfor (l=0; l <traf_sgpds.length; l++) {\n\t\t\t\tif (traf_sgpds[l].grouping_type === sbgps[k].grouping_type) {\n\t\t\t\t\tsample_group_info.fragment_description = traf_sgpds[l];\n\t\t\t\t\tsample_group_info.fragment_description.used = true;\n\t\t\t\t\tsample_group_info.is_fragment = true;\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t}\n\t}\n\tif (!traf) {\n\t\tfor (k = 0; k < trak_sgpds.length; k++) {\n\t\t\tif (!trak_sgpds[k].used && trak_sgpds[k].version >= 2) {\n\t\t\t\tsample_group_key = trak_sgpds[k].grouping_type +\"/0\";\n\t\t\t\tsample_group_info = new SampleGroupInfo(trak_sgpds[k].grouping_type, 0);\n\t\t\t\tif (!trak.sample_groups_info[sample_group_key]) {\n\t\t\t\t\ttrak.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (traf_sgpds) {\n\t\t\tfor (k = 0; k < traf_sgpds.length; k++) {\n\t\t\t\tif (!traf_sgpds[k].used && traf_sgpds[k].version >= 2) {\n\t\t\t\t\tsample_group_key = traf_sgpds[k].grouping_type +\"/0\";\n\t\t\t\t\tsample_group_info = new SampleGroupInfo(traf_sgpds[k].grouping_type, 0);\n\t\t\t\t\tsample_group_info.is_fragment = true;\n\t\t\t\t\tif (!traf.sample_groups_info[sample_group_key]) {\n\t\t\t\t\t\ttraf.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.setSampleGroupProperties = function(trak, sample, sample_number, sample_groups_info) {\n\tvar k;\n\tvar index;\n\tsample.sample_groups = [];\n\tfor (k in sample_groups_info) {\n\t\tsample.sample_groups[k] = {};\n\t\tsample.sample_groups[k].grouping_type = sample_groups_info[k].grouping_type;\n\t\tsample.sample_groups[k].grouping_type_parameter = sample_groups_info[k].grouping_type_parameter;\n\t\tif (sample_number >= sample_groups_info[k].last_sample_in_run) {\n\t\t\tif (sample_groups_info[k].last_sample_in_run < 0) {\n\t\t\t\tsample_groups_info[k].last_sample_in_run = 0;\n\t\t\t}\n\t\t\tsample_groups_info[k].entry_index++;\t\n\t\t\tif (sample_groups_info[k].entry_index <= sample_groups_info[k].sbgp.entries.length - 1) {\n\t\t\t\tsample_groups_info[k].last_sample_in_run += sample_groups_info[k].sbgp.entries[sample_groups_info[k].entry_index].sample_count;\n\t\t\t}\n\t\t}\n\t\tif (sample_groups_info[k].entry_index <= sample_groups_info[k].sbgp.entries.length - 1) {\n\t\t\tsample.sample_groups[k].group_description_index = sample_groups_info[k].sbgp.entries[sample_groups_info[k].entry_index].group_description_index;\n\t\t} else {\n\t\t\tsample.sample_groups[k].group_description_index = -1; // special value for not defined\n\t\t}\n\t\tif (sample.sample_groups[k].group_description_index !== 0) {\n\t\t\tvar description;\n\t\t\tif (sample_groups_info[k].fragment_description) {\n\t\t\t\tdescription = sample_groups_info[k].fragment_description;\n\t\t\t} else {\n\t\t\t\tdescription = sample_groups_info[k].description;\n\t\t\t}\n\t\t\tif (sample.sample_groups[k].group_description_index > 0) {\n\t\t\t\tif (sample.sample_groups[k].group_description_index > 65535) {\n\t\t\t\t\tindex = (sample.sample_groups[k].group_description_index >> 16)-1;\n\t\t\t\t} else {\n\t\t\t\t\tindex = sample.sample_groups[k].group_description_index-1;\n\t\t\t\t}\n\t\t\t\tif (description && index >= 0) {\n\t\t\t\t\tsample.sample_groups[k].description = description.entries[index];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (description && description.version >= 2) {\n\t\t\t\t\tif (description.default_group_description_index > 0) {\t\t\t\t\t\t\t\t\n\t\t\t\t\t\tsample.sample_groups[k].description = description.entries[description.default_group_description_index-1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.process_sdtp = function (sdtp, sample, number) {\n\tif (!sample) {\n\t\treturn;\n\t}\n\tif (sdtp) {\n\t\tsample.is_leading = sdtp.is_leading[number];\n\t\tsample.depends_on = sdtp.sample_depends_on[number];\n\t\tsample.is_depended_on = sdtp.sample_is_depended_on[number];\n\t\tsample.has_redundancy = sdtp.sample_has_redundancy[number];\n\t} else {\n\t\tsample.is_leading = 0;\n\t\tsample.depends_on = 0;\n\t\tsample.is_depended_on = 0\n\t\tsample.has_redundancy = 0;\n\t}\t\n}\n\n/* Build initial sample list from sample tables */\nISOFile.prototype.buildSampleLists = function() {\t\n\tvar i;\n\tvar trak;\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\ttrak = this.moov.traks[i];\n\t\tthis.buildTrakSampleLists(trak);\n\t}\n}\n\nISOFile.prototype.buildTrakSampleLists = function(trak) {\t\n\tvar j, k;\n\tvar stco, stsc, stsz, stts, ctts, stss, stsd, subs, sbgps, sgpds, stdp;\n\tvar chunk_run_index, chunk_index, last_chunk_in_run, offset_in_chunk, last_sample_in_chunk;\n\tvar last_sample_in_stts_run, stts_run_index, last_sample_in_ctts_run, ctts_run_index, last_stss_index, last_subs_index, subs_entry_index, last_subs_sample_index;\n\n\ttrak.samples = [];\n\ttrak.samples_duration = 0;\n\ttrak.samples_size = 0;\n\tstco = trak.mdia.minf.stbl.stco || trak.mdia.minf.stbl.co64;\n\tstsc = trak.mdia.minf.stbl.stsc;\n\tstsz = trak.mdia.minf.stbl.stsz || trak.mdia.minf.stbl.stz2;\n\tstts = trak.mdia.minf.stbl.stts;\n\tctts = trak.mdia.minf.stbl.ctts;\n\tstss = trak.mdia.minf.stbl.stss;\n\tstsd = trak.mdia.minf.stbl.stsd;\n\tsubs = trak.mdia.minf.stbl.subs;\n\tstdp = trak.mdia.minf.stbl.stdp;\n\tsbgps = trak.mdia.minf.stbl.sbgps;\n\tsgpds = trak.mdia.minf.stbl.sgpds;\n\t\n\tlast_sample_in_stts_run = -1;\n\tstts_run_index = -1;\n\tlast_sample_in_ctts_run = -1;\n\tctts_run_index = -1;\n\tlast_stss_index = 0;\n\tsubs_entry_index = 0;\n\tlast_subs_sample_index = 0;\t\t\n\n\tISOFile.initSampleGroups(trak, null, sbgps, sgpds);\n\n\tif (typeof stsz === \"undefined\") {\n\t\treturn;\n\t}\n\n\t/* we build the samples one by one and compute their properties */\n\tfor (j = 0; j < stsz.sample_sizes.length; j++) {\n\t\tvar sample = {};\n\t\tsample.number = j;\n\t\tsample.track_id = trak.tkhd.track_id;\n\t\tsample.timescale = trak.mdia.mdhd.timescale;\n\t\tsample.alreadyRead = 0;\n\t\ttrak.samples[j] = sample;\n\t\t/* size can be known directly */\n\t\tsample.size = stsz.sample_sizes[j];\n\t\ttrak.samples_size += sample.size;\n\t\t/* computing chunk-based properties (offset, sample description index)*/\n\t\tif (j === 0) {\t\t\t\t\n\t\t\tchunk_index = 1; /* the first sample is in the first chunk (chunk indexes are 1-based) */\n\t\t\tchunk_run_index = 0; /* the first chunk is the first entry in the first_chunk table */\n\t\t\tsample.chunk_index = chunk_index;\n\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\tlast_sample_in_chunk = stsc.samples_per_chunk[chunk_run_index];\n\t\t\toffset_in_chunk = 0;\n\n\t\t\t/* Is there another entry in the first_chunk table ? */\n\t\t\tif (chunk_run_index + 1 < stsc.first_chunk.length) {\n\t\t\t\t/* The last chunk in the run is the chunk before the next first chunk */\n\t\t\t\tlast_chunk_in_run = stsc.first_chunk[chunk_run_index+1]-1; \t\n\t\t\t} else {\n\t\t\t\t/* There is only one entry in the table, it is valid for all future chunks*/\n\t\t\t\tlast_chunk_in_run = Infinity;\n\t\t\t}\n\t\t} else {\n\t\t\tif (j < last_sample_in_chunk) {\n\t\t\t\t/* the sample is still in the current chunk */\n\t\t\t\tsample.chunk_index = chunk_index;\n\t\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\t} else {\n\t\t\t\t/* the sample is in the next chunk */\n\t\t\t\tchunk_index++;\n\t\t\t\tsample.chunk_index = chunk_index;\n\t\t\t\t/* reset the accumulated offset in the chunk */\n\t\t\t\toffset_in_chunk = 0;\n\t\t\t\tif (chunk_index <= last_chunk_in_run) {\n\t\t\t\t\t/* stay in the same entry of the first_chunk table */\n\t\t\t\t\t/* chunk_run_index unmodified */\n\t\t\t\t} else {\n\t\t\t\t\tchunk_run_index++;\n\t\t\t\t\t/* Is there another entry in the first_chunk table ? */\n\t\t\t\t\tif (chunk_run_index + 1 < stsc.first_chunk.length) {\n\t\t\t\t\t\t/* The last chunk in the run is the chunk before the next first chunk */\n\t\t\t\t\t\tlast_chunk_in_run = stsc.first_chunk[chunk_run_index+1]-1; \t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t/* There is only one entry in the table, it is valid for all future chunks*/\n\t\t\t\t\t\tlast_chunk_in_run = Infinity;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\t\tlast_sample_in_chunk += stsc.samples_per_chunk[chunk_run_index];\n\t\t\t}\n\t\t}\n\n\t\tsample.description_index = stsc.sample_description_index[sample.chunk_run_index]-1;\n\t\tsample.description = stsd.entries[sample.description_index];\n\t\tsample.offset = stco.chunk_offsets[sample.chunk_index-1] + offset_in_chunk; /* chunk indexes are 1-based */\n\t\toffset_in_chunk += sample.size;\n\n\t\t/* setting dts, cts, duration and rap flags */\n\t\tif (j > last_sample_in_stts_run) {\n\t\t\tstts_run_index++;\n\t\t\tif (last_sample_in_stts_run < 0) {\n\t\t\t\tlast_sample_in_stts_run = 0;\n\t\t\t}\n\t\t\tlast_sample_in_stts_run += stts.sample_counts[stts_run_index];\t\t\t\t\n\t\t}\n\t\tif (j > 0) {\n\t\t\ttrak.samples[j-1].duration = stts.sample_deltas[stts_run_index];\n\t\t\ttrak.samples_duration += trak.samples[j-1].duration;\n\t\t\tsample.dts = trak.samples[j-1].dts + trak.samples[j-1].duration;\n\t\t} else {\n\t\t\tsample.dts = 0;\n\t\t}\n\t\tif (ctts) {\n\t\t\tif (j >= last_sample_in_ctts_run) {\n\t\t\t\tctts_run_index++;\n\t\t\t\tif (last_sample_in_ctts_run < 0) {\n\t\t\t\t\tlast_sample_in_ctts_run = 0;\n\t\t\t\t}\n\t\t\t\tlast_sample_in_ctts_run += ctts.sample_counts[ctts_run_index];\t\t\t\t\n\t\t\t}\n\t\t\tsample.cts = trak.samples[j].dts + ctts.sample_offsets[ctts_run_index];\n\t\t} else {\n\t\t\tsample.cts = sample.dts;\n\t\t}\n\t\tif (stss) {\n\t\t\tif (j == stss.sample_numbers[last_stss_index] - 1) { // sample numbers are 1-based\n\t\t\t\tsample.is_sync = true;\n\t\t\t\tlast_stss_index++;\n\t\t\t} else {\n\t\t\t\tsample.is_sync = false;\t\t\t\t\n\t\t\t\tsample.degradation_priority = 0;\n\t\t\t}\n\t\t\tif (subs) {\n\t\t\t\tif (subs.entries[subs_entry_index].sample_delta + last_subs_sample_index == j+1) {\n\t\t\t\t\tsample.subsamples = subs.entries[subs_entry_index].subsamples;\n\t\t\t\t\tlast_subs_sample_index += subs.entries[subs_entry_index].sample_delta;\n\t\t\t\t\tsubs_entry_index++;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tsample.is_sync = true;\n\t\t}\n\t\tISOFile.process_sdtp(trak.mdia.minf.stbl.sdtp, sample, sample.number);\n\t\tif (stdp) {\n\t\t\tsample.degradation_priority = stdp.priority[j];\n\t\t} else {\n\t\t\tsample.degradation_priority = 0;\n\t\t}\n\t\tif (subs) {\n\t\t\tif (subs.entries[subs_entry_index].sample_delta + last_subs_sample_index == j) {\n\t\t\t\tsample.subsamples = subs.entries[subs_entry_index].subsamples;\n\t\t\t\tlast_subs_sample_index += subs.entries[subs_entry_index].sample_delta;\n\t\t\t}\n\t\t}\n\t\tif (sbgps.length > 0 || sgpds.length > 0) {\n\t\t\tISOFile.setSampleGroupProperties(trak, sample, j, trak.sample_groups_info);\n\t\t}\n\t}\n\tif (j>0) {\n\t\ttrak.samples[j-1].duration = Math.max(trak.mdia.mdhd.duration - trak.samples[j-1].dts, 0);\n\t\ttrak.samples_duration += trak.samples[j-1].duration;\n\t}\n}\n\n/* Update sample list when new 'moof' boxes are received */\nISOFile.prototype.updateSampleLists = function() {\t\n\tvar i, j, k;\n\tvar default_sample_description_index, default_sample_duration, default_sample_size, default_sample_flags;\n\tvar last_run_position;\n\tvar box, moof, traf, trak, trex;\n\tvar sample;\n\tvar sample_flags;\n\t\n\tif (this.moov === undefined) {\n\t\treturn;\n\t}\n\t/* if the input file is fragmented and fetched in multiple downloads, we need to update the list of samples */\n\twhile (this.lastMoofIndex < this.moofs.length) {\n\t\tbox = this.moofs[this.lastMoofIndex];\n\t\tthis.lastMoofIndex++;\n\t\tif (box.type == \"moof\") {\n\t\t\tmoof = box;\n\t\t\tfor (i = 0; i < moof.trafs.length; i++) {\n\t\t\t\ttraf = moof.trafs[i];\n\t\t\t\ttrak = this.getTrackById(traf.tfhd.track_id);\n\t\t\t\ttrex = this.getTrexById(traf.tfhd.track_id);\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\t\t\t\tdefault_sample_description_index = traf.tfhd.default_sample_description_index;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_description_index = (trex ? trex.default_sample_description_index: 1);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\t\t\t\tdefault_sample_duration = traf.tfhd.default_sample_duration;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_duration = (trex ? trex.default_sample_duration : 0);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\t\t\t\tdefault_sample_size = traf.tfhd.default_sample_size;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_size = (trex ? trex.default_sample_size : 0);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\t\t\t\tdefault_sample_flags = traf.tfhd.default_sample_flags;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_flags = (trex ? trex.default_sample_flags : 0);\n\t\t\t\t}\n\t\t\t\ttraf.sample_number = 0;\n\t\t\t\t/* process sample groups */\n\t\t\t\tif (traf.sbgps.length > 0) {\n\t\t\t\t\tISOFile.initSampleGroups(trak, traf, traf.sbgps, trak.mdia.minf.stbl.sgpds, traf.sgpds);\n\t\t\t\t}\n\t\t\t\tfor (j = 0; j < traf.truns.length; j++) {\n\t\t\t\t\tvar trun = traf.truns[j];\n\t\t\t\t\tfor (k = 0; k < trun.sample_count; k++) {\n\t\t\t\t\t\tsample = {};\n\t\t\t\t\t\tsample.moof_number = this.lastMoofIndex;\n\t\t\t\t\t\tsample.number_in_traf = traf.sample_number;\n\t\t\t\t\t\ttraf.sample_number++;\n\t\t\t sample.number = trak.samples.length;\n\t\t\t\t\t\ttraf.first_sample_index = trak.samples.length;\n\t\t\t\t\t\ttrak.samples.push(sample);\n\t\t\t\t\t\tsample.track_id = trak.tkhd.track_id;\n\t\t\t\t\t\tsample.timescale = trak.mdia.mdhd.timescale;\n\t\t\t\t\t\tsample.description_index = default_sample_description_index-1;\n\t\t\t\t\t\tsample.description = trak.mdia.minf.stbl.stsd.entries[sample.description_index];\n\t\t\t\t\t\tsample.size = default_sample_size;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\t\t\t\t\tsample.size = trun.sample_size[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrak.samples_size += sample.size;\n\t\t\t\t\t\tsample.duration = default_sample_duration;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\t\t\t\t\tsample.duration = trun.sample_duration[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrak.samples_duration += sample.duration;\n\t\t\t\t\t\tif (trak.first_traf_merged || k > 0) {\n\t\t\t\t\t\t\tsample.dts = trak.samples[trak.samples.length-2].dts+trak.samples[trak.samples.length-2].duration;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (traf.tfdt) {\n\t\t\t\t\t\t\t\tsample.dts = traf.tfdt.baseMediaDecodeTime;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsample.dts = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttrak.first_traf_merged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample.cts = sample.dts;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\t\t\t\t\tsample.cts = sample.dts + trun.sample_composition_time_offset[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample_flags = default_sample_flags;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\t\t\t\t\tsample_flags = trun.sample_flags[k];\n\t\t\t\t\t\t} else if (k === 0 && (trun.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG)) {\n\t\t\t\t\t\t\tsample_flags = trun.first_sample_flags;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample.is_sync = ((sample_flags >> 16 & 0x1) ? false : true);\n\t\t\t\t\t\tsample.is_leading = (sample_flags >> 26 & 0x3);\n\t\t\t\t\t\tsample.depends_on = (sample_flags >> 24 & 0x3);\n\t\t\t\t\t\tsample.is_depended_on = (sample_flags >> 22 & 0x3);\n\t\t\t\t\t\tsample.has_redundancy = (sample_flags >> 20 & 0x3);\n\t\t\t\t\t\tsample.degradation_priority = (sample_flags & 0xFFFF);\n\t\t\t\t\t\t//ISOFile.process_sdtp(traf.sdtp, sample, sample.number_in_traf);\n\t\t\t\t\t\tvar bdop = (traf.tfhd.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) ? true : false;\n\t\t\t\t\t\tvar dbim = (traf.tfhd.flags & BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF) ? true : false;\n\t\t\t\t\t\tvar dop = (trun.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) ? true : false;\n\t\t\t\t\t\tvar bdo = 0;\n\t\t\t\t\t\tif (!bdop) {\n\t\t\t\t\t\t\tif (!dbim) {\n\t\t\t\t\t\t\t\tif (j === 0) { // the first track in the movie fragment\n\t\t\t\t\t\t\t\t\tbdo = moof.start; // the position of the first byte of the enclosing Movie Fragment Box\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbdo = last_run_position; // end of the data defined by the preceding *track* (irrespective of the track id) fragment in the moof\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbdo = moof.start;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbdo = traf.tfhd.base_data_offset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (j === 0 && k === 0) {\n\t\t\t\t\t\t\tif (dop) {\n\t\t\t\t\t\t\t\tsample.offset = bdo + trun.data_offset; // If the data-offset is present, it is relative to the base-data-offset established in the track fragment header\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsample.offset = bdo; // the data for this run starts the base-data-offset defined by the track fragment header\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsample.offset = last_run_position; // this run starts immediately after the data of the previous run\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlast_run_position = sample.offset + sample.size;\n\t\t\t\t\t\tif (traf.sbgps.length > 0 || traf.sgpds.length > 0 ||\n\t\t\t\t\t\t\ttrak.mdia.minf.stbl.sbgps.length > 0 || trak.mdia.minf.stbl.sgpds.length > 0) {\n\t\t\t\t\t\t\tISOFile.setSampleGroupProperties(trak, sample, sample.number_in_traf, traf.sample_groups_info);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (traf.subs) {\n\t\t\t\t\ttrak.has_fragment_subsamples = true;\n\t\t\t\t\tvar sample_index = traf.first_sample_index;\n\t\t\t\t\tfor (j = 0; j < traf.subs.entries.length; j++) {\n\t\t\t\t\t\tsample_index += traf.subs.entries[j].sample_delta;\n\t\t\t\t\t\tsample = trak.samples[sample_index-1];\n\t\t\t\t\t\tsample.subsamples = traf.subs.entries[j].subsamples;\n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\t\n}\n\n/* Try to get sample data for a given sample:\n returns null if not found\n returns the same sample if already requested\n */\nISOFile.prototype.getSample = function(trak, sampleNum) {\t\n\tvar buffer;\n\tvar sample = trak.samples[sampleNum];\n\t\n\tif (!this.moov) {\n\t\treturn null;\n\t}\n\n\tif (!sample.data) {\n\t\t/* Not yet fetched */\n\t\tsample.data = new Uint8Array(sample.size);\n\t\tsample.alreadyRead = 0;\n\t\tthis.samplesDataSize += sample.size;\n\t\tLog.debug(\"ISOFile\", \"Allocating sample #\"+sampleNum+\" on track #\"+trak.tkhd.track_id+\" of size \"+sample.size+\" (total: \"+this.samplesDataSize+\")\");\n\t} else if (sample.alreadyRead == sample.size) {\n\t\t/* Already fetched entirely */\n\t\treturn sample;\n\t}\n\n\t/* The sample has only been partially fetched, we need to check in all buffers */\n\twhile(true) {\n\t\tvar index =\tthis.stream.findPosition(true, sample.offset + sample.alreadyRead, false);\n\t\tif (index > -1) {\n\t\t\tbuffer = this.stream.buffers[index];\n\t\t\tvar lengthAfterStart = buffer.byteLength - (sample.offset + sample.alreadyRead - buffer.fileStart);\n\t\t\tif (sample.size - sample.alreadyRead <= lengthAfterStart) {\n\t\t\t\t/* the (rest of the) sample is entirely contained in this buffer */\n\n\t\t\t\tLog.debug(\"ISOFile\",\"Getting sample #\"+sampleNum+\" data (alreadyRead: \"+sample.alreadyRead+\" offset: \"+\n\t\t\t\t\t(sample.offset+sample.alreadyRead - buffer.fileStart)+\" read size: \"+(sample.size - sample.alreadyRead)+\" full size: \"+sample.size+\")\");\n\n\t\t\t\tDataStream.memcpy(sample.data.buffer, sample.alreadyRead,\n\t\t\t\t buffer, sample.offset+sample.alreadyRead - buffer.fileStart, sample.size - sample.alreadyRead);\n\n\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\tbuffer.usedBytes += sample.size - sample.alreadyRead;\n\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\tsample.alreadyRead = sample.size;\n\n\t\t\t\treturn sample;\n\t\t\t} else {\n\t\t\t\t/* the sample does not end in this buffer */\n\n\t\t\t\tif (lengthAfterStart === 0) return null;\n\n\t\t\t\tLog.debug(\"ISOFile\",\"Getting sample #\"+sampleNum+\" partial data (alreadyRead: \"+sample.alreadyRead+\" offset: \"+\n\t\t\t\t\t(sample.offset+sample.alreadyRead - buffer.fileStart)+\" read size: \"+lengthAfterStart+\" full size: \"+sample.size+\")\");\n\n\t\t\t\tDataStream.memcpy(sample.data.buffer, sample.alreadyRead,\n\t\t\t\t buffer, sample.offset+sample.alreadyRead - buffer.fileStart, lengthAfterStart);\n\t\t\t\tsample.alreadyRead += lengthAfterStart;\n\n\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\tbuffer.usedBytes += lengthAfterStart;\n\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\t/* keep looking in the next buffer */\n\t\t\t}\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n}\n\n/* Release the memory used to store the data of the sample */\nISOFile.prototype.releaseSample = function(trak, sampleNum) {\t\n\tvar sample = trak.samples[sampleNum];\n\tif (sample.data) {\n\t\tthis.samplesDataSize -= sample.size;\n\t\tsample.data = null;\n\t\tsample.alreadyRead = 0;\n\t\treturn sample.size;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\nISOFile.prototype.getAllocatedSampleDataSize = function() {\n\treturn this.samplesDataSize;\n}\n\n/* Builds the MIME Type 'codecs' sub-parameters for the whole file */\nISOFile.prototype.getCodecs = function() {\t\n\tvar i;\n\tvar codecs = \"\";\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\tvar trak = this.moov.traks[i];\n\t\tif (i>0) {\n\t\t\tcodecs+=\",\"; \n\t\t}\n\t\tcodecs += trak.mdia.minf.stbl.stsd.entries[0].getCodec();\t\t\n\t}\n\treturn codecs;\n}\n\n/* Helper function */\nISOFile.prototype.getTrexById = function(id) {\t\n\tvar i;\n\tif (!this.moov || !this.moov.mvex) return null;\n\tfor (i = 0; i < this.moov.mvex.trexs.length; i++) {\n\t\tvar trex = this.moov.mvex.trexs[i];\n\t\tif (trex.track_id == id) return trex;\n\t}\n\treturn null;\n}\n\n/* Helper function */\nISOFile.prototype.getTrackById = function(id) {\n\tif (this.moov === undefined) {\n\t\treturn null;\n\t}\n\tfor (var j = 0; j < this.moov.traks.length; j++) {\n\t\tvar trak = this.moov.traks[j];\n\t\tif (trak.tkhd.track_id == id) return trak;\n\t}\n\treturn null;\n}\n// file:src/isofile-item-processing.js\n/* size of the buffers allocated for samples */\nISOFile.prototype.itemsDataSize = 0;\n\nISOFile.prototype.flattenItemInfo = function() {\t\n\tvar items = this.items;\n\tvar entity_groups = this.entity_groups;\n\tvar i, j;\n\tvar item;\n\tvar meta = this.meta;\n\tif (meta === null || meta === undefined) return;\n\tif (meta.hdlr === undefined) return;\n\tif (meta.iinf === undefined) return;\n\tfor (i = 0; i < meta.iinf.item_infos.length; i++) {\n\t\titem = {};\n\t\titem.id = meta.iinf.item_infos[i].item_ID;\n\t\titems[item.id] = item;\n\t\titem.ref_to = [];\n\t\titem.name = meta.iinf.item_infos[i].item_name;\n\t\tif (meta.iinf.item_infos[i].protection_index > 0) {\n\t\t\titem.protection = meta.ipro.protections[meta.iinf.item_infos[i].protection_index-1];\n\t\t}\n\t\tif (meta.iinf.item_infos[i].item_type) {\n\t\t\titem.type = meta.iinf.item_infos[i].item_type;\n\t\t} else {\n\t\t\titem.type = \"mime\";\n\t\t}\n\t\titem.content_type = meta.iinf.item_infos[i].content_type;\n\t\titem.content_encoding = meta.iinf.item_infos[i].content_encoding;\n\t\titem.item_uri_type = meta.iinf.item_infos[i].item_uri_type;\n\t}\n\tif (meta.grpl) {\n\t\tfor (i = 0; i < meta.grpl.boxes.length; i++) {\n\t\t\tentity_group = {};\n\t\t\tentity_group.id = meta.grpl.boxes[i].group_id;\n\t\t\tentity_group.entity_ids = meta.grpl.boxes[i].entity_ids;\n\t\t\tentity_group.type = meta.grpl.boxes[i].type;\n\t\t\tentity_groups[entity_group.id] = entity_group;\n\t\t}\n\t}\n\tif (meta.iloc) {\n\t\tfor(i = 0; i < meta.iloc.items.length; i++) {\n\t\t\tvar offset;\n\t\t\tvar itemloc = meta.iloc.items[i];\n\t\t\titem = items[itemloc.item_ID];\n\t\t\tif (itemloc.data_reference_index !== 0) {\n\t\t\t\tLog.warn(\"Item storage with reference to other files: not supported\");\n\t\t\t\titem.source = meta.dinf.boxes[itemloc.data_reference_index-1];\n\t\t\t}\n\t\t\tswitch(itemloc.construction_method) {\n\t\t\t\tcase 0: // offset into the file referenced by the data reference index\n\t\t\t\tbreak;\n\t\t\t\tcase 1: // offset into the idat box of this meta box\n\t\t\t\tbreak;\n\t\t\t\tcase 2: // offset into another item\n\t\t\t\tLog.warn(\"Item storage with construction_method : not supported\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\titem.extents = [];\n\t\t\titem.size = 0;\n\t\t\tfor (j = 0; j < itemloc.extents.length; j++) {\n\t\t\t\titem.extents[j] = {};\n\t\t\t\titem.extents[j].offset = itemloc.extents[j].extent_offset + itemloc.base_offset;\n\t\t\t\tif (itemloc.construction_method == 1) {\n\t\t\t\t\titem.extents[j].offset += meta.idat.start + meta.idat.hdr_size;\n\t\t\t\t}\n\t\t\t\titem.extents[j].length = itemloc.extents[j].extent_length;\n\t\t\t\titem.extents[j].alreadyRead = 0;\n\t\t\t\titem.size += item.extents[j].length;\n\t\t\t}\n\t\t}\n\t}\n\tif (meta.pitm) {\n\t\titems[meta.pitm.item_id].primary = true;\n\t}\n\tif (meta.iref) {\n\t\tfor (i=0; i <meta.iref.references.length; i++) {\n\t\t\tvar ref = meta.iref.references[i];\n\t\t\tfor (j=0; j<ref.references.length; j++) {\n\t\t\t\titems[ref.from_item_ID].ref_to.push({type: ref.type, id: ref.references[j]});\n\t\t\t}\n\t\t}\n\t}\n\tif (meta.iprp) {\n\t\tfor (var k = 0; k < meta.iprp.ipmas.length; k++) {\n\t\t\tvar ipma = meta.iprp.ipmas[k];\n\t\t\tfor (i = 0; i < ipma.associations.length; i++) {\n\t\t\t\tvar association = ipma.associations[i];\n\t\t\t\titem = items[association.id];\n\t\t\t\tif (!item) {\n\t\t\t\t\titem = entity_groups[association.id];\n\t\t\t\t}\n\t\t\t\tif (item) {\n\t\t\t\t\tif (item.properties === undefined) {\n\t\t\t\t\t\titem.properties = {};\n\t\t\t\t\t\titem.properties.boxes = [];\n\t\t\t\t\t}\n\t\t\t\t\tfor (j = 0; j < association.props.length; j++) {\n\t\t\t\t\t\tvar propEntry = association.props[j];\n\t\t\t\t\t\tif (propEntry.property_index > 0 && propEntry.property_index-1 < meta.iprp.ipco.boxes.length) {\n\t\t\t\t\t\t\tvar propbox = meta.iprp.ipco.boxes[propEntry.property_index-1];\n\t\t\t\t\t\t\titem.properties[propbox.type] = propbox;\n\t\t\t\t\t\t\titem.properties.boxes.push(propbox);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.prototype.getItem = function(item_id) {\t\n\tvar buffer;\n\tvar item;\n\t\n\tif (!this.meta) {\n\t\treturn null;\n\t}\n\n \titem = this.items[item_id];\n\tif (!item.data && item.size) {\n\t\t/* Not yet fetched */\n\t\titem.data = new Uint8Array(item.size);\n\t\titem.alreadyRead = 0;\n\t\tthis.itemsDataSize += item.size;\n\t\tLog.debug(\"ISOFile\", \"Allocating item #\"+item_id+\" of size \"+item.size+\" (total: \"+this.itemsDataSize+\")\");\n\t} else if (item.alreadyRead === item.size) {\n\t\t/* Already fetched entirely */\n\t\treturn item;\n\t}\n\n\t/* The item has only been partially fetched, we need to check in all buffers to find the remaining extents*/\n\n\tfor (var i = 0; i < item.extents.length; i++) {\n\t\tvar extent = item.extents[i];\n\t\tif (extent.alreadyRead === extent.length) {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tvar index =\tthis.stream.findPosition(true, extent.offset + extent.alreadyRead, false);\n\t\t\tif (index > -1) {\n\t\t\t\tbuffer = this.stream.buffers[index];\n\t\t\t\tvar lengthAfterStart = buffer.byteLength - (extent.offset + extent.alreadyRead - buffer.fileStart);\n\t\t\t\tif (extent.length - extent.alreadyRead <= lengthAfterStart) {\n\t\t\t\t\t/* the (rest of the) extent is entirely contained in this buffer */\n\n\t\t\t\t\tLog.debug(\"ISOFile\",\"Getting item #\"+item_id+\" extent #\"+i+\" data (alreadyRead: \"+extent.alreadyRead+\n\t\t\t\t\t\t\" offset: \"+(extent.offset+extent.alreadyRead - buffer.fileStart)+\" read size: \"+(extent.length - extent.alreadyRead)+\n\t\t\t\t\t\t\" full extent size: \"+extent.length+\" full item size: \"+item.size+\")\");\n\n\t\t\t\t\tDataStream.memcpy(item.data.buffer, item.alreadyRead, \n\t\t\t\t\t buffer, extent.offset+extent.alreadyRead - buffer.fileStart, extent.length - extent.alreadyRead);\n\n\t\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\t\tbuffer.usedBytes += extent.length - extent.alreadyRead;\n\t\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\t\titem.alreadyRead += (extent.length - extent.alreadyRead);\n\t\t\t\t\textent.alreadyRead = extent.length;\n\t\t\t\t} else {\n\t\t\t\t\t/* the sample does not end in this buffer */\n\n\t\t\t\t\tLog.debug(\"ISOFile\",\"Getting item #\"+item_id+\" extent #\"+i+\" partial data (alreadyRead: \"+extent.alreadyRead+\" offset: \"+\n\t\t\t\t\t\t(extent.offset+extent.alreadyRead - buffer.fileStart)+\" read size: \"+lengthAfterStart+\n\t\t\t\t\t\t\" full extent size: \"+extent.length+\" full item size: \"+item.size+\")\");\n\n\t\t\t\t\tDataStream.memcpy(item.data.buffer, item.alreadyRead, \n\t\t\t\t\t buffer, extent.offset+extent.alreadyRead - buffer.fileStart, lengthAfterStart);\n\t\t\t\t\textent.alreadyRead += lengthAfterStart;\n\t\t\t\t\titem.alreadyRead += lengthAfterStart;\n\n\t\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\t\tbuffer.usedBytes += lengthAfterStart;\n\t\t\t\t\tthis.stream.logBufferLevel();\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n\tif (item.alreadyRead === item.size) {\n\t\t/* fetched entirely */\n\t\treturn item;\n\t} else {\n\t\treturn null;\n\t}\n}\n\n/* Release the memory used to store the data of the item */\nISOFile.prototype.releaseItem = function(item_id) {\t\n\tvar item = this.items[item_id];\n\tif (item.data) {\n\t\tthis.itemsDataSize -= item.size;\n\t\titem.data = null;\n\t\titem.alreadyRead = 0;\n\t\tfor (var i = 0; i < item.extents.length; i++) {\n\t\t\tvar extent = item.extents[i];\n\t\t\textent.alreadyRead = 0;\n\t\t}\n\t\treturn item.size;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\n\nISOFile.prototype.processItems = function(callback) {\n\tfor(var i in this.items) {\n\t\tvar item = this.items[i];\n\t\tthis.getItem(item.id);\n\t\tif (callback && !item.sent) {\n\t\t\tcallback(item);\n\t\t\titem.sent = true;\n\t\t\titem.data = null;\n\t\t}\n\t}\n}\n\nISOFile.prototype.hasItem = function(name) {\n\tfor(var i in this.items) {\n\t\tvar item = this.items[i];\n\t\tif (item.name === name) {\n\t\t\treturn item.id;\n\t\t}\n\t}\n\treturn -1;\n}\n\nISOFile.prototype.getMetaHandler = function() {\n\tif (!this.meta) {\n\t\treturn null;\n\t} else {\n\t\treturn this.meta.hdlr.handler;\t\t\n\t}\n}\n\nISOFile.prototype.getPrimaryItem = function() {\n\tif (!this.meta || !this.meta.pitm) {\n\t\treturn null;\n\t} else {\n\t\treturn this.getItem(this.meta.pitm.item_id);\n\t}\n}\n\nISOFile.prototype.itemToFragmentedTrackFile = function(_options) {\n\tvar options = _options || {};\n\tvar item = null;\n\tif (options.itemId) {\n\t\titem = this.getItem(options.itemId);\n\t} else {\n\t\titem = this.getPrimaryItem();\n\t}\n\tif (item == null) return null;\n\n\tvar file = new ISOFile();\n\tfile.discardMdatData = false;\n\t// assuming the track type is the same as the item type\n\tvar trackOptions = { type: item.type, description_boxes: item.properties.boxes};\n\tif (item.properties.ispe) {\n\t\ttrackOptions.width = item.properties.ispe.image_width;\n\t\ttrackOptions.height = item.properties.ispe.image_height;\n\t}\n\tvar trackId = file.addTrack(trackOptions);\n\tif (trackId) {\n\t\tfile.addSample(trackId, item.data);\n\t\treturn file;\n\t} else {\n\t\treturn null;\n\t}\n}\n\n// file:src/isofile-write.js\n/* Rewrite the entire file */\nISOFile.prototype.write = function(outstream) {\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tthis.boxes[i].write(outstream);\n\t}\n}\n\nISOFile.prototype.createFragment = function(track_id, sampleNumber, stream_) {\n\tvar trak = this.getTrackById(track_id);\n\tvar sample = this.getSample(trak, sampleNumber);\n\tif (sample == null) {\n\t\tthis.setNextSeekPositionFromSample(trak.samples[sampleNumber]);\n\t\treturn null;\n\t}\n\t\n\tvar stream = stream_ || new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\n\tvar moof = this.createSingleSampleMoof(sample);\n\tmoof.write(stream);\n\n\t/* adjusting the data_offset now that the moof size is known*/\n\tmoof.trafs[0].truns[0].data_offset = moof.size+8; //8 is mdat header\n\tLog.debug(\"MP4Box\", \"Adjusting data_offset with new value \"+moof.trafs[0].truns[0].data_offset);\n\tstream.adjustUint32(moof.trafs[0].truns[0].data_offset_position, moof.trafs[0].truns[0].data_offset);\n\t\t\n\tvar mdat = new BoxParser.mdatBox();\n\tmdat.data = sample.data;\n\tmdat.write(stream);\n\treturn stream;\n}\n\n/* Modify the file and create the initialization segment */\nISOFile.writeInitializationSegment = function(ftyp, moov, total_duration, sample_duration) {\n\tvar i;\n\tvar index;\n\tvar mehd;\n\tvar trex;\n\tvar box;\n\tLog.debug(\"ISOFile\", \"Generating initialization segment\");\n\n\tvar stream = new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tftyp.write(stream);\n\t\n\t/* we can now create the new mvex box */\n\tvar mvex = moov.add(\"mvex\");\n\tif (total_duration) {\n\t\tmvex.add(\"mehd\").set(\"fragment_duration\", total_duration);\n\t}\n\tfor (i = 0; i < moov.traks.length; i++) {\n\t\tmvex.add(\"trex\").set(\"track_id\", moov.traks[i].tkhd.track_id)\n\t\t\t\t\t\t.set(\"default_sample_description_index\", 1)\n\t\t\t\t\t\t.set(\"default_sample_duration\", sample_duration)\n\t\t\t\t\t\t.set(\"default_sample_size\", 0)\n\t\t\t\t\t\t.set(\"default_sample_flags\", 1<<16)\n\t}\n\tmoov.write(stream);\n\n\treturn stream.buffer;\n\n}\n\nISOFile.prototype.save = function(name) {\n\tvar stream = new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n\tstream.save(name);\t\n}\n\nISOFile.prototype.getBuffer = function() {\n\tvar stream = new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n\treturn stream.buffer;\n}\n\nISOFile.prototype.initializeSegmentation = function() {\n\tvar i;\n\tvar j;\n\tvar box;\n\tvar initSegs;\n\tvar trak;\n\tvar seg;\n\tif (this.onSegment === null) {\n\t\tLog.warn(\"MP4Box\", \"No segmentation callback set!\");\n\t}\n\tif (!this.isFragmentationInitialized) {\n\t\tthis.isFragmentationInitialized = true;\t\t\n\t\tthis.nextMoofNumber = 0;\n\t\tthis.resetTables();\n\t}\t\n\tinitSegs = [];\t\n\tfor (i = 0; i < this.fragmentedTracks.length; i++) {\n\t\tvar moov = new BoxParser.moovBox();\n\t\tmoov.mvhd = this.moov.mvhd;\n\t moov.boxes.push(moov.mvhd);\n\t\ttrak = this.getTrackById(this.fragmentedTracks[i].id);\n\t\tmoov.boxes.push(trak);\n\t\tmoov.traks.push(trak);\n\t\tseg = {};\n\t\tseg.id = trak.tkhd.track_id;\n\t\tseg.user = this.fragmentedTracks[i].user;\n\t\tseg.buffer = ISOFile.writeInitializationSegment(this.ftyp, moov, (this.moov.mvex && this.moov.mvex.mehd ? this.moov.mvex.mehd.fragment_duration: undefined), (this.moov.traks[i].samples.length>0 ? this.moov.traks[i].samples[0].duration: 0));\n\t\tinitSegs.push(seg);\n\t}\n\treturn initSegs;\n}\n\n// file:src/box-print.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.Box.prototype.printHeader = function(output) {\n\tthis.size += 8;\n\tif (this.size > MAX_SIZE) {\n\t\tthis.size += 8;\n\t}\n\tif (this.type === \"uuid\") {\n\t\tthis.size += 16;\n\t}\n\toutput.log(output.indent+\"size:\"+this.size);\n\toutput.log(output.indent+\"type:\"+this.type);\n}\n\nBoxParser.FullBox.prototype.printHeader = function(output) {\n\tthis.size += 4;\n\tBoxParser.Box.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"version:\"+this.version);\n\toutput.log(output.indent+\"flags:\"+this.flags);\n}\n\nBoxParser.Box.prototype.print = function(output) {\n\tthis.printHeader(output);\n}\n\nBoxParser.ContainerBox.prototype.print = function(output) {\n\tthis.printHeader(output);\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tif (this.boxes[i]) {\n\t\t\tvar prev_indent = output.indent;\n\t\t\toutput.indent += \" \";\n\t\t\tthis.boxes[i].print(output);\n\t\t\toutput.indent = prev_indent;\n\t\t}\n\t}\n}\n\nISOFile.prototype.print = function(output) {\n\toutput.indent = \"\";\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tif (this.boxes[i]) {\n\t\t\tthis.boxes[i].print(output);\n\t\t}\n\t}\t\n}\n\nBoxParser.mvhdBox.prototype.print = function(output) {\n\tBoxParser.FullBox.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"creation_time: \"+this.creation_time);\n\toutput.log(output.indent+\"modification_time: \"+this.modification_time);\n\toutput.log(output.indent+\"timescale: \"+this.timescale);\n\toutput.log(output.indent+\"duration: \"+this.duration);\n\toutput.log(output.indent+\"rate: \"+this.rate);\n\toutput.log(output.indent+\"volume: \"+(this.volume>>8));\n\toutput.log(output.indent+\"matrix: \"+this.matrix.join(\", \"));\n\toutput.log(output.indent+\"next_track_id: \"+this.next_track_id);\n}\n\nBoxParser.tkhdBox.prototype.print = function(output) {\n\tBoxParser.FullBox.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"creation_time: \"+this.creation_time);\n\toutput.log(output.indent+\"modification_time: \"+this.modification_time);\n\toutput.log(output.indent+\"track_id: \"+this.track_id);\n\toutput.log(output.indent+\"duration: \"+this.duration);\n\toutput.log(output.indent+\"volume: \"+(this.volume>>8));\n\toutput.log(output.indent+\"matrix: \"+this.matrix.join(\", \"));\n\toutput.log(output.indent+\"layer: \"+this.layer);\n\toutput.log(output.indent+\"alternate_group: \"+this.alternate_group);\n\toutput.log(output.indent+\"width: \"+this.width);\n\toutput.log(output.indent+\"height: \"+this.height);\n}// file:src/mp4box.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar MP4Box = {};\n\nMP4Box.createFile = function (_keepMdatData, _stream) {\n\t/* Boolean indicating if bytes containing media data should be kept in memory */\n\tvar keepMdatData = (_keepMdatData !== undefined ? _keepMdatData : true);\n\tvar file = new ISOFile(_stream);\n\tfile.discardMdatData = (keepMdatData ? false : true);\n\treturn file;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.createFile = MP4Box.createFile;\n}\n","import * as MP4BoxLib from 'mp4box';\n\n/**\n * Robustly resolve MP4Box library object handling both ESM and CJS/UMD contexts.\n * In some build environments (like Vite + Workspace), the namespace import might\n * contain the library in the 'default' property, while in others it's at the root.\n */\n\nconst lib = MP4BoxLib as any;\n\n// Prefer the object that actually has the method we need\n// 1. Check if 'default' exists and has createFile (common in synthetic namespace imports)\n// 2. Fallback to the root object (common in direct CJS imports or proper ESM bundles)\nconst MP4Box: any = lib.default && typeof lib.default.createFile === 'function' ? lib.default : lib;\n\n// Verify critical method exists\nif (typeof MP4Box.createFile !== 'function') {\n console.warn(\n '[meframe/core] MP4Box library might not be loaded correctly. createFile is missing.',\n {\n MP4BoxLib: lib,\n resolved: MP4Box,\n }\n );\n}\n\nexport { MP4Box };\nexport default MP4Box;\n","import { MP4Box } from '../../utils/mp4box';\nimport type { DemuxConfig, TrackInfo } from './types';\n\n/**\n * Normalize audio codec string for WebCodecs compatibility\n * Fixes incomplete AAC codec strings from mp4box.js\n */\nexport function normalizeAudioCodec(codec?: string): string {\n if (!codec) return 'mp4a.40.2'; // Default AAC-LC\n\n // Incomplete mp4a → complete as AAC-LC\n if (codec === 'mp4a') {\n return 'mp4a.40.2';\n }\n\n // Already complete or other format, return as-is\n return codec;\n}\n\n/**\n * Normalize video codec string for WebCodecs compatibility\n * Constructs complete codec string (e.g., avc1.4D401F) from description box\n */\nexport function normalizeVideoCodec(codec?: string, description?: ArrayBuffer): string {\n if (!codec) return '';\n\n // If already complete (contains profile/level), return as-is\n if (codec.includes('.')) {\n return codec;\n }\n\n // For H.264 (avc1), extract profile/level from avcC box\n if (codec === 'avc1' && description && description.byteLength >= 4) {\n try {\n const view = new Uint8Array(description);\n // avcC structure: [version, profile, compatibility, level, ...]\n const profile = view[1]?.toString(16).padStart(2, '0').toUpperCase();\n const compatibility = view[2]?.toString(16).padStart(2, '0').toUpperCase();\n const level = view[3]?.toString(16).padStart(2, '0').toUpperCase();\n if (profile && compatibility && level) {\n return `avc1.${profile}${compatibility}${level}`;\n }\n } catch (error) {\n console.warn('[MP4Demuxer] Failed to parse avcC box:', error);\n }\n }\n\n // For HEVC (hev1/hvc1), extract from hvcC box\n if ((codec === 'hev1' || codec === 'hvc1') && description && description.byteLength >= 13) {\n try {\n const view = new Uint8Array(description);\n // hvcC structure is more complex, but we can extract basic profile/level\n const profile = view[1];\n const level = view[12];\n if (profile !== undefined && level !== undefined) {\n return `${codec}.${profile}.${level}`;\n }\n } catch (error) {\n console.warn('[MP4Demuxer] Failed to parse hvcC box:', error);\n }\n }\n\n // Return as-is if we can't normalize\n return codec;\n}\n\n/**\n * MP4 Demuxer - Extract encoded chunks from MP4 container\n * Simplified implementation following Stream API pattern\n */\nexport class MP4Demuxer {\n private mp4boxFile: any;\n tracks = new Map<number, TrackInfo>();\n isReady = false;\n private videoController?: ReadableStreamDefaultController<EncodedVideoChunk>;\n private audioController?: ReadableStreamDefaultController<EncodedAudioChunk>;\n private demuxHighWaterMark: number;\n private onReadyCallback?: () => void;\n private fileOffset = 0;\n private videoTimestampOffset: number | null = null;\n private audioTimestampOffset: number | null = null;\n private skipAudio: boolean = false;\n\n constructor(config: DemuxConfig & { onReady?: () => void } = {}) {\n this.mp4boxFile = MP4Box.createFile();\n this.onReadyCallback = config.onReady;\n this.skipAudio = config.skipAudio ?? false;\n\n // Use provided config with local default as fallback\n const DEFAULT_HIGH_WATER_MARK = 10; // Default for video chunks\n this.demuxHighWaterMark = config.highWaterMark ?? DEFAULT_HIGH_WATER_MARK;\n\n this.setupHandlers();\n }\n\n updateConfig(config: DemuxConfig): void {\n this.demuxHighWaterMark = config.highWaterMark ?? this.demuxHighWaterMark;\n }\n\n private setupHandlers(): void {\n this.mp4boxFile.onError = (error: string) => {\n console.error('[MP4Demuxer] MP4Box error:', error);\n const err = new Error(error);\n this.videoController?.error(err);\n this.audioController?.error(err);\n };\n\n this.mp4boxFile.onReady = (info: any) => {\n this.processTracks(info.tracks);\n this.isReady = true;\n\n // Call the ready callback before starting\n if (this.onReadyCallback) {\n this.onReadyCallback();\n }\n\n // Start processing samples after callback\n // Note: start() enables extraction, actual samples will be output\n // when flush() is called (by TransformStream's flush callback)\n this.mp4boxFile.start();\n };\n\n this.mp4boxFile.onSamples = (trackId: number, _user: any, samples: any[]) => {\n this.processSamples(trackId, samples);\n };\n }\n\n private processTracks(tracks: any[]): void {\n for (const track of tracks) {\n const trackInfo: TrackInfo = {\n id: track.id,\n type: track.type === 'video' ? 'video' : 'audio',\n codec: track.codec, // Temporarily set to raw codec, will normalize below\n timescale: track.timescale,\n };\n\n if (track.type === 'video') {\n trackInfo.width = track.video?.width;\n trackInfo.height = track.video?.height;\n trackInfo.description = this.getVideoDescription(track);\n // Normalize video codec with description to get complete codec string\n trackInfo.codec = normalizeVideoCodec(track.codec, trackInfo.description);\n } else if (track.type === 'audio') {\n trackInfo.sampleRate = track.audio?.sample_rate || track.timescale;\n trackInfo.numberOfChannels = track.audio?.channel_count;\n trackInfo.description = this.getAudioDescription(track);\n // Normalize audio codec\n trackInfo.codec = normalizeAudioCodec(track.codec);\n }\n\n this.tracks.set(track.id, trackInfo);\n\n // Configure extraction - use Infinity to extract all samples\n // Note: onSamples will be called multiple times as data is appended,\n // but we don't need to manually request more batches\n this.mp4boxFile.setExtractionOptions(track.id, track, {\n nbSamples: Infinity,\n });\n }\n }\n\n private processSamples(trackId: number, samples: any[]): void {\n const track = this.tracks.get(trackId);\n if (!track) return;\n\n const timescale = track.timescale || 90000;\n for (const sample of samples) {\n const rawTimestamp = (sample.cts * 1000000) / timescale;\n const duration = (sample.duration * 1000000) / timescale;\n\n if (track.type === 'video') {\n if (!this.videoController) {\n console.error('[MP4Demuxer] videoController is null when trying to output chunk!');\n // Should not happen - stream should be created before appendBuffer\n return;\n }\n\n // Normalize timestamp: first frame starts at 0\n if (this.videoTimestampOffset === null) {\n this.videoTimestampOffset = rawTimestamp;\n }\n const timestamp = rawTimestamp - this.videoTimestampOffset;\n\n const chunk = new EncodedVideoChunk({\n type: sample.is_sync ? 'key' : 'delta',\n timestamp,\n duration,\n data: sample.data,\n });\n this.videoController.enqueue(chunk);\n } else if (track.type === 'audio') {\n // Skip audio processing if skipAudio enabled or no controller\n if (!this.audioController) {\n // Still release samples immediately to avoid memory accumulation in mp4box.js\n const last = samples[samples.length - 1].number;\n this.mp4boxFile.releaseUsedSamples(trackId, last + 1);\n return;\n }\n\n // Normalize timestamp: first frame starts at 0\n if (this.audioTimestampOffset === null) {\n this.audioTimestampOffset = rawTimestamp;\n }\n const timestamp = rawTimestamp - this.audioTimestampOffset;\n\n const chunk = new EncodedAudioChunk({\n type: 'key',\n timestamp,\n duration,\n data: sample.data,\n });\n this.audioController.enqueue(chunk);\n }\n }\n\n const last = samples[samples.length - 1].number;\n // Release memory immediately\n this.mp4boxFile.releaseUsedSamples(trackId, last + 1);\n }\n\n private getVideoDescription(track: any): ArrayBuffer | undefined {\n return MP4Demuxer.extractVideoDescription(this.mp4boxFile, track.id);\n }\n\n /**\n * Extract video description (avcC/hvcC/etc) for VideoDecoder configuration\n * Static method for reuse in other components\n */\n static extractVideoDescription(mp4boxFile: any, trackId: number): ArrayBuffer | undefined {\n try {\n const fullTrack = mp4boxFile.getTrackById(trackId);\n for (const entry of fullTrack.mdia.minf.stbl.stsd.entries) {\n const box = entry.avcC ?? entry.hvcC ?? entry.av1C ?? entry.vpcC;\n if (box) {\n const stream = new (MP4Box as any).DataStream(\n undefined,\n 0,\n (MP4Box as any).DataStream.BIG_ENDIAN // IMPORTANT: must be BIG_ENDIAN\n );\n box.write(stream);\n return new Uint8Array(stream.buffer.slice(8)).buffer;\n }\n }\n } catch (error) {\n console.error('Failed to get video description:', error);\n }\n return undefined;\n }\n\n // private getVideoDescription(track: any): ArrayBuffer | undefined {\n // if (!this.mp4boxFile) return undefined;\n // return getVideoDescription(this.mp4boxFile, track);\n // }\n\n private getAudioDescription(track: any): ArrayBuffer | undefined {\n try {\n const fullTrack = this.mp4boxFile.getTrackById(track.id);\n for (const entry of fullTrack.mdia.minf.stbl.stsd.entries) {\n if (entry.esds) {\n // Use mp4box.js parsed structure to get AudioSpecificConfig\n // esds.esd.descs[0] = DecoderConfigDescriptor\n // esds.esd.descs[0].descs[0].data = DecoderSpecificInfo (AudioSpecificConfig)\n const decConfigDesc = entry.esds.esd?.descs?.[0];\n const decSpecInfo = decConfigDesc?.descs?.[0];\n\n if (decSpecInfo?.data) {\n // Convert Uint8Array to ArrayBuffer\n const data = decSpecInfo.data;\n if (data instanceof Uint8Array) {\n const buffer = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);\n return buffer instanceof ArrayBuffer ? buffer : undefined;\n } else if (Array.isArray(data)) {\n // Some versions of mp4box.js return Array instead of Uint8Array\n return new Uint8Array(data).buffer;\n }\n }\n\n console.warn('[MP4Demuxer] Could not extract AudioSpecificConfig from esds structure');\n return undefined;\n } else if (entry.dOps) {\n // For Opus, use the full dOps box\n const stream = new (MP4Box as any).DataStream(\n undefined,\n 0,\n (MP4Box as any).DataStream.BIG_ENDIAN\n );\n entry.dOps.write(stream);\n return new Uint8Array(stream.buffer.slice(8)).buffer;\n }\n }\n } catch (error) {\n console.error('Failed to get audio description:', error);\n }\n return undefined;\n }\n\n /**\n * Create readable stream for video chunks (output only)\n */\n createVideoStream(): ReadableStream<EncodedVideoChunk> {\n return new ReadableStream<EncodedVideoChunk>(\n {\n start: (ctrl) => {\n this.videoController = ctrl as any;\n },\n cancel: () => {\n this.videoController = undefined;\n },\n },\n {\n highWaterMark: this.demuxHighWaterMark,\n size: () => 1,\n }\n );\n }\n\n /**\n * Create readable stream for audio chunks (output only)\n */\n createAudioStream(): ReadableStream<EncodedAudioChunk> | null {\n if (this.skipAudio) {\n return null;\n }\n\n return new ReadableStream<EncodedAudioChunk>(\n {\n start: (ctrl) => {\n this.audioController = ctrl as any;\n },\n cancel: () => {\n this.audioController = undefined;\n },\n },\n {\n highWaterMark: this.demuxHighWaterMark,\n size: () => 1,\n }\n );\n }\n\n /**\n * Create writable stream for input data (single source)\n * This is the only stream that should receive the input data\n */\n createInputStream(): WritableStream<Uint8Array | ArrayBuffer> {\n return new WritableStream<Uint8Array | ArrayBuffer>(\n {\n write: (chunk) => {\n // Create a copy to avoid buffer reuse issues (required for mp4box 0.5.x)\n const chunkData = new Uint8Array(chunk);\n this.appendBuffer(chunkData);\n\n // Flush after each append to trigger sample extraction immediately\n this.mp4boxFile.flush();\n },\n close: async () => {\n // Trigger final MP4Box flush\n this.mp4boxFile.flush();\n\n // Wait for MP4Box to complete sample extraction (onSamples callbacks)\n await new Promise((resolve) => setTimeout(resolve, 100));\n this.videoController?.close();\n this.audioController?.close();\n },\n },\n {\n highWaterMark: this.demuxHighWaterMark,\n }\n );\n }\n\n appendBuffer(chunk: Uint8Array): void {\n const buffer = chunk.buffer as ArrayBuffer & { fileStart: number };\n buffer.fileStart = this.fileOffset;\n this.mp4boxFile.appendBuffer(buffer);\n this.fileOffset += chunk.byteLength;\n }\n\n /**\n * Get video track info if available\n */\n get videoTrackInfo(): TrackInfo | undefined {\n return Array.from(this.tracks.values()).find((track) => track.type === 'video');\n }\n\n /**\n * Get audio track info if available\n */\n get audioTrackInfo(): TrackInfo | undefined {\n return Array.from(this.tracks.values()).find((track) => track.type === 'audio');\n }\n\n destroy(): void {\n this.mp4boxFile?.stop();\n this.mp4boxFile = null;\n this.tracks.clear();\n this.isReady = false;\n this.videoTimestampOffset = null;\n this.audioTimestampOffset = null;\n }\n}\n"],"names":["i","box","ret","str","entry_count","nalu_array","j","nalu","strm","MP4Box","last"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"MP4Demuxer.DfWiwyjB.js","sources":["../../../../node_modules/.pnpm/mp4box@0.5.4/node_modules/mp4box/dist/mp4box.all.js","../../src/utils/mp4box.ts","../../src/stages/demux/MP4Demuxer.ts"],"sourcesContent":["// file:src/log.js\n/* \n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar Log = (function (){\n\t\tvar start = new Date();\n\t\tvar LOG_LEVEL_ERROR \t= 4;\n\t\tvar LOG_LEVEL_WARNING \t= 3;\n\t\tvar LOG_LEVEL_INFO \t\t= 2;\n\t\tvar LOG_LEVEL_DEBUG\t\t= 1;\n\t\tvar log_level = LOG_LEVEL_ERROR;\n\t\tvar logObject = {\n\t\t\tsetLogLevel : function(level) {\n\t\t\t\tif (level == this.debug) log_level = LOG_LEVEL_DEBUG;\n\t\t\t\telse if (level == this.info) log_level = LOG_LEVEL_INFO;\n\t\t\t\telse if (level == this.warn) log_level = LOG_LEVEL_WARNING;\n\t\t\t\telse if (level == this.error) log_level = LOG_LEVEL_ERROR;\n\t\t\t\telse log_level = LOG_LEVEL_ERROR;\n\t\t\t},\n\t\t\tdebug : function(module, msg) {\n\t\t\t\tif (console.debug === undefined) {\n\t\t\t\t\tconsole.debug = console.log;\n\t\t\t\t}\n\t\t\t\tif (LOG_LEVEL_DEBUG >= log_level) {\n\t\t\t\t\tconsole.debug(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tlog : function(module, msg) {\n\t\t\t\tthis.debug(module.msg)\n\t\t\t},\n\t\t\tinfo : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_INFO >= log_level) {\n\t\t\t\t\tconsole.info(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\twarn : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_WARNING >= log_level) {\n\t\t\t\t\tconsole.warn(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\terror : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_ERROR >= log_level) {\n\t\t\t\t\tconsole.error(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn logObject;\n\t})();\n\t\n/* Helper function to print a duration value in the form H:MM:SS.MS */\nLog.getDurationString = function(duration, _timescale) {\n\tvar neg;\n\t/* Helper function to print a number on a fixed number of digits */\n\tfunction pad(number, length) {\n\t\tvar str = '' + number;\n\t\tvar a = str.split('.');\t\t\n\t\twhile (a[0].length < length) {\n\t\t\ta[0] = '0' + a[0];\n\t\t}\n\t\treturn a.join('.');\n\t}\n\tif (duration < 0) {\n\t\tneg = true;\n\t\tduration = -duration;\n\t} else {\n\t\tneg = false;\t\n\t}\n\tvar timescale = _timescale || 1;\n\tvar duration_sec = duration/timescale;\n\tvar hours = Math.floor(duration_sec/3600);\n\tduration_sec -= hours * 3600;\n\tvar minutes = Math.floor(duration_sec/60);\n\tduration_sec -= minutes * 60;\t\t\n\tvar msec = duration_sec*1000;\n\tduration_sec = Math.floor(duration_sec);\n\tmsec -= duration_sec*1000;\n\tmsec = Math.floor(msec);\n\treturn (neg ? \"-\": \"\")+hours+\":\"+pad(minutes,2)+\":\"+pad(duration_sec,2)+\".\"+pad(msec,3);\n}\n\t\n/* Helper function to stringify HTML5 TimeRanges objects */\t\nLog.printRanges = function(ranges) {\n\tvar length = ranges.length;\n\tif (length > 0) {\n\t\tvar str = \"\";\n\t\tfor (var i = 0; i < length; i++) {\n\t\t if (i > 0) str += \",\";\n\t\t str += \"[\"+Log.getDurationString(ranges.start(i))+ \",\"+Log.getDurationString(ranges.end(i))+\"]\";\n\t\t}\n\t\treturn str;\n\t} else {\n\t\treturn \"(empty)\";\n\t}\n}\n\nif (typeof exports !== 'undefined') {\n\texports.Log = Log;\n}\n// file:src/stream.js\nvar MP4BoxStream = function(arrayBuffer) {\n if (arrayBuffer instanceof ArrayBuffer) {\n this.buffer = arrayBuffer;\n this.dataview = new DataView(arrayBuffer);\n } else {\n throw (\"Needs an array buffer\");\n }\n this.position = 0;\n};\n\n/*************************************************************************\n Common API between MultiBufferStream and SimpleStream\n *************************************************************************/\nMP4BoxStream.prototype.getPosition = function() {\n return this.position;\n}\n\nMP4BoxStream.prototype.getEndPosition = function() {\n return this.buffer.byteLength;\n}\n\nMP4BoxStream.prototype.getLength = function() {\n return this.buffer.byteLength;\n}\n\nMP4BoxStream.prototype.seek = function (pos) {\n var npos = Math.max(0, Math.min(this.buffer.byteLength, pos));\n this.position = (isNaN(npos) || !isFinite(npos)) ? 0 : npos;\n return true;\n}\n\nMP4BoxStream.prototype.isEos = function () {\n return this.getPosition() >= this.getEndPosition();\n}\n\n/*************************************************************************\n Read methods, simimar to DataStream but simpler\n *************************************************************************/\nMP4BoxStream.prototype.readAnyInt = function(size, signed) {\n var res = 0;\n if (this.position + size <= this.buffer.byteLength) {\n switch (size) {\n case 1:\n if (signed) {\n res = this.dataview.getInt8(this.position);\n } else {\n res = this.dataview.getUint8(this.position);\n }\n break;\n case 2:\n if (signed) {\n res = this.dataview.getInt16(this.position);\n } else {\n res = this.dataview.getUint16(this.position);\n }\n break;\n case 3:\n if (signed) {\n throw (\"No method for reading signed 24 bits values\");\n } else {\n res = this.dataview.getUint8(this.position) << 16;\n res |= this.dataview.getUint8(this.position+1) << 8;\n res |= this.dataview.getUint8(this.position+2);\n }\n break;\n case 4:\n if (signed) {\n res = this.dataview.getInt32(this.position);\n } else {\n res = this.dataview.getUint32(this.position);\n }\n break;\n case 8:\n if (signed) {\n throw (\"No method for reading signed 64 bits values\");\n } else {\n res = this.dataview.getUint32(this.position) << 32;\n res |= this.dataview.getUint32(this.position+4);\n }\n break;\n default:\n throw (\"readInt method not implemented for size: \"+size);\n }\n this.position+= size;\n return res;\n } else {\n throw (\"Not enough bytes in buffer\");\n }\n}\n\nMP4BoxStream.prototype.readUint8 = function() {\n return this.readAnyInt(1, false);\n}\n\nMP4BoxStream.prototype.readUint16 = function() {\n return this.readAnyInt(2, false);\n}\n\nMP4BoxStream.prototype.readUint24 = function() {\n return this.readAnyInt(3, false);\n}\n\nMP4BoxStream.prototype.readUint32 = function() {\n return this.readAnyInt(4, false);\n}\n\nMP4BoxStream.prototype.readUint64 = function() {\n return this.readAnyInt(8, false);\n}\n\nMP4BoxStream.prototype.readString = function(length) {\n if (this.position + length <= this.buffer.byteLength) {\n var s = \"\";\n for (var i = 0; i < length; i++) {\n s += String.fromCharCode(this.readUint8());\n }\n return s;\n } else {\n throw (\"Not enough bytes in buffer\");\n }\n}\n\nMP4BoxStream.prototype.readCString = function() {\n var arr = [];\n while(true) {\n var b = this.readUint8();\n if (b !== 0) {\n arr.push(b);\n } else {\n break;\n }\n }\n return String.fromCharCode.apply(null, arr); \n}\n\nMP4BoxStream.prototype.readInt8 = function() {\n return this.readAnyInt(1, true);\n}\n\nMP4BoxStream.prototype.readInt16 = function() {\n return this.readAnyInt(2, true);\n}\n\nMP4BoxStream.prototype.readInt32 = function() {\n return this.readAnyInt(4, true);\n}\n\nMP4BoxStream.prototype.readInt64 = function() {\n return this.readAnyInt(8, false);\n}\n\nMP4BoxStream.prototype.readUint8Array = function(length) {\n var arr = new Uint8Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint8();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readInt16Array = function(length) {\n var arr = new Int16Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readInt16();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readUint16Array = function(length) {\n var arr = new Int16Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint16();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readUint32Array = function(length) {\n var arr = new Uint32Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint32();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readInt32Array = function(length) {\n var arr = new Int32Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readInt32();\n }\n return arr;\n}\n\nif (typeof exports !== 'undefined') {\n exports.MP4BoxStream = MP4BoxStream;\n}// file:src/DataStream.js\n/**\n DataStream reads scalars, arrays and structs of data from an ArrayBuffer.\n It's like a file-like DataView on steroids.\n\n @param {ArrayBuffer} arrayBuffer ArrayBuffer to read from.\n @param {?Number} byteOffset Offset from arrayBuffer beginning for the DataStream.\n @param {?Boolean} endianness DataStream.BIG_ENDIAN or DataStream.LITTLE_ENDIAN (the default).\n */\nvar DataStream = function(arrayBuffer, byteOffset, endianness) {\n this._byteOffset = byteOffset || 0;\n if (arrayBuffer instanceof ArrayBuffer) {\n this.buffer = arrayBuffer;\n } else if (typeof arrayBuffer == \"object\") {\n this.dataView = arrayBuffer;\n if (byteOffset) {\n this._byteOffset += byteOffset;\n }\n } else {\n this.buffer = new ArrayBuffer(arrayBuffer || 0);\n }\n this.position = 0;\n this.endianness = endianness == null ? DataStream.LITTLE_ENDIAN : endianness;\n};\nDataStream.prototype = {};\n\nDataStream.prototype.getPosition = function() {\n return this.position;\n}\n\n/**\n Internal function to resize the DataStream buffer when required.\n @param {number} extra Number of bytes to add to the buffer allocation.\n @return {null}\n */\nDataStream.prototype._realloc = function(extra) {\n if (!this._dynamicSize) {\n return;\n }\n var req = this._byteOffset + this.position + extra;\n var blen = this._buffer.byteLength;\n if (req <= blen) {\n if (req > this._byteLength) {\n this._byteLength = req;\n }\n return;\n }\n if (blen < 1) {\n blen = 1;\n }\n while (req > blen) {\n blen *= 2;\n }\n var buf = new ArrayBuffer(blen);\n var src = new Uint8Array(this._buffer);\n var dst = new Uint8Array(buf, 0, src.length);\n dst.set(src);\n this.buffer = buf;\n this._byteLength = req;\n};\n\n/**\n Internal function to trim the DataStream buffer when required.\n Used for stripping out the extra bytes from the backing buffer when\n the virtual byteLength is smaller than the buffer byteLength (happens after\n growing the buffer with writes and not filling the extra space completely).\n\n @return {null}\n */\nDataStream.prototype._trimAlloc = function() {\n if (this._byteLength == this._buffer.byteLength) {\n return;\n }\n var buf = new ArrayBuffer(this._byteLength);\n var dst = new Uint8Array(buf);\n var src = new Uint8Array(this._buffer, 0, dst.length);\n dst.set(src);\n this.buffer = buf;\n};\n\n\n/**\n Big-endian const to use as default endianness.\n @type {boolean}\n */\nDataStream.BIG_ENDIAN = false;\n\n/**\n Little-endian const to use as default endianness.\n @type {boolean}\n */\nDataStream.LITTLE_ENDIAN = true;\n\n/**\n Virtual byte length of the DataStream backing buffer.\n Updated to be max of original buffer size and last written size.\n If dynamicSize is false is set to buffer size.\n @type {number}\n */\nDataStream.prototype._byteLength = 0;\n\n/**\n Returns the byte length of the DataStream object.\n @type {number}\n */\nObject.defineProperty(DataStream.prototype, 'byteLength',\n { get: function() {\n return this._byteLength - this._byteOffset;\n }});\n\n/**\n Set/get the backing ArrayBuffer of the DataStream object.\n The setter updates the DataView to point to the new buffer.\n @type {Object}\n */\nObject.defineProperty(DataStream.prototype, 'buffer',\n { get: function() {\n this._trimAlloc();\n return this._buffer;\n },\n set: function(v) {\n this._buffer = v;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._buffer.byteLength;\n } });\n\n/**\n Set/get the byteOffset of the DataStream object.\n The setter updates the DataView to point to the new byteOffset.\n @type {number}\n */\nObject.defineProperty(DataStream.prototype, 'byteOffset',\n { get: function() {\n return this._byteOffset;\n },\n set: function(v) {\n this._byteOffset = v;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._buffer.byteLength;\n } });\n\n/**\n Set/get the backing DataView of the DataStream object.\n The setter updates the buffer and byteOffset to point to the DataView values.\n @type {Object}\n */\nObject.defineProperty(DataStream.prototype, 'dataView',\n { get: function() {\n return this._dataView;\n },\n set: function(v) {\n this._byteOffset = v.byteOffset;\n this._buffer = v.buffer;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._byteOffset + v.byteLength;\n } });\n\n/**\n Sets the DataStream read/write position to given position.\n Clamps between 0 and DataStream length.\n\n @param {number} pos Position to seek to.\n @return {null}\n */\nDataStream.prototype.seek = function(pos) {\n var npos = Math.max(0, Math.min(this.byteLength, pos));\n this.position = (isNaN(npos) || !isFinite(npos)) ? 0 : npos;\n};\n\n/**\n Returns true if the DataStream seek pointer is at the end of buffer and\n there's no more data to read.\n\n @return {boolean} True if the seek pointer is at the end of the buffer.\n */\nDataStream.prototype.isEof = function() {\n return (this.position >= this._byteLength);\n};\n\n\n/**\n Maps a Uint8Array into the DataStream buffer.\n\n Nice for quickly reading in data.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint8Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint8Array = function(length) {\n this._realloc(length * 1);\n var arr = new Uint8Array(this._buffer, this.byteOffset+this.position, length);\n this.position += length * 1;\n return arr;\n};\n\n\n/**\n Reads an Int32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int32Array.\n */\nDataStream.prototype.readInt32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Int32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads an Int16Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int16Array.\n */\nDataStream.prototype.readInt16Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 2) : length;\n var arr = new Int16Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads an Int8Array of desired length from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int8Array.\n */\nDataStream.prototype.readInt8Array = function(length) {\n length = length == null ? (this.byteLength-this.position) : length;\n var arr = new Int8Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint32Array.\n */\nDataStream.prototype.readUint32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Uint32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint16Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint16Array.\n */\nDataStream.prototype.readUint16Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 2) : length;\n var arr = new Uint16Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint8Array of desired length from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint8Array.\n */\nDataStream.prototype.readUint8Array = function(length) {\n length = length == null ? (this.byteLength-this.position) : length;\n var arr = new Uint8Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Float64Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Float64Array.\n */\nDataStream.prototype.readFloat64Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 8) : length;\n var arr = new Float64Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Float32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Float32Array.\n */\nDataStream.prototype.readFloat32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Float32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n\n/**\n Reads a 32-bit int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readInt32 = function(e) {\n var v = this._dataView.getInt32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 16-bit int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readInt16 = function(e) {\n var v = this._dataView.getInt16(this.position, e == null ? this.endianness : e);\n this.position += 2;\n return v;\n};\n\n/**\n Reads an 8-bit int from the DataStream.\n\n @return {number} The read number.\n */\nDataStream.prototype.readInt8 = function() {\n var v = this._dataView.getInt8(this.position);\n this.position += 1;\n return v;\n};\n\n/**\n Reads a 32-bit unsigned int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readUint32 = function(e) {\n var v = this._dataView.getUint32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 16-bit unsigned int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readUint16 = function(e) {\n var v = this._dataView.getUint16(this.position, e == null ? this.endianness : e);\n this.position += 2;\n return v;\n};\n\n/**\n Reads an 8-bit unsigned int from the DataStream.\n\n @return {number} The read number.\n */\nDataStream.prototype.readUint8 = function() {\n var v = this._dataView.getUint8(this.position);\n this.position += 1;\n return v;\n};\n\n/**\n Reads a 32-bit float from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readFloat32 = function(e) {\n var v = this._dataView.getFloat32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 64-bit float from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readFloat64 = function(e) {\n var v = this._dataView.getFloat64(this.position, e == null ? this.endianness : e);\n this.position += 8;\n return v;\n};\n\n/**\n Native endianness. Either DataStream.BIG_ENDIAN or DataStream.LITTLE_ENDIAN\n depending on the platform endianness.\n\n @type {boolean}\n */\nDataStream.endianness = new Int8Array(new Int16Array([1]).buffer)[0] > 0;\n\n/**\n Copies byteLength bytes from the src buffer at srcOffset to the\n dst buffer at dstOffset.\n\n @param {Object} dst Destination ArrayBuffer to write to.\n @param {number} dstOffset Offset to the destination ArrayBuffer.\n @param {Object} src Source ArrayBuffer to read from.\n @param {number} srcOffset Offset to the source ArrayBuffer.\n @param {number} byteLength Number of bytes to copy.\n */\nDataStream.memcpy = function(dst, dstOffset, src, srcOffset, byteLength) {\n var dstU8 = new Uint8Array(dst, dstOffset, byteLength);\n var srcU8 = new Uint8Array(src, srcOffset, byteLength);\n dstU8.set(srcU8);\n};\n\n/**\n Converts array to native endianness in-place.\n\n @param {Object} array Typed array to convert.\n @param {boolean} arrayIsLittleEndian True if the data in the array is\n little-endian. Set false for big-endian.\n @return {Object} The converted typed array.\n */\nDataStream.arrayToNative = function(array, arrayIsLittleEndian) {\n if (arrayIsLittleEndian == this.endianness) {\n return array;\n } else {\n return this.flipArrayEndianness(array);\n }\n};\n\n/**\n Converts native endianness array to desired endianness in-place.\n\n @param {Object} array Typed array to convert.\n @param {boolean} littleEndian True if the converted array should be\n little-endian. Set false for big-endian.\n @return {Object} The converted typed array.\n */\nDataStream.nativeToEndian = function(array, littleEndian) {\n if (this.endianness == littleEndian) {\n return array;\n } else {\n return this.flipArrayEndianness(array);\n }\n};\n\n/**\n Flips typed array endianness in-place.\n\n @param {Object} array Typed array to flip.\n @return {Object} The converted typed array.\n */\nDataStream.flipArrayEndianness = function(array) {\n var u8 = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);\n for (var i=0; i<array.byteLength; i+=array.BYTES_PER_ELEMENT) {\n for (var j=i+array.BYTES_PER_ELEMENT-1, k=i; j>k; j--, k++) {\n var tmp = u8[k];\n u8[k] = u8[j];\n u8[j] = tmp;\n }\n }\n return array;\n};\n\n/**\n Seek position where DataStream#readStruct ran into a problem.\n Useful for debugging struct parsing.\n\n @type {number}\n */\nDataStream.prototype.failurePosition = 0;\n\nString.fromCharCodeUint8 = function(uint8arr) {\n var arr = [];\n for (var i = 0; i < uint8arr.length; i++) {\n arr[i] = uint8arr[i];\n }\n return String.fromCharCode.apply(null, arr);\n}\n/**\n Read a string of desired length and encoding from the DataStream.\n\n @param {number} length The length of the string to read in bytes.\n @param {?string} encoding The encoding of the string data in the DataStream.\n Defaults to ASCII.\n @return {string} The read string.\n */\nDataStream.prototype.readString = function(length, encoding) {\n if (encoding == null || encoding == \"ASCII\") {\n return String.fromCharCodeUint8.apply(null, [this.mapUint8Array(length == null ? this.byteLength-this.position : length)]);\n } else {\n return (new TextDecoder(encoding)).decode(this.mapUint8Array(length));\n }\n};\n\n/**\n Read null-terminated string of desired length from the DataStream. Truncates\n the returned string so that the null byte is not a part of it.\n\n @param {?number} length The length of the string to read.\n @return {string} The read string.\n */\nDataStream.prototype.readCString = function(length) {\n var blen = this.byteLength-this.position;\n var u8 = new Uint8Array(this._buffer, this._byteOffset + this.position);\n var len = blen;\n if (length != null) {\n len = Math.min(length, blen);\n }\n for (var i = 0; i < len && u8[i] !== 0; i++); // find first zero byte\n var s = String.fromCharCodeUint8.apply(null, [this.mapUint8Array(i)]);\n if (length != null) {\n this.position += len-i;\n } else if (i != blen) {\n this.position += 1; // trailing zero if not at end of buffer\n }\n return s;\n};\n\n/* \n TODO: fix endianness for 24/64-bit fields\n TODO: check range/support for 64-bits numbers in JavaScript\n*/\nvar MAX_SIZE = Math.pow(2, 32);\n\nDataStream.prototype.readInt64 = function () {\n return (this.readInt32()*MAX_SIZE)+this.readUint32();\n}\nDataStream.prototype.readUint64 = function () {\n\treturn (this.readUint32()*MAX_SIZE)+this.readUint32();\n}\n\nDataStream.prototype.readInt64 = function () {\n return (this.readUint32()*MAX_SIZE)+this.readUint32();\n}\n\nDataStream.prototype.readUint24 = function () {\n\treturn (this.readUint8()<<16)+(this.readUint8()<<8)+this.readUint8();\n}\n\nif (typeof exports !== 'undefined') {\n exports.DataStream = DataStream; \n}\n// file:src/DataStream-write.js\n/**\n Saves the DataStream contents to the given filename.\n Uses Chrome's anchor download property to initiate download.\n \n @param {string} filename Filename to save as.\n @return {null}\n */\nDataStream.prototype.save = function(filename) {\n var blob = new Blob([this.buffer]);\n if (window.URL && URL.createObjectURL) {\n var url = window.URL.createObjectURL(blob);\n var a = document.createElement('a');\n // Required in Firefox:\n document.body.appendChild(a);\n a.setAttribute('href', url);\n a.setAttribute('download', filename);\n // Required in Firefox:\n a.setAttribute('target', '_self');\n a.click();\n window.URL.revokeObjectURL(url);\n } else {\n throw(\"DataStream.save: Can't create object URL.\");\n }\n};\n\n/**\n Whether to extend DataStream buffer when trying to write beyond its size.\n If set, the buffer is reallocated to twice its current size until the\n requested write fits the buffer.\n @type {boolean}\n */\nDataStream.prototype._dynamicSize = true;\nObject.defineProperty(DataStream.prototype, 'dynamicSize',\n { get: function() {\n return this._dynamicSize;\n },\n set: function(v) {\n if (!v) {\n this._trimAlloc();\n }\n this._dynamicSize = v;\n } });\n\n/**\n Internal function to trim the DataStream buffer when required.\n Used for stripping out the first bytes when not needed anymore.\n\n @return {null}\n */\nDataStream.prototype.shift = function(offset) {\n var buf = new ArrayBuffer(this._byteLength-offset);\n var dst = new Uint8Array(buf);\n var src = new Uint8Array(this._buffer, offset, dst.length);\n dst.set(src);\n this.buffer = buf;\n this.position -= offset;\n};\n\n/**\n Writes an Int32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeInt32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Int32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt32Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeInt32(arr[i], e);\n }\n }\n};\n\n/**\n Writes an Int16Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeInt16Array = function(arr, e) {\n this._realloc(arr.length * 2);\n if (arr instanceof Int16Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt16Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeInt16(arr[i], e);\n }\n }\n};\n\n/**\n Writes an Int8Array to the DataStream.\n\n @param {Object} arr The array to write.\n */\nDataStream.prototype.writeInt8Array = function(arr) {\n this._realloc(arr.length * 1);\n if (arr instanceof Int8Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt8Array(arr.length);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeInt8(arr[i]);\n }\n }\n};\n\n/**\n Writes a Uint32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeUint32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Uint32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapUint32Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeUint32(arr[i], e);\n }\n }\n};\n\n/**\n Writes a Uint16Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeUint16Array = function(arr, e) {\n this._realloc(arr.length * 2);\n if (arr instanceof Uint16Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapUint16Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeUint16(arr[i], e);\n }\n }\n};\n\n/**\n Writes a Uint8Array to the DataStream.\n\n @param {Object} arr The array to write.\n */\nDataStream.prototype.writeUint8Array = function(arr) {\n this._realloc(arr.length * 1);\n if (arr instanceof Uint8Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapUint8Array(arr.length);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeUint8(arr[i]);\n }\n }\n};\n\n/**\n Writes a Float64Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeFloat64Array = function(arr, e) {\n this._realloc(arr.length * 8);\n if (arr instanceof Float64Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapFloat64Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeFloat64(arr[i], e);\n }\n }\n};\n\n/**\n Writes a Float32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeFloat32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Float32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapFloat32Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeFloat32(arr[i], e);\n }\n }\n};\n\n\n/**\n Writes a 32-bit int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeInt32 = function(v, e) {\n this._realloc(4);\n this._dataView.setInt32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n};\n\n/**\n Writes a 16-bit int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeInt16 = function(v, e) {\n this._realloc(2);\n this._dataView.setInt16(this.position, v, e == null ? this.endianness : e);\n this.position += 2;\n};\n\n/**\n Writes an 8-bit int to the DataStream.\n\n @param {number} v Number to write.\n */\nDataStream.prototype.writeInt8 = function(v) {\n this._realloc(1);\n this._dataView.setInt8(this.position, v);\n this.position += 1;\n};\n\n/**\n Writes a 32-bit unsigned int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeUint32 = function(v, e) {\n this._realloc(4);\n this._dataView.setUint32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n};\n\n/**\n Writes a 16-bit unsigned int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeUint16 = function(v, e) {\n this._realloc(2);\n this._dataView.setUint16(this.position, v, e == null ? this.endianness : e);\n this.position += 2;\n};\n\n/**\n Writes an 8-bit unsigned int to the DataStream.\n\n @param {number} v Number to write.\n */\nDataStream.prototype.writeUint8 = function(v) {\n this._realloc(1);\n this._dataView.setUint8(this.position, v);\n this.position += 1;\n};\n\n/**\n Writes a 32-bit float to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeFloat32 = function(v, e) {\n this._realloc(4);\n this._dataView.setFloat32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n};\n\n/**\n Writes a 64-bit float to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeFloat64 = function(v, e) {\n this._realloc(8);\n this._dataView.setFloat64(this.position, v, e == null ? this.endianness : e);\n this.position += 8;\n};\n\n/**\n Write a UCS-2 string of desired endianness to the DataStream. The\n lengthOverride argument lets you define the number of characters to write.\n If the string is shorter than lengthOverride, the extra space is padded with\n zeroes.\n\n @param {string} str The string to write.\n @param {?boolean} endianness The endianness to use for the written string data.\n @param {?number} lengthOverride The number of characters to write.\n */\nDataStream.prototype.writeUCS2String = function(str, endianness, lengthOverride) {\n if (lengthOverride == null) {\n lengthOverride = str.length;\n }\n for (var i = 0; i < str.length && i < lengthOverride; i++) {\n this.writeUint16(str.charCodeAt(i), endianness);\n }\n for (; i<lengthOverride; i++) {\n this.writeUint16(0);\n }\n};\n\n/**\n Writes a string of desired length and encoding to the DataStream.\n\n @param {string} s The string to write.\n @param {?string} encoding The encoding for the written string data.\n Defaults to ASCII.\n @param {?number} length The number of characters to write.\n */\nDataStream.prototype.writeString = function(s, encoding, length) {\n var i = 0;\n if (encoding == null || encoding == \"ASCII\") {\n if (length != null) {\n var len = Math.min(s.length, length);\n for (i=0; i<len; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n for (; i<length; i++) {\n this.writeUint8(0);\n }\n } else {\n for (i=0; i<s.length; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n }\n } else {\n this.writeUint8Array((new TextEncoder(encoding)).encode(s.substring(0, length)));\n }\n};\n\n/**\n Writes a null-terminated string to DataStream and zero-pads it to length\n bytes. If length is not given, writes the string followed by a zero.\n If string is longer than length, the written part of the string does not have\n a trailing zero.\n\n @param {string} s The string to write.\n @param {?number} length The number of characters to write.\n */\nDataStream.prototype.writeCString = function(s, length) {\n var i = 0;\n if (length != null) {\n var len = Math.min(s.length, length);\n for (i=0; i<len; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n for (; i<length; i++) {\n this.writeUint8(0);\n }\n } else {\n for (i=0; i<s.length; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n this.writeUint8(0);\n }\n};\n\n/**\n Writes a struct to the DataStream. Takes a structDefinition that gives the\n types and a struct object that gives the values. Refer to readStruct for the\n structure of structDefinition.\n\n @param {Object} structDefinition Type definition of the struct.\n @param {Object} struct The struct data object.\n */\nDataStream.prototype.writeStruct = function(structDefinition, struct) {\n for (var i = 0; i < structDefinition.length; i+=2) {\n var t = structDefinition[i+1];\n this.writeType(t, struct[structDefinition[i]], struct);\n }\n};\n\n/**\n Writes object v of type t to the DataStream.\n\n @param {Object} t Type of data to write.\n @param {Object} v Value of data to write.\n @param {Object} struct Struct to pass to write callback functions.\n */\nDataStream.prototype.writeType = function(t, v, struct) {\n var tp;\n if (typeof t == \"function\") {\n return t(this, v);\n } else if (typeof t == \"object\" && !(t instanceof Array)) {\n return t.set(this, v, struct);\n }\n var lengthOverride = null;\n var charset = \"ASCII\";\n var pos = this.position;\n if (typeof(t) == 'string' && /:/.test(t)) {\n tp = t.split(\":\");\n t = tp[0];\n lengthOverride = parseInt(tp[1]);\n }\n if (typeof t == 'string' && /,/.test(t)) {\n tp = t.split(\",\");\n t = tp[0];\n charset = parseInt(tp[1]);\n }\n\n switch(t) {\n case 'uint8':\n this.writeUint8(v);\n break;\n case 'int8':\n this.writeInt8(v);\n break;\n\n case 'uint16':\n this.writeUint16(v, this.endianness);\n break;\n case 'int16':\n this.writeInt16(v, this.endianness);\n break;\n case 'uint32':\n this.writeUint32(v, this.endianness);\n break;\n case 'int32':\n this.writeInt32(v, this.endianness);\n break;\n case 'float32':\n this.writeFloat32(v, this.endianness);\n break;\n case 'float64':\n this.writeFloat64(v, this.endianness);\n break;\n\n case 'uint16be':\n this.writeUint16(v, DataStream.BIG_ENDIAN);\n break;\n case 'int16be':\n this.writeInt16(v, DataStream.BIG_ENDIAN);\n break;\n case 'uint32be':\n this.writeUint32(v, DataStream.BIG_ENDIAN);\n break;\n case 'int32be':\n this.writeInt32(v, DataStream.BIG_ENDIAN);\n break;\n case 'float32be':\n this.writeFloat32(v, DataStream.BIG_ENDIAN);\n break;\n case 'float64be':\n this.writeFloat64(v, DataStream.BIG_ENDIAN);\n break;\n\n case 'uint16le':\n this.writeUint16(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'int16le':\n this.writeInt16(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'uint32le':\n this.writeUint32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'int32le':\n this.writeInt32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'float32le':\n this.writeFloat32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'float64le':\n this.writeFloat64(v, DataStream.LITTLE_ENDIAN);\n break;\n\n case 'cstring':\n this.writeCString(v, lengthOverride);\n break;\n\n case 'string':\n this.writeString(v, charset, lengthOverride);\n break;\n\n case 'u16string':\n this.writeUCS2String(v, this.endianness, lengthOverride);\n break;\n\n case 'u16stringle':\n this.writeUCS2String(v, DataStream.LITTLE_ENDIAN, lengthOverride);\n break;\n\n case 'u16stringbe':\n this.writeUCS2String(v, DataStream.BIG_ENDIAN, lengthOverride);\n break;\n\n default:\n if (t.length == 3) {\n var ta = t[1];\n for (var i=0; i<v.length; i++) {\n this.writeType(ta, v[i]);\n }\n break;\n } else {\n this.writeStruct(t, v);\n break;\n }\n }\n if (lengthOverride != null) {\n this.position = pos;\n this._realloc(lengthOverride);\n this.position = pos + lengthOverride;\n }\n};\n\n\nDataStream.prototype.writeUint64 = function (v) {\n\tvar h = Math.floor(v / MAX_SIZE);\n\tthis.writeUint32(h);\n\tthis.writeUint32(v & 0xFFFFFFFF);\n}\n\nDataStream.prototype.writeUint24 = function (v) {\n\tthis.writeUint8((v & 0x00FF0000)>>16);\n\tthis.writeUint8((v & 0x0000FF00)>>8);\n\tthis.writeUint8((v & 0x000000FF));\n}\n\nDataStream.prototype.adjustUint32 = function(position, value) {\n\tvar pos = this.position;\n\tthis.seek(position);\n\tthis.writeUint32(value);\n\tthis.seek(pos);\n}\n// file:src/DataStream-map.js\n/**\n Maps an Int32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Int32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n\n/**\n Maps an Int16Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int16Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt16Array = function(length, e) {\n this._realloc(length * 2);\n var arr = new Int16Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 2;\n return arr;\n};\n\n/**\n Maps an Int8Array into the DataStream buffer.\n\n Nice for quickly reading in data.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int8Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt8Array = function(length) {\n this._realloc(length * 1);\n var arr = new Int8Array(this._buffer, this.byteOffset+this.position, length);\n this.position += length * 1;\n return arr;\n};\n\n/**\n Maps a Uint32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Uint32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n\n/**\n Maps a Uint16Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint16Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint16Array = function(length, e) {\n this._realloc(length * 2);\n var arr = new Uint16Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 2;\n return arr;\n};\n\n/**\n Maps a Float64Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Float64Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapFloat64Array = function(length, e) {\n this._realloc(length * 8);\n var arr = new Float64Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 8;\n return arr;\n};\n\n/**\n Maps a Float32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Float32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapFloat32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Float32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n// file:src/buffer.js\n/**\n * MultiBufferStream is a class that acts as a SimpleStream for parsing \n * It holds several, possibly non-contiguous ArrayBuffer objects, each with a fileStart property \n * containing the offset for the buffer data in an original/virtual file \n *\n * It inherits also from DataStream for all read/write/alloc operations\n */\n\n/**\n * Constructor\n */\nvar MultiBufferStream = function(buffer) {\n\t/* List of ArrayBuffers, with a fileStart property, sorted in fileStart order and non overlapping */\n\tthis.buffers = [];\t\n\tthis.bufferIndex = -1;\n\tif (buffer) {\n\t\tthis.insertBuffer(buffer);\n\t\tthis.bufferIndex = 0;\n\t}\n}\nMultiBufferStream.prototype = new DataStream(new ArrayBuffer(), 0, DataStream.BIG_ENDIAN);\n\n/************************************************************************************\n Methods for the managnement of the buffers (insertion, removal, concatenation, ...)\n ***********************************************************************************/\n\nMultiBufferStream.prototype.initialized = function() {\n\tvar firstBuffer;\n\tif (this.bufferIndex > -1) {\n\t\treturn true;\n\t} else if (this.buffers.length > 0) {\n\t\tfirstBuffer = this.buffers[0];\n\t\tif (firstBuffer.fileStart === 0) {\n\t\t\tthis.buffer = firstBuffer;\n\t\t\tthis.bufferIndex = 0;\n\t\t\tLog.debug(\"MultiBufferStream\", \"Stream ready for parsing\");\n\t\t\treturn true;\n\t\t} else {\n\t\t\tLog.warn(\"MultiBufferStream\", \"The first buffer should have a fileStart of 0\");\n\t\t\tthis.logBufferLevel();\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tLog.warn(\"MultiBufferStream\", \"No buffer to start parsing from\");\n\t\tthis.logBufferLevel();\n\t\treturn false;\n\t}\t\t\t\n}\n\n/**\n * helper functions to concatenate two ArrayBuffer objects\n * @param {ArrayBuffer} buffer1 \n * @param {ArrayBuffer} buffer2 \n * @return {ArrayBuffer} the concatenation of buffer1 and buffer2 in that order\n */\nArrayBuffer.concat = function(buffer1, buffer2) {\n Log.debug(\"ArrayBuffer\", \"Trying to create a new buffer of size: \"+(buffer1.byteLength + buffer2.byteLength));\n var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);\n tmp.set(new Uint8Array(buffer1), 0);\n tmp.set(new Uint8Array(buffer2), buffer1.byteLength);\n return tmp.buffer;\n};\n\n/**\n * Reduces the size of a given buffer, but taking the part between offset and offset+newlength\n * @param {ArrayBuffer} buffer \n * @param {Number} offset the start of new buffer\n * @param {Number} newLength the length of the new buffer\n * @return {ArrayBuffer} the new buffer\n */\nMultiBufferStream.prototype.reduceBuffer = function(buffer, offset, newLength) {\n\tvar smallB;\n\tsmallB = new Uint8Array(newLength);\n\tsmallB.set(new Uint8Array(buffer, offset, newLength));\n\tsmallB.buffer.fileStart = buffer.fileStart+offset;\n\tsmallB.buffer.usedBytes = 0;\n\treturn smallB.buffer;\t\n}\n\n/**\n * Inserts the new buffer in the sorted list of buffers,\n * making sure, it is not overlapping with existing ones (possibly reducing its size).\n * if the new buffer overrides/replaces the 0-th buffer (for instance because it is bigger), \n * updates the DataStream buffer for parsing \n*/\nMultiBufferStream.prototype.insertBuffer = function(ab) {\t\n\tvar to_add = true;\n\t/* TODO: improve insertion if many buffers */\n\tfor (var i = 0; i < this.buffers.length; i++) {\n\t\tvar b = this.buffers[i];\n\t\tif (ab.fileStart <= b.fileStart) {\n\t\t\t/* the insertion position is found */\n\t\t\tif (ab.fileStart === b.fileStart) {\n\t\t\t\t/* The new buffer overlaps with an existing buffer */\n\t\t\t\tif (ab.byteLength > b.byteLength) {\n\t\t\t\t\t/* the new buffer is bigger than the existing one\n\t\t\t\t\t remove the existing buffer and try again to insert \n\t\t\t\t\t the new buffer to check overlap with the next ones */\n\t\t\t\t\tthis.buffers.splice(i, 1);\n\t\t\t\t\ti--; \n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\t/* the new buffer is smaller than the existing one, just drop it */\n\t\t\t\t\tLog.warn(\"MultiBufferStream\", \"Buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\") already appended, ignoring\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t/* The beginning of the new buffer is not overlapping with an existing buffer\n\t\t\t\t let's check the end of it */\n\t\t\t\tif (ab.fileStart + ab.byteLength <= b.fileStart) {\n\t\t\t\t\t/* no overlap, we can add it as is */\n\t\t\t\t} else {\n\t\t\t\t\t/* There is some overlap, cut the new buffer short, and add it*/\n\t\t\t\t\tab = this.reduceBuffer(ab, 0, b.fileStart - ab.fileStart);\n\t\t\t\t}\n\t\t\t\tLog.debug(\"MultiBufferStream\", \"Appending new buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\")\");\n\t\t\t\tthis.buffers.splice(i, 0, ab);\n\t\t\t\t/* if this new buffer is inserted in the first place in the list of the buffer, \n\t\t\t\t and the DataStream is initialized, make it the buffer used for parsing */\n\t\t\t\tif (i === 0) {\n\t\t\t\t\tthis.buffer = ab;\n\t\t\t\t}\n\t\t\t}\n\t\t\tto_add = false;\n\t\t\tbreak;\n\t\t} else if (ab.fileStart < b.fileStart + b.byteLength) {\n\t\t\t/* the new buffer overlaps its beginning with the end of the current buffer */\n\t\t\tvar offset = b.fileStart + b.byteLength - ab.fileStart;\n\t\t\tvar newLength = ab.byteLength - offset;\n\t\t\tif (newLength > 0) {\n\t\t\t\t/* the new buffer is bigger than the current overlap, drop the overlapping part and try again inserting the remaining buffer */\n\t\t\t\tab = this.reduceBuffer(ab, offset, newLength);\n\t\t\t} else {\n\t\t\t\t/* the content of the new buffer is entirely contained in the existing buffer, drop it entirely */\n\t\t\t\tto_add = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t/* if the buffer has not been added, we can add it at the end */\n\tif (to_add) {\n\t\tLog.debug(\"MultiBufferStream\", \"Appending new buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\")\");\n\t\tthis.buffers.push(ab);\n\t\t/* if this new buffer is inserted in the first place in the list of the buffer, \n\t\t and the DataStream is initialized, make it the buffer used for parsing */\n\t\tif (i === 0) {\n\t\t\tthis.buffer = ab;\n\t\t}\n\t}\n}\n\n/**\n * Displays the status of the buffers (number and used bytes)\n * @param {Object} info callback method for display\n */\nMultiBufferStream.prototype.logBufferLevel = function(info) {\n\tvar i;\n\tvar buffer;\n\tvar used, total;\n\tvar ranges = [];\n\tvar range;\n\tvar bufferedString = \"\";\n\tused = 0;\n\ttotal = 0;\n\tfor (i = 0; i < this.buffers.length; i++) {\n\t\tbuffer = this.buffers[i];\n\t\tif (i === 0) {\n\t\t\trange = {};\n\t\t\tranges.push(range);\n\t\t\trange.start = buffer.fileStart;\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t\tbufferedString += \"[\"+range.start+\"-\";\n\t\t} else if (range.end === buffer.fileStart) {\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t} else {\n\t\t\trange = {};\n\t\t\trange.start = buffer.fileStart;\n\t\t\tbufferedString += (ranges[ranges.length-1].end-1)+\"], [\"+range.start+\"-\";\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t\tranges.push(range);\n\t\t}\n\t\tused += buffer.usedBytes;\n\t\ttotal += buffer.byteLength;\n\t}\n\tif (ranges.length > 0) {\n\t\tbufferedString += (range.end-1)+\"]\";\n\t}\n\tvar log = (info ? Log.info : Log.debug)\n\tif (this.buffers.length === 0) {\n\t\tlog(\"MultiBufferStream\", \"No more buffer in memory\");\n\t} else {\n\t\tlog(\"MultiBufferStream\", \"\"+this.buffers.length+\" stored buffer(s) (\"+used+\"/\"+total+\" bytes), continuous ranges: \"+bufferedString);\n\t}\n}\n\nMultiBufferStream.prototype.cleanBuffers = function () {\n\tvar i;\n\tvar buffer;\n\tfor (i = 0; i < this.buffers.length; i++) {\n\t\tbuffer = this.buffers[i];\n\t\tif (buffer.usedBytes === buffer.byteLength) {\n\t\t\tLog.debug(\"MultiBufferStream\", \"Removing buffer #\"+i);\n\t\t\tthis.buffers.splice(i, 1);\n\t\t\ti--;\n\t\t}\n\t}\n}\n\nMultiBufferStream.prototype.mergeNextBuffer = function() {\n\tvar next_buffer;\n\tif (this.bufferIndex+1 < this.buffers.length) {\n\t\tnext_buffer = this.buffers[this.bufferIndex+1];\n\t\tif (next_buffer.fileStart === this.buffer.fileStart + this.buffer.byteLength) {\n\t\t\tvar oldLength = this.buffer.byteLength;\n\t\t\tvar oldUsedBytes = this.buffer.usedBytes;\n\t\t\tvar oldFileStart = this.buffer.fileStart;\n\t\t\tthis.buffers[this.bufferIndex] = ArrayBuffer.concat(this.buffer, next_buffer);\n\t\t\tthis.buffer = this.buffers[this.bufferIndex];\n\t\t\tthis.buffers.splice(this.bufferIndex+1, 1);\n\t\t\tthis.buffer.usedBytes = oldUsedBytes; /* TODO: should it be += ? */\n\t\t\tthis.buffer.fileStart = oldFileStart;\n\t\t\tLog.debug(\"ISOFile\", \"Concatenating buffer for box parsing (length: \"+oldLength+\"->\"+this.buffer.byteLength+\")\");\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n}\n\n\n/*************************************************************************\n Seek-related functions\n *************************************************************************/\n\n/**\n * Finds the buffer that holds the given file position\n * @param {Boolean} fromStart indicates if the search should start from the current buffer (false) \n * or from the first buffer (true)\n * @param {Number} filePosition position in the file to seek to\n * @param {Boolean} markAsUsed indicates if the bytes in between the current position and the seek position \n * should be marked as used for garbage collection\n * @return {Number} the index of the buffer holding the seeked file position, -1 if not found.\n */\nMultiBufferStream.prototype.findPosition = function(fromStart, filePosition, markAsUsed) {\n\tvar i;\n\tvar abuffer = null;\n\tvar index = -1;\n\n\t/* find the buffer with the largest position smaller than the given position */\n\tif (fromStart === true) {\n\t /* the reposition can be in the past, we need to check from the beginning of the list of buffers */\n\t\ti = 0;\n\t} else {\n\t\ti = this.bufferIndex;\n\t}\n\n\twhile (i < this.buffers.length) {\n\t\tabuffer = this.buffers[i];\n\t\tif (abuffer.fileStart <= filePosition) {\n\t\t\tindex = i;\n\t\t\tif (markAsUsed) {\n\t\t\t\tif (abuffer.fileStart + abuffer.byteLength <= filePosition) {\n\t\t\t\t\tabuffer.usedBytes = abuffer.byteLength;\t\n\t\t\t\t} else {\n\t\t\t\t\tabuffer.usedBytes = filePosition - abuffer.fileStart;\n\t\t\t\t}\t\t\n\t\t\t\tthis.logBufferLevel();\t\n\t\t\t}\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t\ti++;\n\t}\n\n\tif (index !== -1) {\n\t\tabuffer = this.buffers[index];\n\t\tif (abuffer.fileStart + abuffer.byteLength >= filePosition) {\t\t\t\n\t\t\tLog.debug(\"MultiBufferStream\", \"Found position in existing buffer #\"+index);\n\t\t\treturn index;\n\t\t} else {\n\t\t\treturn -1;\n\t\t}\n\t} else {\n\t\treturn -1;\n\t}\n}\n\n/**\n * Finds the largest file position contained in a buffer or in the next buffers if they are contiguous (no gap)\n * starting from the given buffer index or from the current buffer if the index is not given\n *\n * @param {Number} inputindex Index of the buffer to start from\n * @return {Number} The largest file position found in the buffers\n */\nMultiBufferStream.prototype.findEndContiguousBuf = function(inputindex) {\n\tvar i;\n\tvar currentBuf;\n\tvar nextBuf;\n\tvar index = (inputindex !== undefined ? inputindex : this.bufferIndex);\n\tcurrentBuf = this.buffers[index];\n\t/* find the end of the contiguous range of data */\n\tif (this.buffers.length > index+1) {\n\t\tfor (i = index+1; i < this.buffers.length; i++) {\n\t\t\tnextBuf = this.buffers[i];\n\t\t\tif (nextBuf.fileStart === currentBuf.fileStart + currentBuf.byteLength) {\n\t\t\t\tcurrentBuf = nextBuf;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t/* return the position of last byte in the file that we have */\n\treturn currentBuf.fileStart + currentBuf.byteLength;\n}\n\n/**\n * Returns the largest file position contained in the buffers, larger than the given position\n * @param {Number} pos the file position to start from\n * @return {Number} the largest position in the current buffer or in the buffer and the next contiguous \n * buffer that holds the given position\n */\nMultiBufferStream.prototype.getEndFilePositionAfter = function(pos) {\n\tvar index = this.findPosition(true, pos, false);\n\tif (index !== -1) {\n\t\treturn this.findEndContiguousBuf(index);\n\t} else {\n\t\treturn pos;\n\t}\n}\n\n/*************************************************************************\n Garbage collection related functions\n *************************************************************************/\n\n/**\n * Marks a given number of bytes as used in the current buffer for garbage collection\n * @param {Number} nbBytes \n */\nMultiBufferStream.prototype.addUsedBytes = function(nbBytes) {\n\tthis.buffer.usedBytes += nbBytes;\n\tthis.logBufferLevel();\n}\n\n/**\n * Marks the entire current buffer as used, ready for garbage collection\n */\nMultiBufferStream.prototype.setAllUsedBytes = function() {\n\tthis.buffer.usedBytes = this.buffer.byteLength;\n\tthis.logBufferLevel();\n}\n\n/*************************************************************************\n Common API between MultiBufferStream and SimpleStream\n *************************************************************************/\n\n/**\n * Tries to seek to a given file position\n * if possible, repositions the parsing from there and returns true \n * if not possible, does not change anything and returns false \n * @param {Number} filePosition position in the file to seek to\n * @param {Boolean} fromStart indicates if the search should start from the current buffer (false) \n * or from the first buffer (true)\n * @param {Boolean} markAsUsed indicates if the bytes in between the current position and the seek position \n * should be marked as used for garbage collection\n * @return {Boolean} true if the seek succeeded, false otherwise\n */\nMultiBufferStream.prototype.seek = function(filePosition, fromStart, markAsUsed) {\n\tvar index;\n\tindex = this.findPosition(fromStart, filePosition, markAsUsed);\n\tif (index !== -1) {\n\t\tthis.buffer = this.buffers[index];\n\t\tthis.bufferIndex = index;\n\t\tthis.position = filePosition - this.buffer.fileStart;\n\t\tLog.debug(\"MultiBufferStream\", \"Repositioning parser at buffer position: \"+this.position);\n\t\treturn true;\n\t} else {\n\t\tLog.debug(\"MultiBufferStream\", \"Position \"+filePosition+\" not found in buffered data\");\n\t\treturn false;\n\t}\n}\n\n/**\n * Returns the current position in the file\n * @return {Number} the position in the file\n */\nMultiBufferStream.prototype.getPosition = function() {\n\tif (this.bufferIndex === -1 || this.buffers[this.bufferIndex] === null) {\n\t\tthrow \"Error accessing position in the MultiBufferStream\";\n\t}\n\treturn this.buffers[this.bufferIndex].fileStart+this.position;\n}\n\n/**\n * Returns the length of the current buffer\n * @return {Number} the length of the current buffer\n */\nMultiBufferStream.prototype.getLength = function() {\n\treturn this.byteLength;\n}\n\nMultiBufferStream.prototype.getEndPosition = function() {\n\tif (this.bufferIndex === -1 || this.buffers[this.bufferIndex] === null) {\n\t\tthrow \"Error accessing position in the MultiBufferStream\";\n\t}\n\treturn this.buffers[this.bufferIndex].fileStart+this.byteLength;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.MultiBufferStream = MultiBufferStream;\n}// file:src/descriptor.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar MPEG4DescriptorParser = function () {\n\tvar ES_DescrTag \t\t\t= 0x03;\n\tvar DecoderConfigDescrTag \t= 0x04;\n\tvar DecSpecificInfoTag \t\t= 0x05;\n\tvar SLConfigDescrTag \t\t= 0x06;\n\n\tvar descTagToName = [];\n\tdescTagToName[ES_DescrTag] \t\t\t\t= \"ES_Descriptor\";\n\tdescTagToName[DecoderConfigDescrTag] \t= \"DecoderConfigDescriptor\";\n\tdescTagToName[DecSpecificInfoTag] \t\t= \"DecoderSpecificInfo\";\n\tdescTagToName[SLConfigDescrTag] \t\t= \"SLConfigDescriptor\";\n\n\tthis.getDescriptorName = function(tag) {\n\t\treturn descTagToName[tag];\n\t}\n\n\tvar that = this;\n\tvar classes = {};\n\n\tthis.parseOneDescriptor = function (stream) {\n\t\tvar hdrSize = 0;\n\t\tvar size = 0;\n\t\tvar tag;\n\t\tvar desc;\n\t\tvar byteRead;\n\t\ttag = stream.readUint8();\n\t\thdrSize++;\n\t\tbyteRead = stream.readUint8();\n\t\thdrSize++;\n\t\twhile (byteRead & 0x80) {\n\t\t\tsize = (size << 7) + (byteRead & 0x7F);\n\t\t\tbyteRead = stream.readUint8();\n\t\t\thdrSize++;\n\t\t}\n\t\tsize = (size << 7) + (byteRead & 0x7F);\n\t\tLog.debug(\"MPEG4DescriptorParser\", \"Found \"+(descTagToName[tag] || \"Descriptor \"+tag)+\", size \"+size+\" at position \"+stream.getPosition());\n\t\tif (descTagToName[tag]) {\n\t\t\tdesc = new classes[descTagToName[tag]](size);\n\t\t} else {\n\t\t\tdesc = new classes.Descriptor(size);\n\t\t}\n\t\tdesc.parse(stream);\n\t\treturn desc;\n\t}\n\n\tclasses.Descriptor = function(_tag, _size) {\n\t\tthis.tag = _tag;\n\t\tthis.size = _size;\n\t\tthis.descs = [];\n\t}\n\n\tclasses.Descriptor.prototype.parse = function (stream) {\n\t\tthis.data = stream.readUint8Array(this.size);\n\t}\n\n\tclasses.Descriptor.prototype.findDescriptor = function (tag) {\n\t\tfor (var i = 0; i < this.descs.length; i++) {\n\t\t\tif (this.descs[i].tag == tag) {\n\t\t\t\treturn this.descs[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tclasses.Descriptor.prototype.parseRemainingDescriptors = function (stream) {\n\t\tvar start = stream.position;\n\t\twhile (stream.position < start+this.size) {\n\t\t\tvar desc = that.parseOneDescriptor(stream);\n\t\t\tthis.descs.push(desc);\n\t\t}\n\t}\n\n\tclasses.ES_Descriptor = function (size) {\n\t\tclasses.Descriptor.call(this, ES_DescrTag, size);\n\t}\n\n\tclasses.ES_Descriptor.prototype = new classes.Descriptor();\n\n\tclasses.ES_Descriptor.prototype.parse = function(stream) {\n\t\tthis.ES_ID = stream.readUint16();\n\t\tthis.flags = stream.readUint8();\n\t\tthis.size -= 3;\n\t\tif (this.flags & 0x80) {\n\t\t\tthis.dependsOn_ES_ID = stream.readUint16();\n\t\t\tthis.size -= 2;\n\t\t} else {\n\t\t\tthis.dependsOn_ES_ID = 0;\n\t\t}\n\t\tif (this.flags & 0x40) {\n\t\t\tvar l = stream.readUint8();\n\t\t\tthis.URL = stream.readString(l);\n\t\t\tthis.size -= l+1;\n\t\t} else {\n\t\t\tthis.URL = \"\";\n\t\t}\n\t\tif (this.flags & 0x20) {\n\t\t\tthis.OCR_ES_ID = stream.readUint16();\n\t\t\tthis.size -= 2;\n\t\t} else {\n\t\t\tthis.OCR_ES_ID = 0;\n\t\t}\n\t\tthis.parseRemainingDescriptors(stream);\n\t}\n\n\tclasses.ES_Descriptor.prototype.getOTI = function(stream) {\n\t\tvar dcd = this.findDescriptor(DecoderConfigDescrTag);\n\t\tif (dcd) {\n\t\t\treturn dcd.oti;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tclasses.ES_Descriptor.prototype.getAudioConfig = function(stream) {\n\t\tvar dcd = this.findDescriptor(DecoderConfigDescrTag);\n\t\tif (!dcd) return null;\n\t\tvar dsi = dcd.findDescriptor(DecSpecificInfoTag);\n\t\tif (dsi && dsi.data) {\n\t\t\tvar audioObjectType = (dsi.data[0]& 0xF8) >> 3;\n\t\t\tif (audioObjectType === 31 && dsi.data.length >= 2) {\n\t\t\t\taudioObjectType = 32 + ((dsi.data[0] & 0x7) << 3) + ((dsi.data[1] & 0xE0) >> 5);\n\t\t\t}\n\t\t\treturn audioObjectType;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tclasses.DecoderConfigDescriptor = function (size) {\n\t\tclasses.Descriptor.call(this, DecoderConfigDescrTag, size);\n\t}\n\tclasses.DecoderConfigDescriptor.prototype = new classes.Descriptor();\n\n\tclasses.DecoderConfigDescriptor.prototype.parse = function(stream) {\n\t\tthis.oti = stream.readUint8();\n\t\tthis.streamType = stream.readUint8();\n\t\tthis.upStream = ((this.streamType >> 1) & 1) !== 0;\n\t\tthis.streamType = this.streamType >>> 2;\n\t\tthis.bufferSize = stream.readUint24();\n\t\tthis.maxBitrate = stream.readUint32();\n\t\tthis.avgBitrate = stream.readUint32();\n\t\tthis.size -= 13;\n\t\tthis.parseRemainingDescriptors(stream);\n\t}\n\n\tclasses.DecoderSpecificInfo = function (size) {\n\t\tclasses.Descriptor.call(this, DecSpecificInfoTag, size);\n\t}\n\tclasses.DecoderSpecificInfo.prototype = new classes.Descriptor();\n\n\tclasses.SLConfigDescriptor = function (size) {\n\t\tclasses.Descriptor.call(this, SLConfigDescrTag, size);\n\t}\n\tclasses.SLConfigDescriptor.prototype = new classes.Descriptor();\n\n\treturn this;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.MPEG4DescriptorParser = MPEG4DescriptorParser;\n}\n// file:src/box.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar BoxParser = {\n\tERR_INVALID_DATA : -1,\n\tERR_NOT_ENOUGH_DATA : 0,\n\tOK : 1,\n\n\t// Boxes to be created with default parsing\n\tBASIC_BOXES: [\n\t\t{type: \"mdat\", name: \"MediaDataBox\"},\n\t\t{type: \"idat\", name: \"ItemDataBox\"},\n\t\t{type: \"free\", name: \"FreeSpaceBox\"},\n\t\t{type: \"skip\", name: \"FreeSpaceBox\"},\n\t\t{type: \"meco\", name: \"AdditionalMetadataContainerBox\"},\n\t\t{type: \"strk\", name: \"SubTrackBox\"}\n\t],\n\tFULL_BOXES: [\n\t\t{type: \"hmhd\", name: \"HintMediaHeaderBox\"},\n\t\t{type: \"nmhd\", name: \"NullMediaHeaderBox\"},\n\t\t{type: \"iods\", name: \"ObjectDescriptorBox\"},\n\t\t{type: \"xml \", name: \"XMLBox\"},\n\t\t{type: \"bxml\", name: \"BinaryXMLBox\"},\n\t\t{type: \"ipro\", name: \"ItemProtectionBox\"},\n\t\t{type: \"mere\", name: \"MetaboxRelationBox\"}\n\t],\n\tCONTAINER_BOXES: [\n\t\t[{type: \"moov\", name: \"CompressedMovieBox\"}, [\"trak\", \"pssh\"]],\n\t\t[{type: \"trak\", name: \"TrackBox\"}],\n\t\t[{type: \"edts\", name: \"EditBox\"}],\n\t\t[{type: \"mdia\", name: \"MediaBox\"}],\n\t\t[{type: \"minf\", name: \"MediaInformationBox\"}],\n\t\t[{type: \"dinf\", name: \"DataInformationBox\"}],\n\t\t[{type: \"stbl\", name: \"SampleTableBox\"}, [\"sgpd\", \"sbgp\"]],\n\t\t[{type: \"mvex\", name: \"MovieExtendsBox\"}, [\"trex\"]],\n\t\t[{type: \"moof\", name: \"CompressedMovieFragmentBox\"}, [\"traf\"]],\n\t\t[{type: \"traf\", name: \"TrackFragmentBox\"}, [\"trun\", \"sgpd\", \"sbgp\"]],\n\t\t[{type: \"vttc\", name: \"VTTCueBox\"}],\n\t\t[{type: \"tref\", name: \"TrackReferenceBox\"}],\n\t\t[{type: \"iref\", name: \"ItemReferenceBox\"}],\n\t\t[{type: \"mfra\", name: \"MovieFragmentRandomAccessBox\"}, [\"tfra\"]],\n\t\t[{type: \"meco\", name: \"AdditionalMetadataContainerBox\"}],\n\t\t[{type: \"hnti\", name: \"trackhintinformation\"}],\n\t\t[{type: \"hinf\", name: \"hintstatisticsbox\"}],\n\t\t[{type: \"strk\", name: \"SubTrackBox\"}],\n\t\t[{type: \"strd\", name: \"SubTrackDefinitionBox\"}],\n\t\t[{type: \"sinf\", name: \"ProtectionSchemeInfoBox\"}],\n\t\t[{type: \"rinf\", name: \"RestrictedSchemeInfoBox\"}],\n\t\t[{type: \"schi\", name: \"SchemeInformationBox\"}],\n\t\t[{type: \"trgr\", name: \"TrackGroupBox\"}],\n\t\t[{type: \"udta\", name: \"UserDataBox\"}, [\"kind\"]],\n\t\t[{type: \"iprp\", name: \"ItemPropertiesBox\"}, [\"ipma\"]],\n\t\t[{type: \"ipco\", name: \"ItemPropertyContainerBox\"}],\n\t\t[{type: \"grpl\", name: \"GroupsListBox\"}],\n\t\t[{type: \"j2kH\", name: \"J2KHeaderInfoBox\"}],\n\t\t[{type: \"etyp\", name: \"ExtendedTypeBox\"}, [\"tyco\"]]\n\t],\n\t// Boxes effectively created\n\tboxCodes : [],\n\tfullBoxCodes : [],\n\tcontainerBoxCodes : [],\n\tsampleEntryCodes : {},\n\tsampleGroupEntryCodes: [],\n\ttrackGroupTypes: [],\n\tUUIDBoxes: {},\n\tUUIDs: [],\n\tinitialize: function() {\n\t\tBoxParser.FullBox.prototype = new BoxParser.Box();\n\t\tBoxParser.ContainerBox.prototype = new BoxParser.Box();\n\t\tBoxParser.SampleEntry.prototype = new BoxParser.Box();\n\t\tBoxParser.TrackGroupTypeBox.prototype = new BoxParser.FullBox();\n\n\t\t/* creating constructors for simple boxes */\n\t\tBoxParser.BASIC_BOXES.forEach(function(box) {\n\t\t\tBoxParser.createBoxCtor(box.type, box.name)\n\t\t});\n\t\tBoxParser.FULL_BOXES.forEach(function(box) {\n\t\t\tBoxParser.createFullBoxCtor(box.type, box.name);\n\t\t});\n\t\tBoxParser.CONTAINER_BOXES.forEach(function(boxes) {\n\t\t\tBoxParser.createContainerBoxCtor(boxes[0].type, boxes[0].name, null, boxes[1]);\n\t\t});\n\t},\n\tBox: function(_type, _size, _name, _uuid) {\n\t\tthis.type = _type;\n\t\tthis.box_name = _name;\n\t\tthis.size = _size;\n\t\tthis.uuid = _uuid;\n\t},\n\tFullBox: function(type, size, name, uuid) {\n\t\tBoxParser.Box.call(this, type, size, name, uuid);\n\t\tthis.flags = 0;\n\t\tthis.version = 0;\n\t},\n\tContainerBox: function(type, size, name, uuid) {\n\t\tBoxParser.Box.call(this, type, size, name, uuid);\n\t\tthis.boxes = [];\n\t},\n\tSampleEntry: function(type, size, hdr_size, start) {\n\t\tBoxParser.ContainerBox.call(this, type, size);\n\t\tthis.hdr_size = hdr_size;\n\t\tthis.start = start;\n\t},\n\tSampleGroupEntry: function(type) {\n\t\tthis.grouping_type = type;\n\t},\n\tTrackGroupTypeBox: function(type, size) {\n\t\tBoxParser.FullBox.call(this, type, size);\n\t},\n\tcreateBoxCtor: function(type, name, parseMethod){\n\t\tBoxParser.boxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.Box.call(this, type, size, name);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.Box();\n\t\tif (parseMethod) BoxParser[type+\"Box\"].prototype.parse = parseMethod;\n\t},\n\tcreateFullBoxCtor: function(type, name, parseMethod) {\n\t\t//BoxParser.fullBoxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.FullBox.call(this, type, size, name);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.FullBox();\n\t\tBoxParser[type+\"Box\"].prototype.parse = function(stream) {\n\t\t\tthis.parseFullHeader(stream);\n\t\t\tif (parseMethod) {\n\t\t\t\tparseMethod.call(this, stream);\n\t\t\t}\n\t\t};\n\t},\n\taddSubBoxArrays: function(subBoxNames) {\n\t\tif (subBoxNames) {\n\t\t\tthis.subBoxNames = subBoxNames;\n\t\t\tvar nbSubBoxes = subBoxNames.length;\n\t\t\tfor (var k = 0; k<nbSubBoxes; k++) {\n\t\t\t\tthis[subBoxNames[k]+\"s\"] = [];\n\t\t\t}\n\t\t}\n\t},\n\tcreateContainerBoxCtor: function(type, name, parseMethod, subBoxNames) {\n\t\t//BoxParser.containerBoxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.ContainerBox.call(this, type, size, name);\n\t\t\tBoxParser.addSubBoxArrays.call(this, subBoxNames);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.ContainerBox();\n\t\tif (parseMethod) BoxParser[type+\"Box\"].prototype.parse = parseMethod;\n\t},\n\tcreateMediaSampleEntryCtor: function(mediaType, parseMethod, subBoxNames) {\n\t\tBoxParser.sampleEntryCodes[mediaType] = [];\n\t\tBoxParser[mediaType+\"SampleEntry\"] = function(type, size) {\n\t\t\tBoxParser.SampleEntry.call(this, type, size);\n\t\t\tBoxParser.addSubBoxArrays.call(this, subBoxNames);\n\t\t};\n\t\tBoxParser[mediaType+\"SampleEntry\"].prototype = new BoxParser.SampleEntry();\n\t\tif (parseMethod) BoxParser[mediaType+\"SampleEntry\"].prototype .parse = parseMethod;\n\t},\n\tcreateSampleEntryCtor: function(mediaType, type, parseMethod, subBoxNames) {\n\t\tBoxParser.sampleEntryCodes[mediaType].push(type);\n\t\tBoxParser[type+\"SampleEntry\"] = function(size) {\n\t\t\tBoxParser[mediaType+\"SampleEntry\"].call(this, type, size);\n\t\t\tBoxParser.addSubBoxArrays.call(this, subBoxNames);\n\t\t};\n\t\tBoxParser[type+\"SampleEntry\"].prototype = new BoxParser[mediaType+\"SampleEntry\"]();\n\t\tif (parseMethod) BoxParser[type+\"SampleEntry\"].prototype.parse = parseMethod;\n\t},\n\tcreateEncryptedSampleEntryCtor: function(mediaType, type, parseMethod) {\n\t\tBoxParser.createSampleEntryCtor.call(this, mediaType, type, parseMethod, [\"sinf\"]);\n\t},\n\tcreateSampleGroupCtor: function(type, parseMethod) {\n\t\t//BoxParser.sampleGroupEntryCodes.push(type);\n\t\tBoxParser[type+\"SampleGroupEntry\"] = function(size) {\n\t\t\tBoxParser.SampleGroupEntry.call(this, type, size);\n\t\t}\n\t\tBoxParser[type+\"SampleGroupEntry\"].prototype = new BoxParser.SampleGroupEntry();\n\t\tif (parseMethod) BoxParser[type+\"SampleGroupEntry\"].prototype.parse = parseMethod;\n\t},\n\tcreateTrackGroupCtor: function(type, parseMethod) {\n\t\t//BoxParser.trackGroupTypes.push(type);\n\t\tBoxParser[type+\"TrackGroupTypeBox\"] = function(size) {\n\t\t\tBoxParser.TrackGroupTypeBox.call(this, type, size);\n\t\t}\n\t\tBoxParser[type+\"TrackGroupTypeBox\"].prototype = new BoxParser.TrackGroupTypeBox();\n\t\tif (parseMethod) BoxParser[type+\"TrackGroupTypeBox\"].prototype.parse = parseMethod;\n\t},\n\tcreateUUIDBox: function(uuid, name, isFullBox, isContainerBox, parseMethod) {\n\t\tBoxParser.UUIDs.push(uuid);\n\t\tBoxParser.UUIDBoxes[uuid] = function(size) {\n\t\t\tif (isFullBox) {\n\t\t\t\tBoxParser.FullBox.call(this, \"uuid\", size, name, uuid);\n\t\t\t} else {\n\t\t\t\tif (isContainerBox) {\n\t\t\t\t\tBoxParser.ContainerBox.call(this, \"uuid\", size, name, uuid);\n\t\t\t\t} else {\n\t\t\t\t\tBoxParser.Box.call(this, \"uuid\", size, name, uuid);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tBoxParser.UUIDBoxes[uuid].prototype = (isFullBox ? new BoxParser.FullBox() : (isContainerBox ? new BoxParser.ContainerBox() : new BoxParser.Box()));\n\t\tif (parseMethod) {\n\t\t\tif (isFullBox) {\n\t\t\t\tBoxParser.UUIDBoxes[uuid].prototype.parse = function(stream) {\n\t\t\t\t\tthis.parseFullHeader(stream);\n\t\t\t\t\tif (parseMethod) {\n\t\t\t\t\t\tparseMethod.call(this, stream);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tBoxParser.UUIDBoxes[uuid].prototype.parse = parseMethod;\n\t\t\t}\n\t\t}\n\t}\n}\n\nBoxParser.initialize();\n\nBoxParser.TKHD_FLAG_ENABLED = 0x000001;\nBoxParser.TKHD_FLAG_IN_MOVIE = 0x000002;\nBoxParser.TKHD_FLAG_IN_PREVIEW = 0x000004;\n\nBoxParser.TFHD_FLAG_BASE_DATA_OFFSET\t= 0x01;\nBoxParser.TFHD_FLAG_SAMPLE_DESC\t\t\t= 0x02;\nBoxParser.TFHD_FLAG_SAMPLE_DUR\t\t\t= 0x08;\nBoxParser.TFHD_FLAG_SAMPLE_SIZE\t\t\t= 0x10;\nBoxParser.TFHD_FLAG_SAMPLE_FLAGS\t\t= 0x20;\nBoxParser.TFHD_FLAG_DUR_EMPTY\t\t\t= 0x10000;\nBoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF= 0x20000;\n\nBoxParser.TRUN_FLAGS_DATA_OFFSET= 0x01;\nBoxParser.TRUN_FLAGS_FIRST_FLAG\t= 0x04;\nBoxParser.TRUN_FLAGS_DURATION\t= 0x100;\nBoxParser.TRUN_FLAGS_SIZE\t\t= 0x200;\nBoxParser.TRUN_FLAGS_FLAGS\t\t= 0x400;\nBoxParser.TRUN_FLAGS_CTS_OFFSET\t= 0x800;\n\nBoxParser.Box.prototype.add = function(name) {\n\treturn this.addBox(new BoxParser[name+\"Box\"]());\n}\n\nBoxParser.Box.prototype.addBox = function(box) {\n\tthis.boxes.push(box);\n\tif (this[box.type+\"s\"]) {\n\t\tthis[box.type+\"s\"].push(box);\n\t} else {\n\t\tthis[box.type] = box;\n\t}\n\treturn box;\n}\n\nBoxParser.Box.prototype.set = function(prop, value) {\n\tthis[prop] = value;\n\treturn this;\n}\n\nBoxParser.Box.prototype.addEntry = function(value, _prop) {\n\tvar prop = _prop || \"entries\";\n\tif (!this[prop]) {\n\t\tthis[prop] = [];\n\t}\n\tthis[prop].push(value);\n\treturn this;\n}\n\nif (typeof exports !== \"undefined\") {\n\texports.BoxParser = BoxParser;\n}\n// file:src/box-parse.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.parseUUID = function(stream) {\n\treturn BoxParser.parseHex16(stream);\n}\n\nBoxParser.parseHex16 = function(stream) {\n\tvar hex16 = \"\"\n\tfor (var i = 0; i <16; i++) {\n\t\tvar hex = stream.readUint8().toString(16);\n\t\thex16 += (hex.length === 1 ? \"0\"+hex : hex);\n\t}\n\treturn hex16;\n}\n\nBoxParser.parseOneBox = function(stream, headerOnly, parentSize) {\n\tvar box;\n\tvar start = stream.getPosition();\n\tvar hdr_size = 0;\n\tvar diff;\n\tvar uuid;\n\tif (stream.getEndPosition() - start < 8) {\n\t\tLog.debug(\"BoxParser\", \"Not enough data in stream to parse the type and size of the box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t}\n\tif (parentSize && parentSize < 8) {\n\t\tLog.debug(\"BoxParser\", \"Not enough bytes left in the parent box to parse a new box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t}\n\tvar size = stream.readUint32();\n\tvar type = stream.readString(4);\n\tvar box_type = type;\n\tLog.debug(\"BoxParser\", \"Found box of type '\"+type+\"' and size \"+size+\" at position \"+start);\n\thdr_size = 8;\n\tif (type == \"uuid\") {\n\t\tif ((stream.getEndPosition() - stream.getPosition() < 16) || (parentSize -hdr_size < 16)) {\n\t\t\tstream.seek(start);\n\t\t\tLog.debug(\"BoxParser\", \"Not enough bytes left in the parent box to parse a UUID box\");\n\t\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t\t}\n\t\tuuid = BoxParser.parseUUID(stream);\n\t\thdr_size += 16;\n\t\tbox_type = uuid;\n\t}\n\tif (size == 1) {\n\t\tif ((stream.getEndPosition() - stream.getPosition() < 8) || (parentSize && (parentSize - hdr_size) < 8)) {\n\t\t\tstream.seek(start);\n\t\t\tLog.warn(\"BoxParser\", \"Not enough data in stream to parse the extended size of the \\\"\"+type+\"\\\" box\");\n\t\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t\t}\n\t\tsize = stream.readUint64();\n\t\thdr_size += 8;\n\t} else if (size === 0) {\n\t\t/* box extends till the end of file or invalid file */\n\t\tif (parentSize) {\n\t\t\tsize = parentSize;\n\t\t} else {\n\t\t\t/* box extends till the end of file */\n\t\t\tif (type !== \"mdat\") {\n\t\t\t\tLog.error(\"BoxParser\", \"Unlimited box size not supported for type: '\"+type+\"'\");\n\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\treturn { code: BoxParser.OK, box: box, size: box.size };\n\t\t\t}\n\t\t}\n\t}\n\tif (size !== 0 && size < hdr_size) {\n\t\tLog.error(\"BoxParser\", \"Box of type \"+type+\" has an invalid size \"+size+\" (too small to be a box)\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (size !== 0 && parentSize && size > parentSize) {\n\t\tLog.error(\"BoxParser\", \"Box of type '\"+type+\"' has a size \"+size+\" greater than its container size \"+parentSize);\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (size !== 0 && start + size > stream.getEndPosition()) {\n\t\tstream.seek(start);\n\t\tLog.info(\"BoxParser\", \"Not enough data in stream to parse the entire '\"+type+\"' box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (headerOnly) {\n\t\treturn { code: BoxParser.OK, type: type, size: size, hdr_size: hdr_size, start: start };\n\t} else {\n\t\tif (BoxParser[type+\"Box\"]) {\n\t\t\tbox = new BoxParser[type+\"Box\"](size);\n\t\t} else {\n\t\t\tif (type !== \"uuid\") {\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown box type: '\"+type+\"'\");\n\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\tbox.has_unparsed_data = true;\n\t\t\t} else {\n\t\t\t\tif (BoxParser.UUIDBoxes[uuid]) {\n\t\t\t\t\tbox = new BoxParser.UUIDBoxes[uuid](size);\n\t\t\t\t} else {\n\t\t\t\t\tLog.warn(\"BoxParser\", \"Unknown uuid type: '\"+uuid+\"'\");\n\t\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\t\tbox.uuid = uuid;\n\t\t\t\t\tbox.has_unparsed_data = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tbox.hdr_size = hdr_size;\n\t/* recording the position of the box in the input stream */\n\tbox.start = start;\n\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\tLog.info(\"BoxParser\", \"'\"+box_type+\"' box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\tbox.parseDataAndRewind(stream);\n\t}\n\tbox.parse(stream);\n\tdiff = stream.getPosition() - (box.start+box.size);\n\tif (diff < 0) {\n\t\tLog.warn(\"BoxParser\", \"Parsing of box '\"+box_type+\"' did not read the entire indicated box data size (missing \"+(-diff)+\" bytes), seeking forward\");\n\t\tstream.seek(box.start+box.size);\n\t} else if (diff > 0) {\n\t\tLog.error(\"BoxParser\", \"Parsing of box '\"+box_type+\"' read \"+diff+\" more bytes than the indicated box data size, seeking backwards\");\n\t\tif (box.size !== 0) stream.seek(box.start+box.size);\n\t}\n\treturn { code: BoxParser.OK, box: box, size: box.size };\n}\n\nBoxParser.Box.prototype.parse = function(stream) {\n\tif (this.type != \"mdat\") {\n\t\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t} else {\n\t\tif (this.size === 0) {\n\t\t\tstream.seek(stream.getEndPosition());\n\t\t} else {\n\t\t\tstream.seek(this.start+this.size);\n\t\t}\n\t}\n}\n\n/* Used to parse a box without consuming its data, to allow detailled parsing\n Useful for boxes for which a write method is not yet implemented */\nBoxParser.Box.prototype.parseDataAndRewind = function(stream) {\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.FullBox.prototype.parseDataAndRewind = function(stream) {\n\tthis.parseFullHeader(stream);\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t// restore the header size as if the full header had not been parsed\n\tthis.hdr_size -= 4;\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.FullBox.prototype.parseFullHeader = function (stream) {\n\tthis.version = stream.readUint8();\n\tthis.flags = stream.readUint24();\n\tthis.hdr_size += 4;\n}\n\nBoxParser.FullBox.prototype.parse = function (stream) {\n\tthis.parseFullHeader(stream);\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n}\n\nBoxParser.ContainerBox.prototype.parse = function(stream) {\n\tvar ret;\n\tvar box;\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\t/* store the box in the 'boxes' array to preserve box order (for offset) but also store box in a property for more direct access */\n\t\t\tthis.boxes.push(box);\n\t\t\tif (this.subBoxNames && this.subBoxNames.indexOf(box.type) != -1) {\n\t\t\t\tthis[this.subBoxNames[this.subBoxNames.indexOf(box.type)]+\"s\"].push(box);\n\t\t\t} else {\n\t\t\t\tvar box_type = box.type !== \"uuid\" ? box.type : box.uuid;\n\t\t\t\tif (this[box_type]) {\n\t\t\t\t\tLog.warn(\"Box of type \"+box_type+\" already stored in field of this type\");\n\t\t\t\t} else {\n\t\t\t\t\tthis[box_type] = box;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\nBoxParser.Box.prototype.parseLanguage = function(stream) {\n\tthis.language = stream.readUint16();\n\tvar chars = [];\n\tchars[0] = (this.language>>10)&0x1F;\n\tchars[1] = (this.language>>5)&0x1F;\n\tchars[2] = (this.language)&0x1F;\n\tthis.languageString = String.fromCharCode(chars[0]+0x60, chars[1]+0x60, chars[2]+0x60);\n}\n\n// file:src/parsing/sampleentries/sampleentry.js\nBoxParser.SAMPLE_ENTRY_TYPE_VISUAL \t\t= \"Visual\";\nBoxParser.SAMPLE_ENTRY_TYPE_AUDIO \t\t= \"Audio\";\nBoxParser.SAMPLE_ENTRY_TYPE_HINT \t\t= \"Hint\";\nBoxParser.SAMPLE_ENTRY_TYPE_METADATA \t= \"Metadata\";\nBoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE \t= \"Subtitle\";\nBoxParser.SAMPLE_ENTRY_TYPE_SYSTEM \t\t= \"System\";\nBoxParser.SAMPLE_ENTRY_TYPE_TEXT \t\t= \"Text\";\n\nBoxParser.SampleEntry.prototype.parseHeader = function(stream) {\n\tstream.readUint8Array(6);\n\tthis.data_reference_index = stream.readUint16();\n\tthis.hdr_size += 8;\n}\n\nBoxParser.SampleEntry.prototype.parse = function(stream) {\n\tthis.parseHeader(stream);\n\tthis.data = stream.readUint8Array(this.size - this.hdr_size);\n}\n\nBoxParser.SampleEntry.prototype.parseDataAndRewind = function(stream) {\n\tthis.parseHeader(stream);\n\tthis.data = stream.readUint8Array(this.size - this.hdr_size);\n\t// restore the header size as if the sample entry header had not been parsed\n\tthis.hdr_size -= 8;\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.SampleEntry.prototype.parseFooter = function(stream) {\n\tBoxParser.ContainerBox.prototype.parse.call(this, stream);\n}\n\n// Base SampleEntry types with default parsing\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_HINT);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_TEXT);\n\n//Base SampleEntry types for Audio and Video with specific parsing\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, function(stream) {\n\tvar compressorname_length;\n\tthis.parseHeader(stream);\n\tstream.readUint16();\n\tstream.readUint16();\n\tstream.readUint32Array(3);\n\tthis.width = stream.readUint16();\n\tthis.height = stream.readUint16();\n\tthis.horizresolution = stream.readUint32();\n\tthis.vertresolution = stream.readUint32();\n\tstream.readUint32();\n\tthis.frame_count = stream.readUint16();\n\tcompressorname_length = Math.min(31, stream.readUint8());\n\tthis.compressorname = stream.readString(compressorname_length);\n\tif (compressorname_length < 31) {\n\t\tstream.readString(31 - compressorname_length);\n\t}\n\tthis.depth = stream.readUint16();\n\tstream.readUint16();\n\tthis.parseFooter(stream);\n});\n\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, function(stream) {\n\tthis.parseHeader(stream);\n\tstream.readUint32Array(2);\n\tthis.channel_count = stream.readUint16();\n\tthis.samplesize = stream.readUint16();\n\tstream.readUint16();\n\tstream.readUint16();\n\tthis.samplerate = (stream.readUint32()/(1<<16));\n\tthis.parseFooter(stream);\n});\n\n// Sample entries inheriting from Audio and Video\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc4\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"av01\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dav1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hvc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hev1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hvt1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"lhe1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dvh1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dvhe\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvi1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvs1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvcN\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vp08\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vp09\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avs3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"j2ki\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"mjp2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"mjpg\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,\t\"uncv\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mp4a\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ac-3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ac-4\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ec-3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"Opus\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mha1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mha2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mhm1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mhm2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"fLaC\");\n\n// Encrypted sample entries\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \t\"encv\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"enca\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \t\"encu\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM, \t\"encs\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_TEXT, \t\t\"enct\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \t\"encm\");\n// file:src/parsing/a1lx.js\nBoxParser.createBoxCtor(\"a1lx\", \"AV1LayeredImageIndexingProperty\", function(stream) {\n\tvar large_size = stream.readUint8() & 1;\n\tvar FieldLength = ((large_size & 1) + 1) * 16;\n\tthis.layer_size = [];\n\tfor (var i = 0; i < 3; i++) {\n\t\tif (FieldLength == 16) {\n\t\t\tthis.layer_size[i] = stream.readUint16();\n\t\t} else {\n\t\t\tthis.layer_size[i] = stream.readUint32();\n\t\t}\n\t}\n});// file:src/parsing/a1op.js\nBoxParser.createBoxCtor(\"a1op\", \"OperatingPointSelectorProperty\", function(stream) {\n\tthis.op_index = stream.readUint8();\n});// file:src/parsing/auxC.js\nBoxParser.createFullBoxCtor(\"auxC\", \"AuxiliaryTypeProperty\", function(stream) {\n\tthis.aux_type = stream.readCString();\n\tvar aux_subtype_length = this.size - this.hdr_size - (this.aux_type.length + 1);\n\tthis.aux_subtype = stream.readUint8Array(aux_subtype_length);\n});// file:src/parsing/av1C.js\nBoxParser.createBoxCtor(\"av1C\", \"AV1CodecConfigurationBox\", function(stream) {\n\tvar i;\n\tvar toparse;\n\tvar tmp = stream.readUint8();\n\tif ((tmp >> 7 & 0x1) !== 1) {\n\t\tLog.error(\"av1C marker problem\");\n\t\treturn;\n\t}\n\tthis.version = tmp & 0x7F;\n\tif (this.version !== 1) {\n\t\tLog.error(\"av1C version \"+this.version+\" not supported\");\n\t\treturn;\n\t}\n\ttmp = stream.readUint8();\n\tthis.seq_profile = (tmp >> 5) & 0x7;\n\tthis.seq_level_idx_0 = tmp & 0x1F;\n\ttmp = stream.readUint8();\n\tthis.seq_tier_0 = (tmp >> 7) & 0x1;\n\tthis.high_bitdepth = (tmp >> 6) & 0x1;\n\tthis.twelve_bit = (tmp >> 5) & 0x1;\n\tthis.monochrome = (tmp >> 4) & 0x1;\n\tthis.chroma_subsampling_x = (tmp >> 3) & 0x1;\n\tthis.chroma_subsampling_y = (tmp >> 2) & 0x1;\n\tthis.chroma_sample_position = (tmp & 0x3);\n\ttmp = stream.readUint8();\n\tthis.reserved_1 = (tmp >> 5) & 0x7;\n\tif (this.reserved_1 !== 0) {\n\t\tLog.error(\"av1C reserved_1 parsing problem\");\n\t\treturn;\n\t}\n\tthis.initial_presentation_delay_present = (tmp >> 4) & 0x1;\n\tif (this.initial_presentation_delay_present === 1) {\n\t\tthis.initial_presentation_delay_minus_one = (tmp & 0xF);\n\t} else {\n\t\tthis.reserved_2 = (tmp & 0xF);\n\t\tif (this.reserved_2 !== 0) {\n\t\t\tLog.error(\"av1C reserved_2 parsing problem\");\n\t\t\treturn;\n\t\t}\n\t}\n\n\tvar configOBUs_length = this.size - this.hdr_size - 4;\n\tthis.configOBUs = stream.readUint8Array(configOBUs_length);\n});\n\n// file:src/parsing/avcC.js\nfunction printPS(ps) {\n\tvar str = \"<table class='inner-table'>\";\n\tstr += \"<thead><tr><th>length</th><th>nalu_data</th></tr></thead>\";\n\tstr += \"<tbody>\";\n\n\tfor (var i=0; i < ps.length; i++) {\n\t\tvar nalu = ps[i];\n\t\tstr += \"<tr>\";\n\t\tstr += \"<td>\"+nalu.length+\"</td>\";\n\t\tstr += \"<td>\";\n\t\tstr += nalu.nalu.reduce(function(str, byte) {\n\t\t\treturn str + byte.toString(16).padStart(2, \"0\");\n\t\t}, \"0x\");\n\t\tstr += \"</td></tr>\";\n\t}\n\tstr += \"</tbody></table>\";\n\treturn str;\n}\n\nBoxParser.createBoxCtor(\"avcC\", \"AVCConfigurationBox\", function(stream) {\n\tvar i;\n\tvar toparse;\n\tthis.configurationVersion = stream.readUint8();\n\tthis.AVCProfileIndication = stream.readUint8();\n\tthis.profile_compatibility = stream.readUint8();\n\tthis.AVCLevelIndication = stream.readUint8();\n\tthis.lengthSizeMinusOne = (stream.readUint8() & 0x3);\n\tthis.nb_SPS_nalus = (stream.readUint8() & 0x1F);\n\ttoparse = this.size - this.hdr_size - 6;\n\tthis.SPS = [];\n\tthis.SPS.toString = function () {\n\t\treturn printPS(this);\n\t}\n\tfor (i = 0; i < this.nb_SPS_nalus; i++) {\n\t\tthis.SPS[i] = {};\n\t\tthis.SPS[i].length = stream.readUint16();\n\t\tthis.SPS[i].nalu = stream.readUint8Array(this.SPS[i].length);\n\t\ttoparse -= 2+this.SPS[i].length;\n\t}\n\tthis.nb_PPS_nalus = stream.readUint8();\n\ttoparse--;\n\tthis.PPS = [];\n\tthis.PPS.toString = function () {\n\t\treturn printPS(this);\n\t}\n\tfor (i = 0; i < this.nb_PPS_nalus; i++) {\n\t\tthis.PPS[i] = {};\n\t\tthis.PPS[i].length = stream.readUint16();\n\t\tthis.PPS[i].nalu = stream.readUint8Array(this.PPS[i].length);\n\t\ttoparse -= 2+this.PPS[i].length;\n\t}\n\tif (toparse>0) {\n\t\tthis.ext = stream.readUint8Array(toparse);\n\t}\n});\n\n// file:src/parsing/btrt.js\nBoxParser.createBoxCtor(\"btrt\", \"BitRateBox\", function(stream) {\n\tthis.bufferSizeDB = stream.readUint32();\n\tthis.maxBitrate = stream.readUint32();\n\tthis.avgBitrate = stream.readUint32();\n});\n\n// file:src/parsing/ccst.js\nBoxParser.createFullBoxCtor(\"ccst\", \"CodingConstraintsBox\", function(stream) {\n\tvar flags = stream.readUint8();\n\tthis.all_ref_pics_intra = ((flags & 0x80) == 0x80);\n\tthis.intra_pred_used = ((flags & 0x40) == 0x40);\n\tthis.max_ref_per_pic = ((flags & 0x3f) >> 2);\n\tstream.readUint24();\n});\n\n// file:src/parsing/cdef.js\nBoxParser.createBoxCtor(\"cdef\", \"ComponentDefinitionBox\", function(stream) {\n var i;\n this.channel_count = stream.readUint16();\n this.channel_indexes = [];\n this.channel_types = [];\n this.channel_associations = [];\n for (i = 0; i < this.channel_count; i++) {\n this.channel_indexes.push(stream.readUint16());\n this.channel_types.push(stream.readUint16());\n this.channel_associations.push(stream.readUint16());\n }\n});\n\n// file:src/parsing/clap.js\nBoxParser.createBoxCtor(\"clap\", \"CleanApertureBox\", function(stream) {\n\tthis.cleanApertureWidthN = stream.readUint32();\n\tthis.cleanApertureWidthD = stream.readUint32();\n\tthis.cleanApertureHeightN = stream.readUint32();\n\tthis.cleanApertureHeightD = stream.readUint32();\n\tthis.horizOffN = stream.readUint32();\n\tthis.horizOffD = stream.readUint32();\n\tthis.vertOffN = stream.readUint32();\n\tthis.vertOffD = stream.readUint32();\n});// file:src/parsing/clli.js\nBoxParser.createBoxCtor(\"clli\", \"ContentLightLevelBox\", function(stream) {\n\tthis.max_content_light_level = stream.readUint16();\n this.max_pic_average_light_level = stream.readUint16();\n});\n\n// file:src/parsing/cmex.js\nBoxParser.createFullBoxCtor(\"cmex\", \"CameraExtrinsicMatrixProperty\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.pos_x = stream.readInt32();\n\t}\n\tif (this.flags & 0x2) {\n\t\tthis.pos_y = stream.readInt32();\n\t}\n\tif (this.flags & 0x4) {\n\t\tthis.pos_z = stream.readInt32();\n\t}\n\tif (this.flags & 0x8) {\n\t\tif (this.version == 0) {\n\t\t\tif (this.flags & 0x10) {\n\t\t\t\tthis.quat_x = stream.readInt32();\n\t\t\t\tthis.quat_y = stream.readInt32();\n\t\t\t\tthis.quat_z = stream.readInt32();\n\t\t\t} else {\n\t\t\t\tthis.quat_x = stream.readInt16();\n\t\t\t\tthis.quat_y = stream.readInt16();\n\t\t\t\tthis.quat_z = stream.readInt16();\n\t\t\t}\n\t\t} else if (this.version == 1) {\n\t\t\t//ViewpointGlobalCoordinateSysRotationStruct rot;\n\t\t}\n\t}\n\tif (this.flags & 0x20) {\n\t\tthis.id = stream.readUint32();\n\t}\n});\n// file:src/parsing/cmin.js\nBoxParser.createFullBoxCtor(\"cmin\", \"CameraIntrinsicMatrixProperty\", function(stream) {\n\tthis.focal_length_x = stream.readInt32();\n\tthis.principal_point_x = stream.readInt32();\n\tthis.principal_point_y = stream.readInt32();\n\tif (this.flags & 0x1) {\n\t\tthis.focal_length_y = stream.readInt32();\n\t\tthis.skew_factor = stream.readInt32();\n\t}\n});// file:src/parsing/cmpd.js\nBoxParser.createBoxCtor(\"cmpd\", \"ComponentDefinitionBox\", function(stream) {\n\tthis.component_count = stream.readUint32();\n\tthis.component_types = [];\n\tthis.component_type_urls = [];\n\tfor (i = 0; i < this.component_count; i++) {\n\t\tvar component_type = stream.readUint16();\n\t\tthis.component_types.push(component_type);\n\t\tif (component_type >= 0x8000) {\n\t\t\tthis.component_type_urls.push(stream.readCString());\n\t\t}\n\t}\n});// file:src/parsing/co64.js\nBoxParser.createFullBoxCtor(\"co64\", \"ChunkLargeOffsetBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.chunk_offsets = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.chunk_offsets.push(stream.readUint64());\n\t\t}\n\t}\n});\n\n// file:src/parsing/CoLL.js\nBoxParser.createFullBoxCtor(\"CoLL\", \"ContentLightLevelBox\", function(stream) {\n\tthis.maxCLL = stream.readUint16();\n this.maxFALL = stream.readUint16();\n});\n\n// file:src/parsing/colr.js\nBoxParser.createBoxCtor(\"colr\", \"ColourInformationBox\", function(stream) {\n\tthis.colour_type = stream.readString(4);\n\tif (this.colour_type === 'nclx') {\n\t\tthis.colour_primaries = stream.readUint16();\n\t\tthis.transfer_characteristics = stream.readUint16();\n\t\tthis.matrix_coefficients = stream.readUint16();\n\t\tvar tmp = stream.readUint8();\n\t\tthis.full_range_flag = tmp >> 7;\n\t} else if (this.colour_type === 'rICC') {\n\t\tthis.ICC_profile = stream.readUint8Array(this.size - 4);\n\t} else if (this.colour_type === 'prof') {\n\t\tthis.ICC_profile = stream.readUint8Array(this.size - 4);\n\t}\n});// file:src/parsing/cprt.js\nBoxParser.createFullBoxCtor(\"cprt\", \"CopyrightBox\", function (stream) {\n\tthis.parseLanguage(stream);\n\tthis.notice = stream.readCString();\n});\n\n// file:src/parsing/cslg.js\nBoxParser.createFullBoxCtor(\"cslg\", \"CompositionToDecodeBox\", function(stream) {\n\tvar entry_count;\n\tif (this.version === 0) {\n\t\tthis.compositionToDTSShift = stream.readInt32(); /* signed */\n\t\tthis.leastDecodeToDisplayDelta = stream.readInt32(); /* signed */\n\t\tthis.greatestDecodeToDisplayDelta = stream.readInt32(); /* signed */\n\t\tthis.compositionStartTime = stream.readInt32(); /* signed */\n\t\tthis.compositionEndTime = stream.readInt32(); /* signed */\n\t}\n});\n\n// file:src/parsing/ctts.js\nBoxParser.createFullBoxCtor(\"ctts\", \"CompositionOffsetBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.sample_counts = [];\n\tthis.sample_offsets = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_counts.push(stream.readUint32());\n\t\t\t/* some files are buggy and declare version=0 while using signed offsets.\n\t\t\t The likelyhood of using the most significant bit in a 32-bits time offset is very low,\n\t\t\t so using signed value here as well */\n\t\t\t var value = stream.readInt32();\n\t\t\t if (value < 0) {\n\t\t\t \t\tLog.warn(\"BoxParser\", \"ctts box uses negative values without using version 1\");\n\t\t\t }\n\t\t\tthis.sample_offsets.push(value);\n\t\t}\n\t} else if (this.version == 1) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_counts.push(stream.readUint32());\n\t\t\tthis.sample_offsets.push(stream.readInt32()); /* signed */\n\t\t}\n\t}\n});\n\n// file:src/parsing/dac3.js\nBoxParser.createBoxCtor(\"dac3\", \"AC3SpecificBox\", function(stream) {\n\tvar tmp_byte1 = stream.readUint8();\n\tvar tmp_byte2 = stream.readUint8();\n\tvar tmp_byte3 = stream.readUint8();\n\tthis.fscod = tmp_byte1 >> 6;\n\tthis.bsid = ((tmp_byte1 >> 1) & 0x1F);\n\tthis.bsmod = ((tmp_byte1 & 0x1) << 2) | ((tmp_byte2 >> 6) & 0x3);\n\tthis.acmod = ((tmp_byte2 >> 3) & 0x7);\n\tthis.lfeon = ((tmp_byte2 >> 2) & 0x1);\n\tthis.bit_rate_code = (tmp_byte2 & 0x3) | ((tmp_byte3 >> 5) & 0x7);\n});\n\n// file:src/parsing/dec3.js\nBoxParser.createBoxCtor(\"dec3\", \"EC3SpecificBox\", function(stream) {\n\tvar tmp_16 = stream.readUint16();\n\tthis.data_rate = tmp_16 >> 3;\n\tthis.num_ind_sub = tmp_16 & 0x7;\n\tthis.ind_subs = [];\n\tfor (var i = 0; i < this.num_ind_sub+1; i++) {\n\t\tvar ind_sub = {};\n\t\tthis.ind_subs.push(ind_sub);\n\t\tvar tmp_byte1 = stream.readUint8();\n\t\tvar tmp_byte2 = stream.readUint8();\n\t\tvar tmp_byte3 = stream.readUint8();\n\t\tind_sub.fscod = tmp_byte1 >> 6;\n\t\tind_sub.bsid = ((tmp_byte1 >> 1) & 0x1F);\n\t\tind_sub.bsmod = ((tmp_byte1 & 0x1) << 4) | ((tmp_byte2 >> 4) & 0xF);\n\t\tind_sub.acmod = ((tmp_byte2 >> 1) & 0x7);\n\t\tind_sub.lfeon = (tmp_byte2 & 0x1);\n\t\tind_sub.num_dep_sub = ((tmp_byte3 >> 1) & 0xF);\n\t\tif (ind_sub.num_dep_sub > 0) {\n\t\t\tind_sub.chan_loc = ((tmp_byte3 & 0x1) << 8) | stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/dfLa.js\nBoxParser.createFullBoxCtor(\"dfLa\", \"FLACSpecificBox\", function(stream) {\n var BLOCKTYPE_MASK = 0x7F;\n var LASTMETADATABLOCKFLAG_MASK = 0x80;\n\n var boxesFound = [];\n var knownBlockTypes = [\n \"STREAMINFO\",\n \"PADDING\",\n \"APPLICATION\",\n \"SEEKTABLE\",\n \"VORBIS_COMMENT\",\n \"CUESHEET\",\n \"PICTURE\",\n \"RESERVED\"\n ];\n\n // for (i=0; ; i++) { // to end of box\n do {\n var flagAndType = stream.readUint8();\n\n var type = Math.min(\n (flagAndType & BLOCKTYPE_MASK),\n (knownBlockTypes.length - 1)\n );\n\n // if this is a STREAMINFO block, read the true samplerate since this\n // can be different to the AudioSampleEntry samplerate.\n if (!(type)) {\n // read past all the other stuff\n stream.readUint8Array(13);\n\n // extract samplerate\n this.samplerate = (stream.readUint32() >> 12);\n\n // read to end of STREAMINFO\n stream.readUint8Array(20);\n } else {\n // not interested in other block types so just discard length bytes\n stream.readUint8Array(stream.readUint24());\n }\n\n boxesFound.push(knownBlockTypes[type]);\n\n if (!!(flagAndType & LASTMETADATABLOCKFLAG_MASK)) {\n break;\n }\n } while (true);\n\n this.numMetadataBlocks =\n boxesFound.length + \" (\" + boxesFound.join(\", \") + \")\";\n});\n// file:src/parsing/dimm.js\nBoxParser.createBoxCtor(\"dimm\", \"hintimmediateBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/dmax.js\nBoxParser.createBoxCtor(\"dmax\", \"hintlongestpacket\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/dmed.js\nBoxParser.createBoxCtor(\"dmed\", \"hintmediaBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/dOps.js\nBoxParser.createBoxCtor(\"dOps\", \"OpusSpecificBox\", function(stream) {\n\tthis.Version = stream.readUint8();\n\tthis.OutputChannelCount = stream.readUint8();\n\tthis.PreSkip = stream.readUint16();\n\tthis.InputSampleRate = stream.readUint32();\n\tthis.OutputGain = stream.readInt16();\n\tthis.ChannelMappingFamily = stream.readUint8();\n\tif (this.ChannelMappingFamily !== 0) {\n\t\tthis.StreamCount = stream.readUint8();\n\t\tthis.CoupledCount = stream.readUint8();\n\t\tthis.ChannelMapping = [];\n\t\tfor (var i = 0; i < this.OutputChannelCount; i++) {\n\t\t\tthis.ChannelMapping[i] = stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/dref.js\nBoxParser.createFullBoxCtor(\"dref\", \"DataReferenceBox\", function(stream) {\n\tvar ret;\n\tvar box;\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.entries.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/drep.js\nBoxParser.createBoxCtor(\"drep\", \"hintrepeatedBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/elng.js\nBoxParser.createFullBoxCtor(\"elng\", \"ExtendedLanguageBox\", function(stream) {\n\tthis.extended_language = stream.readString(this.size-this.hdr_size);\n});\n\n// file:src/parsing/elst.js\nBoxParser.createFullBoxCtor(\"elst\", \"EditListBox\", function(stream) {\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry = {};\n\t\tthis.entries.push(entry);\n\t\tif (this.version === 1) {\n\t\t\tentry.segment_duration = stream.readUint64();\n\t\t\tentry.media_time = stream.readInt64();\n\t\t} else {\n\t\t\tentry.segment_duration = stream.readUint32();\n\t\t\tentry.media_time = stream.readInt32();\n\t\t}\n\t\tentry.media_rate_integer = stream.readInt16();\n\t\tentry.media_rate_fraction = stream.readInt16();\n\t}\n});\n\n// file:src/parsing/emsg.js\nBoxParser.createFullBoxCtor(\"emsg\", \"EventMessageBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.timescale \t\t\t\t\t= stream.readUint32();\n\t\tthis.presentation_time \t\t\t= stream.readUint64();\n\t\tthis.event_duration\t\t\t \t= stream.readUint32();\n\t\tthis.id \t\t\t\t\t\t= stream.readUint32();\n\t\tthis.scheme_id_uri \t\t\t\t= stream.readCString();\n\t\tthis.value \t\t\t\t\t\t= stream.readCString();\n\t} else {\n\t\tthis.scheme_id_uri \t\t\t\t= stream.readCString();\n\t\tthis.value \t\t\t\t\t\t= stream.readCString();\n\t\tthis.timescale \t\t\t\t\t= stream.readUint32();\n\t\tthis.presentation_time_delta \t= stream.readUint32();\n\t\tthis.event_duration\t\t\t \t= stream.readUint32();\n\t\tthis.id \t\t\t\t\t\t= stream.readUint32();\n\t}\n\tvar message_size = this.size - this.hdr_size - (4*4 + (this.scheme_id_uri.length+1) + (this.value.length+1));\n\tif (this.version == 1) {\n\t\tmessage_size -= 4;\n\t}\n\tthis.message_data = stream.readUint8Array(message_size);\n});\n\n// file:src/parsing/EntityToGroup.js\n// ISO/IEC 14496-12:2022 Section 8.18.3 Entity to group box\nBoxParser.createEntityToGroupCtor = function(type, parseMethod) {\n BoxParser[type+\"Box\"] = function(size) {\n BoxParser.FullBox.call(this, type, size);\n }\n BoxParser[type+\"Box\"].prototype = new BoxParser.FullBox();\n BoxParser[type+\"Box\"].prototype.parse = function(stream) {\n this.parseFullHeader(stream);\n if (parseMethod) {\n parseMethod.call(this, stream);\n } else {\n this.group_id = stream.readUint32();\n this.num_entities_in_group = stream.readUint32();\n this.entity_ids = [];\n for (i = 0; i < this.num_entities_in_group; i++) {\n var entity_id = stream.readUint32();\n this.entity_ids.push(entity_id);\n }\n }\n };\n};\n\n// Auto exposure bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.2.1)\nBoxParser.createEntityToGroupCtor(\"aebr\");\n\n// Flash exposure bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.5.1)\nBoxParser.createEntityToGroupCtor(\"afbr\");\n\n// Album collection (ISO/IEC 23008-12:2022 Section 6.8.7.1)\nBoxParser.createEntityToGroupCtor(\"albc\");\n\n// Alternative entity (ISO/IEC 14496-12:2022 Section 8.18.3.1)\nBoxParser.createEntityToGroupCtor(\"altr\");\n\n// Burst image entity group (ISO/IEC 23008-12:2022 Section 6.8.2.2)\nBoxParser.createEntityToGroupCtor(\"brst\");\n\n// Depth of field bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.6.1)\nBoxParser.createEntityToGroupCtor(\"dobr\");\n\n// Equivalent entity (ISO/IEC 23008-12:2022 Section 6.8.1.1)\nBoxParser.createEntityToGroupCtor(\"eqiv\");\n\n// Favourites collection (ISO/IEC 23008-12:2022 Section 6.8.7.2)\nBoxParser.createEntityToGroupCtor(\"favc\");\n\n// Focus bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.4.1)\nBoxParser.createEntityToGroupCtor(\"fobr\");\n\n// Audio to image entity group (ISO/IEC 23008-12:2022 Section 6.8.4)\nBoxParser.createEntityToGroupCtor(\"iaug\");\n\n// Panorama (ISO/IEC 23008-12:2022 Section 6.8.8.1)\nBoxParser.createEntityToGroupCtor(\"pano\");\n\n// Slideshow (ISO/IEC 23008-12:2022 Section 6.8.9.1)\nBoxParser.createEntityToGroupCtor(\"slid\");\n\n// Stereo pair (ISO/IEC 23008-12:2022 Section 6.8.5)\nBoxParser.createEntityToGroupCtor(\"ster\");\n\n// Time-synchronised capture entity group (ISO/IEC 23008-12:2022 Section 6.8.3)\nBoxParser.createEntityToGroupCtor(\"tsyn\");\n\n// White balance bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.3.1)\nBoxParser.createEntityToGroupCtor(\"wbbr\");\n\n// Alternative entity (ISO/IEC 23008-12:2022 AMD1 Section 6.8.10)\nBoxParser.createEntityToGroupCtor(\"prgr\");\n\n// Image Pyramid entity group (ISO/IEC 23008-12:20xx Section 6.8.11)\nBoxParser.createEntityToGroupCtor(\"pymd\", function(stream) {\n this.group_id = stream.readUint32();\n this.num_entities_in_group = stream.readUint32();\n this.entity_ids = [];\n for (var i = 0; i < this.num_entities_in_group; i++) {\n var entity_id = stream.readUint32();\n this.entity_ids.push(entity_id);\n }\n \n this.tile_size_x = stream.readUint16();\n this.tile_size_y = stream.readUint16();\n this.layer_binning = [];\n this.tiles_in_layer_column_minus1 = [];\n this.tiles_in_layer_row_minus1 = [];\n for (i = 0; i < this.num_entities_in_group; i++) {\n this.layer_binning[i] = stream.readUint16();\n this.tiles_in_layer_row_minus1[i] = stream.readUint16();\n this.tiles_in_layer_column_minus1[i] = stream.readUint16();\n }\n});\n\n// file:src/parsing/esds.js\nBoxParser.createFullBoxCtor(\"esds\", \"ElementaryStreamDescriptorBox\", function(stream) {\n\tvar esd_data = stream.readUint8Array(this.size-this.hdr_size);\n\tif (typeof MPEG4DescriptorParser !== \"undefined\") {\n\t\tvar esd_parser = new MPEG4DescriptorParser();\n\t\tthis.esd = esd_parser.parseOneDescriptor(new DataStream(esd_data.buffer, 0, DataStream.BIG_ENDIAN));\n\t}\n});\n\n// file:src/parsing/fiel.js\nBoxParser.createBoxCtor(\"fiel\", \"FieldHandlingBox\", function(stream) {\n\tthis.fieldCount = stream.readUint8();\n\tthis.fieldOrdering = stream.readUint8();\n});\n\n// file:src/parsing/frma.js\nBoxParser.createBoxCtor(\"frma\", \"OriginalFormatBox\", function(stream) {\n\tthis.data_format = stream.readString(4);\n});\n\n// file:src/parsing/ftyp.js\nBoxParser.createBoxCtor(\"ftyp\", \"FileTypeBox\", function(stream) {\n\tvar toparse = this.size - this.hdr_size;\n\tthis.major_brand = stream.readString(4);\n\tthis.minor_version = stream.readUint32();\n\ttoparse -= 8;\n\tthis.compatible_brands = [];\n\tvar i = 0;\n\twhile (toparse>=4) {\n\t\tthis.compatible_brands[i] = stream.readString(4);\n\t\ttoparse -= 4;\n\t\ti++;\n\t}\n});\n\n// file:src/parsing/hdlr.js\nBoxParser.createFullBoxCtor(\"hdlr\", \"HandlerBox\", function(stream) {\n\tif (this.version === 0) {\n\t\tstream.readUint32();\n\t\tthis.handler = stream.readString(4);\n\t\tstream.readUint32Array(3);\n\t\tthis.name = stream.readString(this.size-this.hdr_size-20);\n\t\tif (this.name[this.name.length-1]==='\\0') {\n\t\t\tthis.name = this.name.slice(0,-1);\n\t\t}\n\t}\n});\n\n// file:src/parsing/hvcC.js\nBoxParser.createBoxCtor(\"hvcC\", \"HEVCConfigurationBox\", function(stream) {\n\tvar i, j;\n\tvar nb_nalus;\n\tvar length;\n\tvar tmp_byte;\n\tthis.configurationVersion = stream.readUint8();\n\ttmp_byte = stream.readUint8();\n\tthis.general_profile_space = tmp_byte >> 6;\n\tthis.general_tier_flag = (tmp_byte & 0x20) >> 5;\n\tthis.general_profile_idc = (tmp_byte & 0x1F);\n\tthis.general_profile_compatibility = stream.readUint32();\n\tthis.general_constraint_indicator = stream.readUint8Array(6);\n\tthis.general_level_idc = stream.readUint8();\n\tthis.min_spatial_segmentation_idc = stream.readUint16() & 0xFFF;\n\tthis.parallelismType = (stream.readUint8() & 0x3);\n\tthis.chroma_format_idc = (stream.readUint8() & 0x3);\n\tthis.bit_depth_luma_minus8 = (stream.readUint8() & 0x7);\n\tthis.bit_depth_chroma_minus8 = (stream.readUint8() & 0x7);\n\tthis.avgFrameRate = stream.readUint16();\n\ttmp_byte = stream.readUint8();\n\tthis.constantFrameRate = (tmp_byte >> 6);\n\tthis.numTemporalLayers = (tmp_byte & 0XD) >> 3;\n\tthis.temporalIdNested = (tmp_byte & 0X4) >> 2;\n\tthis.lengthSizeMinusOne = (tmp_byte & 0X3);\n\n\tthis.nalu_arrays = [];\n\tthis.nalu_arrays.toString = function () {\n\t\tvar str = \"<table class='inner-table'>\";\n\t\tstr += \"<thead><tr><th>completeness</th><th>nalu_type</th><th>nalu_data</th></tr></thead>\";\n\t\tstr += \"<tbody>\";\n\n\t\tfor (var i=0; i<this.length; i++) {\n\t\t\tvar nalu_array = this[i];\n\t\t\tstr += \"<tr>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.completeness+\"</td>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.nalu_type+\"</td>\";\n\t\t\tfor (var j=0; j<nalu_array.length; j++) {\n\t\t\t\tvar nalu = nalu_array[j];\n\t\t\t\tif (j !== 0) str += \"<tr>\";\n\t\t\t\tstr += \"<td>\";\n\t\t\t\tstr += nalu.data.reduce(function(str, byte) {\n\t\t\t\t\treturn str + byte.toString(16).padStart(2, \"0\");\n\t\t\t\t}, \"0x\");\n\t\t\t\tstr += \"</td></tr>\";\n\t\t\t}\n\t\t}\n\t\tstr += \"</tbody></table>\";\n\t\treturn str;\n\t}\n\tvar numOfArrays = stream.readUint8();\n\tfor (i = 0; i < numOfArrays; i++) {\n\t\tvar nalu_array = [];\n\t\tthis.nalu_arrays.push(nalu_array);\n\t\ttmp_byte = stream.readUint8()\n\t\tnalu_array.completeness = (tmp_byte & 0x80) >> 7;\n\t\tnalu_array.nalu_type = tmp_byte & 0x3F;\n\t\tvar numNalus = stream.readUint16();\n\t\tfor (j = 0; j < numNalus; j++) {\n\t\t\tvar nalu = {}\n\t\t\tnalu_array.push(nalu);\n\t\t\tlength = stream.readUint16();\n\t\t\tnalu.data = stream.readUint8Array(length);\n\t\t}\n\t}\n});\n\n// file:src/parsing/iinf.js\nBoxParser.createFullBoxCtor(\"iinf\", \"ItemInfoBox\", function(stream) {\n\tvar ret;\n\tif (this.version === 0) {\n\t\tthis.entry_count = stream.readUint16();\n\t} else {\n\t\tthis.entry_count = stream.readUint32();\n\t}\n\tthis.item_infos = [];\n\tfor (var i = 0; i < this.entry_count; i++) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (ret.box.type !== \"infe\") {\n\t\t\t\tLog.error(\"BoxParser\", \"Expected 'infe' box, got \"+ret.box.type);\n\t\t\t}\n\t\t\tthis.item_infos[i] = ret.box;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/iloc.js\nBoxParser.createFullBoxCtor(\"iloc\", \"ItemLocationBox\", function(stream) {\n\tvar byte;\n\tbyte = stream.readUint8();\n\tthis.offset_size = (byte >> 4) & 0xF;\n\tthis.length_size = byte & 0xF;\n\tbyte = stream.readUint8();\n\tthis.base_offset_size = (byte >> 4) & 0xF;\n\tif (this.version === 1 || this.version === 2) {\n\t\tthis.index_size = byte & 0xF;\n\t} else {\n\t\tthis.index_size = 0;\n\t\t// reserved = byte & 0xF;\n\t}\n\tthis.items = [];\n\tvar item_count = 0;\n\tif (this.version < 2) {\n\t\titem_count = stream.readUint16();\n\t} else if (this.version === 2) {\n\t\titem_count = stream.readUint32();\n\t} else {\n\t\tthrow \"version of iloc box not supported\";\n\t}\n\tfor (var i = 0; i < item_count; i++) {\n\t\tvar item = {};\n\t\tthis.items.push(item);\n\t\tif (this.version < 2) {\n\t\t\titem.item_ID = stream.readUint16();\n\t\t} else if (this.version === 2) {\n\t\t\titem.item_ID = stream.readUint32();\n\t\t} else {\n\t\t\tthrow \"version of iloc box not supported\";\n\t\t}\n\t\tif (this.version === 1 || this.version === 2) {\n\t\t\titem.construction_method = (stream.readUint16() & 0xF);\n\t\t} else {\n\t\t\titem.construction_method = 0;\n\t\t}\n\t\titem.data_reference_index = stream.readUint16();\n\t\tswitch(this.base_offset_size) {\n\t\t\tcase 0:\n\t\t\t\titem.base_offset = 0;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\titem.base_offset = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tcase 8:\n\t\t\t\titem.base_offset = stream.readUint64();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow \"Error reading base offset size\";\n\t\t}\n\t\tvar extent_count = stream.readUint16();\n\t\titem.extents = [];\n\t\tfor (var j=0; j < extent_count; j++) {\n\t\t\tvar extent = {};\n\t\t\titem.extents.push(extent);\n\t\t\tif (this.version === 1 || this.version === 2) {\n\t\t\t\tswitch(this.index_size) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\textent.extent_index = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\textent.extent_index = stream.readUint32();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 8:\n\t\t\t\t\t\textent.extent_index = stream.readUint64();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch(this.offset_size) {\n\t\t\t\tcase 0:\n\t\t\t\t\textent.extent_offset = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\textent.extent_offset = stream.readUint32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\textent.extent_offset = stream.readUint64();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t}\n\t\t\tswitch(this.length_size) {\n\t\t\t\tcase 0:\n\t\t\t\t\textent.extent_length = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\textent.extent_length = stream.readUint32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\textent.extent_length = stream.readUint64();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/imir.js\nBoxParser.createBoxCtor(\"imir\", \"ImageMirror\", function(stream) {\n\tvar tmp = stream.readUint8();\n\tthis.reserved = tmp >> 7;\n\tthis.axis = tmp & 1;\n});// file:src/parsing/infe.js\nBoxParser.createFullBoxCtor(\"infe\", \"ItemInfoEntry\", function(stream) {\n\tif (this.version === 0 || this.version === 1) {\n\t\tthis.item_ID = stream.readUint16();\n\t\tthis.item_protection_index = stream.readUint16();\n\t\tthis.item_name = stream.readCString();\n\t\tthis.content_type = stream.readCString();\n\t\tthis.content_encoding = stream.readCString();\n\t}\n\tif (this.version === 1) {\n\t\tthis.extension_type = stream.readString(4);\n\t\tLog.warn(\"BoxParser\", \"Cannot parse extension type\");\n\t\tstream.seek(this.start+this.size);\n\t\treturn;\n\t}\n\tif (this.version >= 2) {\n\t\tif (this.version === 2) {\n\t\t\tthis.item_ID = stream.readUint16();\n\t\t} else if (this.version === 3) {\n\t\t\tthis.item_ID = stream.readUint32();\n\t\t}\n\t\tthis.item_protection_index = stream.readUint16();\n\t\tthis.item_type = stream.readString(4);\n\t\tthis.item_name = stream.readCString();\n\t\tif (this.item_type === \"mime\") {\n\t\t\tthis.content_type = stream.readCString();\n\t\t\tthis.content_encoding = stream.readCString();\n\t\t} else if (this.item_type === \"uri \") {\n\t\t\tthis.item_uri_type = stream.readCString();\n\t\t}\n\t}\n});\n// file:src/parsing/ipma.js\nBoxParser.createFullBoxCtor(\"ipma\", \"ItemPropertyAssociationBox\", function(stream) {\n\tvar i, j;\n\tentry_count = stream.readUint32();\n\tthis.associations = [];\n\tfor(i=0; i<entry_count; i++) {\n\t\tvar item_assoc = {};\n\t\tthis.associations.push(item_assoc);\n\t\tif (this.version < 1) {\n\t\t\titem_assoc.id = stream.readUint16();\n\t\t} else {\n\t\t\titem_assoc.id = stream.readUint32();\n\t\t}\n\t\tvar association_count = stream.readUint8();\n\t\titem_assoc.props = [];\n\t\tfor (j = 0; j < association_count; j++) {\n\t\t\tvar tmp = stream.readUint8();\n\t\t\tvar p = {};\n\t\t\titem_assoc.props.push(p);\n\t\t\tp.essential = ((tmp & 0x80) >> 7) === 1;\n\t\t\tif (this.flags & 0x1) {\n\t\t\t\tp.property_index = (tmp & 0x7F) << 8 | stream.readUint8();\n\t\t\t} else {\n\t\t\t\tp.property_index = (tmp & 0x7F);\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/iref.js\nBoxParser.createFullBoxCtor(\"iref\", \"ItemReferenceBox\", function(stream) {\n\tvar ret;\n\tvar entryCount;\n\tvar box;\n\tthis.references = [];\n\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (this.version === 0) {\n\t\t\t\tbox = new BoxParser.SingleItemTypeReferenceBox(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t} else {\n\t\t\t\tbox = new BoxParser.SingleItemTypeReferenceBoxLarge(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t}\n\t\t\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\t\t\tLog.warn(\"BoxParser\", box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.references.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n// file:src/parsing/irot.js\nBoxParser.createBoxCtor(\"irot\", \"ImageRotation\", function(stream) {\n\tthis.angle = stream.readUint8() & 0x3;\n});\n\n// file:src/parsing/ispe.js\nBoxParser.createFullBoxCtor(\"ispe\", \"ImageSpatialExtentsProperty\", function(stream) {\n\tthis.image_width = stream.readUint32();\n\tthis.image_height = stream.readUint32();\n});// file:src/parsing/kind.js\nBoxParser.createFullBoxCtor(\"kind\", \"KindBox\", function(stream) {\n\tthis.schemeURI = stream.readCString();\n\tthis.value = stream.readCString();\n});\n// file:src/parsing/leva.js\nBoxParser.createFullBoxCtor(\"leva\", \"LevelAssignmentBox\", function(stream) {\n\tvar count = stream.readUint8();\n\tthis.levels = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tvar level = {};\n\t\tthis.levels[i] = level;\n\t\tlevel.track_ID = stream.readUint32();\n\t\tvar tmp_byte = stream.readUint8();\n\t\tlevel.padding_flag = tmp_byte >> 7;\n\t\tlevel.assignment_type = tmp_byte & 0x7F;\n\t\tswitch (level.assignment_type) {\n\t\t\tcase 0:\n\t\t\t\tlevel.grouping_type = stream.readString(4);\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tlevel.grouping_type = stream.readString(4);\n\t\t\t\tlevel.grouping_type_parameter = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\tlevel.sub_track_id = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown leva assignement type\");\n\t\t}\n\t}\n});\n\n// file:src/parsing/lhvC.js\nBoxParser.createBoxCtor(\"lhvC\", \"LHEVCConfigurationBox\", function(stream) {\n\tvar i, j;\n\tvar tmp_byte;\n\tthis.configurationVersion = stream.readUint8();\n\tthis.min_spatial_segmentation_idc = stream.readUint16() & 0xFFF;\n\tthis.parallelismType = (stream.readUint8() & 0x3);\n\ttmp_byte = stream.readUint8();\n\tthis.numTemporalLayers = (tmp_byte & 0XD) >> 3;\n\tthis.temporalIdNested = (tmp_byte & 0X4) >> 2;\n\tthis.lengthSizeMinusOne = (tmp_byte & 0X3);\n\n\tthis.nalu_arrays = [];\n\tthis.nalu_arrays.toString = function () {\n\t\tvar str = \"<table class='inner-table'>\";\n\t\tstr += \"<thead><tr><th>completeness</th><th>nalu_type</th><th>nalu_data</th></tr></thead>\";\n\t\tstr += \"<tbody>\";\n\n\t\tfor (var i=0; i<this.length; i++) {\n\t\t\tvar nalu_array = this[i];\n\t\t\tstr += \"<tr>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.completeness+\"</td>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.nalu_type+\"</td>\";\n\t\t\tfor (var j=0; j<nalu_array.length; j++) {\n\t\t\t\tvar nalu = nalu_array[j];\n\t\t\t\tif (j !== 0) str += \"<tr>\";\n\t\t\t\tstr += \"<td>\";\n\t\t\t\tstr += nalu.data.reduce(function(str, byte) {\n\t\t\t\t\treturn str + byte.toString(16).padStart(2, \"0\");\n\t\t\t\t}, \"0x\");\n\t\t\t\tstr += \"</td></tr>\";\n\t\t\t}\n\t\t}\n\t\tstr += \"</tbody></table>\";\n\t\treturn str;\n\t}\n\tvar numOfArrays = stream.readUint8();\n\tfor (i = 0; i < numOfArrays; i++) {\n\t\tvar nalu_array = [];\n\t\tthis.nalu_arrays.push(nalu_array);\n\t\ttmp_byte = stream.readUint8()\n\t\tnalu_array.completeness = (tmp_byte & 0x80) >> 7;\n\t\tnalu_array.nalu_type = tmp_byte & 0x3F;\n\t\tvar numNalus = stream.readUint16();\n\t\tfor (j = 0; j < numNalus; j++) {\n\t\t\tvar nalu = {}\n\t\t\tnalu_array.push(nalu);\n\t\t\tvar length = stream.readUint16();\n\t\t\tnalu.data = stream.readUint8Array(length);\n\t\t}\n\t}\n});\n\n// file:src/parsing/lsel.js\nBoxParser.createBoxCtor(\"lsel\", \"LayerSelectorProperty\", function(stream) {\n\tthis.layer_id = stream.readUint16();\n});// file:src/parsing/maxr.js\nBoxParser.createBoxCtor(\"maxr\", \"hintmaxrate\", function(stream) {\n\tthis.period = stream.readUint32();\n\tthis.bytes = stream.readUint32();\n});\n\n// file:src/parsing/mdcv.js\nfunction ColorPoint(x, y) {\n this.x = x;\n this.y = y;\n}\n\nColorPoint.prototype.toString = function() {\n return \"(\"+this.x+\",\"+this.y+\")\";\n}\n\nBoxParser.createBoxCtor(\"mdcv\", \"MasteringDisplayColourVolumeBox\", function(stream) {\n this.display_primaries = [];\n this.display_primaries[0] = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.display_primaries[1] = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.display_primaries[2] = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.white_point = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.max_display_mastering_luminance = stream.readUint32();\n this.min_display_mastering_luminance = stream.readUint32();\n});\n\n// file:src/parsing/mdhd.js\nBoxParser.createFullBoxCtor(\"mdhd\", \"MediaHeaderBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tthis.parseLanguage(stream);\n\tstream.readUint16();\n});\n\n// file:src/parsing/mehd.js\nBoxParser.createFullBoxCtor(\"mehd\", \"MovieExtendsHeaderBox\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tLog.warn(\"BoxParser\", \"mehd box incorrectly uses flags set to 1, converting version to 1\");\n\t\tthis.version = 1;\n\t}\n\tif (this.version == 1) {\n\t\tthis.fragment_duration = stream.readUint64();\n\t} else {\n\t\tthis.fragment_duration = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/meta.js\nBoxParser.createFullBoxCtor(\"meta\", \"MetaBox\", function(stream) {\n\tthis.boxes = [];\n\tBoxParser.ContainerBox.prototype.parse.call(this, stream);\n});\n// file:src/parsing/mfhd.js\nBoxParser.createFullBoxCtor(\"mfhd\", \"MovieFragmentHeaderBox\", function(stream) {\n\tthis.sequence_number = stream.readUint32();\n});\n\n// file:src/parsing/mfro.js\nBoxParser.createFullBoxCtor(\"mfro\", \"MovieFragmentRandomAccessOffsetBox\", function(stream) {\n\tthis._size = stream.readUint32();\n});\n\n// file:src/parsing/mskC.js\nBoxParser.createFullBoxCtor(\"mskC\", \"MaskConfigurationProperty\", function(stream) {\n this.bits_per_pixel = stream.readUint8();\n});\n\n// file:src/parsing/mvhd.js\nBoxParser.createFullBoxCtor(\"mvhd\", \"MovieHeaderBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tthis.rate = stream.readUint32();\n\tthis.volume = stream.readUint16()>>8;\n\tstream.readUint16();\n\tstream.readUint32Array(2);\n\tthis.matrix = stream.readUint32Array(9);\n\tstream.readUint32Array(6);\n\tthis.next_track_id = stream.readUint32();\n});\n// file:src/parsing/npck.js\nBoxParser.createBoxCtor(\"npck\", \"hintPacketsSent\", function(stream) {\n\tthis.packetssent = stream.readUint32();\n});\n\n// file:src/parsing/nump.js\nBoxParser.createBoxCtor(\"nump\", \"hintPacketsSent\", function(stream) {\n\tthis.packetssent = stream.readUint64();\n});\n\n// file:src/parsing/padb.js\nBoxParser.createFullBoxCtor(\"padb\", \"PaddingBitsBox\", function(stream) {\n\tvar sample_count = stream.readUint32();\n\tthis.padbits = [];\n\tfor (var i = 0; i < Math.floor((sample_count+1)/2); i++) {\n\t\tthis.padbits = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/pasp.js\nBoxParser.createBoxCtor(\"pasp\", \"PixelAspectRatioBox\", function(stream) {\n\tthis.hSpacing = stream.readUint32();\n\tthis.vSpacing = stream.readUint32();\n});// file:src/parsing/payl.js\nBoxParser.createBoxCtor(\"payl\", \"CuePayloadBox\", function(stream) {\n\tthis.text = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/payt.js\nBoxParser.createBoxCtor(\"payt\", \"hintpayloadID\", function(stream) {\n\tthis.payloadID = stream.readUint32();\n\tvar count = stream.readUint8();\n\tthis.rtpmap_string = stream.readString(count);\n});\n\n// file:src/parsing/pdin.js\nBoxParser.createFullBoxCtor(\"pdin\", \"ProgressiveDownloadInfoBox\", function(stream) {\n\tvar count = (this.size - this.hdr_size)/8;\n\tthis.rate = [];\n\tthis.initial_delay = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.rate[i] = stream.readUint32();\n\t\tthis.initial_delay[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/pitm.js\nBoxParser.createFullBoxCtor(\"pitm\", \"PrimaryItemBox\", function(stream) {\n\tif (this.version === 0) {\n\t\tthis.item_id = stream.readUint16();\n\t} else {\n\t\tthis.item_id = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/pixi.js\nBoxParser.createFullBoxCtor(\"pixi\", \"PixelInformationProperty\", function(stream) {\n\tvar i;\n\tthis.num_channels = stream.readUint8();\n\tthis.bits_per_channels = [];\n\tfor (i = 0; i < this.num_channels; i++) {\n\t\tthis.bits_per_channels[i] = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/pmax.js\nBoxParser.createBoxCtor(\"pmax\", \"hintlargestpacket\", function(stream) {\n\tthis.bytes = stream.readUint32();\n});\n\n// file:src/parsing/prdi.js\nBoxParser.createFullBoxCtor(\"prdi\", \"ProgressiveDerivedImageItemInformationProperty\", function(stream) {\n\tthis.step_count = stream.readUint16();\n\tthis.item_count = [];\n\tif (this.flags & 0x2) {\n\t\tfor (var i = 0; i < this.step_count; i++) {\n\t\t\tthis.item_count[i] = stream.readUint16();\n\t\t}\n\t}\n});// file:src/parsing/prft.js\nBoxParser.createFullBoxCtor(\"prft\", \"ProducerReferenceTimeBox\", function(stream) {\n\tthis.ref_track_id = stream.readUint32();\n\tthis.ntp_timestamp = stream.readUint64();\n\tif (this.version === 0) {\n\t\tthis.media_time = stream.readUint32();\n\t} else {\n\t\tthis.media_time = stream.readUint64();\n\t}\n});\n\n// file:src/parsing/pssh.js\nBoxParser.createFullBoxCtor(\"pssh\", \"ProtectionSystemSpecificHeaderBox\", function(stream) {\n\tthis.system_id = BoxParser.parseHex16(stream);\n\tif (this.version > 0) {\n\t\tvar count = stream.readUint32();\n\t\tthis.kid = [];\n\t\tfor (var i = 0; i < count; i++) {\n\t\t\tthis.kid[i] = BoxParser.parseHex16(stream);\n\t\t}\n\t}\n\tvar datasize = stream.readUint32();\n\tif (datasize > 0) {\n\t\tthis.data = stream.readUint8Array(datasize);\n\t}\n});\n\n// file:src/parsing/qt/clef.js\nBoxParser.createFullBoxCtor(\"clef\", \"TrackCleanApertureDimensionsBox\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/enof.js\nBoxParser.createFullBoxCtor(\"enof\", \"TrackEncodedPixelsDimensionsBox\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/prof.js\nBoxParser.createFullBoxCtor(\"prof\", \"TrackProductionApertureDimensionsBox\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/tapt.js\nBoxParser.createContainerBoxCtor(\"tapt\", \"TrackApertureModeDimensionsBox\", null, [ \"clef\", \"prof\", \"enof\"]);// file:src/parsing/rtp.js\nBoxParser.createBoxCtor(\"rtp \", \"rtpmoviehintinformation\", function(stream) {\n\tthis.descriptionformat = stream.readString(4);\n\tthis.sdptext = stream.readString(this.size - this.hdr_size - 4);\n});\n\n// file:src/parsing/saio.js\nBoxParser.createFullBoxCtor(\"saio\", \"SampleAuxiliaryInformationOffsetsBox\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.aux_info_type = stream.readString(4);\n\t\tthis.aux_info_type_parameter = stream.readUint32();\n\t}\n\tvar count = stream.readUint32();\n\tthis.offset = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tif (this.version === 0) {\n\t\t\tthis.offset[i] = stream.readUint32();\n\t\t} else {\n\t\t\tthis.offset[i] = stream.readUint64();\n\t\t}\n\t}\n});\n// file:src/parsing/saiz.js\nBoxParser.createFullBoxCtor(\"saiz\", \"SampleAuxiliaryInformationSizesBox\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.aux_info_type = stream.readString(4);\n\t\tthis.aux_info_type_parameter = stream.readUint32();\n\t}\n\tthis.default_sample_info_size = stream.readUint8();\n\tthis.sample_count = stream.readUint32();\n\tthis.sample_info_size = [];\n\tif (this.default_sample_info_size === 0) {\n\t\tfor (var i = 0; i < this.sample_count; i++) {\n\t\t\tthis.sample_info_size[i] = stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/sampleentries/mett.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"mett\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/metx.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"metx\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.namespace = stream.readCString();\n\tthis.schema_location = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/sbtt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"sbtt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/stpp.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"stpp\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.namespace = stream.readCString();\n\tthis.schema_location = stream.readCString();\n\tthis.auxiliary_mime_types = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/stxt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"stxt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/tx3g.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"tx3g\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.displayFlags = stream.readUint32();\n\tthis.horizontal_justification = stream.readInt8();\n\tthis.vertical_justification = stream.readInt8();\n\tthis.bg_color_rgba = stream.readUint8Array(4);\n\tthis.box_record = stream.readInt16Array(4);\n\tthis.style_record = stream.readUint8Array(12);\n\tthis.parseFooter(stream);\n});\n// file:src/parsing/sampleentries/wvtt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"wvtt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/samplegroups/alst.js\nBoxParser.createSampleGroupCtor(\"alst\", function(stream) {\n\tvar i;\n\tvar roll_count = stream.readUint16();\n\tthis.first_output_sample = stream.readUint16();\n\tthis.sample_offset = [];\n\tfor (i = 0; i < roll_count; i++) {\n\t\tthis.sample_offset[i] = stream.readUint32();\n\t}\n\tvar remaining = this.description_length - 4 - 4*roll_count;\n\tthis.num_output_samples = [];\n\tthis.num_total_samples = [];\n\tfor (i = 0; i < remaining/4; i++) {\n\t\tthis.num_output_samples[i] = stream.readUint16();\n\t\tthis.num_total_samples[i] = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/samplegroups/avll.js\nBoxParser.createSampleGroupCtor(\"avll\", function(stream) {\n\tthis.layerNumber = stream.readUint8();\n\tthis.accurateStatisticsFlag = stream.readUint8();\n\tthis.avgBitRate = stream.readUint16();\n\tthis.avgFrameRate = stream.readUint16();\n});\n\n// file:src/parsing/samplegroups/avss.js\nBoxParser.createSampleGroupCtor(\"avss\", function(stream) {\n\tthis.subSequenceIdentifier = stream.readUint16();\n\tthis.layerNumber = stream.readUint8();\n\tvar tmp_byte = stream.readUint8();\n\tthis.durationFlag = tmp_byte >> 7;\n\tthis.avgRateFlag = (tmp_byte >> 6) & 0x1;\n\tif (this.durationFlag) {\n\t\tthis.duration = stream.readUint32();\n\t}\n\tif (this.avgRateFlag) {\n\t\tthis.accurateStatisticsFlag = stream.readUint8();\n\t\tthis.avgBitRate = stream.readUint16();\n\t\tthis.avgFrameRate = stream.readUint16();\n\t}\n\tthis.dependency = [];\n\tvar numReferences = stream.readUint8();\n\tfor (var i = 0; i < numReferences; i++) {\n\t\tvar dependencyInfo = {};\n\t\tthis.dependency.push(dependencyInfo);\n\t\tdependencyInfo.subSeqDirectionFlag = stream.readUint8();\n\t\tdependencyInfo.layerNumber = stream.readUint8();\n\t\tdependencyInfo.subSequenceIdentifier = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/samplegroups/dtrt.js\nBoxParser.createSampleGroupCtor(\"dtrt\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/mvif.js\nBoxParser.createSampleGroupCtor(\"mvif\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/prol.js\nBoxParser.createSampleGroupCtor(\"prol\", function(stream) {\n\tthis.roll_distance = stream.readInt16();\n});\n\n// file:src/parsing/samplegroups/rap.js\nBoxParser.createSampleGroupCtor(\"rap \", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.num_leading_samples_known = tmp_byte >> 7;\n\tthis.num_leading_samples = tmp_byte & 0x7F;\n});\n\n// file:src/parsing/samplegroups/rash.js\nBoxParser.createSampleGroupCtor(\"rash\", function(stream) {\n\tthis.operation_point_count = stream.readUint16();\n\tif (this.description_length !== 2+(this.operation_point_count === 1?2:this.operation_point_count*6)+9) {\n\t\tLog.warn(\"BoxParser\", \"Mismatch in \"+this.grouping_type+\" sample group length\");\n\t\tthis.data = stream.readUint8Array(this.description_length-2);\n\t} else {\n\t\tif (this.operation_point_count === 1) {\n\t\t\tthis.target_rate_share = stream.readUint16();\n\t\t} else {\n\t\t\tthis.target_rate_share = [];\n\t\t\tthis.available_bitrate = [];\n\t\t\tfor (var i = 0; i < this.operation_point_count; i++) {\n\t\t\t\tthis.available_bitrate[i] = stream.readUint32();\n\t\t\t\tthis.target_rate_share[i] = stream.readUint16();\n\t\t\t}\n\t\t}\n\t\tthis.maximum_bitrate = stream.readUint32();\n\t\tthis.minimum_bitrate = stream.readUint32();\n\t\tthis.discard_priority = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/samplegroups/roll.js\nBoxParser.createSampleGroupCtor(\"roll\", function(stream) {\n\tthis.roll_distance = stream.readInt16();\n});\n\n// file:src/parsing/samplegroups/samplegroup.js\nBoxParser.SampleGroupEntry.prototype.parse = function(stream) {\n\tLog.warn(\"BoxParser\", \"Unknown Sample Group type: \"+this.grouping_type);\n\tthis.data = stream.readUint8Array(this.description_length);\n}\n\n// file:src/parsing/samplegroups/scif.js\nBoxParser.createSampleGroupCtor(\"scif\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/scnm.js\nBoxParser.createSampleGroupCtor(\"scnm\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/seig.js\nBoxParser.createSampleGroupCtor(\"seig\", function(stream) {\n\tthis.reserved = stream.readUint8();\n\tvar tmp = stream.readUint8();\n\tthis.crypt_byte_block = tmp >> 4;\n\tthis.skip_byte_block = tmp & 0xF;\n\tthis.isProtected = stream.readUint8();\n\tthis.Per_Sample_IV_Size = stream.readUint8();\n\tthis.KID = BoxParser.parseHex16(stream);\n\tthis.constant_IV_size = 0;\n\tthis.constant_IV = 0;\n\tif (this.isProtected === 1 && this.Per_Sample_IV_Size === 0) {\n\t\tthis.constant_IV_size = stream.readUint8();\n\t\tthis.constant_IV = stream.readUint8Array(this.constant_IV_size);\n\t}\n});\n\n// file:src/parsing/samplegroups/stsa.js\nBoxParser.createSampleGroupCtor(\"stsa\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/sync.js\nBoxParser.createSampleGroupCtor(\"sync\", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.NAL_unit_type = tmp_byte & 0x3F;\n});\n\n// file:src/parsing/samplegroups/tele.js\nBoxParser.createSampleGroupCtor(\"tele\", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.level_independently_decodable = tmp_byte >> 7;\n});\n\n// file:src/parsing/samplegroups/tsas.js\nBoxParser.createSampleGroupCtor(\"tsas\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/tscl.js\nBoxParser.createSampleGroupCtor(\"tscl\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/vipr.js\nBoxParser.createSampleGroupCtor(\"vipr\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/sbgp.js\nBoxParser.createFullBoxCtor(\"sbgp\", \"SampleToGroupBox\", function(stream) {\n\tthis.grouping_type = stream.readString(4);\n\tif (this.version === 1) {\n\t\tthis.grouping_type_parameter = stream.readUint32();\n\t} else {\n\t\tthis.grouping_type_parameter = 0;\n\t}\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry = {};\n\t\tthis.entries.push(entry);\n\t\tentry.sample_count = stream.readInt32();\n\t\tentry.group_description_index = stream.readInt32();\n\t}\n});\n\n// file:src/parsing/sbpm.js\nfunction Pixel(row, col) {\n\tthis.bad_pixel_row = row;\n\tthis.bad_pixel_column = col;\n}\n\nPixel.prototype.toString = function pixelToString() {\n\treturn \"[row: \" + this.bad_pixel_row + \", column: \" + this.bad_pixel_column + \"]\";\n}\n\nBoxParser.createFullBoxCtor(\"sbpm\", \"SensorBadPixelsMapBox\", function(stream) {\n\tvar i;\n\tthis.component_count = stream.readUint16();\n this.component_index = [];\n for (i = 0; i < this.component_count; i++) {\n this.component_index.push(stream.readUint16());\n }\n\tvar flags = stream.readUint8();\n\tthis.correction_applied = (0x80 == (flags & 0x80));\n\tthis.num_bad_rows = stream.readUint32();\n\tthis.num_bad_cols = stream.readUint32();\n\tthis.num_bad_pixels = stream.readUint32();\n\tthis.bad_rows = [];\n\tthis.bad_columns = [];\n\tthis.bad_pixels = [];\n\tfor (i = 0; i < this.num_bad_rows; i++) {\n\t\tthis.bad_rows.push(stream.readUint32());\n\t}\n\tfor (i = 0; i < this.num_bad_cols; i++) {\n\t\tthis.bad_columns.push(stream.readUint32());\n\t}\n\tfor (i = 0; i < this.num_bad_pixels; i++) {\n\t\tvar row = stream.readUint32();\n\t\tvar col = stream.readUint32();\n\t\tthis.bad_pixels.push(new Pixel(row, col));\n\t}\n});\n\n// file:src/parsing/schm.js\nBoxParser.createFullBoxCtor(\"schm\", \"SchemeTypeBox\", function(stream) {\n\tthis.scheme_type = stream.readString(4);\n\tthis.scheme_version = stream.readUint32();\n\tif (this.flags & 0x000001) {\n\t\tthis.scheme_uri = stream.readString(this.size - this.hdr_size - 8);\n\t}\n});\n\n// file:src/parsing/sdp.js\nBoxParser.createBoxCtor(\"sdp \", \"rtptracksdphintinformation\", function(stream) {\n\tthis.sdptext = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/sdtp.js\nBoxParser.createFullBoxCtor(\"sdtp\", \"SampleDependencyTypeBox\", function(stream) {\n\tvar tmp_byte;\n\tvar count = (this.size - this.hdr_size);\n\tthis.is_leading = [];\n\tthis.sample_depends_on = [];\n\tthis.sample_is_depended_on = [];\n\tthis.sample_has_redundancy = [];\n\tfor (var i = 0; i < count; i++) {\n\t\ttmp_byte = stream.readUint8();\n\t\tthis.is_leading[i] = tmp_byte >> 6;\n\t\tthis.sample_depends_on[i] = (tmp_byte >> 4) & 0x3;\n\t\tthis.sample_is_depended_on[i] = (tmp_byte >> 2) & 0x3;\n\t\tthis.sample_has_redundancy[i] = tmp_byte & 0x3;\n\t}\n});\n\n// file:src/parsing/senc.js\n// Cannot be fully parsed because Per_Sample_IV_Size needs to be known\r\nBoxParser.createFullBoxCtor(\"senc\", \"SampleEncryptionBox\" /*, function(stream) {\r\n\tthis.parseFullHeader(stream);\r\n\tvar sample_count = stream.readUint32();\r\n\tthis.samples = [];\r\n\tfor (var i = 0; i < sample_count; i++) {\r\n\t\tvar sample = {};\r\n\t\t// tenc.default_Per_Sample_IV_Size or seig.Per_Sample_IV_Size\r\n\t\tsample.InitializationVector = this.readUint8Array(Per_Sample_IV_Size*8);\r\n\t\tif (this.flags & 0x2) {\r\n\t\t\tsample.subsamples = [];\r\n\t\t\tsubsample_count = stream.readUint16();\r\n\t\t\tfor (var j = 0; j < subsample_count; j++) {\r\n\t\t\t\tvar subsample = {};\r\n\t\t\t\tsubsample.BytesOfClearData = stream.readUint16();\r\n\t\t\t\tsubsample.BytesOfProtectedData = stream.readUint32();\r\n\t\t\t\tsample.subsamples.push(subsample);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// TODO\r\n\t\tthis.samples.push(sample);\r\n\t}\r\n}*/);\r\n// file:src/parsing/sgpd.js\nBoxParser.createFullBoxCtor(\"sgpd\", \"SampleGroupDescriptionBox\", function(stream) {\n\tthis.grouping_type = stream.readString(4);\n\tLog.debug(\"BoxParser\", \"Found Sample Groups of type \"+this.grouping_type);\n\tif (this.version === 1) {\n\t\tthis.default_length = stream.readUint32();\n\t} else {\n\t\tthis.default_length = 0;\n\t}\n\tif (this.version >= 2) {\n\t\tthis.default_group_description_index = stream.readUint32();\n\t}\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry;\n\t\tif (BoxParser[this.grouping_type+\"SampleGroupEntry\"]) {\n\t\t\tentry = new BoxParser[this.grouping_type+\"SampleGroupEntry\"](this.grouping_type);\n\t\t} else {\n\t\t\tentry = new BoxParser.SampleGroupEntry(this.grouping_type);\n\t\t}\n\t\tthis.entries.push(entry);\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tentry.description_length = stream.readUint32();\n\t\t\t} else {\n\t\t\t\tentry.description_length = this.default_length;\n\t\t\t}\n\t\t} else {\n\t\t\tentry.description_length = this.default_length;\n\t\t}\n\t\tif (entry.write === BoxParser.SampleGroupEntry.prototype.write) {\n\t\t\tLog.info(\"BoxParser\", \"SampleGroup for type \"+this.grouping_type+\" writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t// storing data\n\t\t\tentry.data = stream.readUint8Array(entry.description_length);\n\t\t\t// rewinding\n\t\t\tstream.position -= entry.description_length;\n\t\t}\n\t\tentry.parse(stream);\n\t}\n});\n\n// file:src/parsing/sidx.js\nBoxParser.createFullBoxCtor(\"sidx\", \"CompressedSegmentIndexBox\", function(stream) {\n\tthis.reference_ID = stream.readUint32();\n\tthis.timescale = stream.readUint32();\n\tif (this.version === 0) {\n\t\tthis.earliest_presentation_time = stream.readUint32();\n\t\tthis.first_offset = stream.readUint32();\n\t} else {\n\t\tthis.earliest_presentation_time = stream.readUint64();\n\t\tthis.first_offset = stream.readUint64();\n\t}\n\tstream.readUint16();\n\tthis.references = [];\n\tvar count = stream.readUint16();\n\tfor (var i = 0; i < count; i++) {\n\t\tvar ref = {};\n\t\tthis.references.push(ref);\n\t\tvar tmp_32 = stream.readUint32();\n\t\tref.reference_type = (tmp_32 >> 31) & 0x1;\n\t\tref.referenced_size = tmp_32 & 0x7FFFFFFF;\n\t\tref.subsegment_duration = stream.readUint32();\n\t\ttmp_32 = stream.readUint32();\n\t\tref.starts_with_SAP = (tmp_32 >> 31) & 0x1;\n\t\tref.SAP_type = (tmp_32 >> 28) & 0x7;\n\t\tref.SAP_delta_time = tmp_32 & 0xFFFFFFF;\n\t}\n});\n\n// file:src/parsing/singleitemtypereference.js\nBoxParser.SingleItemTypeReferenceBox = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.SingleItemTypeReferenceBox.prototype = new BoxParser.Box();\nBoxParser.SingleItemTypeReferenceBox.prototype.parse = function(stream) {\n\tthis.from_item_ID = stream.readUint16();\n\tvar count = stream.readUint16();\n\tthis.references = [];\n\tfor(var i = 0; i < count; i++) {\n\t\tthis.references[i] = {};\n\t\tthis.references[i].to_item_ID = stream.readUint16();\n\t}\n}\n\n// file:src/parsing/singleitemtypereferencelarge.js\nBoxParser.SingleItemTypeReferenceBoxLarge = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.SingleItemTypeReferenceBoxLarge.prototype = new BoxParser.Box();\nBoxParser.SingleItemTypeReferenceBoxLarge.prototype.parse = function(stream) {\n\tthis.from_item_ID = stream.readUint32();\n\tvar count = stream.readUint16();\n\tthis.references = [];\n\tfor(var i = 0; i < count; i++) {\n\t\tthis.references[i] = {};\n\t\tthis.references[i].to_item_ID = stream.readUint32();\n\t}\n}\n\n// file:src/parsing/SmDm.js\nBoxParser.createFullBoxCtor(\"SmDm\", \"SMPTE2086MasteringDisplayMetadataBox\", function(stream) {\n\tthis.primaryRChromaticity_x = stream.readUint16();\n this.primaryRChromaticity_y = stream.readUint16();\n this.primaryGChromaticity_x = stream.readUint16();\n this.primaryGChromaticity_y = stream.readUint16();\n this.primaryBChromaticity_x = stream.readUint16();\n this.primaryBChromaticity_y = stream.readUint16();\n this.whitePointChromaticity_x = stream.readUint16();\n this.whitePointChromaticity_y = stream.readUint16();\n this.luminanceMax = stream.readUint32();\n this.luminanceMin = stream.readUint32();\n});\n\n// file:src/parsing/smhd.js\nBoxParser.createFullBoxCtor(\"smhd\", \"SoundMediaHeaderBox\", function(stream) {\n\tthis.balance = stream.readUint16();\n\tstream.readUint16();\n});\n\n// file:src/parsing/ssix.js\nBoxParser.createFullBoxCtor(\"ssix\", \"CompressedSubsegmentIndexBox\", function(stream) {\n\tthis.subsegments = [];\n\tvar subsegment_count = stream.readUint32();\n\tfor (var i = 0; i < subsegment_count; i++) {\n\t\tvar subsegment = {};\n\t\tthis.subsegments.push(subsegment);\n\t\tsubsegment.ranges = [];\n\t\tvar range_count = stream.readUint32();\n\t\tfor (var j = 0; j < range_count; j++) {\n\t\t\tvar range = {};\n\t\t\tsubsegment.ranges.push(range);\n\t\t\trange.level = stream.readUint8();\n\t\t\trange.range_size = stream.readUint24();\n\t\t}\n\t}\n});\n\n// file:src/parsing/stco.js\nBoxParser.createFullBoxCtor(\"stco\", \"ChunkOffsetBox\", function(stream) {\n\tvar entry_count;\n\tentry_count = stream.readUint32();\n\tthis.chunk_offsets = [];\n\tif (this.version === 0) {\n\t\tfor (var i = 0; i < entry_count; i++) {\n\t\t\tthis.chunk_offsets.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stdp.js\nBoxParser.createFullBoxCtor(\"stdp\", \"DegradationPriorityBox\", function(stream) {\n\tvar count = (this.size - this.hdr_size)/2;\n\tthis.priority = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.priority[i] = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/sthd.js\nBoxParser.createFullBoxCtor(\"sthd\", \"SubtitleMediaHeaderBox\");\n\n// file:src/parsing/stri.js\nBoxParser.createFullBoxCtor(\"stri\", \"SubTrackInformationBox\", function(stream) {\n\tthis.switch_group = stream.readUint16();\n\tthis.alternate_group = stream.readUint16();\n\tthis.sub_track_id = stream.readUint32();\n\tvar count = (this.size - this.hdr_size - 8)/4;\n\tthis.attribute_list = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.attribute_list[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/stsc.js\nBoxParser.createFullBoxCtor(\"stsc\", \"SampleToChunkBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.first_chunk = [];\n\tthis.samples_per_chunk = [];\n\tthis.sample_description_index = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.first_chunk.push(stream.readUint32());\n\t\t\tthis.samples_per_chunk.push(stream.readUint32());\n\t\t\tthis.sample_description_index.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stsd.js\nBoxParser.createFullBoxCtor(\"stsd\", \"SampleDescriptionBox\", function(stream) {\n\tvar i;\n\tvar ret;\n\tvar entryCount;\n\tvar box;\n\tthis.entries = [];\n\tentryCount = stream.readUint32();\n\tfor (i = 1; i <= entryCount; i++) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (BoxParser[ret.type+\"SampleEntry\"]) {\n\t\t\t\tbox = new BoxParser[ret.type+\"SampleEntry\"](ret.size);\n\t\t\t\tbox.hdr_size = ret.hdr_size;\n\t\t\t\tbox.start = ret.start;\n\t\t\t} else {\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown sample entry type: \"+ret.type);\n\t\t\t\tbox = new BoxParser.SampleEntry(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t}\n\t\t\tif (box.write === BoxParser.SampleEntry.prototype.write) {\n\t\t\t\tLog.info(\"BoxParser\", \"SampleEntry \"+box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.entries.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/stsg.js\nBoxParser.createFullBoxCtor(\"stsg\", \"SubTrackSampleGroupBox\", function(stream) {\n\tthis.grouping_type = stream.readUint32();\n\tvar count = stream.readUint16();\n\tthis.group_description_index = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.group_description_index[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/stsh.js\nBoxParser.createFullBoxCtor(\"stsh\", \"ShadowSyncSampleBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.shadowed_sample_numbers = [];\n\tthis.sync_sample_numbers = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.shadowed_sample_numbers.push(stream.readUint32());\n\t\t\tthis.sync_sample_numbers.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stss.js\nBoxParser.createFullBoxCtor(\"stss\", \"SyncSampleBox\", function(stream) {\n\tvar i;\n\tvar entry_count;\n\tentry_count = stream.readUint32();\n\tif (this.version === 0) {\n\t\tthis.sample_numbers = [];\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_numbers.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stsz.js\nBoxParser.createFullBoxCtor(\"stsz\", \"SampleSizeBox\", function(stream) {\n\tvar i;\n\tthis.sample_sizes = [];\n\tif (this.version === 0) {\n\t\tthis.sample_size = stream.readUint32();\n\t\tthis.sample_count = stream.readUint32();\n\t\tfor (i = 0; i < this.sample_count; i++) {\n\t\t\tif (this.sample_size === 0) {\n\t\t\t\tthis.sample_sizes.push(stream.readUint32());\n\t\t\t} else {\n\t\t\t\tthis.sample_sizes[i] = this.sample_size;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/stts.js\nBoxParser.createFullBoxCtor(\"stts\", \"TimeToSampleBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tvar delta;\n\tentry_count = stream.readUint32();\n\tthis.sample_counts = [];\n\tthis.sample_deltas = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_counts.push(stream.readUint32());\n\t\t\tdelta = stream.readInt32();\n\t\t\tif (delta < 0) {\n\t\t\t\tLog.warn(\"BoxParser\", \"File uses negative stts sample delta, using value 1 instead, sync may be lost!\");\n\t\t\t\tdelta = 1;\n\t\t\t}\n\t\t\tthis.sample_deltas.push(delta);\n\t\t}\n\t}\n});\n\n// file:src/parsing/stvi.js\nBoxParser.createFullBoxCtor(\"stvi\", \"StereoVideoBox\", function(stream) {\n\tvar tmp32 = stream.readUint32();\n\tthis.single_view_allowed = tmp32 & 0x3;\n\tthis.stereo_scheme = stream.readUint32();\n\tvar length = stream.readUint32();\n\tthis.stereo_indication_type = stream.readString(length);\n\tvar ret;\n\tvar box;\n\tthis.boxes = [];\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.boxes.push(box);\n\t\t\tthis[box.type] = box;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/styp.js\nBoxParser.createBoxCtor(\"styp\", \"SegmentTypeBox\", function(stream) {\n\tBoxParser.ftypBox.prototype.parse.call(this, stream);\n});\n\n// file:src/parsing/stz2.js\nBoxParser.createFullBoxCtor(\"stz2\", \"CompactSampleSizeBox\", function(stream) {\n\tvar i;\n\tvar sample_size;\n\tvar sample_count;\n\tthis.sample_sizes = [];\n\tif (this.version === 0) {\n\t\tthis.reserved = stream.readUint24();\n\t\tthis.field_size = stream.readUint8();\n\t\tsample_count = stream.readUint32();\n\t\tif (this.field_size === 4) {\n\t\t\tfor (i = 0; i < sample_count; i+=2) {\n\t\t\t\tvar tmp = stream.readUint8();\n\t\t\t\tthis.sample_sizes[i] = (tmp >> 4) & 0xF;\n\t\t\t\tthis.sample_sizes[i+1] = tmp & 0xF;\n\t\t\t}\n\t\t} else if (this.field_size === 8) {\n\t\t\tfor (i = 0; i < sample_count; i++) {\n\t\t\t\tthis.sample_sizes[i] = stream.readUint8();\n\t\t\t}\n\t\t} else if (this.field_size === 16) {\n\t\t\tfor (i = 0; i < sample_count; i++) {\n\t\t\t\tthis.sample_sizes[i] = stream.readUint16();\n\t\t\t}\n\t\t} else {\n\t\t\tLog.error(\"BoxParser\", \"Error in length field in stz2 box\");\n\t\t}\n\t}\n});\n\n// file:src/parsing/subs.js\nBoxParser.createFullBoxCtor(\"subs\", \"SubSampleInformationBox\", function(stream) {\n\tvar i,j;\n\tvar entry_count;\n\tvar subsample_count;\n\tentry_count = stream.readUint32();\n\tthis.entries = [];\n\tfor (i = 0; i < entry_count; i++) {\n\t\tvar sampleInfo = {};\n\t\tthis.entries[i] = sampleInfo;\n\t\tsampleInfo.sample_delta = stream.readUint32();\n\t\tsampleInfo.subsamples = [];\n\t\tsubsample_count = stream.readUint16();\n\t\tif (subsample_count>0) {\n\t\t\tfor (j = 0; j < subsample_count; j++) {\n\t\t\t\tvar subsample = {};\n\t\t\t\tsampleInfo.subsamples.push(subsample);\n\t\t\t\tif (this.version == 1) {\n\t\t\t\t\tsubsample.size = stream.readUint32();\n\t\t\t\t} else {\n\t\t\t\t\tsubsample.size = stream.readUint16();\n\t\t\t\t}\n\t\t\t\tsubsample.priority = stream.readUint8();\n\t\t\t\tsubsample.discardable = stream.readUint8();\n\t\t\t\tsubsample.codec_specific_parameters = stream.readUint32();\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/tenc.js\nBoxParser.createFullBoxCtor(\"tenc\", \"TrackEncryptionBox\", function(stream) {\n\tstream.readUint8(); // reserved\n\tif (this.version === 0) {\n\t\tstream.readUint8();\n\t} else {\n\t\tvar tmp = stream.readUint8();\n\t\tthis.default_crypt_byte_block = (tmp >> 4) & 0xF;\n\t\tthis.default_skip_byte_block = tmp & 0xF;\n\t}\n\tthis.default_isProtected = stream.readUint8();\n\tthis.default_Per_Sample_IV_Size = stream.readUint8();\n\tthis.default_KID = BoxParser.parseHex16(stream);\n\tif (this.default_isProtected === 1 && this.default_Per_Sample_IV_Size === 0) {\n\t\tthis.default_constant_IV_size = stream.readUint8();\n\t\tthis.default_constant_IV = stream.readUint8Array(this.default_constant_IV_size);\n\t}\n});// file:src/parsing/tfdt.js\nBoxParser.createFullBoxCtor(\"tfdt\", \"TrackFragmentBaseMediaDecodeTimeBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.baseMediaDecodeTime = stream.readUint64();\n\t} else {\n\t\tthis.baseMediaDecodeTime = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/tfhd.js\nBoxParser.createFullBoxCtor(\"tfhd\", \"TrackFragmentHeaderBox\", function(stream) {\n\tvar readBytes = 0;\n\tthis.track_id = stream.readUint32();\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET)) {\n\t\tthis.base_data_offset = stream.readUint64();\n\t\treadBytes += 8;\n\t} else {\n\t\tthis.base_data_offset = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC)) {\n\t\tthis.default_sample_description_index = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_description_index = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR)) {\n\t\tthis.default_sample_duration = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_duration = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE)) {\n\t\tthis.default_sample_size = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_size = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS)) {\n\t\tthis.default_sample_flags = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_flags = 0;\n\t}\n});\n\n// file:src/parsing/tfra.js\nBoxParser.createFullBoxCtor(\"tfra\", \"TrackFragmentRandomAccessBox\", function(stream) {\n\tthis.track_ID = stream.readUint32();\n\tstream.readUint24();\n\tvar tmp_byte = stream.readUint8();\n\tthis.length_size_of_traf_num = (tmp_byte >> 4) & 0x3;\n\tthis.length_size_of_trun_num = (tmp_byte >> 2) & 0x3;\n\tthis.length_size_of_sample_num = (tmp_byte) & 0x3;\n\tthis.entries = [];\n\tvar number_of_entries = stream.readUint32();\n\tfor (var i = 0; i < number_of_entries; i++) {\n\t\tif (this.version === 1) {\n\t\t\tthis.time = stream.readUint64();\n\t\t\tthis.moof_offset = stream.readUint64();\n\t\t} else {\n\t\t\tthis.time = stream.readUint32();\n\t\t\tthis.moof_offset = stream.readUint32();\n\t\t}\n\t\tthis.traf_number = stream[\"readUint\"+(8*(this.length_size_of_traf_num+1))]();\n\t\tthis.trun_number = stream[\"readUint\"+(8*(this.length_size_of_trun_num+1))]();\n\t\tthis.sample_number = stream[\"readUint\"+(8*(this.length_size_of_sample_num+1))]();\n\t}\n});\n\n// file:src/parsing/tkhd.js\nBoxParser.createFullBoxCtor(\"tkhd\", \"TrackHeaderBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.track_id = stream.readUint32();\n\t\tstream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.track_id = stream.readUint32();\n\t\tstream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tstream.readUint32Array(2);\n\tthis.layer = stream.readInt16();\n\tthis.alternate_group = stream.readInt16();\n\tthis.volume = stream.readInt16()>>8;\n\tstream.readUint16();\n\tthis.matrix = stream.readInt32Array(9);\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});\n\n// file:src/parsing/tmax.js\nBoxParser.createBoxCtor(\"tmax\", \"hintmaxrelativetime\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/tmin.js\nBoxParser.createBoxCtor(\"tmin\", \"hintminrelativetime\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/totl.js\nBoxParser.createBoxCtor(\"totl\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint32();\n});\n\n// file:src/parsing/tpay.js\nBoxParser.createBoxCtor(\"tpay\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint32();\n});\n\n// file:src/parsing/tpyl.js\nBoxParser.createBoxCtor(\"tpyl\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/TrackGroup.js\nBoxParser.TrackGroupTypeBox.prototype.parse = function(stream) {\n\tthis.parseFullHeader(stream);\n\tthis.track_group_id = stream.readUint32();\n}\n\n// file:src/parsing/trackgroups/msrc.js\nBoxParser.createTrackGroupCtor(\"msrc\");// file:src/parsing/TrakReference.js\nBoxParser.TrackReferenceTypeBox = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.TrackReferenceTypeBox.prototype = new BoxParser.Box();\nBoxParser.TrackReferenceTypeBox.prototype.parse = function(stream) {\n\tthis.track_ids = stream.readUint32Array((this.size-this.hdr_size)/4);\n}\n\n// file:src/parsing/tref.js\nBoxParser.trefBox.prototype.parse = function(stream) {\n\tvar ret;\n\tvar box;\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = new BoxParser.TrackReferenceTypeBox(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\t\t\tLog.info(\"BoxParser\", \"TrackReference \"+box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.boxes.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\n// file:src/parsing/trep.js\nBoxParser.createFullBoxCtor(\"trep\", \"TrackExtensionPropertiesBox\", function(stream) {\n\tthis.track_ID = stream.readUint32();\n\tthis.boxes = [];\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.boxes.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/trex.js\nBoxParser.createFullBoxCtor(\"trex\", \"TrackExtendsBox\", function(stream) {\n\tthis.track_id = stream.readUint32();\n\tthis.default_sample_description_index = stream.readUint32();\n\tthis.default_sample_duration = stream.readUint32();\n\tthis.default_sample_size = stream.readUint32();\n\tthis.default_sample_flags = stream.readUint32();\n});\n\n// file:src/parsing/trpy.js\nBoxParser.createBoxCtor(\"trpy\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/trun.js\nBoxParser.createFullBoxCtor(\"trun\", \"TrackRunBox\", function(stream) {\n\tvar readBytes = 0;\n\tthis.sample_count = stream.readUint32();\n\treadBytes+= 4;\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) ) {\n\t\tthis.data_offset = stream.readInt32(); //signed\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.data_offset = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) ) {\n\t\tthis.first_sample_flags = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.first_sample_flags = 0;\n\t}\n\tthis.sample_duration = [];\n\tthis.sample_size = [];\n\tthis.sample_flags = [];\n\tthis.sample_composition_time_offset = [];\n\tif (this.size - this.hdr_size > readBytes) {\n\t\tfor (var i = 0; i < this.sample_count; i++) {\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\t\tthis.sample_duration[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\t\tthis.sample_size[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\t\tthis.sample_flags[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\t\tif (this.version === 0) {\n\t\t\t\t\tthis.sample_composition_time_offset[i] = stream.readUint32();\n\t\t\t\t} else {\n\t\t\t\t\tthis.sample_composition_time_offset[i] = stream.readInt32(); //signed\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/tsel.js\nBoxParser.createFullBoxCtor(\"tsel\", \"TrackSelectionBox\", function(stream) {\n\tthis.switch_group = stream.readUint32();\n\tvar count = (this.size - this.hdr_size - 4)/4;\n\tthis.attribute_list = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.attribute_list[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/txtC.js\nBoxParser.createFullBoxCtor(\"txtC\", \"TextConfigBox\", function(stream) {\n\tthis.config = stream.readCString();\n});\n\n// file:src/parsing/tyco.js\nBoxParser.createBoxCtor(\"tyco\", \"TypeCombinationBox\", function(stream) {\n\tvar count = (this.size - this.hdr_size) / 4;\n\tthis.compatible_brands = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.compatible_brands[i] = stream.readString(4);\n\t}\n});\n\n// file:src/parsing/udes.js\nBoxParser.createFullBoxCtor(\"udes\", \"UserDescriptionProperty\", function(stream) {\n\tthis.lang = stream.readCString();\n\tthis.name = stream.readCString();\n\tthis.description = stream.readCString();\n\tthis.tags = stream.readCString();\n});\n\n// file:src/parsing/uncC.js\nBoxParser.createFullBoxCtor(\"uncC\", \"UncompressedFrameConfigBox\", function(stream) {\n var i;\n this.profile = stream.readString(4);\n if (this.version == 1) {\n // Nothing - just the profile\n } else if (this.version == 0) {\n this.component_count = stream.readUint32();\n this.component_index = [];\n this.component_bit_depth_minus_one = [];\n this.component_format = [];\n this.component_align_size = [];\n for (i = 0; i < this.component_count; i++) {\n this.component_index.push(stream.readUint16());\n this.component_bit_depth_minus_one.push(stream.readUint8());\n this.component_format.push(stream.readUint8());\n this.component_align_size.push(stream.readUint8());\n }\n this.sampling_type = stream.readUint8();\n this.interleave_type = stream.readUint8();\n this.block_size = stream.readUint8();\n var flags = stream.readUint8();\n this.component_little_endian = (flags >> 7) & 0x1;\n this.block_pad_lsb = (flags >> 6) & 0x1;\n this.block_little_endian = (flags >> 5) & 0x1;\n this.block_reversed = (flags >> 4) & 0x1;\n this.pad_unknown = (flags >> 3) & 0x1;\n this.pixel_size = stream.readUint32();\n this.row_align_size = stream.readUint32();\n this.tile_align_size = stream.readUint32();\n this.num_tile_cols_minus_one = stream.readUint32();\n this.num_tile_rows_minus_one = stream.readUint32();\n }\n});\n\n// file:src/parsing/url.js\nBoxParser.createFullBoxCtor(\"url \", \"DataEntryUrlBox\", function(stream) {\n\tif (this.flags !== 0x000001) {\n\t\tthis.location = stream.readCString();\n\t}\n});\n\n// file:src/parsing/urn.js\nBoxParser.createFullBoxCtor(\"urn \", \"DataEntryUrnBox\", function(stream) {\n\tthis.name = stream.readCString();\n\tif (this.size - this.hdr_size - this.name.length - 1 > 0) {\n\t\tthis.location = stream.readCString();\n\t}\n});\n\n// file:src/parsing/uuid/piff/piffLsm.js\nBoxParser.createUUIDBox(\"a5d40b30e81411ddba2f0800200c9a66\", \"LiveServerManifestBox\", true, false, function(stream) {\n this.LiveServerManifest = stream.readString(this.size - this.hdr_size)\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n});// file:src/parsing/uuid/piff/piffPssh.js\nBoxParser.createUUIDBox(\"d08a4f1810f34a82b6c832d8aba183d3\", \"PiffProtectionSystemSpecificHeaderBox\", true, false, function(stream) {\n\tthis.system_id = BoxParser.parseHex16(stream);\n\tvar datasize = stream.readUint32();\n\tif (datasize > 0) {\n\t\tthis.data = stream.readUint8Array(datasize);\n\t}\n});\n\n// file:src/parsing/uuid/piff/piffSenc.js\nBoxParser.createUUIDBox(\"a2394f525a9b4f14a2446c427c648df4\", \"PiffSampleEncryptionBox\", true, false /*, function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.AlgorithmID = stream.readUint24();\n\t\tthis.IV_size = stream.readUint8();\n\t\tthis.KID = BoxParser.parseHex16(stream);\n\t}\n\tvar sample_count = stream.readUint32();\n\tthis.samples = [];\n\tfor (var i = 0; i < sample_count; i++) {\n\t\tvar sample = {};\n\t\tsample.InitializationVector = this.readUint8Array(this.IV_size*8);\n\t\tif (this.flags & 0x2) {\n\t\t\tsample.subsamples = [];\n\t\t\tsample.NumberOfEntries = stream.readUint16();\n\t\t\tfor (var j = 0; j < sample.NumberOfEntries; j++) {\n\t\t\t\tvar subsample = {};\n\t\t\t\tsubsample.BytesOfClearData = stream.readUint16();\n\t\t\t\tsubsample.BytesOfProtectedData = stream.readUint32();\n\t\t\t\tsample.subsamples.push(subsample);\n\t\t\t}\n\t\t}\n\t\tthis.samples.push(sample);\n\t}\n}*/);\n// file:src/parsing/uuid/piff/piffTenc.js\nBoxParser.createUUIDBox(\"8974dbce7be74c5184f97148f9882554\", \"PiffTrackEncryptionBox\", true, false, function(stream) {\n\tthis.default_AlgorithmID = stream.readUint24();\n\tthis.default_IV_size = stream.readUint8();\n\tthis.default_KID = BoxParser.parseHex16(stream);\n});// file:src/parsing/uuid/piff/piffTfrf.js\nBoxParser.createUUIDBox(\"d4807ef2ca3946958e5426cb9e46a79f\", \"TfrfBox\", true, false, function(stream) {\n this.fragment_count = stream.readUint8();\n this.entries = [];\n\n for (var i = 0; i < this.fragment_count; i++) {\n var entry = {};\n var absolute_time = 0;\n var absolute_duration = 0;\n\n if (this.version === 1) {\n absolute_time = stream.readUint64();\n absolute_duration = stream.readUint64();\n } else {\n absolute_time = stream.readUint32();\n absolute_duration = stream.readUint32();\n }\n\n entry.absolute_time = absolute_time;\n entry.absolute_duration = absolute_duration;\n\n this.entries.push(entry);\n }\n});// file:src/parsing/uuid/piff/piffTfxd.js\nBoxParser.createUUIDBox(\"6d1d9b0542d544e680e2141daff757b2\", \"TfxdBox\", true, false, function(stream) {\n if (this.version === 1) {\n this.absolute_time = stream.readUint64();\n this.duration = stream.readUint64();\n } else {\n this.absolute_time = stream.readUint32();\n this.duration = stream.readUint32();\n }\n});// file:src/parsing/vmhd.js\nBoxParser.createFullBoxCtor(\"vmhd\", \"VideoMediaHeaderBox\", function(stream) {\n\tthis.graphicsmode = stream.readUint16();\n\tthis.opcolor = stream.readUint16Array(3);\n});\n\n// file:src/parsing/vpcC.js\nBoxParser.createFullBoxCtor(\"vpcC\", \"VPCodecConfigurationRecord\", function (stream) {\n\tvar tmp;\n\tif (this.version === 1) {\n\t\tthis.profile = stream.readUint8();\n\t\tthis.level = stream.readUint8();\n\t\ttmp = stream.readUint8();\n\t\tthis.bitDepth = tmp >> 4;\n\t\tthis.chromaSubsampling = (tmp >> 1) & 0x7;\n\t\tthis.videoFullRangeFlag = tmp & 0x1;\n\t\tthis.colourPrimaries = stream.readUint8();\n\t\tthis.transferCharacteristics = stream.readUint8();\n\t\tthis.matrixCoefficients = stream.readUint8();\n\t\tthis.codecIntializationDataSize = stream.readUint16();\n\t\tthis.codecIntializationData = stream.readUint8Array(this.codecIntializationDataSize);\n\t} else {\n\t\tthis.profile = stream.readUint8();\n\t\tthis.level = stream.readUint8();\n\t\ttmp = stream.readUint8();\n\t\tthis.bitDepth = (tmp >> 4) & 0xF;\n\t\tthis.colorSpace = tmp & 0xF;\n\t\ttmp = stream.readUint8();\n\t\tthis.chromaSubsampling = (tmp >> 4) & 0xF;\n\t\tthis.transferFunction = (tmp >> 1) & 0x7;\n\t\tthis.videoFullRangeFlag = tmp & 0x1;\n\t\tthis.codecIntializationDataSize = stream.readUint16();\n\t\tthis.codecIntializationData = stream.readUint8Array(this.codecIntializationDataSize);\n\t}\n});// file:src/parsing/vttC.js\nBoxParser.createBoxCtor(\"vttC\", \"WebVTTConfigurationBox\", function(stream) {\n\tthis.text = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/vvcC.js\nBoxParser.createFullBoxCtor(\"vvcC\", \"VvcConfigurationBox\", function (stream) {\n var i, j;\n\n // helper object to simplify extracting individual bits\n var bitReader = {\n held_bits: undefined,\n num_held_bits: 0,\n\n stream_read_1_bytes: function (strm) {\n this.held_bits = strm.readUint8();\n this.num_held_bits = 1 * 8;\n },\n stream_read_2_bytes: function (strm) {\n this.held_bits = strm.readUint16();\n this.num_held_bits = 2 * 8;\n },\n\n extract_bits: function (num_bits) {\n var ret = (this.held_bits >> (this.num_held_bits - num_bits)) & ((1 << num_bits) - 1);\n this.num_held_bits -= num_bits;\n return ret;\n }\n };\n\n // VvcDecoderConfigurationRecord\n bitReader.stream_read_1_bytes(stream);\n bitReader.extract_bits(5); // reserved\n this.lengthSizeMinusOne = bitReader.extract_bits(2);\n this.ptl_present_flag = bitReader.extract_bits(1);\n\n if (this.ptl_present_flag) {\n bitReader.stream_read_2_bytes(stream);\n this.ols_idx = bitReader.extract_bits(9);\n this.num_sublayers = bitReader.extract_bits(3);\n this.constant_frame_rate = bitReader.extract_bits(2);\n this.chroma_format_idc = bitReader.extract_bits(2);\n\n bitReader.stream_read_1_bytes(stream);\n this.bit_depth_minus8 = bitReader.extract_bits(3);\n bitReader.extract_bits(5); // reserved\n\n // VvcPTLRecord\n {\n bitReader.stream_read_2_bytes(stream);\n bitReader.extract_bits(2); // reserved\n this.num_bytes_constraint_info = bitReader.extract_bits(6);\n this.general_profile_idc = bitReader.extract_bits(7);\n this.general_tier_flag = bitReader.extract_bits(1);\n\n this.general_level_idc = stream.readUint8();\n\n bitReader.stream_read_1_bytes(stream);\n this.ptl_frame_only_constraint_flag = bitReader.extract_bits(1);\n this.ptl_multilayer_enabled_flag = bitReader.extract_bits(1);\n\n this.general_constraint_info = new Uint8Array(this.num_bytes_constraint_info);\n if (this.num_bytes_constraint_info) {\n for (i = 0; i < this.num_bytes_constraint_info - 1; i++) {\n var cnstr1 = bitReader.extract_bits(6);\n bitReader.stream_read_1_bytes(stream);\n var cnstr2 = bitReader.extract_bits(2);\n\n this.general_constraint_info[i] = ((cnstr1 << 2) | cnstr2);\n }\n this.general_constraint_info[this.num_bytes_constraint_info - 1] = bitReader.extract_bits(6);\n } else {\n //forbidden in spec!\n bitReader.extract_bits(6);\n }\n\n if (this.num_sublayers > 1) {\n bitReader.stream_read_1_bytes(stream);\n this.ptl_sublayer_present_mask = 0;\n for (j = this.num_sublayers - 2; j >= 0; --j) {\n var val = bitReader.extract_bits(1);\n this.ptl_sublayer_present_mask |= val << j;\n }\n for (j = this.num_sublayers; j <= 8 && this.num_sublayers > 1; ++j) {\n bitReader.extract_bits(1); // ptl_reserved_zero_bit\n }\n\n this.sublayer_level_idc = [];\n for (j = this.num_sublayers - 2; j >= 0; --j) {\n if (this.ptl_sublayer_present_mask & (1 << j)) {\n this.sublayer_level_idc[j] = stream.readUint8();\n }\n }\n }\n\n this.ptl_num_sub_profiles = stream.readUint8();\n this.general_sub_profile_idc = [];\n if (this.ptl_num_sub_profiles) {\n for (i = 0; i < this.ptl_num_sub_profiles; i++) {\n this.general_sub_profile_idc.push(stream.readUint32());\n }\n }\n } // end VvcPTLRecord\n\n this.max_picture_width = stream.readUint16();\n this.max_picture_height = stream.readUint16();\n this.avg_frame_rate = stream.readUint16();\n }\n\n var VVC_NALU_OPI = 12;\n var VVC_NALU_DEC_PARAM = 13;\n\n this.nalu_arrays = [];\n var num_of_arrays = stream.readUint8();\n for (i = 0; i < num_of_arrays; i++) {\n var nalu_array = [];\n this.nalu_arrays.push(nalu_array);\n\n bitReader.stream_read_1_bytes(stream);\n nalu_array.completeness = bitReader.extract_bits(1);\n bitReader.extract_bits(2); // reserved\n nalu_array.nalu_type = bitReader.extract_bits(5);\n\n var numNalus = 1;\n if (nalu_array.nalu_type != VVC_NALU_DEC_PARAM && nalu_array.nalu_type != VVC_NALU_OPI) {\n numNalus = stream.readUint16();\n }\n\n for (j = 0; j < numNalus; j++) {\n var len = stream.readUint16();\n nalu_array.push({\n data: stream.readUint8Array(len),\n length: len\n });\n }\n }\n});\n// file:src/parsing/vvnC.js\nBoxParser.createFullBoxCtor(\"vvnC\", \"VvcNALUConfigBox\", function (stream) {\n // VvcNALUConfigBox\n var tmp = strm.readUint8();\n this.lengthSizeMinusOne = (tmp & 0x3);\n});\n// file:src/box-codecs.js\nBoxParser.SampleEntry.prototype.isVideo = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isAudio = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isSubtitle = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isMetadata = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isHint = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.getCodec = function() {\n\treturn this.type.replace('.','');\n}\n\nBoxParser.SampleEntry.prototype.getWidth = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getHeight = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getChannelCount = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getSampleRate = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getSampleSize = function() {\n\treturn \"\";\n}\n\nBoxParser.VisualSampleEntry.prototype.isVideo = function() {\n\treturn true;\n}\n\nBoxParser.VisualSampleEntry.prototype.getWidth = function() {\n\treturn this.width;\n}\n\nBoxParser.VisualSampleEntry.prototype.getHeight = function() {\n\treturn this.height;\n}\n\nBoxParser.AudioSampleEntry.prototype.isAudio = function() {\n\treturn true;\n}\n\nBoxParser.AudioSampleEntry.prototype.getChannelCount = function() {\n\treturn this.channel_count;\n}\n\nBoxParser.AudioSampleEntry.prototype.getSampleRate = function() {\n\treturn this.samplerate;\n}\n\nBoxParser.AudioSampleEntry.prototype.getSampleSize = function() {\n\treturn this.samplesize;\n}\n\nBoxParser.SubtitleSampleEntry.prototype.isSubtitle = function() {\n\treturn true;\n}\n\nBoxParser.MetadataSampleEntry.prototype.isMetadata = function() {\n\treturn true;\n}\n\n\nBoxParser.decimalToHex = function(d, padding) {\n\tvar hex = Number(d).toString(16);\n\tpadding = typeof (padding) === \"undefined\" || padding === null ? padding = 2 : padding;\n\twhile (hex.length < padding) {\n\t\thex = \"0\" + hex;\n\t}\n\treturn hex;\n}\n\nBoxParser.avc1SampleEntry.prototype.getCodec =\nBoxParser.avc2SampleEntry.prototype.getCodec =\nBoxParser.avc3SampleEntry.prototype.getCodec =\nBoxParser.avc4SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.avcC) {\n\t\treturn baseCodec+\".\"+BoxParser.decimalToHex(this.avcC.AVCProfileIndication)+\n\t\t\t\t\t\t \"\"+BoxParser.decimalToHex(this.avcC.profile_compatibility)+\n\t\t\t\t\t\t \"\"+BoxParser.decimalToHex(this.avcC.AVCLevelIndication);\n\t} else {\n\t\treturn baseCodec;\n\t}\n}\n\nBoxParser.hev1SampleEntry.prototype.getCodec =\nBoxParser.hvc1SampleEntry.prototype.getCodec = function() {\n\tvar i;\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.hvcC) {\n\t\tbaseCodec += '.';\n\t\tswitch (this.hvcC.general_profile_space) {\n\t\t\tcase 0:\n\t\t\t\tbaseCodec += '';\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tbaseCodec += 'A';\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tbaseCodec += 'B';\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tbaseCodec += 'C';\n\t\t\t\tbreak;\n\t\t}\n\t\tbaseCodec += this.hvcC.general_profile_idc;\n\t\tbaseCodec += '.';\n\t\tvar val = this.hvcC.general_profile_compatibility;\n\t\tvar reversed = 0;\n\t\tfor (i=0; i<32; i++) {\n\t\t\treversed |= val & 1;\n\t\t\tif (i==31) break;\n\t\t\treversed <<= 1;\n\t\t\tval >>=1;\n\t\t}\n\t\tbaseCodec += BoxParser.decimalToHex(reversed, 0);\n\t\tbaseCodec += '.';\n\t\tif (this.hvcC.general_tier_flag === 0) {\n\t\t\tbaseCodec += 'L';\n\t\t} else {\n\t\t\tbaseCodec += 'H';\n\t\t}\n\t\tbaseCodec += this.hvcC.general_level_idc;\n\t\tvar hasByte = false;\n\t\tvar constraint_string = \"\";\n\t\tfor (i = 5; i >= 0; i--) {\n\t\t\tif (this.hvcC.general_constraint_indicator[i] || hasByte) {\n\t\t\t\tconstraint_string = \".\"+BoxParser.decimalToHex(this.hvcC.general_constraint_indicator[i], 0)+constraint_string;\n\t\t\t\thasByte = true;\n\t\t\t}\n\t\t}\n\t\tbaseCodec += constraint_string;\n\t}\n\treturn baseCodec;\n}\n\nBoxParser.vvc1SampleEntry.prototype.getCodec =\nBoxParser.vvi1SampleEntry.prototype.getCodec = function () {\n\tvar i;\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.vvcC) {\n\t\tbaseCodec += '.' + this.vvcC.general_profile_idc;\n\t\tif (this.vvcC.general_tier_flag) {\n\t\t\tbaseCodec += '.H';\n\t\t} else {\n\t\t\tbaseCodec += '.L';\n\t\t}\n\t\tbaseCodec += this.vvcC.general_level_idc;\n\n\t\tvar constraint_string = \"\";\n\t\tif (this.vvcC.general_constraint_info) {\n\t\t\tvar bytes = [];\n\t\t\tvar byte = 0;\n\t\t\tbyte |= this.vvcC.ptl_frame_only_constraint << 7;\n\t\t\tbyte |= this.vvcC.ptl_multilayer_enabled << 6;\n\t\t\tvar last_nonzero;\n\t\t\tfor (i = 0; i < this.vvcC.general_constraint_info.length; ++i) {\n\t\t\t\tbyte |= (this.vvcC.general_constraint_info[i] >> 2) & 0x3f;\n\t\t\t\tbytes.push(byte);\n\t\t\t\tif (byte) {\n\t\t\t\t\tlast_nonzero = i;\n\t\t\t\t}\n\n\t\t\t\tbyte = (this.vvcC.general_constraint_info[i] >> 2) & 0x03;\n\t\t\t}\n\n\t\t\tif (last_nonzero === undefined) {\n\t\t\t\tconstraint_string = \".CA\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconstraint_string = \".C\"\n\t\t\t\tvar base32_chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n\t\t\t\tvar held_bits = 0;\n\t\t\t\tvar num_held_bits = 0;\n\t\t\t\tfor (i = 0; i <= last_nonzero; ++i) {\n\t\t\t\t\theld_bits = (held_bits << 8) | bytes[i];\n\t\t\t\t\tnum_held_bits += 8;\n\n\t\t\t\t\twhile (num_held_bits >= 5) {\n\t\t\t\t\t\tvar val = (held_bits >> (num_held_bits - 5)) & 0x1f;\n\t\t\t\t\t\tconstraint_string += base32_chars[val];\n\n\t\t\t\t\t\tnum_held_bits -= 5;\n\t\t\t\t\t\theld_bits &= (1 << num_held_bits) - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (num_held_bits) {\n\t\t\t\t\theld_bits <<= (5 - num_held_bits); // right-pad with zeros to 5 bits (is this correct?)\n\t\t\t\t\tconstraint_string += base32_chars[held_bits & 0x1f];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbaseCodec += constraint_string;\n\t}\n\treturn baseCodec;\n}\n\nBoxParser.mp4aSampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.esds && this.esds.esd) {\n\t\tvar oti = this.esds.esd.getOTI();\n\t\tvar dsi = this.esds.esd.getAudioConfig();\n\t\treturn baseCodec+\".\"+BoxParser.decimalToHex(oti)+(dsi ? \".\"+dsi: \"\");\n\t} else {\n\t\treturn baseCodec;\n\t}\n}\n\nBoxParser.stxtSampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif(this.mime_format) {\n\t\treturn baseCodec + \".\" + this.mime_format;\n\t} else {\n\t\treturn baseCodec\n\t}\n}\n\nBoxParser.vp08SampleEntry.prototype.getCodec =\nBoxParser.vp09SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tvar level = this.vpcC.level;\n\tif (level == 0) {\n\t\tlevel = \"00\";\n\t}\n\tvar bitDepth = this.vpcC.bitDepth;\n\tif (bitDepth == 8) {\n\t\tbitDepth = \"08\";\n\t}\n\treturn baseCodec + \".0\" + this.vpcC.profile + \".\" + level + \".\" + bitDepth;\n}\n\nBoxParser.av01SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tvar level = this.av1C.seq_level_idx_0;\n\tif (level < 10) {\n\t\tlevel = \"0\" + level;\n\t}\n\tvar bitdepth;\n\tif (this.av1C.seq_profile === 2 && this.av1C.high_bitdepth === 1) {\n\t\tbitdepth = (this.av1C.twelve_bit === 1) ? \"12\" : \"10\";\n\t} else if ( this.av1C.seq_profile <= 2 ) {\n\t\tbitdepth = (this.av1C.high_bitdepth === 1) ? \"10\" : \"08\";\n\t}\n\t// TODO need to parse the SH to find color config\n\treturn baseCodec+\".\"+this.av1C.seq_profile+\".\"+level+(this.av1C.seq_tier_0?\"H\":\"M\")+\".\"+bitdepth;//+\".\"+this.av1C.monochrome+\".\"+this.av1C.chroma_subsampling_x+\"\"+this.av1C.chroma_subsampling_y+\"\"+this.av1C.chroma_sample_position;\n}\n// file:src/box-write.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.Box.prototype.writeHeader = function(stream, msg) {\n\tthis.size += 8;\n\tif (this.size > MAX_SIZE) {\n\t\tthis.size += 8;\n\t}\n\tif (this.type === \"uuid\") {\n\t\tthis.size += 16;\n\t}\n\tLog.debug(\"BoxWriter\", \"Writing box \"+this.type+\" of size: \"+this.size+\" at position \"+stream.getPosition()+(msg || \"\"));\n\tif (this.size > MAX_SIZE) {\n\t\tstream.writeUint32(1);\n\t} else {\n\t\tthis.sizePosition = stream.getPosition();\n\t\tstream.writeUint32(this.size);\n\t}\n\tstream.writeString(this.type, null, 4);\n\tif (this.type === \"uuid\") {\n\t\tstream.writeUint8Array(this.uuid);\n\t}\n\tif (this.size > MAX_SIZE) {\n\t\tstream.writeUint64(this.size);\n\t} \n}\n\nBoxParser.FullBox.prototype.writeHeader = function(stream) {\n\tthis.size += 4;\n\tBoxParser.Box.prototype.writeHeader.call(this, stream, \" v=\"+this.version+\" f=\"+this.flags);\n\tstream.writeUint8(this.version);\n\tstream.writeUint24(this.flags);\n}\n\nBoxParser.Box.prototype.write = function(stream) {\n\tif (this.type === \"mdat\") {\n\t\t/* TODO: fix this */\n\t\tif (this.data) {\n\t\t\tthis.size = this.data.length;\n\t\t\tthis.writeHeader(stream);\n\t\t\tstream.writeUint8Array(this.data);\n\t\t}\n\t} else {\n\t\tthis.size = (this.data ? this.data.length : 0);\n\t\tthis.writeHeader(stream);\n\t\tif (this.data) {\n\t\t\tstream.writeUint8Array(this.data);\n\t\t}\n\t}\n}\n\nBoxParser.ContainerBox.prototype.write = function(stream) {\n\tthis.size = 0;\n\tthis.writeHeader(stream);\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tif (this.boxes[i]) {\n\t\t\tthis.boxes[i].write(stream);\n\t\t\tthis.size += this.boxes[i].size;\n\t\t}\n\t}\n\t/* adjusting the size, now that all sub-boxes are known */\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\n}\n\nBoxParser.TrackReferenceTypeBox.prototype.write = function(stream) {\n\tthis.size = this.track_ids.length*4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32Array(this.track_ids);\n}\n\n// file:src/writing/avcC.js\nBoxParser.avcCBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.size = 7;\n\tfor (i = 0; i < this.SPS.length; i++) {\n\t\tthis.size += 2+this.SPS[i].length;\n\t}\n\tfor (i = 0; i < this.PPS.length; i++) {\n\t\tthis.size += 2+this.PPS[i].length;\n\t}\n\tif (this.ext) {\n\t\tthis.size += this.ext.length;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint8(this.configurationVersion);\n\tstream.writeUint8(this.AVCProfileIndication);\n\tstream.writeUint8(this.profile_compatibility);\n\tstream.writeUint8(this.AVCLevelIndication);\n\tstream.writeUint8(this.lengthSizeMinusOne + (63<<2));\n\tstream.writeUint8(this.SPS.length + (7<<5));\n\tfor (i = 0; i < this.SPS.length; i++) {\n\t\tstream.writeUint16(this.SPS[i].length);\n\t\tstream.writeUint8Array(this.SPS[i].nalu);\n\t}\n\tstream.writeUint8(this.PPS.length);\n\tfor (i = 0; i < this.PPS.length; i++) {\n\t\tstream.writeUint16(this.PPS[i].length);\n\t\tstream.writeUint8Array(this.PPS[i].nalu);\n\t}\n\tif (this.ext) {\n\t\tstream.writeUint8Array(this.ext);\n\t}\n}\n\n// file:src/writing/co64.js\nBoxParser.co64Box.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.chunk_offsets.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.chunk_offsets.length);\n\tfor(i=0; i<this.chunk_offsets.length; i++) {\n\t\tstream.writeUint64(this.chunk_offsets[i]);\n\t}\n}\n\n// file:src/writing/cslg.js\nBoxParser.cslgBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4*5;\n\tthis.writeHeader(stream);\n\tstream.writeInt32(this.compositionToDTSShift);\n\tstream.writeInt32(this.leastDecodeToDisplayDelta);\n\tstream.writeInt32(this.greatestDecodeToDisplayDelta);\n\tstream.writeInt32(this.compositionStartTime);\n\tstream.writeInt32(this.compositionEndTime);\n}\n\n// file:src/writing/ctts.js\nBoxParser.cttsBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.sample_counts.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_counts.length);\n\tfor(i=0; i<this.sample_counts.length; i++) {\n\t\tstream.writeUint32(this.sample_counts[i]);\n\t\tif (this.version === 1) {\n\t\t\tstream.writeInt32(this.sample_offsets[i]); /* signed */\n\t\t} else {\t\t\t\n\t\t\tstream.writeUint32(this.sample_offsets[i]); /* unsigned */\n\t\t}\n\t}\n}\n\n// file:src/writing/dref.js\nBoxParser.drefBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4; //\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.entries.length);\n\tfor (var i = 0; i < this.entries.length; i++) {\n\t\tthis.entries[i].write(stream);\n\t\tthis.size += this.entries[i].size;\n\t}\t\n\t/* adjusting the size, now that all sub-boxes are known */\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\n}\n\n// file:src/writing/elng.js\nBoxParser.elngBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = this.extended_language.length;\n\tthis.writeHeader(stream);\n\tstream.writeString(this.extended_language);\n}\n\n// file:src/writing/elst.js\nBoxParser.elstBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4+12*this.entries.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.entries.length);\n\tfor (var i = 0; i < this.entries.length; i++) {\n\t\tvar entry = this.entries[i];\n\t\tstream.writeUint32(entry.segment_duration);\n\t\tstream.writeInt32(entry.media_time);\n\t\tstream.writeInt16(entry.media_rate_integer);\n\t\tstream.writeInt16(entry.media_rate_fraction);\n\t}\n}\n\n// file:src/writing/emsg.js\nBoxParser.emsgBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4*4+this.message_data.length+(this.scheme_id_uri.length+1)+(this.value.length+1);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.scheme_id_uri);\n\tstream.writeCString(this.value);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.presentation_time_delta);\n\tstream.writeUint32(this.event_duration);\n\tstream.writeUint32(this.id);\n\tstream.writeUint8Array(this.message_data);\n}\n\n// file:src/writing/ftyp.js\nBoxParser.ftypBox.prototype.write = function(stream) {\n\tthis.size = 8+4*this.compatible_brands.length;\n\tthis.writeHeader(stream);\n\tstream.writeString(this.major_brand, null, 4);\n\tstream.writeUint32(this.minor_version);\n\tfor (var i = 0; i < this.compatible_brands.length; i++) {\n\t\tstream.writeString(this.compatible_brands[i], null, 4);\n\t}\n}\n\n// file:src/writing/hdlr.js\nBoxParser.hdlrBox.prototype.write = function(stream) {\n\tthis.size = 5*4+this.name.length+1;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(0);\n\tstream.writeString(this.handler, null, 4);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeCString(this.name);\n}\n\n// file:src/writing/hvcC.js\nBoxParser.hvcCBox.prototype.write = function(stream) {\n var i,j;\n this.size = 23;\n\n for (i = 0; i < this.nalu_arrays.length; i++) {\n this.size += 3;\n for (j = 0; j < this.nalu_arrays[i].length; j++) {\n this.size += 2 + this.nalu_arrays[i][j].data.length;\n }\n }\n\n this.writeHeader(stream);\n\n stream.writeUint8(this.configurationVersion);\n stream.writeUint8((this.general_profile_space << 6) +\n (this.general_tier_flag << 5) +\n this.general_profile_idc);\n stream.writeUint32(this.general_profile_compatibility);\n stream.writeUint8Array(this.general_constraint_indicator);\n stream.writeUint8(this.general_level_idc);\n stream.writeUint16(this.min_spatial_segmentation_idc + (15<<24));\n stream.writeUint8(this.parallelismType + (63<<2));\n stream.writeUint8(this.chroma_format_idc + (63<<2));\n stream.writeUint8(this.bit_depth_luma_minus8 + (31<<3));\n stream.writeUint8(this.bit_depth_chroma_minus8 + (31<<3));\n stream.writeUint16(this.avgFrameRate);\n stream.writeUint8((this.constantFrameRate<<6) +\n (this.numTemporalLayers<<3) +\n (this.temporalIdNested<<2) +\n this.lengthSizeMinusOne);\n stream.writeUint8(this.nalu_arrays.length);\n for (i = 0; i < this.nalu_arrays.length; i++) {\n // bit(1) array_completeness + bit(1) reserved = 0 + bit(6) nal_unit_type\n stream.writeUint8((this.nalu_arrays[i].completeness<<7) +\n this.nalu_arrays[i].nalu_type);\n stream.writeUint16(this.nalu_arrays[i].length);\n for (j = 0; j < this.nalu_arrays[i].length; j++) {\n stream.writeUint16(this.nalu_arrays[i][j].data.length);\n stream.writeUint8Array(this.nalu_arrays[i][j].data);\n }\n }\n}\n// file:src/writing/kind.js\nBoxParser.kindBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = (this.schemeURI.length+1)+(this.value.length+1);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.schemeURI);\n\tstream.writeCString(this.value);\n}\n\n// file:src/writing/mdhd.js\nBoxParser.mdhdBox.prototype.write = function(stream) {\n\tthis.size = 4*4+2*2;\n\tthis.flags = 0;\n\tthis.version = 0;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint16(this.language);\n\tstream.writeUint16(0);\n}\n\n// file:src/writing/mehd.js\nBoxParser.mehdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.fragment_duration);\n}\n\n// file:src/writing/mfhd.js\nBoxParser.mfhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sequence_number);\n}\n\n// file:src/writing/mvhd.js\nBoxParser.mvhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 23*4+2*2;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint32(this.rate);\n\tstream.writeUint16(this.volume<<8);\n\tstream.writeUint16(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32Array(this.matrix);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(this.next_track_id);\n}\n\n// file:src/writing/sampleentry.js\nBoxParser.SampleEntry.prototype.writeHeader = function(stream) {\n\tthis.size = 8;\n\tBoxParser.Box.prototype.writeHeader.call(this, stream);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint16(this.data_reference_index);\n}\n\nBoxParser.SampleEntry.prototype.writeFooter = function(stream) {\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tthis.boxes[i].write(stream);\n\t\tthis.size += this.boxes[i].size;\n\t}\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\t\n}\n\nBoxParser.SampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tstream.writeUint8Array(this.data);\n\tthis.size += this.data.length;\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\t\n}\n\nBoxParser.VisualSampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tthis.size += 2*7+6*4+32;\n\tstream.writeUint16(0); \n\tstream.writeUint16(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint16(this.width);\n\tstream.writeUint16(this.height);\n\tstream.writeUint32(this.horizresolution);\n\tstream.writeUint32(this.vertresolution);\n\tstream.writeUint32(0);\n\tstream.writeUint16(this.frame_count);\n\tstream.writeUint8(Math.min(31, this.compressorname.length));\n\tstream.writeString(this.compressorname, null, 31);\n\tstream.writeUint16(this.depth);\n\tstream.writeInt16(-1);\n\tthis.writeFooter(stream);\n}\n\nBoxParser.AudioSampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tthis.size += 2*4+3*4;\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint16(this.channel_count);\n\tstream.writeUint16(this.samplesize);\n\tstream.writeUint16(0);\n\tstream.writeUint16(0);\n\tstream.writeUint32(this.samplerate<<16);\n\tthis.writeFooter(stream);\n}\n\nBoxParser.stppSampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tthis.size += this.namespace.length+1+\n\t\t\t\t this.schema_location.length+1+\n\t\t\t\t this.auxiliary_mime_types.length+1;\n\tstream.writeCString(this.namespace);\n\tstream.writeCString(this.schema_location);\n\tstream.writeCString(this.auxiliary_mime_types);\n\tthis.writeFooter(stream);\n}\n\n// file:src/writing/samplegroups/samplegroup.js\nBoxParser.SampleGroupEntry.prototype.write = function(stream) {\n\tstream.writeUint8Array(this.data);\n}\n\n// file:src/writing/sbgp.js\nBoxParser.sbgpBox.prototype.write = function(stream) {\n\tthis.version = 1;\t\n\tthis.flags = 0;\n\tthis.size = 12+8*this.entries.length;\n\tthis.writeHeader(stream);\n\tstream.writeString(this.grouping_type, null, 4);\n\tstream.writeUint32(this.grouping_type_parameter);\n\tstream.writeUint32(this.entries.length);\n\tfor (var i = 0; i < this.entries.length; i++) {\n\t\tvar entry = this.entries[i];\n\t\tstream.writeInt32(entry.sample_count);\n\t\tstream.writeInt32(entry.group_description_index);\n\t}\n}\n\n// file:src/writing/sgpd.js\nBoxParser.sgpdBox.prototype.write = function(stream) {\n\tvar i;\n\tvar entry;\n\t// leave version as read\n\t// this.version;\n\tthis.flags = 0;\n\tthis.size = 12;\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tentry = this.entries[i];\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tthis.size += 4;\n\t\t\t}\n\t\t\tthis.size += entry.data.length;\n\t\t}\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeString(this.grouping_type, null, 4);\n\tif (this.version === 1) {\n\t\tstream.writeUint32(this.default_length);\n\t}\n\tif (this.version >= 2) {\n\t\tstream.writeUint32(this.default_sample_description_index);\n\t}\n\tstream.writeUint32(this.entries.length);\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tentry = this.entries[i];\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tstream.writeUint32(entry.description_length);\n\t\t\t}\n\t\t}\n\t\tentry.write(stream);\n\t}\n}\n\n\n// file:src/writing/sidx.js\nBoxParser.sidxBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4*4+2+2+12*this.references.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.reference_ID);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.earliest_presentation_time);\n\tstream.writeUint32(this.first_offset);\n\tstream.writeUint16(0);\n\tstream.writeUint16(this.references.length);\n\tfor (var i = 0; i < this.references.length; i++) {\n\t\tvar ref = this.references[i];\n\t\tstream.writeUint32(ref.reference_type << 31 | ref.referenced_size);\n\t\tstream.writeUint32(ref.subsegment_duration);\n\t\tstream.writeUint32(ref.starts_with_SAP << 31 | ref.SAP_type << 28 | ref.SAP_delta_time);\n\t}\n}\n\n// file:src/writing/smhd.js\nBoxParser.smhdBox.prototype.write = function(stream) {\n var i;\n this.version = 0;\n this.flags = 1;\n this.size = 4;\n this.writeHeader(stream);\n stream.writeUint16(this.balance);\n stream.writeUint16(0);\n}\n// file:src/writing/stco.js\nBoxParser.stcoBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+4*this.chunk_offsets.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.chunk_offsets.length);\n\tstream.writeUint32Array(this.chunk_offsets);\n}\n\n// file:src/writing/stsc.js\nBoxParser.stscBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+12*this.first_chunk.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.first_chunk.length);\n\tfor(i=0; i<this.first_chunk.length; i++) {\n\t\tstream.writeUint32(this.first_chunk[i]);\n\t\tstream.writeUint32(this.samples_per_chunk[i]);\n\t\tstream.writeUint32(this.sample_description_index[i]);\n\t}\n}\n\n// file:src/writing/stsd.js\nBoxParser.stsdBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 0;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.entries.length);\n\tthis.size += 4;\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tthis.entries[i].write(stream);\n\t\tthis.size += this.entries[i].size;\n\t}\n\t/* adjusting the size, now that all sub-boxes are known */\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\n}\n\n// file:src/writing/stsh.js\nBoxParser.stshBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.shadowed_sample_numbers.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.shadowed_sample_numbers.length);\n\tfor(i=0; i<this.shadowed_sample_numbers.length; i++) {\n\t\tstream.writeUint32(this.shadowed_sample_numbers[i]);\n\t\tstream.writeUint32(this.sync_sample_numbers[i]);\n\t}\n}\n\n// file:src/writing/stss.js\nBoxParser.stssBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+4*this.sample_numbers.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_numbers.length);\n\tstream.writeUint32Array(this.sample_numbers);\n}\n\n// file:src/writing/stsz.js\nBoxParser.stszBox.prototype.write = function(stream) {\n\tvar i;\n\tvar constant = true;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tif (this.sample_sizes.length > 0) {\n\t\ti = 0;\n\t\twhile (i+1 < this.sample_sizes.length) {\n\t\t\tif (this.sample_sizes[i+1] !== this.sample_sizes[0]) {\n\t\t\t\tconstant = false;\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconstant = false;\n\t}\n\tthis.size = 8;\n\tif (!constant) {\n\t\tthis.size += 4*this.sample_sizes.length;\n\t}\n\tthis.writeHeader(stream);\n\tif (!constant) {\n\t\tstream.writeUint32(0);\n\t} else {\n\t\tstream.writeUint32(this.sample_sizes[0]);\n\t}\n\tstream.writeUint32(this.sample_sizes.length);\n\tif (!constant) {\n\t\tstream.writeUint32Array(this.sample_sizes);\n\t}\t\n}\n\n// file:src/writing/stts.js\nBoxParser.sttsBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.sample_counts.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_counts.length);\n\tfor(i=0; i<this.sample_counts.length; i++) {\n\t\tstream.writeUint32(this.sample_counts[i]);\n\t\tstream.writeUint32(this.sample_deltas[i]);\n\t}\n}\n\n// file:src/writing/tfdt.js\nBoxParser.tfdtBox.prototype.write = function(stream) {\n\tvar UINT32_MAX = Math.pow(2, 32) - 1;\n\t// use version 1 if baseMediaDecodeTime does not fit 32 bits\n\tthis.version = this.baseMediaDecodeTime > UINT32_MAX ? 1 : 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tif (this.version === 1) {\n\t\tthis.size += 4;\n\t}\n\tthis.writeHeader(stream);\n\tif (this.version === 1) {\n\t\tstream.writeUint64(this.baseMediaDecodeTime);\n\t} else {\n\t\tstream.writeUint32(this.baseMediaDecodeTime);\n\t}\n}\n\n// file:src/writing/tfhd.js\nBoxParser.tfhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.size = 4;\n\tif (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) {\n\t\tthis.size += 8;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\tthis.size += 4;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.track_id);\n\tif (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) {\n\t\tstream.writeUint64(this.base_data_offset);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\tstream.writeUint32(this.default_sample_description_index);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\tstream.writeUint32(this.default_sample_duration);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\tstream.writeUint32(this.default_sample_size);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\tstream.writeUint32(this.default_sample_flags);\n\t}\n}\n\n// file:src/writing/tkhd.js\nBoxParser.tkhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\t//this.flags = 0;\n\tthis.size = 4*18+2*4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.track_id);\n\tstream.writeUint32(0);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeInt16(this.layer);\n\tstream.writeInt16(this.alternate_group);\n\tstream.writeInt16(this.volume<<8);\n\tstream.writeUint16(0);\n\tstream.writeInt32Array(this.matrix);\n\tstream.writeUint32(this.width);\n\tstream.writeUint32(this.height);\n}\n\n// file:src/writing/trex.js\nBoxParser.trexBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4*5;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.track_id);\n\tstream.writeUint32(this.default_sample_description_index);\n\tstream.writeUint32(this.default_sample_duration);\n\tstream.writeUint32(this.default_sample_size);\n\tstream.writeUint32(this.default_sample_flags);\n}\n\n// file:src/writing/trun.js\nBoxParser.trunBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.size = 4;\n\tif (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\tthis.size += 4*this.sample_duration.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\tthis.size += 4*this.sample_size.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\tthis.size += 4*this.sample_flags.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\tthis.size += 4*this.sample_composition_time_offset.length;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_count);\n\tif (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) {\n\t\tthis.data_offset_position = stream.getPosition();\n\t\tstream.writeInt32(this.data_offset); //signed\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) {\n\t\tstream.writeUint32(this.first_sample_flags);\n\t}\n\tfor (var i = 0; i < this.sample_count; i++) {\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\tstream.writeUint32(this.sample_duration[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\tstream.writeUint32(this.sample_size[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\tstream.writeUint32(this.sample_flags[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\tif (this.version === 0) {\n\t\t\t\tstream.writeUint32(this.sample_composition_time_offset[i]);\n\t\t\t} else {\n\t\t\t\tstream.writeInt32(this.sample_composition_time_offset[i]); //signed\n\t\t\t}\n\t\t}\n\t}\t\t\n}\n\n// file:src/writing/url.js\nBoxParser[\"url Box\"].prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tif (this.location) {\n\t\tthis.flags = 0;\n\t\tthis.size = this.location.length+1;\n\t} else {\n\t\tthis.flags = 0x000001;\n\t\tthis.size = 0;\n\t}\n\tthis.writeHeader(stream);\n\tif (this.location) {\n\t\tstream.writeCString(this.location);\n\t}\n}\n\n// file:src/writing/urn.js\nBoxParser[\"urn Box\"].prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = this.name.length+1+(this.location ? this.location.length+1 : 0);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.name);\n\tif (this.location) {\n\t\tstream.writeCString(this.location);\n\t}\n}\n\n// file:src/writing/vmhd.js\nBoxParser.vmhdBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 1;\n\tthis.size = 8;\n\tthis.writeHeader(stream);\n\tstream.writeUint16(this.graphicsmode);\n\tstream.writeUint16Array(this.opcolor);\n}\n\n// file:src/box-unpack.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.cttsBox.prototype.unpack = function(samples) {\n\tvar i, j, k;\n\tk = 0;\n\tfor (i = 0; i < this.sample_counts.length; i++) {\n\t\tfor (j = 0; j < this.sample_counts[i]; j++) {\n\t\t\tsamples[k].pts = samples[k].dts + this.sample_offsets[i];\n\t\t\tk++;\n\t\t}\n\t}\n}\n\nBoxParser.sttsBox.prototype.unpack = function(samples) {\n\tvar i, j, k;\n\tk = 0;\n\tfor (i = 0; i < this.sample_counts.length; i++) {\n\t\tfor (j = 0; j < this.sample_counts[i]; j++) {\n\t\t\tif (k === 0) {\n\t\t\t\tsamples[k].dts = 0;\n\t\t\t} else {\n\t\t\t\tsamples[k].dts = samples[k-1].dts + this.sample_deltas[i];\n\t\t\t}\n\t\t\tk++;\n\t\t}\n\t}\n}\n\nBoxParser.stcoBox.prototype.unpack = function(samples) {\n\tvar i;\n\tfor (i = 0; i < this.chunk_offsets.length; i++) {\n\t\tsamples[i].offset = this.chunk_offsets[i];\n\t}\n}\n\nBoxParser.stscBox.prototype.unpack = function(samples) {\n\tvar i, j, k, l, m;\n\tl = 0;\n\tm = 0;\n\tfor (i = 0; i < this.first_chunk.length; i++) {\n\t\tfor (j = 0; j < (i+1 < this.first_chunk.length ? this.first_chunk[i+1] : Infinity); j++) {\n\t\t\tm++;\n\t\t\tfor (k = 0; k < this.samples_per_chunk[i]; k++) {\n\t\t\t\tif (samples[l]) {\n\t\t\t\t\tsamples[l].description_index = this.sample_description_index[i];\n\t\t\t\t\tsamples[l].chunk_index = m;\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tl++;\n\t\t\t}\t\t\t\n\t\t}\n\t}\n}\n\nBoxParser.stszBox.prototype.unpack = function(samples) {\n\tvar i;\n\tfor (i = 0; i < this.sample_sizes.length; i++) {\n\t\tsamples[i].size = this.sample_sizes[i];\n\t}\n}\n// file:src/box-diff.js\n\nBoxParser.DIFF_BOXES_PROP_NAMES = [ \"boxes\", \"entries\", \"references\", \"subsamples\",\n\t\t\t\t\t \t \"items\", \"item_infos\", \"extents\", \"associations\",\n\t\t\t\t\t \t \"subsegments\", \"ranges\", \"seekLists\", \"seekPoints\",\n\t\t\t\t\t \t \"esd\", \"levels\"];\n\nBoxParser.DIFF_PRIMITIVE_ARRAY_PROP_NAMES = [ \"compatible_brands\", \"matrix\", \"opcolor\", \"sample_counts\", \"sample_deltas\",\n\"first_chunk\", \"samples_per_chunk\", \"sample_sizes\", \"chunk_offsets\", \"sample_offsets\", \"sample_description_index\", \"sample_duration\" ];\n\nBoxParser.boxEqualFields = function(box_a, box_b) {\n\tif (box_a && !box_b) return false;\n\tvar prop;\n\tfor (prop in box_a) {\n\t\tif (BoxParser.DIFF_BOXES_PROP_NAMES.indexOf(prop) > -1) {\n\t\t\tcontinue;\n\t\t// } else if (excluded_fields && excluded_fields.indexOf(prop) > -1) {\n\t\t// \tcontinue;\n\t\t} else if (box_a[prop] instanceof BoxParser.Box || box_b[prop] instanceof BoxParser.Box) {\n\t\t\tcontinue;\n\t\t} else if (typeof box_a[prop] === \"undefined\" || typeof box_b[prop] === \"undefined\") {\n\t\t\tcontinue;\n\t\t} else if (typeof box_a[prop] === \"function\" || typeof box_b[prop] === \"function\") {\n\t\t\tcontinue;\n\t\t} else if (\n\t\t\t(box_a.subBoxNames && box_a.subBoxNames.indexOf(prop.slice(0,4)) > -1) ||\n\t\t\t(box_b.subBoxNames && box_b.subBoxNames.indexOf(prop.slice(0,4)) > -1)) {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tif (prop === \"data\" || prop === \"start\" || prop === \"size\" || prop === \"creation_time\" || prop === \"modification_time\") {\n\t\t\t\tcontinue;\n\t\t\t} else if (BoxParser.DIFF_PRIMITIVE_ARRAY_PROP_NAMES.indexOf(prop) > -1) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tif (box_a[prop] !== box_b[prop]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n\nBoxParser.boxEqual = function(box_a, box_b) {\n\tif (!BoxParser.boxEqualFields(box_a, box_b)) {\n\t\treturn false;\n\t}\n\tfor (var j = 0; j < BoxParser.DIFF_BOXES_PROP_NAMES.length; j++) {\n\t\tvar name = BoxParser.DIFF_BOXES_PROP_NAMES[j];\n\t\tif (box_a[name] && box_b[name]) {\n\t\t\tif (!BoxParser.boxEqual(box_a[name], box_b[name])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n// file:src/text-mp4.js\n/* \n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar VTTin4Parser = function() {\t\n}\n\nVTTin4Parser.prototype.parseSample = function(data) {\n\tvar cues, cue;\n\tvar stream = new MP4BoxStream(data.buffer);\n\tcues = [];\n\twhile (!stream.isEos()) {\n\t\tcue = BoxParser.parseOneBox(stream, false);\n\t\tif (cue.code === BoxParser.OK && cue.box.type === \"vttc\") {\n\t\t\tcues.push(cue.box);\n\t\t}\t\t\n\t}\n\treturn cues;\n}\n\nVTTin4Parser.prototype.getText = function (startTime, endTime, data) {\n\tfunction pad(n, width, z) {\n\t z = z || '0';\n\t n = n + '';\n\t return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n\t}\n\tfunction secToTimestamp(insec) {\n\t\tvar h = Math.floor(insec/3600);\n\t\tvar m = Math.floor((insec - h*3600)/60);\n\t\tvar s = Math.floor(insec - h*3600 - m*60);\n\t\tvar ms = Math.floor((insec - h*3600 - m*60 - s)*1000);\n\t\treturn \"\"+pad(h, 2)+\":\"+pad(m,2)+\":\"+pad(s, 2)+\".\"+pad(ms, 3);\n\t}\n\tvar cues = this.parseSample(data);\n\tvar string = \"\";\n\tfor (var i = 0; i < cues.length; i++) {\n\t\tvar cueIn4 = cues[i];\n\t\tstring += secToTimestamp(startTime)+\" --> \"+secToTimestamp(endTime)+\"\\r\\n\";\n\t\tstring += cueIn4.payl.text;\n\t}\n\treturn string;\n}\n\nvar XMLSubtitlein4Parser = function() {\t\n}\n\nXMLSubtitlein4Parser.prototype.parseSample = function(sample) {\n\tvar res = {};\t\n\tvar i;\n\tres.resources = [];\n\tvar stream = new MP4BoxStream(sample.data.buffer);\n\tif (!sample.subsamples || sample.subsamples.length === 0) {\n\t\tres.documentString = stream.readString(sample.data.length);\n\t} else {\n\t\tres.documentString = stream.readString(sample.subsamples[0].size);\n\t\tif (sample.subsamples.length > 1) {\n\t\t\tfor (i = 1; i < sample.subsamples.length; i++) {\n\t\t\t\tres.resources[i] = stream.readUint8Array(sample.subsamples[i].size);\n\t\t\t}\n\t\t}\n\t}\n\tif (typeof (DOMParser) !== \"undefined\") {\n\t\tres.document = (new DOMParser()).parseFromString(res.documentString, \"application/xml\");\n\t}\n\treturn res;\n}\n\nvar Textin4Parser = function() {\t\n}\n\nTextin4Parser.prototype.parseSample = function(sample) {\n\tvar textString;\n\tvar stream = new MP4BoxStream(sample.data.buffer);\n\ttextString = stream.readString(sample.data.length);\n\treturn textString;\n}\n\nTextin4Parser.prototype.parseConfig = function(data) {\n\tvar textString;\n\tvar stream = new MP4BoxStream(data.buffer);\n\tstream.readUint32(); // version & flags\n\ttextString = stream.readCString();\n\treturn textString;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.VTTin4Parser = VTTin4Parser;\n\texports.XMLSubtitlein4Parser = XMLSubtitlein4Parser;\n\texports.Textin4Parser = Textin4Parser;\n}\n// file:src/isofile.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar ISOFile = function (stream) {\n\t/* MutiBufferStream object used to parse boxes */\n\tthis.stream = stream || new MultiBufferStream();\n\t/* Array of all boxes (in order) found in the file */\n\tthis.boxes = [];\n\t/* Array of all mdats */\n\tthis.mdats = [];\n\t/* Array of all moofs */\n\tthis.moofs = [];\n\t/* Boolean indicating if the file is compatible with progressive parsing (moov first) */\n\tthis.isProgressive = false;\n\t/* Boolean used to fire moov start event only once */\n\tthis.moovStartFound = false;\n\t/* Callback called when the moov parsing starts */\n\tthis.onMoovStart = null;\n\t/* Boolean keeping track of the call to onMoovStart, to avoid double calls */\n\tthis.moovStartSent = false;\n\t/* Callback called when the moov is entirely parsed */\n\tthis.onReady = null;\n\t/* Boolean keeping track of the call to onReady, to avoid double calls */\n\tthis.readySent = false;\n\t/* Callback to call when segments are ready */\n\tthis.onSegment = null;\n\t/* Callback to call when samples are ready */\n\tthis.onSamples = null;\n\t/* Callback to call when there is an error in the parsing or processing of samples */\n\tthis.onError = null;\n\t/* Boolean indicating if the moov box run-length encoded tables of sample information have been processed */\n\tthis.sampleListBuilt = false;\n\t/* Array of Track objects for which fragmentation of samples is requested */\n\tthis.fragmentedTracks = [];\n\t/* Array of Track objects for which extraction of samples is requested */\n\tthis.extractedTracks = [];\n\t/* Boolean indicating that fragmention is ready */\n\tthis.isFragmentationInitialized = false;\n\t/* Boolean indicating that fragmented has started */\n\tthis.sampleProcessingStarted = false;\n\t/* Number of the next 'moof' to generate when fragmenting */\n\tthis.nextMoofNumber = 0;\n\t/* Boolean indicating if the initial list of items has been produced */\n\tthis.itemListBuilt = false;\n\t/* Array of items */\n\tthis.items = [];\n\t/* Array of entity groups */\n\tthis.entity_groups = [];\n\t/* Callback called when the sidx box is entirely parsed */\n\tthis.onSidx = null;\n\t/* Boolean keeping track of the call to onSidx, to avoid double calls */\n\tthis.sidxSent = false;\n}\n\nISOFile.prototype.setSegmentOptions = function(id, user, options) {\n\tvar trak = this.getTrackById(id);\n\tif (trak) {\n\t\tvar fragTrack = {};\n\t\tthis.fragmentedTracks.push(fragTrack);\n\t\tfragTrack.id = id;\n\t\tfragTrack.user = user;\n\t\tfragTrack.trak = trak;\n\t\ttrak.nextSample = 0;\n\t\tfragTrack.segmentStream = null;\n\t\tfragTrack.nb_samples = 1000;\n\t\tfragTrack.rapAlignement = true;\n\t\tif (options) {\n\t\t\tif (options.nbSamples) fragTrack.nb_samples = options.nbSamples;\n\t\t\tif (options.rapAlignement) fragTrack.rapAlignement = options.rapAlignement;\n\t\t}\n\t}\n}\n\nISOFile.prototype.unsetSegmentOptions = function(id) {\n\tvar index = -1;\n\tfor (var i = 0; i < this.fragmentedTracks.length; i++) {\n\t\tvar fragTrack = this.fragmentedTracks[i];\n\t\tif (fragTrack.id == id) {\n\t\t\tindex = i;\n\t\t}\n\t}\n\tif (index > -1) {\n\t\tthis.fragmentedTracks.splice(index, 1);\n\t}\n}\n\nISOFile.prototype.setExtractionOptions = function(id, user, options) {\n\tvar trak = this.getTrackById(id);\n\tif (trak) {\n\t\tvar extractTrack = {};\n\t\tthis.extractedTracks.push(extractTrack);\n\t\textractTrack.id = id;\n\t\textractTrack.user = user;\n\t\textractTrack.trak = trak;\n\t\ttrak.nextSample = 0;\n\t\textractTrack.nb_samples = 1000;\n\t\textractTrack.samples = [];\n\t\tif (options) {\n\t\t\tif (options.nbSamples) extractTrack.nb_samples = options.nbSamples;\n\t\t}\n\t}\n}\n\nISOFile.prototype.unsetExtractionOptions = function(id) {\n\tvar index = -1;\n\tfor (var i = 0; i < this.extractedTracks.length; i++) {\n\t\tvar extractTrack = this.extractedTracks[i];\n\t\tif (extractTrack.id == id) {\n\t\t\tindex = i;\n\t\t}\n\t}\n\tif (index > -1) {\n\t\tthis.extractedTracks.splice(index, 1);\n\t}\n}\n\nISOFile.prototype.parse = function() {\n\tvar found;\n\tvar ret;\n\tvar box;\n\tvar parseBoxHeadersOnly = false;\n\n\tif (this.restoreParsePosition)\t{\n\t\tif (!this.restoreParsePosition()) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\twhile (true) {\n\n\t\tif (this.hasIncompleteMdat && this.hasIncompleteMdat()) {\n\t\t\tif (this.processIncompleteMdat()) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.saveParsePosition)\t{\n\t\t\t\tthis.saveParsePosition();\n\t\t\t}\n\t\t\tret = BoxParser.parseOneBox(this.stream, parseBoxHeadersOnly);\n\t\t\tif (ret.code === BoxParser.ERR_NOT_ENOUGH_DATA) {\n\t\t\t\tif (this.processIncompleteBox) {\n\t\t\t\t\tif (this.processIncompleteBox(ret)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar box_type;\n\t\t\t\t/* the box is entirely parsed */\n\t\t\t\tbox = ret.box;\n\t\t\t\tbox_type = (box.type !== \"uuid\" ? box.type : box.uuid);\n\t\t\t\t/* store the box in the 'boxes' array to preserve box order (for file rewrite if needed) */\n\t\t\t\tthis.boxes.push(box);\n\t\t\t\t/* but also store box in a property for more direct access */\n\t\t\t\tswitch (box_type) {\n\t\t\t\t\tcase \"mdat\":\n\t\t\t\t\t\tthis.mdats.push(box);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"moof\":\n\t\t\t\t\t\tthis.moofs.push(box);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"moov\":\n\t\t\t\t\t\tthis.moovStartFound = true;\n\t\t\t\t\t\tif (this.mdats.length === 0) {\n\t\t\t\t\t\t\tthis.isProgressive = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/* no break */\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (this[box_type] !== undefined) {\n\t\t\t\t\t\t\tLog.warn(\"ISOFile\", \"Duplicate Box of type: \"+box_type+\", overriding previous occurrence\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis[box_type] = box;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (this.updateUsedBytes) {\n\t\t\t\t\tthis.updateUsedBytes(box, ret);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.prototype.checkBuffer = function (ab) {\n\tif (ab === null || ab === undefined) {\n\t\tthrow(\"Buffer must be defined and non empty\");\n\t}\n\tif (ab.fileStart === undefined) {\n\t\tthrow(\"Buffer must have a fileStart property\");\n\t}\n\tif (ab.byteLength === 0) {\n\t\tLog.warn(\"ISOFile\", \"Ignoring empty buffer (fileStart: \"+ab.fileStart+\")\");\n\t\tthis.stream.logBufferLevel();\n\t\treturn false;\n\t}\n\tLog.info(\"ISOFile\", \"Processing buffer (fileStart: \"+ab.fileStart+\")\");\n\n\t/* mark the bytes in the buffer as not being used yet */\n\tab.usedBytes = 0;\n\tthis.stream.insertBuffer(ab);\n\tthis.stream.logBufferLevel();\n\n\tif (!this.stream.initialized()) {\n\t\tLog.warn(\"ISOFile\", \"Not ready to start parsing\");\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/* Processes a new ArrayBuffer (with a fileStart property)\n Returns the next expected file position, or undefined if not ready to parse */\nISOFile.prototype.appendBuffer = function(ab, last) {\n\tvar nextFileStart;\n\tif (!this.checkBuffer(ab)) {\n\t\treturn;\n\t}\n\n\t/* Parse whatever is in the existing buffers */\n\tthis.parse();\n\n\t/* Check if the moovStart callback needs to be called */\n\tif (this.moovStartFound && !this.moovStartSent) {\n\t\tthis.moovStartSent = true;\n\t\tif (this.onMoovStart) this.onMoovStart();\n\t}\n\n\tif (this.moov) {\n\t\t/* A moov box has been entirely parsed */\n\n\t\t/* if this is the first call after the moov is found we initialize the list of samples (may be empty in fragmented files) */\n\t\tif (!this.sampleListBuilt) {\n\t\t\tthis.buildSampleLists();\n\t\t\tthis.sampleListBuilt = true;\n\t\t}\n\n\t\t/* We update the sample information if there are any new moof boxes */\n\t\tthis.updateSampleLists();\n\n\t\t/* If the application needs to be informed that the 'moov' has been found,\n\t\t we create the information object and callback the application */\n\t\tif (this.onReady && !this.readySent) {\n\t\t\tthis.readySent = true;\n\t\t\tthis.onReady(this.getInfo());\n\t\t}\n\n\t\t/* See if any sample extraction or segment creation needs to be done with the available samples */\n\t\tthis.processSamples(last);\n\n\t\t/* Inform about the best range to fetch next */\n\t\tif (this.nextSeekPosition) {\n\t\t\tnextFileStart = this.nextSeekPosition;\n\t\t\tthis.nextSeekPosition = undefined;\n\t\t} else {\n\t\t\tnextFileStart = this.nextParsePosition;\n\t\t}\n\t\tif (this.stream.getEndFilePositionAfter) {\n\t\t\tnextFileStart = this.stream.getEndFilePositionAfter(nextFileStart);\n\t\t}\n\t} else {\n\t\tif (this.nextParsePosition) {\n\t\t\t/* moov has not been parsed but the first buffer was received,\n\t\t\t the next fetch should probably be the next box start */\n\t\t\tnextFileStart = this.nextParsePosition;\n\t\t} else {\n\t\t\t/* No valid buffer has been parsed yet, we cannot know what to parse next */\n\t\t\tnextFileStart = 0;\n\t\t}\n\t}\n\tif (this.sidx) {\n\t\tif (this.onSidx && !this.sidxSent) {\n\t\t\tthis.onSidx(this.sidx);\n\t\t\tthis.sidxSent = true;\n\t\t}\n\t}\n\tif (this.meta) {\n\t\tif (this.flattenItemInfo && !this.itemListBuilt) {\n\t\t\tthis.flattenItemInfo();\n\t\t\tthis.itemListBuilt = true;\n\t\t}\n\t\tif (this.processItems) {\n\t\t\tthis.processItems(this.onItem);\n\t\t}\n\t}\n\n\tif (this.stream.cleanBuffers) {\n\t\tLog.info(\"ISOFile\", \"Done processing buffer (fileStart: \"+ab.fileStart+\") - next buffer to fetch should have a fileStart position of \"+nextFileStart);\n\t\tthis.stream.logBufferLevel();\n\t\tthis.stream.cleanBuffers();\n\t\tthis.stream.logBufferLevel(true);\n\t\tLog.info(\"ISOFile\", \"Sample data size in memory: \"+this.getAllocatedSampleDataSize());\n\t}\n\treturn nextFileStart;\n}\n\nISOFile.prototype.getInfo = function() {\n\tvar i, j;\n\tvar movie = {};\n\tvar trak;\n\tvar track;\n\tvar ref;\n\tvar sample_desc;\n\tvar _1904 = (new Date('1904-01-01T00:00:00Z').getTime());\n\n\tif (this.moov) {\n\t\tmovie.hasMoov = true;\n\t\tmovie.duration = this.moov.mvhd.duration;\n\t\tmovie.timescale = this.moov.mvhd.timescale;\n\t\tmovie.isFragmented = (this.moov.mvex != null);\n\t\tif (movie.isFragmented && this.moov.mvex.mehd) {\n\t\t\tmovie.fragment_duration = this.moov.mvex.mehd.fragment_duration;\n\t\t}\n\t\tmovie.isProgressive = this.isProgressive;\n\t\tmovie.hasIOD = (this.moov.iods != null);\n\t\tmovie.brands = [];\n\t\tmovie.brands.push(this.ftyp.major_brand);\n\t\tmovie.brands = movie.brands.concat(this.ftyp.compatible_brands);\n\t\tmovie.created = new Date(_1904+this.moov.mvhd.creation_time*1000);\n\t\tmovie.modified = new Date(_1904+this.moov.mvhd.modification_time*1000);\n\t\tmovie.tracks = [];\n\t\tmovie.audioTracks = [];\n\t\tmovie.videoTracks = [];\n\t\tmovie.subtitleTracks = [];\n\t\tmovie.metadataTracks = [];\n\t\tmovie.hintTracks = [];\n\t\tmovie.otherTracks = [];\n\t\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\t\ttrak = this.moov.traks[i];\n\t\t\tsample_desc = trak.mdia.minf.stbl.stsd.entries[0];\n\t\t\ttrack = {};\n\t\t\tmovie.tracks.push(track);\n\t\t\ttrack.id = trak.tkhd.track_id;\n\t\t\ttrack.name = trak.mdia.hdlr.name;\n\t\t\ttrack.references = [];\n\t\t\tif (trak.tref) {\n\t\t\t\tfor (j = 0; j < trak.tref.boxes.length; j++) {\n\t\t\t\t\tref = {};\n\t\t\t\t\ttrack.references.push(ref);\n\t\t\t\t\tref.type = trak.tref.boxes[j].type;\n\t\t\t\t\tref.track_ids = trak.tref.boxes[j].track_ids;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (trak.edts) {\n\t\t\t\ttrack.edits = trak.edts.elst.entries;\n\t\t\t}\n\t\t\ttrack.created = new Date(_1904+trak.tkhd.creation_time*1000);\n\t\t\ttrack.modified = new Date(_1904+trak.tkhd.modification_time*1000);\n\t\t\ttrack.movie_duration = trak.tkhd.duration;\n\t\t\ttrack.movie_timescale = movie.timescale;\n\t\t\ttrack.layer = trak.tkhd.layer;\n\t\t\ttrack.alternate_group = trak.tkhd.alternate_group;\n\t\t\ttrack.volume = trak.tkhd.volume;\n\t\t\ttrack.matrix = trak.tkhd.matrix;\n\t\t\ttrack.track_width = trak.tkhd.width/(1<<16);\n\t\t\ttrack.track_height = trak.tkhd.height/(1<<16);\n\t\t\ttrack.timescale = trak.mdia.mdhd.timescale;\n\t\t\ttrack.cts_shift = trak.mdia.minf.stbl.cslg;\n\t\t\ttrack.duration = trak.mdia.mdhd.duration;\n\t\t\ttrack.samples_duration = trak.samples_duration;\n\t\t\ttrack.codec = sample_desc.getCodec();\n\t\t\ttrack.kind = (trak.udta && trak.udta.kinds.length ? trak.udta.kinds[0] : { schemeURI: \"\", value: \"\"});\n\t\t\ttrack.language = (trak.mdia.elng ? trak.mdia.elng.extended_language : trak.mdia.mdhd.languageString);\n\t\t\ttrack.nb_samples = trak.samples.length;\n\t\t\ttrack.size = trak.samples_size;\n\t\t\ttrack.bitrate = (track.size*8*track.timescale)/track.samples_duration;\n\t\t\tif (sample_desc.isAudio()) {\n\t\t\t\ttrack.type = \"audio\";\n\t\t\t\tmovie.audioTracks.push(track);\n\t\t\t\ttrack.audio = {};\n\t\t\t\ttrack.audio.sample_rate = sample_desc.getSampleRate();\n\t\t\t\ttrack.audio.channel_count = sample_desc.getChannelCount();\n\t\t\t\ttrack.audio.sample_size = sample_desc.getSampleSize();\n\t\t\t} else if (sample_desc.isVideo()) {\n\t\t\t\ttrack.type = \"video\";\n\t\t\t\tmovie.videoTracks.push(track);\n\t\t\t\ttrack.video = {};\n\t\t\t\ttrack.video.width = sample_desc.getWidth();\n\t\t\t\ttrack.video.height = sample_desc.getHeight();\n\t\t\t} else if (sample_desc.isSubtitle()) {\n\t\t\t\ttrack.type = \"subtitles\";\n\t\t\t\tmovie.subtitleTracks.push(track);\n\t\t\t} else if (sample_desc.isHint()) {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.hintTracks.push(track);\n\t\t\t} else if (sample_desc.isMetadata()) {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.metadataTracks.push(track);\n\t\t\t} else {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.otherTracks.push(track);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tmovie.hasMoov = false;\n\t}\n\tmovie.mime = \"\";\n\tif (movie.hasMoov && movie.tracks) {\n\t\tif (movie.videoTracks && movie.videoTracks.length > 0) {\n\t\t\tmovie.mime += 'video/mp4; codecs=\\\"';\n\t\t} else if (movie.audioTracks && movie.audioTracks.length > 0) {\n\t\t\tmovie.mime += 'audio/mp4; codecs=\\\"';\n\t\t} else {\n\t\t\tmovie.mime += 'application/mp4; codecs=\\\"';\n\t\t}\n\t\tfor (i = 0; i < movie.tracks.length; i++) {\n\t\t\tif (i !== 0) movie.mime += ',';\n\t\t\tmovie.mime+= movie.tracks[i].codec;\n\t\t}\n\t\tmovie.mime += '\\\"; profiles=\\\"';\n\t\tmovie.mime += this.ftyp.compatible_brands.join();\n\t\tmovie.mime += '\\\"';\n\t}\n\treturn movie;\n}\n\nISOFile.prototype.setNextSeekPositionFromSample = function (sample) {\n\tif (!sample) {\n\t\treturn;\n\t}\n\tif (this.nextSeekPosition) {\n\t\tthis.nextSeekPosition = Math.min(sample.offset+sample.alreadyRead,this.nextSeekPosition);\n\t} else {\n\t\tthis.nextSeekPosition = sample.offset+sample.alreadyRead;\n\t}\n}\n\nISOFile.prototype.processSamples = function(last) {\n\tvar i;\n\tvar trak;\n\tif (!this.sampleProcessingStarted) return;\n\n\t/* For each track marked for fragmentation,\n\t check if the next sample is there (i.e. if the sample information is known (i.e. moof has arrived) and if it has been downloaded)\n\t and create a fragment with it */\n\tif (this.isFragmentationInitialized && this.onSegment !== null) {\n\t\tfor (i = 0; i < this.fragmentedTracks.length; i++) {\n\t\t\tvar fragTrak = this.fragmentedTracks[i];\n\t\t\ttrak = fragTrak.trak;\n\t\t\twhile (trak.nextSample < trak.samples.length && this.sampleProcessingStarted) {\n\t\t\t\t/* The sample information is there (either because the file is not fragmented and this is not the last sample,\n\t\t\t\tor because the file is fragmented and the moof for that sample has been received */\n\t\t\t\tLog.debug(\"ISOFile\", \"Creating media fragment on track #\"+fragTrak.id +\" for sample \"+trak.nextSample);\n\t\t\t\tvar result = this.createFragment(fragTrak.id, trak.nextSample, fragTrak.segmentStream);\n\t\t\t\tif (result) {\n\t\t\t\t\tfragTrak.segmentStream = result;\n\t\t\t\t\ttrak.nextSample++;\n\t\t\t\t} else {\n\t\t\t\t\t/* The fragment could not be created because the media data is not there (not downloaded), wait for it */\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t/* A fragment is created by sample, but the segment is the accumulation in the buffer of these fragments.\n\t\t\t\t It is flushed only as requested by the application (nb_samples) to avoid too many callbacks */\n\t\t\t\tif (trak.nextSample % fragTrak.nb_samples === 0 || (last || trak.nextSample >= trak.samples.length)) {\n\t\t\t\t\tLog.info(\"ISOFile\", \"Sending fragmented data on track #\"+fragTrak.id+\" for samples [\"+Math.max(0,trak.nextSample-fragTrak.nb_samples)+\",\"+(trak.nextSample-1)+\"]\");\n\t\t\t\t\tLog.info(\"ISOFile\", \"Sample data size in memory: \"+this.getAllocatedSampleDataSize());\n\t\t\t\t\tif (this.onSegment) {\n\t\t\t\t\t\tthis.onSegment(fragTrak.id, fragTrak.user, fragTrak.segmentStream.buffer, trak.nextSample, (last || trak.nextSample >= trak.samples.length));\n\t\t\t\t\t}\n\t\t\t\t\t/* force the creation of a new buffer */\n\t\t\t\t\tfragTrak.segmentStream = null;\n\t\t\t\t\tif (fragTrak !== this.fragmentedTracks[i]) {\n\t\t\t\t\t\t/* make sure we can stop fragmentation if needed */\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (this.onSamples !== null) {\n\t\t/* For each track marked for data export,\n\t\t check if the next sample is there (i.e. has been downloaded) and send it */\n\t\tfor (i = 0; i < this.extractedTracks.length; i++) {\n\t\t\tvar extractTrak = this.extractedTracks[i];\n\t\t\ttrak = extractTrak.trak;\n\t\t\twhile (trak.nextSample < trak.samples.length && this.sampleProcessingStarted) {\n\t\t\t\tLog.debug(\"ISOFile\", \"Exporting on track #\"+extractTrak.id +\" sample #\"+trak.nextSample);\n\t\t\t\tvar sample = this.getSample(trak, trak.nextSample);\n\t\t\t\tif (sample) {\n\t\t\t\t\ttrak.nextSample++;\n\t\t\t\t\textractTrak.samples.push(sample);\n\t\t\t\t} else {\n\t\t\t\t\tthis.setNextSeekPositionFromSample(trak.samples[trak.nextSample]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (trak.nextSample % extractTrak.nb_samples === 0 || trak.nextSample >= trak.samples.length) {\n\t\t\t\t\tLog.debug(\"ISOFile\", \"Sending samples on track #\"+extractTrak.id+\" for sample \"+trak.nextSample);\n\t\t\t\t\tif (this.onSamples) {\n\t\t\t\t\t\tthis.onSamples(extractTrak.id, extractTrak.user, extractTrak.samples);\n\t\t\t\t\t}\n\t\t\t\t\textractTrak.samples = [];\n\t\t\t\t\tif (extractTrak !== this.extractedTracks[i]) {\n\t\t\t\t\t\t/* check if the extraction needs to be stopped */\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/* Find and return specific boxes using recursion and early return */\nISOFile.prototype.getBox = function(type) {\n var result = this.getBoxes(type, true);\n return (result.length ? result[0] : null);\n}\n\nISOFile.prototype.getBoxes = function(type, returnEarly) {\n var result = [];\n ISOFile._sweep.call(this, type, result, returnEarly);\n return result;\n}\n\nISOFile._sweep = function(type, result, returnEarly) {\n if (this.type && this.type == type) result.push(this);\n for (var box in this.boxes) {\n if (result.length && returnEarly) return;\n ISOFile._sweep.call(this.boxes[box], type, result, returnEarly);\n }\n}\n\nISOFile.prototype.getTrackSamplesInfo = function(track_id) {\n\tvar track = this.getTrackById(track_id);\n\tif (track) {\n\t\treturn track.samples;\n\t} else {\n\t\treturn;\n\t}\n}\n\nISOFile.prototype.getTrackSample = function(track_id, number) {\n\tvar track = this.getTrackById(track_id);\n\tvar sample = this.getSample(track, number);\n\treturn sample;\n}\n\n/* Called by the application to release the resources associated to samples already forwarded to the application */\nISOFile.prototype.releaseUsedSamples = function (id, sampleNum) {\n\tvar size = 0;\n\tvar trak = this.getTrackById(id);\n\tif (!trak.lastValidSample) trak.lastValidSample = 0;\n\tfor (var i = trak.lastValidSample; i < sampleNum; i++) {\n\t\tsize+=this.releaseSample(trak, i);\n\t}\n\tLog.info(\"ISOFile\", \"Track #\"+id+\" released samples up to \"+sampleNum+\" (released size: \"+size+\", remaining: \"+this.samplesDataSize+\")\");\n\ttrak.lastValidSample = sampleNum;\n}\n\nISOFile.prototype.start = function() {\n\tthis.sampleProcessingStarted = true;\n\tthis.processSamples(false);\n}\n\nISOFile.prototype.stop = function() {\n\tthis.sampleProcessingStarted = false;\n}\n\n/* Called by the application to flush the remaining samples (e.g. once the download is finished or when no more samples will be added) */\nISOFile.prototype.flush = function() {\n\tLog.info(\"ISOFile\", \"Flushing remaining samples\");\n\tthis.updateSampleLists();\n\tthis.processSamples(true);\n\tthis.stream.cleanBuffers();\n\tthis.stream.logBufferLevel(true);\n}\n\n/* Finds the byte offset for a given time on a given track\n also returns the time of the previous rap */\nISOFile.prototype.seekTrack = function(time, useRap, trak) {\n\tvar j;\n\tvar sample;\n\tvar seek_offset = Infinity;\n\tvar rap_seek_sample_num = 0;\n\tvar seek_sample_num = 0;\n\tvar timescale;\n\n\tif (trak.samples.length === 0) {\n\t\tLog.info(\"ISOFile\", \"No sample in track, cannot seek! Using time \"+Log.getDurationString(0, 1) +\" and offset: \"+0);\n\t\treturn { offset: 0, time: 0 };\n\t}\n\n\tfor (j = 0; j < trak.samples.length; j++) {\n\t\tsample = trak.samples[j];\n\t\tif (j === 0) {\n\t\t\tseek_sample_num = 0;\n\t\t\ttimescale = sample.timescale;\n\t\t} else if (sample.cts > time * sample.timescale) {\n\t\t\tseek_sample_num = j-1;\n\t\t\tbreak;\n\t\t}\n\t\tif (useRap && sample.is_sync) {\n\t\t\trap_seek_sample_num = j;\n\t\t}\n\t}\n\tif (useRap) {\n\t\tseek_sample_num = rap_seek_sample_num;\n\t}\n\ttime = trak.samples[seek_sample_num].cts;\n\ttrak.nextSample = seek_sample_num;\n\twhile (trak.samples[seek_sample_num].alreadyRead === trak.samples[seek_sample_num].size) {\n\t\t// No remaining samples to look for, all are downloaded.\n\t\tif (!trak.samples[seek_sample_num + 1]) {\n\t\t\tbreak;\n\t\t}\n\t\tseek_sample_num++;\n\t}\n\tseek_offset = trak.samples[seek_sample_num].offset+trak.samples[seek_sample_num].alreadyRead;\n\tLog.info(\"ISOFile\", \"Seeking to \"+(useRap ? \"RAP\": \"\")+\" sample #\"+trak.nextSample+\" on track \"+trak.tkhd.track_id+\", time \"+Log.getDurationString(time, timescale) +\" and offset: \"+seek_offset);\n\treturn { offset: seek_offset, time: time/timescale };\n}\n\nISOFile.prototype.getTrackDuration = function (trak) {\n\tvar sample;\n\n\tif (!trak.samples) {\n\t\treturn Infinity;\n\t}\n\tsample = trak.samples[trak.samples.length - 1];\n\treturn (sample.cts + sample.duration) / sample.timescale;\n}\n\n/* Finds the byte offset in the file corresponding to the given time or to the time of the previous RAP */\nISOFile.prototype.seek = function(time, useRap) {\n\tvar moov = this.moov;\n\tvar trak;\n\tvar trak_seek_info;\n\tvar i;\n\tvar seek_info = { offset: Infinity, time: Infinity };\n\tif (!this.moov) {\n\t\tthrow \"Cannot seek: moov not received!\";\n\t} else {\n\t\tfor (i = 0; i<moov.traks.length; i++) {\n\t\t\ttrak = moov.traks[i];\n\t\t\tif (time > this.getTrackDuration(trak)) { // skip tracks that already ended\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttrak_seek_info = this.seekTrack(time, useRap, trak);\n\t\t\tif (trak_seek_info.offset < seek_info.offset) {\n\t\t\t\tseek_info.offset = trak_seek_info.offset;\n\t\t\t}\n\t\t\tif (trak_seek_info.time < seek_info.time) {\n\t\t\t\tseek_info.time = trak_seek_info.time;\n\t\t\t}\n\t\t}\n\t\tLog.info(\"ISOFile\", \"Seeking at time \"+Log.getDurationString(seek_info.time, 1)+\" needs a buffer with a fileStart position of \"+seek_info.offset);\n\t\tif (seek_info.offset === Infinity) {\n\t\t\t/* No sample info, in all tracks, cannot seek */\n\t\t\tseek_info = { offset: this.nextParsePosition, time: 0 };\n\t\t} else {\n\t\t\t/* check if the seek position is already in some buffer and\n\t\t\t in that case return the end of that buffer (or of the last contiguous buffer) */\n\t\t\t/* TODO: Should wait until append operations are done */\n\t\t\tseek_info.offset = this.stream.getEndFilePositionAfter(seek_info.offset);\n\t\t}\n\t\tLog.info(\"ISOFile\", \"Adjusted seek position (after checking data already in buffer): \"+seek_info.offset);\n\t\treturn seek_info;\n\t}\n}\n\nISOFile.prototype.equal = function(b) {\n\tvar box_index = 0;\n\twhile (box_index < this.boxes.length && box_index < b.boxes.length) {\n\t\tvar a_box = this.boxes[box_index];\n\t\tvar b_box = b.boxes[box_index];\n\t\tif (!BoxParser.boxEqual(a_box, b_box)) {\n\t\t\treturn false;\n\t\t}\n\t\tbox_index++;\n\t}\n\treturn true;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.ISOFile = ISOFile;\n}\n// file:src/isofile-advanced-parsing.js\n/* position in the current buffer of the beginning of the last box parsed */\nISOFile.prototype.lastBoxStartPosition = 0;\n/* indicator if the parsing is stuck in the middle of an mdat box */\nISOFile.prototype.parsingMdat = null;\n/* next file position that the parser needs:\n - 0 until the first buffer (i.e. fileStart ===0) has been received \n - otherwise, the next box start until the moov box has been parsed\n - otherwise, the position of the next sample to fetch\n */\nISOFile.prototype.nextParsePosition = 0;\n/* keep mdat data */\nISOFile.prototype.discardMdatData = false;\n\nISOFile.prototype.processIncompleteBox = function(ret) {\n\tvar box;\n\tvar merged;\n\tvar found;\n\t\n\t/* we did not have enough bytes in the current buffer to parse the entire box */\n\tif (ret.type === \"mdat\") { \n\t\t/* we had enough bytes to get its type and size and it's an 'mdat' */\n\t\t\n\t\t/* special handling for mdat boxes, since we don't actually need to parse it linearly \n\t\t we create the box */\n\t\tbox = new BoxParser[ret.type+\"Box\"](ret.size);\t\n\t\tthis.parsingMdat = box;\n\t\tthis.boxes.push(box);\n\t\tthis.mdats.push(box);\t\t\t\n\t\tbox.start = ret.start;\n\t\tbox.hdr_size = ret.hdr_size;\n\t\tthis.stream.addUsedBytes(box.hdr_size);\n\n\t\t/* indicate that the parsing should start from the end of the box */\n\t\tthis.lastBoxStartPosition = box.start + box.size;\n \t\t/* let's see if we have the end of the box in the other buffers */\n\t\tfound = this.stream.seek(box.start + box.size, false, this.discardMdatData);\n\t\tif (found) {\n\t\t\t/* found the end of the box */\n\t\t\tthis.parsingMdat = null;\n\t\t\t/* let's see if we can parse more in this buffer */\n\t\t\treturn true;\n\t\t} else {\n\t\t\t/* 'mdat' end not found in the existing buffers */\n\t\t\t/* determine the next position in the file to start parsing from */\n\t\t\tif (!this.moovStartFound) {\n\t\t\t\t/* moov not find yet, \n\t\t\t\t the file probably has 'mdat' at the beginning, and 'moov' at the end, \n\t\t\t\t indicate that the downloader should not try to download those bytes now */\n\t\t\t\tthis.nextParsePosition = box.start + box.size;\n\t\t\t} else {\n\t\t\t\t/* we have the start of the moov box, \n\t\t\t\t the next bytes should try to complete the current 'mdat' */\n\t\t\t\tthis.nextParsePosition = this.stream.findEndContiguousBuf();\n\t\t\t}\n\t\t\t/* not much we can do, wait for more buffers to arrive */\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\t/* box is incomplete, we may not even know its type */\n\t\tif (ret.type === \"moov\") { \n\t\t\t/* the incomplete box is a 'moov' box */\n\t\t\tthis.moovStartFound = true;\n\t\t\tif (this.mdats.length === 0) {\n\t\t\t\tthis.isProgressive = true;\n\t\t\t}\n\t\t}\n\t\t/* either it's not an mdat box (and we need to parse it, we cannot skip it)\n\t\t (TODO: we could skip 'free' boxes ...)\n\t\t\t or we did not have enough data to parse the type and size of the box, \n\t\t we try to concatenate the current buffer with the next buffer to restart parsing */\n\t\tmerged = (this.stream.mergeNextBuffer ? this.stream.mergeNextBuffer() : false);\n\t\tif (merged) {\n\t\t\t/* The next buffer was contiguous, the merging succeeded,\n\t\t\t we can now continue parsing, \n\t\t\t the next best position to parse is at the end of this new buffer */\n\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\treturn true;\n\t\t} else {\n\t\t\t/* we cannot concatenate existing buffers because they are not contiguous or because there is no additional buffer */\n\t\t\t/* The next best position to parse is still at the end of this old buffer */\n\t\t\tif (!ret.type) {\n\t\t\t\t/* There were not enough bytes in the buffer to parse the box type and length,\n\t\t\t\t the next fetch should retrieve those missing bytes, i.e. the next bytes after this buffer */\n\t\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\t} else {\n\t\t\t\t/* we had enough bytes to parse size and type of the incomplete box\n\t\t\t\t if we haven't found yet the moov box, skip this one and try the next one \n\t\t\t\t if we have found the moov box, let's continue linear parsing */\n\t\t\t\tif (this.moovStartFound) {\n\t\t\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\t\t} else {\n\t\t\t\t\tthis.nextParsePosition = this.stream.getPosition() + ret.size;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n}\n\nISOFile.prototype.hasIncompleteMdat = function () {\n\treturn (this.parsingMdat !== null);\n}\n\nISOFile.prototype.processIncompleteMdat = function () {\n\tvar box;\n\tvar found;\n\t\n\t/* we are in the parsing of an incomplete mdat box */\n\tbox = this.parsingMdat;\n\n\tfound = this.stream.seek(box.start + box.size, false, this.discardMdatData);\n\tif (found) {\n\t\tLog.debug(\"ISOFile\", \"Found 'mdat' end in buffered data\");\n\t\t/* the end of the mdat has been found */ \n\t\tthis.parsingMdat = null;\n\t\t/* we can parse more in this buffer */\n\t\treturn true;\n\t} else {\n\t\t/* we don't have the end of this mdat yet, \n\t\t indicate that the next byte to fetch is the end of the buffers we have so far, \n\t\t return and wait for more buffer to come */\n\t\tthis.nextParsePosition = this.stream.findEndContiguousBuf();\n\t\treturn false;\n\t}\n}\n\nISOFile.prototype.restoreParsePosition = function() {\n\t/* Reposition at the start position of the previous box not entirely parsed */\n\treturn this.stream.seek(this.lastBoxStartPosition, true, this.discardMdatData);\n}\n\nISOFile.prototype.saveParsePosition = function() {\n\t/* remember the position of the box start in case we need to roll back (if the box is incomplete) */\n\tthis.lastBoxStartPosition = this.stream.getPosition();\t\n}\n\nISOFile.prototype.updateUsedBytes = function(box, ret) {\n\tif (this.stream.addUsedBytes) {\n\t\tif (box.type === \"mdat\") {\n\t\t\t/* for an mdat box, only its header is considered used, other bytes will be used when sample data is requested */\n\t\t\tthis.stream.addUsedBytes(box.hdr_size);\n\t\t\tif (this.discardMdatData) {\n\t\t\t\tthis.stream.addUsedBytes(box.size-box.hdr_size);\n\t\t\t}\n\t\t} else {\n\t\t\t/* for all other boxes, the entire box data is considered used */\n\t\t\tthis.stream.addUsedBytes(box.size);\n\t\t}\t\n\t}\n}\n// file:src/isofile-advanced-creation.js\nISOFile.prototype.add = BoxParser.Box.prototype.add;\nISOFile.prototype.addBox = BoxParser.Box.prototype.addBox;\n\nISOFile.prototype.init = function (_options) {\n\tvar options = _options || {}; \n\tvar ftyp = this.add(\"ftyp\").set(\"major_brand\", (options.brands && options.brands[0]) || \"iso4\")\n\t\t\t\t\t\t\t .set(\"minor_version\", 0)\n\t\t\t\t\t\t\t .set(\"compatible_brands\", options.brands || [\"iso4\"]);\n\tvar moov = this.add(\"moov\");\n\tmoov.add(\"mvhd\").set(\"timescale\", options.timescale || 600)\n\t\t\t\t\t.set(\"rate\", options.rate || 1<<16)\n\t\t\t\t\t.set(\"creation_time\", 0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"duration\", options.duration || 0)\n\t\t\t\t\t.set(\"volume\", (options.width) ? 0 : 0x0100)\n\t\t\t\t\t.set(\"matrix\", [ 1<<16, 0, 0, 0, 1<<16, 0, 0, 0, 0x40000000])\n\t\t\t\t\t.set(\"next_track_id\", 1);\n\tmoov.add(\"mvex\");\n\treturn this;\n}\n\nISOFile.prototype.addTrack = function (_options) {\n\tif (!this.moov) {\n\t\tthis.init(_options);\n\t}\n\n\tvar options = _options || {}; \n\toptions.width = options.width || 320;\n\toptions.height = options.height || 320;\n\toptions.id = options.id || this.moov.mvhd.next_track_id;\n\toptions.type = options.type || \"avc1\";\n\n\tvar trak = this.moov.add(\"trak\");\n\tthis.moov.mvhd.next_track_id = options.id+1;\n\ttrak.add(\"tkhd\").set(\"flags\",BoxParser.TKHD_FLAG_ENABLED | \n\t\t\t\t\t\t\t\t BoxParser.TKHD_FLAG_IN_MOVIE | \n\t\t\t\t\t\t\t\t BoxParser.TKHD_FLAG_IN_PREVIEW)\n\t\t\t\t\t.set(\"creation_time\",0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"track_id\", options.id)\n\t\t\t\t\t.set(\"duration\", options.duration || 0)\n\t\t\t\t\t.set(\"layer\", options.layer || 0)\n\t\t\t\t\t.set(\"alternate_group\", 0)\n\t\t\t\t\t.set(\"volume\", 1)\n\t\t\t\t\t.set(\"matrix\", [ 1<<16, 0, 0, 0, 1<<16, 0, 0, 0, 0x40000000 ])\n\t\t\t\t\t.set(\"width\", options.width << 16)\n\t\t\t\t\t.set(\"height\", options.height << 16);\n\n\tvar mdia = trak.add(\"mdia\");\n\tmdia.add(\"mdhd\").set(\"creation_time\", 0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"timescale\", options.timescale || 1)\n\t\t\t\t\t.set(\"duration\", options.media_duration || 0)\n\t\t\t\t\t.set(\"language\", options.language || \"und\");\n\n\tmdia.add(\"hdlr\").set(\"handler\", options.hdlr || \"vide\")\n\t\t\t\t\t.set(\"name\", options.name || \"Track created with MP4Box.js\");\n\n\tmdia.add(\"elng\").set(\"extended_language\", options.language || \"fr-FR\");\n\n\tvar minf = mdia.add(\"minf\");\n\tif (BoxParser[options.type+\"SampleEntry\"] === undefined) return;\n\tvar sample_description_entry = new BoxParser[options.type+\"SampleEntry\"]();\n\tsample_description_entry.data_reference_index = 1;\n\tvar media_type = \"\";\n\tfor (var mediaType in BoxParser.sampleEntryCodes) {\n\t\tvar codes = BoxParser.sampleEntryCodes[mediaType];\n\t\tfor (var i = 0; i < codes.length; i++) {\n\t\t\tif (codes.indexOf(options.type) > -1) {\n\t\t\t\tmedia_type = mediaType;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tswitch(media_type) {\n\t\tcase \"Visual\":\n\t\t\tminf.add(\"vmhd\").set(\"graphicsmode\",0).set(\"opcolor\", [ 0, 0, 0 ]);\n\t\t\tsample_description_entry.set(\"width\", options.width)\n\t\t\t\t\t\t.set(\"height\", options.height)\n\t\t\t\t\t\t.set(\"horizresolution\", 0x48<<16)\n\t\t\t\t\t\t.set(\"vertresolution\", 0x48<<16)\n\t\t\t\t\t\t.set(\"frame_count\", 1)\n\t\t\t\t\t\t.set(\"compressorname\", options.type+\" Compressor\")\n\t\t\t\t\t\t.set(\"depth\", 0x18);\n\t\t\tif (options.avcDecoderConfigRecord) {\n\t\t\t\tvar avcC = new BoxParser.avcCBox();\n\t\t\t\tavcC.parse(new MP4BoxStream(options.avcDecoderConfigRecord));\n\t\t\t\tsample_description_entry.addBox(avcC);\n\t\t\t} else if (options.hevcDecoderConfigRecord) {\n\t\t\t\tvar hvcC = new BoxParser.hvcCBox();\n\t\t\t\thvcC.parse(new MP4BoxStream(options.hevcDecoderConfigRecord));\n\t\t\t\tsample_description_entry.addBox(hvcC);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"Audio\":\n\t\t\tminf.add(\"smhd\").set(\"balance\", options.balance || 0);\n\t\t\tsample_description_entry.set(\"channel_count\", options.channel_count || 2)\n\t\t\t\t\t\t.set(\"samplesize\", options.samplesize || 16)\n\t\t\t\t\t\t.set(\"samplerate\", options.samplerate || 1<<16);\n\t\t\tbreak;\n\t\tcase \"Hint\":\n\t\t\tminf.add(\"hmhd\"); // TODO: add properties\n\t\t\tbreak;\n\t\tcase \"Subtitle\":\n\t\t\tminf.add(\"sthd\");\n\t\t\tswitch (options.type) {\n\t\t\t\tcase \"stpp\":\n\t\t\t\t\tsample_description_entry.set(\"namespace\", options.namespace || \"nonamespace\")\n\t\t\t\t\t\t\t\t.set(\"schema_location\", options.schema_location || \"\")\n\t\t\t\t\t\t\t\t.set(\"auxiliary_mime_types\", options.auxiliary_mime_types || \"\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"Metadata\":\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t\tcase \"System\":\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t}\n\tif (options.description) {\n\t\tsample_description_entry.addBox(options.description);\n\t}\n\tif (options.description_boxes) {\n\t\toptions.description_boxes.forEach(function (b) {\n\t\t\tsample_description_entry.addBox(b);\n\t\t});\n\t}\n\tminf.add(\"dinf\").add(\"dref\").addEntry((new BoxParser[\"url Box\"]()).set(\"flags\", 0x1));\n\tvar stbl = minf.add(\"stbl\");\n\tstbl.add(\"stsd\").addEntry(sample_description_entry);\n\tstbl.add(\"stts\").set(\"sample_counts\", [])\n\t\t\t\t\t.set(\"sample_deltas\", []);\n\tstbl.add(\"stsc\").set(\"first_chunk\", [])\n\t\t\t\t\t.set(\"samples_per_chunk\", [])\n\t\t\t\t\t.set(\"sample_description_index\", []);\n\tstbl.add(\"stco\").set(\"chunk_offsets\", []);\n\tstbl.add(\"stsz\").set(\"sample_sizes\", []);\n\n\tthis.moov.mvex.add(\"trex\").set(\"track_id\", options.id)\n\t\t\t\t\t\t\t .set(\"default_sample_description_index\", options.default_sample_description_index || 1)\n\t\t\t\t\t\t\t .set(\"default_sample_duration\", options.default_sample_duration || 0)\n\t\t\t\t\t\t\t .set(\"default_sample_size\", options.default_sample_size || 0)\n\t\t\t\t\t\t\t .set(\"default_sample_flags\", options.default_sample_flags || 0);\n\tthis.buildTrakSampleLists(trak);\n\treturn options.id;\n}\n\nBoxParser.Box.prototype.computeSize = function(stream_) {\n\tvar stream = stream_ || new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n}\n\nISOFile.prototype.addSample = function (track_id, data, _options) {\n\tvar options = _options || {};\n\tvar sample = {};\n\tvar trak = this.getTrackById(track_id);\n\tif (trak === null) return;\n sample.number = trak.samples.length;\n\tsample.track_id = trak.tkhd.track_id;\n\tsample.timescale = trak.mdia.mdhd.timescale;\n\tsample.description_index = (options.sample_description_index ? options.sample_description_index - 1: 0);\n\tsample.description = trak.mdia.minf.stbl.stsd.entries[sample.description_index];\n\tsample.data = data;\n\tsample.size = data.byteLength;\n\tsample.alreadyRead = sample.size;\n\tsample.duration = options.duration || 1;\n\tsample.cts = options.cts || 0;\n\tsample.dts = options.dts || 0;\n\tsample.is_sync = options.is_sync || false;\n\tsample.is_leading = options.is_leading || 0;\n\tsample.depends_on = options.depends_on || 0;\n\tsample.is_depended_on = options.is_depended_on || 0;\n\tsample.has_redundancy = options.has_redundancy || 0;\n\tsample.degradation_priority = options.degradation_priority || 0;\n\tsample.offset = 0;\n\tsample.subsamples = options.subsamples;\n\ttrak.samples.push(sample);\n\ttrak.samples_size += sample.size;\n\ttrak.samples_duration += sample.duration;\n\tif (trak.first_dts === undefined) {\n\t\ttrak.first_dts = options.dts;\n\t}\n\n\tthis.processSamples();\n\t\n\tvar moof = this.createSingleSampleMoof(sample);\n\tthis.addBox(moof);\n\tmoof.computeSize();\n\t/* adjusting the data_offset now that the moof size is known*/\n\tmoof.trafs[0].truns[0].data_offset = moof.size+8; //8 is mdat header\n\tthis.add(\"mdat\").data = new Uint8Array(data);\n\treturn sample;\n}\n\nISOFile.prototype.createSingleSampleMoof = function(sample) {\n\tvar sample_flags = 0;\n\tif (sample.is_sync)\n\t\tsample_flags = (1 << 25); // sample_depends_on_none (I picture)\n\telse\n\t\tsample_flags = (1 << 16); // non-sync\n\n\tvar moof = new BoxParser.moofBox();\n\tmoof.add(\"mfhd\").set(\"sequence_number\", this.nextMoofNumber);\n\tthis.nextMoofNumber++;\n\tvar traf = moof.add(\"traf\");\n\tvar trak = this.getTrackById(sample.track_id);\n\ttraf.add(\"tfhd\").set(\"track_id\", sample.track_id)\n\t\t\t\t\t.set(\"flags\", BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF);\n\ttraf.add(\"tfdt\").set(\"baseMediaDecodeTime\", (sample.dts - (trak.first_dts || 0)));\n\ttraf.add(\"trun\").set(\"flags\", BoxParser.TRUN_FLAGS_DATA_OFFSET | BoxParser.TRUN_FLAGS_DURATION | \n\t\t\t\t \t\t\t\t BoxParser.TRUN_FLAGS_SIZE | BoxParser.TRUN_FLAGS_FLAGS | \n\t\t\t\t \t\t\t\t BoxParser.TRUN_FLAGS_CTS_OFFSET)\n\t\t\t\t\t.set(\"data_offset\",0)\n\t\t\t\t\t.set(\"first_sample_flags\",0)\n\t\t\t\t\t.set(\"sample_count\",1)\n\t\t\t\t\t.set(\"sample_duration\",[sample.duration])\n\t\t\t\t\t.set(\"sample_size\",[sample.size])\n\t\t\t\t\t.set(\"sample_flags\",[sample_flags])\n\t\t\t\t\t.set(\"sample_composition_time_offset\", [sample.cts - sample.dts]);\n\treturn moof;\n}\n\n// file:src/isofile-sample-processing.js\n/* Index of the last moof box received */\nISOFile.prototype.lastMoofIndex = 0;\n\n/* size of the buffers allocated for samples */\nISOFile.prototype.samplesDataSize = 0;\n\n/* Resets all sample tables */\nISOFile.prototype.resetTables = function () {\n\tvar i;\n\tvar trak, stco, stsc, stsz, stts, ctts, stss;\n\tthis.initial_duration = this.moov.mvhd.duration;\n\tthis.moov.mvhd.duration = 0;\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\ttrak = this.moov.traks[i];\n\t\ttrak.tkhd.duration = 0;\n\t\ttrak.mdia.mdhd.duration = 0;\n\t\tstco = trak.mdia.minf.stbl.stco || trak.mdia.minf.stbl.co64;\n\t\tstco.chunk_offsets = [];\n\t\tstsc = trak.mdia.minf.stbl.stsc;\n\t\tstsc.first_chunk = [];\n\t\tstsc.samples_per_chunk = [];\n\t\tstsc.sample_description_index = [];\n\t\tstsz = trak.mdia.minf.stbl.stsz || trak.mdia.minf.stbl.stz2;\n\t\tstsz.sample_sizes = [];\n\t\tstts = trak.mdia.minf.stbl.stts;\n\t\tstts.sample_counts = [];\n\t\tstts.sample_deltas = [];\n\t\tctts = trak.mdia.minf.stbl.ctts;\n\t\tif (ctts) {\n\t\t\tctts.sample_counts = [];\n\t\t\tctts.sample_offsets = [];\n\t\t}\n\t\tstss = trak.mdia.minf.stbl.stss;\n\t\tvar k = trak.mdia.minf.stbl.boxes.indexOf(stss);\n\t\tif (k != -1) trak.mdia.minf.stbl.boxes[k] = null;\n\t}\n}\n\nISOFile.initSampleGroups = function(trak, traf, sbgps, trak_sgpds, traf_sgpds) {\n\tvar l;\n\tvar k;\n\tvar sample_groups_info;\n\tvar sample_group_info;\n\tvar sample_group_key;\n\tfunction SampleGroupInfo(_type, _parameter, _sbgp) {\n\t\tthis.grouping_type = _type;\n\t\tthis.grouping_type_parameter = _parameter;\n\t\tthis.sbgp = _sbgp;\n\t\tthis.last_sample_in_run = -1;\n\t\tthis.entry_index = -1;\t\t\n\t}\n\tif (traf) {\n\t\ttraf.sample_groups_info = [];\n\t} \n\tif (!trak.sample_groups_info) {\n\t\ttrak.sample_groups_info = [];\n\t}\n\tfor (k = 0; k < sbgps.length; k++) {\n\t\tsample_group_key = sbgps[k].grouping_type +\"/\"+ sbgps[k].grouping_type_parameter;\n\t\tsample_group_info = new SampleGroupInfo(sbgps[k].grouping_type, sbgps[k].grouping_type_parameter, sbgps[k]);\n\t\tif (traf) {\n\t\t\ttraf.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t}\n\t\tif (!trak.sample_groups_info[sample_group_key]) {\n\t\t\ttrak.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t}\n\t\tfor (l=0; l <trak_sgpds.length; l++) {\n\t\t\tif (trak_sgpds[l].grouping_type === sbgps[k].grouping_type) {\n\t\t\t\tsample_group_info.description = trak_sgpds[l];\n\t\t\t\tsample_group_info.description.used = true;\n\t\t\t}\n\t\t}\n\t\tif (traf_sgpds) {\n\t\t\tfor (l=0; l <traf_sgpds.length; l++) {\n\t\t\t\tif (traf_sgpds[l].grouping_type === sbgps[k].grouping_type) {\n\t\t\t\t\tsample_group_info.fragment_description = traf_sgpds[l];\n\t\t\t\t\tsample_group_info.fragment_description.used = true;\n\t\t\t\t\tsample_group_info.is_fragment = true;\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t}\n\t}\n\tif (!traf) {\n\t\tfor (k = 0; k < trak_sgpds.length; k++) {\n\t\t\tif (!trak_sgpds[k].used && trak_sgpds[k].version >= 2) {\n\t\t\t\tsample_group_key = trak_sgpds[k].grouping_type +\"/0\";\n\t\t\t\tsample_group_info = new SampleGroupInfo(trak_sgpds[k].grouping_type, 0);\n\t\t\t\tif (!trak.sample_groups_info[sample_group_key]) {\n\t\t\t\t\ttrak.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (traf_sgpds) {\n\t\t\tfor (k = 0; k < traf_sgpds.length; k++) {\n\t\t\t\tif (!traf_sgpds[k].used && traf_sgpds[k].version >= 2) {\n\t\t\t\t\tsample_group_key = traf_sgpds[k].grouping_type +\"/0\";\n\t\t\t\t\tsample_group_info = new SampleGroupInfo(traf_sgpds[k].grouping_type, 0);\n\t\t\t\t\tsample_group_info.is_fragment = true;\n\t\t\t\t\tif (!traf.sample_groups_info[sample_group_key]) {\n\t\t\t\t\t\ttraf.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.setSampleGroupProperties = function(trak, sample, sample_number, sample_groups_info) {\n\tvar k;\n\tvar index;\n\tsample.sample_groups = [];\n\tfor (k in sample_groups_info) {\n\t\tsample.sample_groups[k] = {};\n\t\tsample.sample_groups[k].grouping_type = sample_groups_info[k].grouping_type;\n\t\tsample.sample_groups[k].grouping_type_parameter = sample_groups_info[k].grouping_type_parameter;\n\t\tif (sample_number >= sample_groups_info[k].last_sample_in_run) {\n\t\t\tif (sample_groups_info[k].last_sample_in_run < 0) {\n\t\t\t\tsample_groups_info[k].last_sample_in_run = 0;\n\t\t\t}\n\t\t\tsample_groups_info[k].entry_index++;\t\n\t\t\tif (sample_groups_info[k].entry_index <= sample_groups_info[k].sbgp.entries.length - 1) {\n\t\t\t\tsample_groups_info[k].last_sample_in_run += sample_groups_info[k].sbgp.entries[sample_groups_info[k].entry_index].sample_count;\n\t\t\t}\n\t\t}\n\t\tif (sample_groups_info[k].entry_index <= sample_groups_info[k].sbgp.entries.length - 1) {\n\t\t\tsample.sample_groups[k].group_description_index = sample_groups_info[k].sbgp.entries[sample_groups_info[k].entry_index].group_description_index;\n\t\t} else {\n\t\t\tsample.sample_groups[k].group_description_index = -1; // special value for not defined\n\t\t}\n\t\tif (sample.sample_groups[k].group_description_index !== 0) {\n\t\t\tvar description;\n\t\t\tif (sample_groups_info[k].fragment_description) {\n\t\t\t\tdescription = sample_groups_info[k].fragment_description;\n\t\t\t} else {\n\t\t\t\tdescription = sample_groups_info[k].description;\n\t\t\t}\n\t\t\tif (sample.sample_groups[k].group_description_index > 0) {\n\t\t\t\tif (sample.sample_groups[k].group_description_index > 65535) {\n\t\t\t\t\tindex = (sample.sample_groups[k].group_description_index >> 16)-1;\n\t\t\t\t} else {\n\t\t\t\t\tindex = sample.sample_groups[k].group_description_index-1;\n\t\t\t\t}\n\t\t\t\tif (description && index >= 0) {\n\t\t\t\t\tsample.sample_groups[k].description = description.entries[index];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (description && description.version >= 2) {\n\t\t\t\t\tif (description.default_group_description_index > 0) {\t\t\t\t\t\t\t\t\n\t\t\t\t\t\tsample.sample_groups[k].description = description.entries[description.default_group_description_index-1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.process_sdtp = function (sdtp, sample, number) {\n\tif (!sample) {\n\t\treturn;\n\t}\n\tif (sdtp) {\n\t\tsample.is_leading = sdtp.is_leading[number];\n\t\tsample.depends_on = sdtp.sample_depends_on[number];\n\t\tsample.is_depended_on = sdtp.sample_is_depended_on[number];\n\t\tsample.has_redundancy = sdtp.sample_has_redundancy[number];\n\t} else {\n\t\tsample.is_leading = 0;\n\t\tsample.depends_on = 0;\n\t\tsample.is_depended_on = 0\n\t\tsample.has_redundancy = 0;\n\t}\t\n}\n\n/* Build initial sample list from sample tables */\nISOFile.prototype.buildSampleLists = function() {\t\n\tvar i;\n\tvar trak;\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\ttrak = this.moov.traks[i];\n\t\tthis.buildTrakSampleLists(trak);\n\t}\n}\n\nISOFile.prototype.buildTrakSampleLists = function(trak) {\t\n\tvar j, k;\n\tvar stco, stsc, stsz, stts, ctts, stss, stsd, subs, sbgps, sgpds, stdp;\n\tvar chunk_run_index, chunk_index, last_chunk_in_run, offset_in_chunk, last_sample_in_chunk;\n\tvar last_sample_in_stts_run, stts_run_index, last_sample_in_ctts_run, ctts_run_index, last_stss_index, last_subs_index, subs_entry_index, last_subs_sample_index;\n\n\ttrak.samples = [];\n\ttrak.samples_duration = 0;\n\ttrak.samples_size = 0;\n\tstco = trak.mdia.minf.stbl.stco || trak.mdia.minf.stbl.co64;\n\tstsc = trak.mdia.minf.stbl.stsc;\n\tstsz = trak.mdia.minf.stbl.stsz || trak.mdia.minf.stbl.stz2;\n\tstts = trak.mdia.minf.stbl.stts;\n\tctts = trak.mdia.minf.stbl.ctts;\n\tstss = trak.mdia.minf.stbl.stss;\n\tstsd = trak.mdia.minf.stbl.stsd;\n\tsubs = trak.mdia.minf.stbl.subs;\n\tstdp = trak.mdia.minf.stbl.stdp;\n\tsbgps = trak.mdia.minf.stbl.sbgps;\n\tsgpds = trak.mdia.minf.stbl.sgpds;\n\t\n\tlast_sample_in_stts_run = -1;\n\tstts_run_index = -1;\n\tlast_sample_in_ctts_run = -1;\n\tctts_run_index = -1;\n\tlast_stss_index = 0;\n\tsubs_entry_index = 0;\n\tlast_subs_sample_index = 0;\t\t\n\n\tISOFile.initSampleGroups(trak, null, sbgps, sgpds);\n\n\tif (typeof stsz === \"undefined\") {\n\t\treturn;\n\t}\n\n\t/* we build the samples one by one and compute their properties */\n\tfor (j = 0; j < stsz.sample_sizes.length; j++) {\n\t\tvar sample = {};\n\t\tsample.number = j;\n\t\tsample.track_id = trak.tkhd.track_id;\n\t\tsample.timescale = trak.mdia.mdhd.timescale;\n\t\tsample.alreadyRead = 0;\n\t\ttrak.samples[j] = sample;\n\t\t/* size can be known directly */\n\t\tsample.size = stsz.sample_sizes[j];\n\t\ttrak.samples_size += sample.size;\n\t\t/* computing chunk-based properties (offset, sample description index)*/\n\t\tif (j === 0) {\t\t\t\t\n\t\t\tchunk_index = 1; /* the first sample is in the first chunk (chunk indexes are 1-based) */\n\t\t\tchunk_run_index = 0; /* the first chunk is the first entry in the first_chunk table */\n\t\t\tsample.chunk_index = chunk_index;\n\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\tlast_sample_in_chunk = stsc.samples_per_chunk[chunk_run_index];\n\t\t\toffset_in_chunk = 0;\n\n\t\t\t/* Is there another entry in the first_chunk table ? */\n\t\t\tif (chunk_run_index + 1 < stsc.first_chunk.length) {\n\t\t\t\t/* The last chunk in the run is the chunk before the next first chunk */\n\t\t\t\tlast_chunk_in_run = stsc.first_chunk[chunk_run_index+1]-1; \t\n\t\t\t} else {\n\t\t\t\t/* There is only one entry in the table, it is valid for all future chunks*/\n\t\t\t\tlast_chunk_in_run = Infinity;\n\t\t\t}\n\t\t} else {\n\t\t\tif (j < last_sample_in_chunk) {\n\t\t\t\t/* the sample is still in the current chunk */\n\t\t\t\tsample.chunk_index = chunk_index;\n\t\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\t} else {\n\t\t\t\t/* the sample is in the next chunk */\n\t\t\t\tchunk_index++;\n\t\t\t\tsample.chunk_index = chunk_index;\n\t\t\t\t/* reset the accumulated offset in the chunk */\n\t\t\t\toffset_in_chunk = 0;\n\t\t\t\tif (chunk_index <= last_chunk_in_run) {\n\t\t\t\t\t/* stay in the same entry of the first_chunk table */\n\t\t\t\t\t/* chunk_run_index unmodified */\n\t\t\t\t} else {\n\t\t\t\t\tchunk_run_index++;\n\t\t\t\t\t/* Is there another entry in the first_chunk table ? */\n\t\t\t\t\tif (chunk_run_index + 1 < stsc.first_chunk.length) {\n\t\t\t\t\t\t/* The last chunk in the run is the chunk before the next first chunk */\n\t\t\t\t\t\tlast_chunk_in_run = stsc.first_chunk[chunk_run_index+1]-1; \t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t/* There is only one entry in the table, it is valid for all future chunks*/\n\t\t\t\t\t\tlast_chunk_in_run = Infinity;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\t\tlast_sample_in_chunk += stsc.samples_per_chunk[chunk_run_index];\n\t\t\t}\n\t\t}\n\n\t\tsample.description_index = stsc.sample_description_index[sample.chunk_run_index]-1;\n\t\tsample.description = stsd.entries[sample.description_index];\n\t\tsample.offset = stco.chunk_offsets[sample.chunk_index-1] + offset_in_chunk; /* chunk indexes are 1-based */\n\t\toffset_in_chunk += sample.size;\n\n\t\t/* setting dts, cts, duration and rap flags */\n\t\tif (j > last_sample_in_stts_run) {\n\t\t\tstts_run_index++;\n\t\t\tif (last_sample_in_stts_run < 0) {\n\t\t\t\tlast_sample_in_stts_run = 0;\n\t\t\t}\n\t\t\tlast_sample_in_stts_run += stts.sample_counts[stts_run_index];\t\t\t\t\n\t\t}\n\t\tif (j > 0) {\n\t\t\ttrak.samples[j-1].duration = stts.sample_deltas[stts_run_index];\n\t\t\ttrak.samples_duration += trak.samples[j-1].duration;\n\t\t\tsample.dts = trak.samples[j-1].dts + trak.samples[j-1].duration;\n\t\t} else {\n\t\t\tsample.dts = 0;\n\t\t}\n\t\tif (ctts) {\n\t\t\tif (j >= last_sample_in_ctts_run) {\n\t\t\t\tctts_run_index++;\n\t\t\t\tif (last_sample_in_ctts_run < 0) {\n\t\t\t\t\tlast_sample_in_ctts_run = 0;\n\t\t\t\t}\n\t\t\t\tlast_sample_in_ctts_run += ctts.sample_counts[ctts_run_index];\t\t\t\t\n\t\t\t}\n\t\t\tsample.cts = trak.samples[j].dts + ctts.sample_offsets[ctts_run_index];\n\t\t} else {\n\t\t\tsample.cts = sample.dts;\n\t\t}\n\t\tif (stss) {\n\t\t\tif (j == stss.sample_numbers[last_stss_index] - 1) { // sample numbers are 1-based\n\t\t\t\tsample.is_sync = true;\n\t\t\t\tlast_stss_index++;\n\t\t\t} else {\n\t\t\t\tsample.is_sync = false;\t\t\t\t\n\t\t\t\tsample.degradation_priority = 0;\n\t\t\t}\n\t\t\tif (subs) {\n\t\t\t\tif (subs.entries[subs_entry_index].sample_delta + last_subs_sample_index == j+1) {\n\t\t\t\t\tsample.subsamples = subs.entries[subs_entry_index].subsamples;\n\t\t\t\t\tlast_subs_sample_index += subs.entries[subs_entry_index].sample_delta;\n\t\t\t\t\tsubs_entry_index++;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tsample.is_sync = true;\n\t\t}\n\t\tISOFile.process_sdtp(trak.mdia.minf.stbl.sdtp, sample, sample.number);\n\t\tif (stdp) {\n\t\t\tsample.degradation_priority = stdp.priority[j];\n\t\t} else {\n\t\t\tsample.degradation_priority = 0;\n\t\t}\n\t\tif (subs) {\n\t\t\tif (subs.entries[subs_entry_index].sample_delta + last_subs_sample_index == j) {\n\t\t\t\tsample.subsamples = subs.entries[subs_entry_index].subsamples;\n\t\t\t\tlast_subs_sample_index += subs.entries[subs_entry_index].sample_delta;\n\t\t\t}\n\t\t}\n\t\tif (sbgps.length > 0 || sgpds.length > 0) {\n\t\t\tISOFile.setSampleGroupProperties(trak, sample, j, trak.sample_groups_info);\n\t\t}\n\t}\n\tif (j>0) {\n\t\ttrak.samples[j-1].duration = Math.max(trak.mdia.mdhd.duration - trak.samples[j-1].dts, 0);\n\t\ttrak.samples_duration += trak.samples[j-1].duration;\n\t}\n}\n\n/* Update sample list when new 'moof' boxes are received */\nISOFile.prototype.updateSampleLists = function() {\t\n\tvar i, j, k;\n\tvar default_sample_description_index, default_sample_duration, default_sample_size, default_sample_flags;\n\tvar last_run_position;\n\tvar box, moof, traf, trak, trex;\n\tvar sample;\n\tvar sample_flags;\n\t\n\tif (this.moov === undefined) {\n\t\treturn;\n\t}\n\t/* if the input file is fragmented and fetched in multiple downloads, we need to update the list of samples */\n\twhile (this.lastMoofIndex < this.moofs.length) {\n\t\tbox = this.moofs[this.lastMoofIndex];\n\t\tthis.lastMoofIndex++;\n\t\tif (box.type == \"moof\") {\n\t\t\tmoof = box;\n\t\t\tfor (i = 0; i < moof.trafs.length; i++) {\n\t\t\t\ttraf = moof.trafs[i];\n\t\t\t\ttrak = this.getTrackById(traf.tfhd.track_id);\n\t\t\t\ttrex = this.getTrexById(traf.tfhd.track_id);\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\t\t\t\tdefault_sample_description_index = traf.tfhd.default_sample_description_index;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_description_index = (trex ? trex.default_sample_description_index: 1);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\t\t\t\tdefault_sample_duration = traf.tfhd.default_sample_duration;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_duration = (trex ? trex.default_sample_duration : 0);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\t\t\t\tdefault_sample_size = traf.tfhd.default_sample_size;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_size = (trex ? trex.default_sample_size : 0);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\t\t\t\tdefault_sample_flags = traf.tfhd.default_sample_flags;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_flags = (trex ? trex.default_sample_flags : 0);\n\t\t\t\t}\n\t\t\t\ttraf.sample_number = 0;\n\t\t\t\t/* process sample groups */\n\t\t\t\tif (traf.sbgps.length > 0) {\n\t\t\t\t\tISOFile.initSampleGroups(trak, traf, traf.sbgps, trak.mdia.minf.stbl.sgpds, traf.sgpds);\n\t\t\t\t}\n\t\t\t\tfor (j = 0; j < traf.truns.length; j++) {\n\t\t\t\t\tvar trun = traf.truns[j];\n\t\t\t\t\tfor (k = 0; k < trun.sample_count; k++) {\n\t\t\t\t\t\tsample = {};\n\t\t\t\t\t\tsample.moof_number = this.lastMoofIndex;\n\t\t\t\t\t\tsample.number_in_traf = traf.sample_number;\n\t\t\t\t\t\ttraf.sample_number++;\n\t\t\t sample.number = trak.samples.length;\n\t\t\t\t\t\ttraf.first_sample_index = trak.samples.length;\n\t\t\t\t\t\ttrak.samples.push(sample);\n\t\t\t\t\t\tsample.track_id = trak.tkhd.track_id;\n\t\t\t\t\t\tsample.timescale = trak.mdia.mdhd.timescale;\n\t\t\t\t\t\tsample.description_index = default_sample_description_index-1;\n\t\t\t\t\t\tsample.description = trak.mdia.minf.stbl.stsd.entries[sample.description_index];\n\t\t\t\t\t\tsample.size = default_sample_size;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\t\t\t\t\tsample.size = trun.sample_size[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrak.samples_size += sample.size;\n\t\t\t\t\t\tsample.duration = default_sample_duration;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\t\t\t\t\tsample.duration = trun.sample_duration[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrak.samples_duration += sample.duration;\n\t\t\t\t\t\tif (trak.first_traf_merged || k > 0) {\n\t\t\t\t\t\t\tsample.dts = trak.samples[trak.samples.length-2].dts+trak.samples[trak.samples.length-2].duration;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (traf.tfdt) {\n\t\t\t\t\t\t\t\tsample.dts = traf.tfdt.baseMediaDecodeTime;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsample.dts = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttrak.first_traf_merged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample.cts = sample.dts;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\t\t\t\t\tsample.cts = sample.dts + trun.sample_composition_time_offset[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample_flags = default_sample_flags;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\t\t\t\t\tsample_flags = trun.sample_flags[k];\n\t\t\t\t\t\t} else if (k === 0 && (trun.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG)) {\n\t\t\t\t\t\t\tsample_flags = trun.first_sample_flags;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample.is_sync = ((sample_flags >> 16 & 0x1) ? false : true);\n\t\t\t\t\t\tsample.is_leading = (sample_flags >> 26 & 0x3);\n\t\t\t\t\t\tsample.depends_on = (sample_flags >> 24 & 0x3);\n\t\t\t\t\t\tsample.is_depended_on = (sample_flags >> 22 & 0x3);\n\t\t\t\t\t\tsample.has_redundancy = (sample_flags >> 20 & 0x3);\n\t\t\t\t\t\tsample.degradation_priority = (sample_flags & 0xFFFF);\n\t\t\t\t\t\t//ISOFile.process_sdtp(traf.sdtp, sample, sample.number_in_traf);\n\t\t\t\t\t\tvar bdop = (traf.tfhd.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) ? true : false;\n\t\t\t\t\t\tvar dbim = (traf.tfhd.flags & BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF) ? true : false;\n\t\t\t\t\t\tvar dop = (trun.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) ? true : false;\n\t\t\t\t\t\tvar bdo = 0;\n\t\t\t\t\t\tif (!bdop) {\n\t\t\t\t\t\t\tif (!dbim) {\n\t\t\t\t\t\t\t\tif (j === 0) { // the first track in the movie fragment\n\t\t\t\t\t\t\t\t\tbdo = moof.start; // the position of the first byte of the enclosing Movie Fragment Box\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbdo = last_run_position; // end of the data defined by the preceding *track* (irrespective of the track id) fragment in the moof\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbdo = moof.start;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbdo = traf.tfhd.base_data_offset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (j === 0 && k === 0) {\n\t\t\t\t\t\t\tif (dop) {\n\t\t\t\t\t\t\t\tsample.offset = bdo + trun.data_offset; // If the data-offset is present, it is relative to the base-data-offset established in the track fragment header\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsample.offset = bdo; // the data for this run starts the base-data-offset defined by the track fragment header\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsample.offset = last_run_position; // this run starts immediately after the data of the previous run\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlast_run_position = sample.offset + sample.size;\n\t\t\t\t\t\tif (traf.sbgps.length > 0 || traf.sgpds.length > 0 ||\n\t\t\t\t\t\t\ttrak.mdia.minf.stbl.sbgps.length > 0 || trak.mdia.minf.stbl.sgpds.length > 0) {\n\t\t\t\t\t\t\tISOFile.setSampleGroupProperties(trak, sample, sample.number_in_traf, traf.sample_groups_info);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (traf.subs) {\n\t\t\t\t\ttrak.has_fragment_subsamples = true;\n\t\t\t\t\tvar sample_index = traf.first_sample_index;\n\t\t\t\t\tfor (j = 0; j < traf.subs.entries.length; j++) {\n\t\t\t\t\t\tsample_index += traf.subs.entries[j].sample_delta;\n\t\t\t\t\t\tsample = trak.samples[sample_index-1];\n\t\t\t\t\t\tsample.subsamples = traf.subs.entries[j].subsamples;\n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\t\n}\n\n/* Try to get sample data for a given sample:\n returns null if not found\n returns the same sample if already requested\n */\nISOFile.prototype.getSample = function(trak, sampleNum) {\t\n\tvar buffer;\n\tvar sample = trak.samples[sampleNum];\n\t\n\tif (!this.moov) {\n\t\treturn null;\n\t}\n\n\tif (!sample.data) {\n\t\t/* Not yet fetched */\n\t\tsample.data = new Uint8Array(sample.size);\n\t\tsample.alreadyRead = 0;\n\t\tthis.samplesDataSize += sample.size;\n\t\tLog.debug(\"ISOFile\", \"Allocating sample #\"+sampleNum+\" on track #\"+trak.tkhd.track_id+\" of size \"+sample.size+\" (total: \"+this.samplesDataSize+\")\");\n\t} else if (sample.alreadyRead == sample.size) {\n\t\t/* Already fetched entirely */\n\t\treturn sample;\n\t}\n\n\t/* The sample has only been partially fetched, we need to check in all buffers */\n\twhile(true) {\n\t\tvar index =\tthis.stream.findPosition(true, sample.offset + sample.alreadyRead, false);\n\t\tif (index > -1) {\n\t\t\tbuffer = this.stream.buffers[index];\n\t\t\tvar lengthAfterStart = buffer.byteLength - (sample.offset + sample.alreadyRead - buffer.fileStart);\n\t\t\tif (sample.size - sample.alreadyRead <= lengthAfterStart) {\n\t\t\t\t/* the (rest of the) sample is entirely contained in this buffer */\n\n\t\t\t\tLog.debug(\"ISOFile\",\"Getting sample #\"+sampleNum+\" data (alreadyRead: \"+sample.alreadyRead+\" offset: \"+\n\t\t\t\t\t(sample.offset+sample.alreadyRead - buffer.fileStart)+\" read size: \"+(sample.size - sample.alreadyRead)+\" full size: \"+sample.size+\")\");\n\n\t\t\t\tDataStream.memcpy(sample.data.buffer, sample.alreadyRead,\n\t\t\t\t buffer, sample.offset+sample.alreadyRead - buffer.fileStart, sample.size - sample.alreadyRead);\n\n\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\tbuffer.usedBytes += sample.size - sample.alreadyRead;\n\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\tsample.alreadyRead = sample.size;\n\n\t\t\t\treturn sample;\n\t\t\t} else {\n\t\t\t\t/* the sample does not end in this buffer */\n\n\t\t\t\tif (lengthAfterStart === 0) return null;\n\n\t\t\t\tLog.debug(\"ISOFile\",\"Getting sample #\"+sampleNum+\" partial data (alreadyRead: \"+sample.alreadyRead+\" offset: \"+\n\t\t\t\t\t(sample.offset+sample.alreadyRead - buffer.fileStart)+\" read size: \"+lengthAfterStart+\" full size: \"+sample.size+\")\");\n\n\t\t\t\tDataStream.memcpy(sample.data.buffer, sample.alreadyRead,\n\t\t\t\t buffer, sample.offset+sample.alreadyRead - buffer.fileStart, lengthAfterStart);\n\t\t\t\tsample.alreadyRead += lengthAfterStart;\n\n\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\tbuffer.usedBytes += lengthAfterStart;\n\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\t/* keep looking in the next buffer */\n\t\t\t}\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n}\n\n/* Release the memory used to store the data of the sample */\nISOFile.prototype.releaseSample = function(trak, sampleNum) {\t\n\tvar sample = trak.samples[sampleNum];\n\tif (sample.data) {\n\t\tthis.samplesDataSize -= sample.size;\n\t\tsample.data = null;\n\t\tsample.alreadyRead = 0;\n\t\treturn sample.size;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\nISOFile.prototype.getAllocatedSampleDataSize = function() {\n\treturn this.samplesDataSize;\n}\n\n/* Builds the MIME Type 'codecs' sub-parameters for the whole file */\nISOFile.prototype.getCodecs = function() {\t\n\tvar i;\n\tvar codecs = \"\";\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\tvar trak = this.moov.traks[i];\n\t\tif (i>0) {\n\t\t\tcodecs+=\",\"; \n\t\t}\n\t\tcodecs += trak.mdia.minf.stbl.stsd.entries[0].getCodec();\t\t\n\t}\n\treturn codecs;\n}\n\n/* Helper function */\nISOFile.prototype.getTrexById = function(id) {\t\n\tvar i;\n\tif (!this.moov || !this.moov.mvex) return null;\n\tfor (i = 0; i < this.moov.mvex.trexs.length; i++) {\n\t\tvar trex = this.moov.mvex.trexs[i];\n\t\tif (trex.track_id == id) return trex;\n\t}\n\treturn null;\n}\n\n/* Helper function */\nISOFile.prototype.getTrackById = function(id) {\n\tif (this.moov === undefined) {\n\t\treturn null;\n\t}\n\tfor (var j = 0; j < this.moov.traks.length; j++) {\n\t\tvar trak = this.moov.traks[j];\n\t\tif (trak.tkhd.track_id == id) return trak;\n\t}\n\treturn null;\n}\n// file:src/isofile-item-processing.js\n/* size of the buffers allocated for samples */\nISOFile.prototype.itemsDataSize = 0;\n\nISOFile.prototype.flattenItemInfo = function() {\t\n\tvar items = this.items;\n\tvar entity_groups = this.entity_groups;\n\tvar i, j;\n\tvar item;\n\tvar meta = this.meta;\n\tif (meta === null || meta === undefined) return;\n\tif (meta.hdlr === undefined) return;\n\tif (meta.iinf === undefined) return;\n\tfor (i = 0; i < meta.iinf.item_infos.length; i++) {\n\t\titem = {};\n\t\titem.id = meta.iinf.item_infos[i].item_ID;\n\t\titems[item.id] = item;\n\t\titem.ref_to = [];\n\t\titem.name = meta.iinf.item_infos[i].item_name;\n\t\tif (meta.iinf.item_infos[i].protection_index > 0) {\n\t\t\titem.protection = meta.ipro.protections[meta.iinf.item_infos[i].protection_index-1];\n\t\t}\n\t\tif (meta.iinf.item_infos[i].item_type) {\n\t\t\titem.type = meta.iinf.item_infos[i].item_type;\n\t\t} else {\n\t\t\titem.type = \"mime\";\n\t\t}\n\t\titem.content_type = meta.iinf.item_infos[i].content_type;\n\t\titem.content_encoding = meta.iinf.item_infos[i].content_encoding;\n\t\titem.item_uri_type = meta.iinf.item_infos[i].item_uri_type;\n\t}\n\tif (meta.grpl) {\n\t\tfor (i = 0; i < meta.grpl.boxes.length; i++) {\n\t\t\tentity_group = {};\n\t\t\tentity_group.id = meta.grpl.boxes[i].group_id;\n\t\t\tentity_group.entity_ids = meta.grpl.boxes[i].entity_ids;\n\t\t\tentity_group.type = meta.grpl.boxes[i].type;\n\t\t\tentity_groups[entity_group.id] = entity_group;\n\t\t}\n\t}\n\tif (meta.iloc) {\n\t\tfor(i = 0; i < meta.iloc.items.length; i++) {\n\t\t\tvar offset;\n\t\t\tvar itemloc = meta.iloc.items[i];\n\t\t\titem = items[itemloc.item_ID];\n\t\t\tif (itemloc.data_reference_index !== 0) {\n\t\t\t\tLog.warn(\"Item storage with reference to other files: not supported\");\n\t\t\t\titem.source = meta.dinf.boxes[itemloc.data_reference_index-1];\n\t\t\t}\n\t\t\tswitch(itemloc.construction_method) {\n\t\t\t\tcase 0: // offset into the file referenced by the data reference index\n\t\t\t\tbreak;\n\t\t\t\tcase 1: // offset into the idat box of this meta box\n\t\t\t\tbreak;\n\t\t\t\tcase 2: // offset into another item\n\t\t\t\tLog.warn(\"Item storage with construction_method : not supported\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\titem.extents = [];\n\t\t\titem.size = 0;\n\t\t\tfor (j = 0; j < itemloc.extents.length; j++) {\n\t\t\t\titem.extents[j] = {};\n\t\t\t\titem.extents[j].offset = itemloc.extents[j].extent_offset + itemloc.base_offset;\n\t\t\t\tif (itemloc.construction_method == 1) {\n\t\t\t\t\titem.extents[j].offset += meta.idat.start + meta.idat.hdr_size;\n\t\t\t\t}\n\t\t\t\titem.extents[j].length = itemloc.extents[j].extent_length;\n\t\t\t\titem.extents[j].alreadyRead = 0;\n\t\t\t\titem.size += item.extents[j].length;\n\t\t\t}\n\t\t}\n\t}\n\tif (meta.pitm) {\n\t\titems[meta.pitm.item_id].primary = true;\n\t}\n\tif (meta.iref) {\n\t\tfor (i=0; i <meta.iref.references.length; i++) {\n\t\t\tvar ref = meta.iref.references[i];\n\t\t\tfor (j=0; j<ref.references.length; j++) {\n\t\t\t\titems[ref.from_item_ID].ref_to.push({type: ref.type, id: ref.references[j]});\n\t\t\t}\n\t\t}\n\t}\n\tif (meta.iprp) {\n\t\tfor (var k = 0; k < meta.iprp.ipmas.length; k++) {\n\t\t\tvar ipma = meta.iprp.ipmas[k];\n\t\t\tfor (i = 0; i < ipma.associations.length; i++) {\n\t\t\t\tvar association = ipma.associations[i];\n\t\t\t\titem = items[association.id];\n\t\t\t\tif (!item) {\n\t\t\t\t\titem = entity_groups[association.id];\n\t\t\t\t}\n\t\t\t\tif (item) {\n\t\t\t\t\tif (item.properties === undefined) {\n\t\t\t\t\t\titem.properties = {};\n\t\t\t\t\t\titem.properties.boxes = [];\n\t\t\t\t\t}\n\t\t\t\t\tfor (j = 0; j < association.props.length; j++) {\n\t\t\t\t\t\tvar propEntry = association.props[j];\n\t\t\t\t\t\tif (propEntry.property_index > 0 && propEntry.property_index-1 < meta.iprp.ipco.boxes.length) {\n\t\t\t\t\t\t\tvar propbox = meta.iprp.ipco.boxes[propEntry.property_index-1];\n\t\t\t\t\t\t\titem.properties[propbox.type] = propbox;\n\t\t\t\t\t\t\titem.properties.boxes.push(propbox);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.prototype.getItem = function(item_id) {\t\n\tvar buffer;\n\tvar item;\n\t\n\tif (!this.meta) {\n\t\treturn null;\n\t}\n\n \titem = this.items[item_id];\n\tif (!item.data && item.size) {\n\t\t/* Not yet fetched */\n\t\titem.data = new Uint8Array(item.size);\n\t\titem.alreadyRead = 0;\n\t\tthis.itemsDataSize += item.size;\n\t\tLog.debug(\"ISOFile\", \"Allocating item #\"+item_id+\" of size \"+item.size+\" (total: \"+this.itemsDataSize+\")\");\n\t} else if (item.alreadyRead === item.size) {\n\t\t/* Already fetched entirely */\n\t\treturn item;\n\t}\n\n\t/* The item has only been partially fetched, we need to check in all buffers to find the remaining extents*/\n\n\tfor (var i = 0; i < item.extents.length; i++) {\n\t\tvar extent = item.extents[i];\n\t\tif (extent.alreadyRead === extent.length) {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tvar index =\tthis.stream.findPosition(true, extent.offset + extent.alreadyRead, false);\n\t\t\tif (index > -1) {\n\t\t\t\tbuffer = this.stream.buffers[index];\n\t\t\t\tvar lengthAfterStart = buffer.byteLength - (extent.offset + extent.alreadyRead - buffer.fileStart);\n\t\t\t\tif (extent.length - extent.alreadyRead <= lengthAfterStart) {\n\t\t\t\t\t/* the (rest of the) extent is entirely contained in this buffer */\n\n\t\t\t\t\tLog.debug(\"ISOFile\",\"Getting item #\"+item_id+\" extent #\"+i+\" data (alreadyRead: \"+extent.alreadyRead+\n\t\t\t\t\t\t\" offset: \"+(extent.offset+extent.alreadyRead - buffer.fileStart)+\" read size: \"+(extent.length - extent.alreadyRead)+\n\t\t\t\t\t\t\" full extent size: \"+extent.length+\" full item size: \"+item.size+\")\");\n\n\t\t\t\t\tDataStream.memcpy(item.data.buffer, item.alreadyRead, \n\t\t\t\t\t buffer, extent.offset+extent.alreadyRead - buffer.fileStart, extent.length - extent.alreadyRead);\n\n\t\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\t\tbuffer.usedBytes += extent.length - extent.alreadyRead;\n\t\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\t\titem.alreadyRead += (extent.length - extent.alreadyRead);\n\t\t\t\t\textent.alreadyRead = extent.length;\n\t\t\t\t} else {\n\t\t\t\t\t/* the sample does not end in this buffer */\n\n\t\t\t\t\tLog.debug(\"ISOFile\",\"Getting item #\"+item_id+\" extent #\"+i+\" partial data (alreadyRead: \"+extent.alreadyRead+\" offset: \"+\n\t\t\t\t\t\t(extent.offset+extent.alreadyRead - buffer.fileStart)+\" read size: \"+lengthAfterStart+\n\t\t\t\t\t\t\" full extent size: \"+extent.length+\" full item size: \"+item.size+\")\");\n\n\t\t\t\t\tDataStream.memcpy(item.data.buffer, item.alreadyRead, \n\t\t\t\t\t buffer, extent.offset+extent.alreadyRead - buffer.fileStart, lengthAfterStart);\n\t\t\t\t\textent.alreadyRead += lengthAfterStart;\n\t\t\t\t\titem.alreadyRead += lengthAfterStart;\n\n\t\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\t\tbuffer.usedBytes += lengthAfterStart;\n\t\t\t\t\tthis.stream.logBufferLevel();\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n\tif (item.alreadyRead === item.size) {\n\t\t/* fetched entirely */\n\t\treturn item;\n\t} else {\n\t\treturn null;\n\t}\n}\n\n/* Release the memory used to store the data of the item */\nISOFile.prototype.releaseItem = function(item_id) {\t\n\tvar item = this.items[item_id];\n\tif (item.data) {\n\t\tthis.itemsDataSize -= item.size;\n\t\titem.data = null;\n\t\titem.alreadyRead = 0;\n\t\tfor (var i = 0; i < item.extents.length; i++) {\n\t\t\tvar extent = item.extents[i];\n\t\t\textent.alreadyRead = 0;\n\t\t}\n\t\treturn item.size;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\n\nISOFile.prototype.processItems = function(callback) {\n\tfor(var i in this.items) {\n\t\tvar item = this.items[i];\n\t\tthis.getItem(item.id);\n\t\tif (callback && !item.sent) {\n\t\t\tcallback(item);\n\t\t\titem.sent = true;\n\t\t\titem.data = null;\n\t\t}\n\t}\n}\n\nISOFile.prototype.hasItem = function(name) {\n\tfor(var i in this.items) {\n\t\tvar item = this.items[i];\n\t\tif (item.name === name) {\n\t\t\treturn item.id;\n\t\t}\n\t}\n\treturn -1;\n}\n\nISOFile.prototype.getMetaHandler = function() {\n\tif (!this.meta) {\n\t\treturn null;\n\t} else {\n\t\treturn this.meta.hdlr.handler;\t\t\n\t}\n}\n\nISOFile.prototype.getPrimaryItem = function() {\n\tif (!this.meta || !this.meta.pitm) {\n\t\treturn null;\n\t} else {\n\t\treturn this.getItem(this.meta.pitm.item_id);\n\t}\n}\n\nISOFile.prototype.itemToFragmentedTrackFile = function(_options) {\n\tvar options = _options || {};\n\tvar item = null;\n\tif (options.itemId) {\n\t\titem = this.getItem(options.itemId);\n\t} else {\n\t\titem = this.getPrimaryItem();\n\t}\n\tif (item == null) return null;\n\n\tvar file = new ISOFile();\n\tfile.discardMdatData = false;\n\t// assuming the track type is the same as the item type\n\tvar trackOptions = { type: item.type, description_boxes: item.properties.boxes};\n\tif (item.properties.ispe) {\n\t\ttrackOptions.width = item.properties.ispe.image_width;\n\t\ttrackOptions.height = item.properties.ispe.image_height;\n\t}\n\tvar trackId = file.addTrack(trackOptions);\n\tif (trackId) {\n\t\tfile.addSample(trackId, item.data);\n\t\treturn file;\n\t} else {\n\t\treturn null;\n\t}\n}\n\n// file:src/isofile-write.js\n/* Rewrite the entire file */\nISOFile.prototype.write = function(outstream) {\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tthis.boxes[i].write(outstream);\n\t}\n}\n\nISOFile.prototype.createFragment = function(track_id, sampleNumber, stream_) {\n\tvar trak = this.getTrackById(track_id);\n\tvar sample = this.getSample(trak, sampleNumber);\n\tif (sample == null) {\n\t\tthis.setNextSeekPositionFromSample(trak.samples[sampleNumber]);\n\t\treturn null;\n\t}\n\t\n\tvar stream = stream_ || new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\n\tvar moof = this.createSingleSampleMoof(sample);\n\tmoof.write(stream);\n\n\t/* adjusting the data_offset now that the moof size is known*/\n\tmoof.trafs[0].truns[0].data_offset = moof.size+8; //8 is mdat header\n\tLog.debug(\"MP4Box\", \"Adjusting data_offset with new value \"+moof.trafs[0].truns[0].data_offset);\n\tstream.adjustUint32(moof.trafs[0].truns[0].data_offset_position, moof.trafs[0].truns[0].data_offset);\n\t\t\n\tvar mdat = new BoxParser.mdatBox();\n\tmdat.data = sample.data;\n\tmdat.write(stream);\n\treturn stream;\n}\n\n/* Modify the file and create the initialization segment */\nISOFile.writeInitializationSegment = function(ftyp, moov, total_duration, sample_duration) {\n\tvar i;\n\tvar index;\n\tvar mehd;\n\tvar trex;\n\tvar box;\n\tLog.debug(\"ISOFile\", \"Generating initialization segment\");\n\n\tvar stream = new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tftyp.write(stream);\n\t\n\t/* we can now create the new mvex box */\n\tvar mvex = moov.add(\"mvex\");\n\tif (total_duration) {\n\t\tmvex.add(\"mehd\").set(\"fragment_duration\", total_duration);\n\t}\n\tfor (i = 0; i < moov.traks.length; i++) {\n\t\tmvex.add(\"trex\").set(\"track_id\", moov.traks[i].tkhd.track_id)\n\t\t\t\t\t\t.set(\"default_sample_description_index\", 1)\n\t\t\t\t\t\t.set(\"default_sample_duration\", sample_duration)\n\t\t\t\t\t\t.set(\"default_sample_size\", 0)\n\t\t\t\t\t\t.set(\"default_sample_flags\", 1<<16)\n\t}\n\tmoov.write(stream);\n\n\treturn stream.buffer;\n\n}\n\nISOFile.prototype.save = function(name) {\n\tvar stream = new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n\tstream.save(name);\t\n}\n\nISOFile.prototype.getBuffer = function() {\n\tvar stream = new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n\treturn stream.buffer;\n}\n\nISOFile.prototype.initializeSegmentation = function() {\n\tvar i;\n\tvar j;\n\tvar box;\n\tvar initSegs;\n\tvar trak;\n\tvar seg;\n\tif (this.onSegment === null) {\n\t\tLog.warn(\"MP4Box\", \"No segmentation callback set!\");\n\t}\n\tif (!this.isFragmentationInitialized) {\n\t\tthis.isFragmentationInitialized = true;\t\t\n\t\tthis.nextMoofNumber = 0;\n\t\tthis.resetTables();\n\t}\t\n\tinitSegs = [];\t\n\tfor (i = 0; i < this.fragmentedTracks.length; i++) {\n\t\tvar moov = new BoxParser.moovBox();\n\t\tmoov.mvhd = this.moov.mvhd;\n\t moov.boxes.push(moov.mvhd);\n\t\ttrak = this.getTrackById(this.fragmentedTracks[i].id);\n\t\tmoov.boxes.push(trak);\n\t\tmoov.traks.push(trak);\n\t\tseg = {};\n\t\tseg.id = trak.tkhd.track_id;\n\t\tseg.user = this.fragmentedTracks[i].user;\n\t\tseg.buffer = ISOFile.writeInitializationSegment(this.ftyp, moov, (this.moov.mvex && this.moov.mvex.mehd ? this.moov.mvex.mehd.fragment_duration: undefined), (this.moov.traks[i].samples.length>0 ? this.moov.traks[i].samples[0].duration: 0));\n\t\tinitSegs.push(seg);\n\t}\n\treturn initSegs;\n}\n\n// file:src/box-print.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.Box.prototype.printHeader = function(output) {\n\tthis.size += 8;\n\tif (this.size > MAX_SIZE) {\n\t\tthis.size += 8;\n\t}\n\tif (this.type === \"uuid\") {\n\t\tthis.size += 16;\n\t}\n\toutput.log(output.indent+\"size:\"+this.size);\n\toutput.log(output.indent+\"type:\"+this.type);\n}\n\nBoxParser.FullBox.prototype.printHeader = function(output) {\n\tthis.size += 4;\n\tBoxParser.Box.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"version:\"+this.version);\n\toutput.log(output.indent+\"flags:\"+this.flags);\n}\n\nBoxParser.Box.prototype.print = function(output) {\n\tthis.printHeader(output);\n}\n\nBoxParser.ContainerBox.prototype.print = function(output) {\n\tthis.printHeader(output);\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tif (this.boxes[i]) {\n\t\t\tvar prev_indent = output.indent;\n\t\t\toutput.indent += \" \";\n\t\t\tthis.boxes[i].print(output);\n\t\t\toutput.indent = prev_indent;\n\t\t}\n\t}\n}\n\nISOFile.prototype.print = function(output) {\n\toutput.indent = \"\";\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tif (this.boxes[i]) {\n\t\t\tthis.boxes[i].print(output);\n\t\t}\n\t}\t\n}\n\nBoxParser.mvhdBox.prototype.print = function(output) {\n\tBoxParser.FullBox.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"creation_time: \"+this.creation_time);\n\toutput.log(output.indent+\"modification_time: \"+this.modification_time);\n\toutput.log(output.indent+\"timescale: \"+this.timescale);\n\toutput.log(output.indent+\"duration: \"+this.duration);\n\toutput.log(output.indent+\"rate: \"+this.rate);\n\toutput.log(output.indent+\"volume: \"+(this.volume>>8));\n\toutput.log(output.indent+\"matrix: \"+this.matrix.join(\", \"));\n\toutput.log(output.indent+\"next_track_id: \"+this.next_track_id);\n}\n\nBoxParser.tkhdBox.prototype.print = function(output) {\n\tBoxParser.FullBox.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"creation_time: \"+this.creation_time);\n\toutput.log(output.indent+\"modification_time: \"+this.modification_time);\n\toutput.log(output.indent+\"track_id: \"+this.track_id);\n\toutput.log(output.indent+\"duration: \"+this.duration);\n\toutput.log(output.indent+\"volume: \"+(this.volume>>8));\n\toutput.log(output.indent+\"matrix: \"+this.matrix.join(\", \"));\n\toutput.log(output.indent+\"layer: \"+this.layer);\n\toutput.log(output.indent+\"alternate_group: \"+this.alternate_group);\n\toutput.log(output.indent+\"width: \"+this.width);\n\toutput.log(output.indent+\"height: \"+this.height);\n}// file:src/mp4box.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar MP4Box = {};\n\nMP4Box.createFile = function (_keepMdatData, _stream) {\n\t/* Boolean indicating if bytes containing media data should be kept in memory */\n\tvar keepMdatData = (_keepMdatData !== undefined ? _keepMdatData : true);\n\tvar file = new ISOFile(_stream);\n\tfile.discardMdatData = (keepMdatData ? false : true);\n\treturn file;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.createFile = MP4Box.createFile;\n}\n","import * as MP4BoxLib from 'mp4box';\n\n/**\n * Robustly resolve MP4Box library object handling both ESM and CJS/UMD contexts.\n * In some build environments (like Vite + Workspace), the namespace import might\n * contain the library in the 'default' property, while in others it's at the root.\n */\n\nconst lib = MP4BoxLib as any;\n\n// Prefer the object that actually has the method we need\n// 1. Check if 'default' exists and has createFile (common in synthetic namespace imports)\n// 2. Fallback to the root object (common in direct CJS imports or proper ESM bundles)\nconst MP4Box: any = lib.default && typeof lib.default.createFile === 'function' ? lib.default : lib;\n\n// Verify critical method exists\nif (typeof MP4Box.createFile !== 'function') {\n console.warn(\n '[meframe/core] MP4Box library might not be loaded correctly. createFile is missing.',\n {\n MP4BoxLib: lib,\n resolved: MP4Box,\n }\n );\n}\n\nexport { MP4Box };\nexport default MP4Box;\n","import { MP4Box } from '../../utils/mp4box';\nimport type { DemuxConfig, TrackInfo } from './types';\n\n/**\n * Normalize audio codec string for WebCodecs compatibility\n * Fixes incomplete AAC codec strings from mp4box.js\n */\nexport function normalizeAudioCodec(codec?: string): string {\n if (!codec) return 'mp4a.40.2'; // Default AAC-LC\n\n // Incomplete mp4a → complete as AAC-LC\n if (codec === 'mp4a') {\n return 'mp4a.40.2';\n }\n\n // Already complete or other format, return as-is\n return codec;\n}\n\n/**\n * Normalize video codec string for WebCodecs compatibility\n * Constructs complete codec string (e.g., avc1.4D401F) from description box\n */\nexport function normalizeVideoCodec(codec?: string, description?: ArrayBuffer): string {\n if (!codec) return '';\n\n // If already complete (contains profile/level), return as-is\n if (codec.includes('.')) {\n return codec;\n }\n\n // For H.264 (avc1), extract profile/level from avcC box\n if (codec === 'avc1' && description && description.byteLength >= 4) {\n try {\n const view = new Uint8Array(description);\n // avcC structure: [version, profile, compatibility, level, ...]\n const profile = view[1]?.toString(16).padStart(2, '0').toUpperCase();\n const compatibility = view[2]?.toString(16).padStart(2, '0').toUpperCase();\n const level = view[3]?.toString(16).padStart(2, '0').toUpperCase();\n if (profile && compatibility && level) {\n return `avc1.${profile}${compatibility}${level}`;\n }\n } catch (error) {\n console.warn('[MP4Demuxer] Failed to parse avcC box:', error);\n }\n }\n\n // For HEVC (hev1/hvc1), extract from hvcC box\n if ((codec === 'hev1' || codec === 'hvc1') && description && description.byteLength >= 13) {\n try {\n const view = new Uint8Array(description);\n // hvcC structure is more complex, but we can extract basic profile/level\n const profile = view[1];\n const level = view[12];\n if (profile !== undefined && level !== undefined) {\n return `${codec}.${profile}.${level}`;\n }\n } catch (error) {\n console.warn('[MP4Demuxer] Failed to parse hvcC box:', error);\n }\n }\n\n // Return as-is if we can't normalize\n return codec;\n}\n\n/**\n * MP4 Demuxer - Extract encoded chunks from MP4 container\n * Simplified implementation following Stream API pattern\n */\nexport class MP4Demuxer {\n private mp4boxFile: any;\n tracks = new Map<number, TrackInfo>();\n isReady = false;\n private videoController?: ReadableStreamDefaultController<EncodedVideoChunk>;\n private audioController?: ReadableStreamDefaultController<EncodedAudioChunk>;\n private demuxHighWaterMark: number;\n private onReadyCallback?: () => void;\n private fileOffset = 0;\n private videoTimestampOffset: number | null = null;\n private audioTimestampOffset: number | null = null;\n private skipAudio: boolean = false;\n\n constructor(config: DemuxConfig & { onReady?: () => void } = {}) {\n this.mp4boxFile = MP4Box.createFile();\n this.onReadyCallback = config.onReady;\n this.skipAudio = config.skipAudio ?? false;\n\n // Use provided config with local default as fallback\n const DEFAULT_HIGH_WATER_MARK = 10; // Default for video chunks\n this.demuxHighWaterMark = config.highWaterMark ?? DEFAULT_HIGH_WATER_MARK;\n\n this.setupHandlers();\n }\n\n updateConfig(config: DemuxConfig): void {\n this.demuxHighWaterMark = config.highWaterMark ?? this.demuxHighWaterMark;\n }\n\n private setupHandlers(): void {\n this.mp4boxFile.onError = (error: string) => {\n console.error('[MP4Demuxer] MP4Box error:', error);\n const err = new Error(error);\n this.videoController?.error(err);\n this.audioController?.error(err);\n };\n\n this.mp4boxFile.onReady = (info: any) => {\n this.processTracks(info.tracks);\n this.isReady = true;\n\n // Call the ready callback before starting\n if (this.onReadyCallback) {\n this.onReadyCallback();\n }\n\n // Start processing samples after callback\n // Note: start() enables extraction, actual samples will be output\n // when flush() is called (by TransformStream's flush callback)\n this.mp4boxFile.start();\n };\n\n this.mp4boxFile.onSamples = (trackId: number, _user: any, samples: any[]) => {\n this.processSamples(trackId, samples);\n };\n }\n\n private processTracks(tracks: any[]): void {\n for (const track of tracks) {\n const trackInfo: TrackInfo = {\n id: track.id,\n type: track.type === 'video' ? 'video' : 'audio',\n codec: track.codec, // Temporarily set to raw codec, will normalize below\n timescale: track.timescale,\n };\n\n if (track.type === 'video') {\n trackInfo.width = track.video?.width;\n trackInfo.height = track.video?.height;\n trackInfo.description = this.getVideoDescription(track);\n // Normalize video codec with description to get complete codec string\n trackInfo.codec = normalizeVideoCodec(track.codec, trackInfo.description);\n } else if (track.type === 'audio') {\n trackInfo.sampleRate = track.audio?.sample_rate || track.timescale;\n trackInfo.numberOfChannels = track.audio?.channel_count;\n trackInfo.description = this.getAudioDescription(track);\n // Normalize audio codec\n trackInfo.codec = normalizeAudioCodec(track.codec);\n }\n\n this.tracks.set(track.id, trackInfo);\n\n // Configure extraction - use Infinity to extract all samples\n // Note: onSamples will be called multiple times as data is appended,\n // but we don't need to manually request more batches\n this.mp4boxFile.setExtractionOptions(track.id, track, {\n nbSamples: Infinity,\n });\n }\n }\n\n private processSamples(trackId: number, samples: any[]): void {\n const track = this.tracks.get(trackId);\n if (!track) return;\n\n const timescale = track.timescale || 90000;\n for (const sample of samples) {\n const rawTimestamp = (sample.cts * 1000000) / timescale;\n const duration = (sample.duration * 1000000) / timescale;\n\n if (track.type === 'video') {\n if (!this.videoController) {\n console.error('[MP4Demuxer] videoController is null when trying to output chunk!');\n // Should not happen - stream should be created before appendBuffer\n return;\n }\n\n // Normalize timestamp: first frame starts at 0\n if (this.videoTimestampOffset === null) {\n this.videoTimestampOffset = rawTimestamp;\n }\n const timestamp = rawTimestamp - this.videoTimestampOffset;\n\n const chunk = new EncodedVideoChunk({\n type: sample.is_sync ? 'key' : 'delta',\n timestamp,\n duration,\n data: sample.data,\n });\n this.videoController.enqueue(chunk);\n } else if (track.type === 'audio') {\n // Skip audio processing if skipAudio enabled or no controller\n if (!this.audioController) {\n // Still release samples immediately to avoid memory accumulation in mp4box.js\n const last = samples[samples.length - 1].number;\n this.mp4boxFile.releaseUsedSamples(trackId, last + 1);\n return;\n }\n\n // Normalize timestamp: first frame starts at 0\n if (this.audioTimestampOffset === null) {\n this.audioTimestampOffset = rawTimestamp;\n }\n const timestamp = rawTimestamp - this.audioTimestampOffset;\n\n const chunk = new EncodedAudioChunk({\n type: 'key',\n timestamp,\n duration,\n data: sample.data,\n });\n this.audioController.enqueue(chunk);\n }\n }\n\n const last = samples[samples.length - 1].number;\n // Release memory immediately\n this.mp4boxFile.releaseUsedSamples(trackId, last + 1);\n }\n\n private getVideoDescription(track: any): ArrayBuffer | undefined {\n return MP4Demuxer.extractVideoDescription(this.mp4boxFile, track.id);\n }\n\n /**\n * Extract video description (avcC/hvcC/etc) for VideoDecoder configuration\n * Static method for reuse in other components\n */\n static extractVideoDescription(mp4boxFile: any, trackId: number): ArrayBuffer | undefined {\n try {\n const fullTrack = mp4boxFile.getTrackById(trackId);\n for (const entry of fullTrack.mdia.minf.stbl.stsd.entries) {\n const box = entry.avcC ?? entry.hvcC ?? entry.av1C ?? entry.vpcC;\n if (box) {\n const stream = new (MP4Box as any).DataStream(\n undefined,\n 0,\n (MP4Box as any).DataStream.BIG_ENDIAN // IMPORTANT: must be BIG_ENDIAN\n );\n box.write(stream);\n return new Uint8Array(stream.buffer.slice(8)).buffer;\n }\n }\n } catch (error) {\n console.error('Failed to get video description:', error);\n }\n return undefined;\n }\n\n // private getVideoDescription(track: any): ArrayBuffer | undefined {\n // if (!this.mp4boxFile) return undefined;\n // return getVideoDescription(this.mp4boxFile, track);\n // }\n\n private getAudioDescription(track: any): ArrayBuffer | undefined {\n try {\n const fullTrack = this.mp4boxFile.getTrackById(track.id);\n for (const entry of fullTrack.mdia.minf.stbl.stsd.entries) {\n if (entry.esds) {\n // Use mp4box.js parsed structure to get AudioSpecificConfig\n // esds.esd.descs[0] = DecoderConfigDescriptor\n // esds.esd.descs[0].descs[0].data = DecoderSpecificInfo (AudioSpecificConfig)\n const decConfigDesc = entry.esds.esd?.descs?.[0];\n const decSpecInfo = decConfigDesc?.descs?.[0];\n\n if (decSpecInfo?.data) {\n // Convert Uint8Array to ArrayBuffer\n const data = decSpecInfo.data;\n if (data instanceof Uint8Array) {\n const buffer = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);\n return buffer instanceof ArrayBuffer ? buffer : undefined;\n } else if (Array.isArray(data)) {\n // Some versions of mp4box.js return Array instead of Uint8Array\n return new Uint8Array(data).buffer;\n }\n }\n\n console.warn('[MP4Demuxer] Could not extract AudioSpecificConfig from esds structure');\n return undefined;\n } else if (entry.dOps) {\n // For Opus, use the full dOps box\n const stream = new (MP4Box as any).DataStream(\n undefined,\n 0,\n (MP4Box as any).DataStream.BIG_ENDIAN\n );\n entry.dOps.write(stream);\n return new Uint8Array(stream.buffer.slice(8)).buffer;\n }\n }\n } catch (error) {\n console.error('Failed to get audio description:', error);\n }\n return undefined;\n }\n\n /**\n * Create readable stream for video chunks (output only)\n */\n createVideoStream(): ReadableStream<EncodedVideoChunk> {\n return new ReadableStream<EncodedVideoChunk>(\n {\n start: (ctrl) => {\n this.videoController = ctrl as any;\n },\n cancel: () => {\n this.videoController = undefined;\n },\n },\n {\n highWaterMark: this.demuxHighWaterMark,\n size: () => 1,\n }\n );\n }\n\n /**\n * Create readable stream for audio chunks (output only)\n */\n createAudioStream(): ReadableStream<EncodedAudioChunk> | null {\n if (this.skipAudio) {\n return null;\n }\n\n return new ReadableStream<EncodedAudioChunk>(\n {\n start: (ctrl) => {\n this.audioController = ctrl as any;\n },\n cancel: () => {\n this.audioController = undefined;\n },\n },\n {\n highWaterMark: this.demuxHighWaterMark,\n size: () => 1,\n }\n );\n }\n\n /**\n * Create writable stream for input data (single source)\n * This is the only stream that should receive the input data\n */\n createInputStream(): WritableStream<Uint8Array | ArrayBuffer> {\n return new WritableStream<Uint8Array | ArrayBuffer>(\n {\n write: (chunk) => {\n // Create a copy to avoid buffer reuse issues (required for mp4box 0.5.x)\n const chunkData = new Uint8Array(chunk);\n this.appendBuffer(chunkData);\n\n // Flush after each append to trigger sample extraction immediately\n this.mp4boxFile.flush();\n },\n close: async () => {\n // Trigger final MP4Box flush\n this.mp4boxFile.flush();\n\n // Wait for MP4Box to complete sample extraction (onSamples callbacks)\n await new Promise((resolve) => setTimeout(resolve, 100));\n this.videoController?.close();\n this.audioController?.close();\n },\n },\n {\n highWaterMark: this.demuxHighWaterMark,\n }\n );\n }\n\n appendBuffer(chunk: Uint8Array): void {\n const buffer = chunk.buffer as ArrayBuffer & { fileStart: number };\n buffer.fileStart = this.fileOffset;\n this.mp4boxFile.appendBuffer(buffer);\n this.fileOffset += chunk.byteLength;\n }\n\n /**\n * Get video track info if available\n */\n get videoTrackInfo(): TrackInfo | undefined {\n return Array.from(this.tracks.values()).find((track) => track.type === 'video');\n }\n\n /**\n * Get audio track info if available\n */\n get audioTrackInfo(): TrackInfo | undefined {\n return Array.from(this.tracks.values()).find((track) => track.type === 'audio');\n }\n\n destroy(): void {\n this.mp4boxFile?.stop();\n this.mp4boxFile = null;\n this.tracks.clear();\n this.isReady = false;\n this.videoTimestampOffset = null;\n this.audioTimestampOffset = null;\n }\n}\n"],"names":["i","box","ret","str","entry_count","nalu_array","j","nalu","strm","MP4Box","last"],"mappings":"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","x_google_ignoreList":[0]}
|